pageoffice提取Excel表格区域数据

点击可查看视频演示效果

复制代码
注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

在实际的开发过程中,经常会遇到提取Excel文档中数据保存到数据库中的需求,PageOffice客户端控件支持在线保存Excel文件时,打包Excel文档中的指定单元格的数据或所有的数据提交到服务器端,在服务器端创建PageOffice的WorkbookReader对象,就可以获取到Excel单元格中的数据。

后端代码

在后端编写代码调用webOpen方法以表单提交模式xlsSubmitForm打开文件,创建Sheet对象并操作一块区域(Table),并命名,比如:Info。

设置接收处理PageOffice客户端控件提交数据的服务器端后台方法为:saveData

ini 复制代码
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, "张三");

在服务器端后台方法saveData中,创建com.zhuozhengsoft.pageoffice.excel命名空间中的WorkbookReader对象,提取各单元格数据。您可以在此方法中编写代码,把获取到的数据保存到对应的数据库表中。

ini 复制代码
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();

原文链接:www.pageoffice.cn/pages/541f3...

相关推荐
程序猿DD44 分钟前
OPC必备!在 Cloudflare Worker 上免费部署 AI 网关:集中管理与供应 Token
后端
LucianaiB1 小时前
遇到 Seed Evolving,我终于把脑海里的小说世界图谱做出来了:《斗破苍穹》篇
后端
JuiceFS2 小时前
GPFS、Alluxio、JuiceFS 怎么选?一文看懂架构与适用场景
人工智能·后端
武子康2 小时前
1.2GB 离线语音 Agent 真正值得复用的不是 908ms:四阶段职责 + 状态感知 Tool Schema + 可观测时间锚点
人工智能·后端·agent
掘金者阿豪2 小时前
那些年踩过的 MySQL 迁移坑,这次终于不用绕了
后端
用户7713970207062 小时前
深夜食堂:那个让我加班到凌晨的 ! 符号
后端
swipe2 小时前
03|Axios 请求进了后端之后:Controller、Request、Response 是怎么接住它的?
前端·后端·全栈
swipe2 小时前
02|从 `pnpm dev` 到 Spring Boot 启动:后端服务到底怎么跑起来?
前端·后端·全栈
网易云信3 小时前
网易智企Data Agent实践入选信通院《智能体创新实践案例汇编》
人工智能·后端·线下活动
swipe3 小时前
01|前端人第一次打开 Spring Boot 项目,应该先看哪里?
前端·后端·全栈