提取表格区域数据
# 提取表格区域数据
- 查看本示例演示效果
- 本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码
注意
本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。
在实际的开发过程中,经常会遇到提取Excel文档中数据保存到数据库中的需求,PageOffice客户端控件支持在线保存Excel文件时,打包Excel文档中的指定单元格的数据或所有的数据提交到服务器端,在服务器端创建PageOffice的WorkbookReader对象,就可以获取到Excel单元格中的数据。
# 后端代码
在后端编写代码调用webOpen方法以表单提交模式xlsSubmitForm打开文件,创建Sheet对象并操作一块区域(Table),并命名,比如:Info。
设置接收处理PageOffice客户端控件提交数据的服务器端后台方法为:saveData
PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
WorkbookWriter workBook = new WorkbookWriter();
SheetWriter sheet = workBook.openSheet("Sheet1");
ExcelTableWriter table = sheet.openTable("B4:F13");//设置Table对象的操作区域
table.setSubmitName("Info");//设置table对象的提交名称,以便保存页面获取提交的数据
poCtrl.setWriter(workBook);//此行必须
poCtrl.setSaveDataPage("saveData");//设置保存数据接口地址
//webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
poCtrl.webOpen("D:\\documents\\test.xlsx", OpenModeType.xlsSubmitForm, "张三");
PageOfficeNetCore.PageOfficeCtrl poCtrl = new PageOfficeNetCore.PageOfficeCtrl(Request);
PageOfficeNetCore.Excel.WorkbookWriter workBook = new PageOfficeNetCore.Excel.WorkbookWriter();
PageOfficeNetCore.Excel.SheetWriter sheet = workBook.OpenSheet("Sheet1");
PageOfficeNetCore.Excel.ExcelTableWriter table = sheet.OpenTable("B4:F13");
table.SubmitName = "Info";//设置table对象的提交名称,以便保存页面获取提交的数据
poCtrl.SetWriter(workBook);//此行必须
poCtrl.SaveDataPage = "SaveData";//设置保存数据接口地址
//webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
poCtrl.WebOpen("doc/test.xls", PageOfficeNetCore.OpenModeType.xlsSubmitForm, "tom");
// Make sure to add code blocks to your code group
在服务器端后台方法saveData中,创建com.zhuozhengsoft.pageoffice.excel命名空间中的WorkbookReader对象,提取各单元格数据。您可以在此方法中编写代码,把获取到的数据保存到对应的数据库表中。
WorkbookReader workBook = new WorkbookReader(request, response);
SheetReader sheet = workBook.openSheet("Sheet1");
ExcelTableReader table = sheet.openTable("Info");//Info为打开文件时设置的SubmitName
String content = "";
int result = 0;
while (!table.getEOF()) {
//获取提交的数值
if (!table.getDataFields().getIsEmpty()) {
content += "<br/>Product: "
+ table.getDataFields().get(0).getText();
content += "<br/>Plan: "
+ table.getDataFields().get(1).getText();
content += "<br/>Real: "
+ table.getDataFields().get(2).getText();
content += "<br/>Total: "
+ table.getDataFields().get(3).getText();
if (table.getDataFields().get(2).getText().equals(null)
|| table.getDataFields().get(2).getText().trim().length() == 0
) {
content += "<br/>Rate: 0%";
} else {
float f = Float.parseFloat(table.getDataFields().get(2)
.getText());
f = f / Float.parseFloat(table.getDataFields().get(1).getText());
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
content += "<br/>Rate: " + df.format(f * 100) + "%";
}
content += "<br/>*********************************************";
}
//循环进入下一行
table.nextRow();
}
table.close();
//可以在此处编写代码把content输出到控制台,查看提交数据
workBook.close();
PageOfficeNetCore.Excel.WorkbookReader workBook = new PageOfficeNetCore.Excel.WorkbookReader(Request, Response);
await workBook.LoadAsync();
PageOfficeNetCore.Excel.SheetReader sheet = workBook.OpenSheet("Sheet1");
PageOfficeNetCore.Excel.ExcelTableReader table = sheet.OpenTable("Info");
string content = "";
int result = 0;
while (!table.EOF)
{
//获取提交的数值
//DataFields.Count标识的是提交过来的table的列数
if (!table.DataFields.IsEmpty)
{
content += "<br/>月份名称:" + table.DataFields[0].Text;
content += "<br/>计划完成量:" + table.DataFields[1].Text;
content += "<br/>实际完成量:" + table.DataFields[2].Text;
content += "<br/>累计完成量:" + table.DataFields[3].Text;
if (string.IsNullOrEmpty(table.DataFields[2].Text) || !int.TryParse(table.DataFields[2].Text, out result) ||
!int.TryParse(table.DataFields[1].Text, out result))
{
content += "<br/>完成率:0";
}
else
{
float f = int.Parse(table.DataFields[2].Text);
f = f / int.Parse(table.DataFields[1].Text);
content += "<br/>完成率:" + string.Format("{0:P}", f);
}
content += "<br/>*********************************************";
}
//循环进入下一行
table.NextRow();
}
table.Close();
//可以在此处编写代码把content输出到控制台,查看提交数据
workBook.Close();
ViewBag.content = content;
// Make sure to add code blocks to your code group
# 前端代码
本示例无前端关键代码。
上次更新: 2025/07/21, 15:21:36