报表开发之批量导入导出Excel
来源:互联网 发布:淘宝店铺购买骗局 编辑:程序博客网 时间:2024/05/03 06:15
在日常使用报表过程中,会有这样一种情况,你将Excel表分发给各个员工,员工填完后,统一整理成多个Excel,你需要将这些数据,用报表的填报功能,提交录入到数据库中,这样一来可避免到服务器机房录数据的繁琐步骤,但是无论是批量导入和还是导出Excel,这对诸多报表软件或称集成报表功能的系统来说都是不容易的。
解决Excel导入的性能问题,可以利用FineReport开发的op=excel_submit功能,来实现不预览报表即可对填报表导入Excel。
根据报表工程的使用方式不同,批量导入Excel中权限控制方式有所不同。
报表工程一般有以下两种方式:
1、使用FineReport自主开发的数据决策系统op=fs使用报表工程;
2、将报表工程集成到自己的系统中。
1.1 直接使用op=fs
用户使用数据决策系统op=fs查看报表,那么所有的权限都是通过op=fs进行认证,用户也都是添加在op=fs中。
1.2 集成FR报表工程
用户将FR报表工程集成到自己的系统中,通过自己的系统查看报表,那么FR所有的权限都是通过报表平台管理op=fr_platform进行认证,详细请查权限管理。
除了批量导入,还有批量导出。一张报表可以根据不同的条件统计出不同的数据结果,有时希望将每一种条件下的结果都保存下来如导出成Excel文件至磁盘,可以在后台调用FineReport的导出接口ExcelExporter将每种情况下的结果批量保存起来。
实现的原理是遍历读取para.txt中的每组参数值,将该参数值组合传入模板进行计算,然后将结果导出excel,循环直至最后一条参数组合。
例如:
由于我们需要对模板输入参数对应的值才能够计算得到最终的结果,因此我们需要所有可能的参数值组合,可以来源于数据库中某个表,或者某个文件。这里我们假设所需的参数值组合保存在WebReport\WEB-INF\para.txt中。如下图新建para.txt
如果模板有两个参数格式如下:
批量导出程序,完整代码如下:
- package com.fr.io;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.util.Arrays;
- import com.fr.base.FRContext;
- import com.fr.general.ModuleContext;
- import com.fr.dav.LocalEnv;
- import com.fr.io.exporter.ExcelExporter;
- import com.fr.main.TemplateWorkBook;
- import com.fr.main.workbook.ResultWorkBook;
- import com.fr.report.module.EngineModule;
- import com.fr.stable.StableUtils;
- import com.fr.stable.WriteActor;
- public class ExportBatch {
- public static void main(String[] args) {
- try {
- // 定义报表运行环境,用于执行报表
- String envpath = "D:\\FineReport_7.1\\WebReport\\WEB-INF";
- FRContext.setCurrentEnv(new LocalEnv(envpath));
- ModuleContext.startModule(EngineModule.class.getName());
- // 读取环境下的模板文件
- TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(),
- "doc\\Primary\\DetailReport\\Details.cpt");
- // 读取用于保存的参数值的txt文件
- File parafile = new File(envpath + "\\para.txt");
- FileInputStream fileinputstream;
- fileinputstream = new FileInputStream(parafile);
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileinputstream));
- // 定义保存参数的map,用于执行报表
- java.util.Map paramap = new java.util.HashMap();
- /*
- * 遍历参数值所在txt文件,txt文件中参数保存形式为 para1,para2 江苏,陈羽 江苏,安娜 首先取出第一行保存参数名称
- * 遍历每个参数组合,如para1=江苏、para2=陈羽,根据参数执行模板,并将结果导出excel excel文件名为名称+导出编号
- */
- // 读第一行,保存参数名称
- String lineText = bufferedReader.readLine();
- lineText = lineText.trim();
- String[] paraname = StableUtils.splitString(lineText, ",");
- System.out.println(Arrays.toString(paraname));
- // 遍历每个参数组合,执行模板,导出结果
- int number = 0;
- while ((lineText = bufferedReader.readLine()) != null) {
- lineText = lineText.trim();
- String[] paravalue = StableUtils.splitString(lineText, ",");
- for (int j = 0; j < paravalue.length; j++) {
- paramap.put(paraname[j], paravalue[j]);
- }
- ResultWorkBook result = workbook.execute(paramap,new WriteActor());
- OutputStream outputstream = new FileOutputStream(new File("E:\\ExportEg" + number + ".xls"));
- ExcelExporter excelexporter = new ExcelExporter();
- excelexporter.export(outputstream, result);
- // 最后要清空一下参数map,用于下次计算
- paramap.clear();
- number++;
- outputstream.close();
- }
- ModuleContext.stopModules();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
上述为示例程序,其中报表运行环境与模板名称等需要根据您实际环境进行修改。编译运行该程序您便可以得到结果,在E盘根目录下将生成3个Excel文件,如下
内容分别为
这样批量导出便成功了。
- 报表开发之批量导入导出Excel
- 报表开发之批量导入导出Excel
- Excel批量导入导出功能开发
- Excel 报表导入导出
- 企业级报表Excel导入导出
- Excel批量导入(导出同理)
- java之poi操作excel-批量导入导出
- 润乾集算报表应用开发之直接导出Excel/PDF文件
- 润乾集算报表应用开发之直接导出Excel/PDF文件
- Excel 导入导出,统计报表(C#)
- jxl操作excel进行批量导入 、导出
- c# 导入excel处理数据,导出excel报表
- WPF之导入导出Excel
- WPF之导入导出Excel
- WPF之导入导出Excel
- 报表之 3d 查询 导入导出
- Java开发使用Excel批量导入数据
- 使用工具类 使用poi导入导出excel报表
- 约瑟夫问题
- java 获取之前访问的url
- DataGrid添加CheckBox选中框
- 教育变革背景下幼儿园园长领导力研究
- Maven 学习
- 报表开发之批量导入导出Excel
- 对内存对齐的深一步理解
- cordova添加各种第三方插件
- 【华为 OJ 】尼克彻斯定理
- Loadrunner教程
- HDU2570——迷瘴
- java多线程监听JMS、MQ队列
- activiti 流程图点击进行流程跳转(简易流程可行)
- css id选择器和类选择器使用杂谈