报表开发之批量导入导出excel
在日常使用报表过程中,会有这样一种情况,你将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的更多相关文章
- asp.net mvc4 easyui datagrid 增删改查分页 导出 先上传后导入 NPOI批量导入 导出EXCEL
效果图 数据库代码 create database CardManage use CardManage create table CardManage ( ID ,) primary key, use ...
- C# 读写excel 用于导入数据库 批量导入导出excel
给大家介绍一款控件,Aspose.Cells.dll,相当强大,几乎就是excel,支持excel2003,excel2007等格式文件.excel2010以上,没有经过测试,估计也是可以. Aspo ...
- C#导入导出Excel表的数据
一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...
- Vue框架下实现导入导出Excel、导出PDF
项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...
- .NET导入导出Excel
若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...
- NPOI导入导出Excel
.net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交 代码: 第一步. 在页面里面加入2个隐藏的iframe, 如下 ...
- PowerShell 批量导入/导出Active Directory
PowerShell 批量导入/导出Active Directory 近期由于公司要求,须要导入20个供应商.20个客户到AD域中,刚開始手动添�了2个供应商,2个客户.可是感觉费时费 ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- .NET 导入导出Excel
第一种方式:OleDb 需要安装office,且读数据慢,而且有数据格式的Cell读出数据不正确等问题.放弃. 第二种方式:NPOI开源库 使用NPOI导入导出Excel应该是.NET开发很常用的手段 ...
随机推荐
- C#在winform中调用系统控制台输出
在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示. 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅 ...
- jQuery图片轮播特效
效果预览:http://hovertree.com/texiao/jquery/51/ 这款特效有缩略图,包含文字说明和链接,可以自动播放,也可以手动切换. 使用的jQuery库版本为1.12.3 , ...
- 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null
[源码下载] 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null 作者:webabcd 介绍背水一战 Windows 10 之 XAML ...
- ASP.NET MVC Notes - 01
inetmgr 进入IIS ViewBag和ViewData在run-time的时候检查错误,View中的用法如下: @*ViewBag传递的是动态对象*@ @foreach (string item ...
- Java 集合框架
Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...
- JAVA Collections工具类sort()排序方法
主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...
- 华硕笔记本U盘启动系统/WinPE报错。Windows failed to start. A Recent hardware or software change might be the cause.
最近在整一台华硕笔记本,大概有5年寿命了吧,质量还行,由于系统出了问题,打算用自制U盘WinPE进去修复一下.按照个人经验,在主板设置里启用了USB启动选项,并且设置USB启动顺序为第一个,可是进系统 ...
- jQuery弹出窗口浏览图片
效果预览:http://keleyi.com/keleyi/phtml/jqtexiao/3.htm HTML文件代码: <!DOCTYPE HTML> <html> < ...
- iOS 封装添加按钮的方法
添加按钮 #pragma mark 添加按钮 - (void)addButtonWithImage:(NSString *)image highImage:(NSString *)highImage ...
- Microsoft Dynamics CRM 分销行业解决方案
Microsoft Dynamics CRM 分销行业解决方案 方案亮点 360度动态渠道信息管理 充分的客户细分 全面的业务代表考核指标 业务代表管理和能力建设 业务代表过程管理 业务代表费用管理 ...