随着客户需求的不同,对报表的要求不仅要求能在页面上对报表进行查看,也要求报表能在后台批量导出,将批量导出的文件供其他系统或人员使用。常见需求:

1.         项目公司报表导出部分需实现:

a)   能批量导出一个项目公司下的所有报表。

b)   能批量导出所有项目公司的某张报表。

2.    综合报表导出部分需实现:

a)   客户希望能灵活制定某些张报表可批量导出。

b)   可批量导出某个用户下的所有综合报表(不同的用户权限不同可看到的报表也不同)。

c)   可按组织维度批量导出综合报表。比如:可以批量导出按省份分类统计的报表或按业态、按机组等级等维度批量导出。

此功能可分两部分实现:

一:客户自己实现部分,由于客户要想按照自己的需求导出相关报表,比如某公司下所有报表或某人员下所有报表,必然涉及到客户自己的组织机构等,客户可根据自己的组织机构树等查出相关设置,比如公司A下所述报表为 表1,表2,公司B下为表2,表3,则根据该树得到相关报表名称

二:润乾相关代码

<%@ page contentType="text/html;charset=GBK" %>

<%@ page import="java.util.*" %>

<%@ page import="java.io.*" %>

<%@ page import="com.runqian.report4.model.*"%>

<%@ page import="com.runqian.report4.usermodel.*"%>

<%@ page import="com.runqian.report4.util.*" %>

<%@ page import="org.apache.tools.zip.ZipEntry"%>

<%@ page import="org.apache.tools.zip.ZipOutputStream,com.runqian.report4.view.excel.*" %>

<%

//设置所有report对象的值为GBK转码

request.setCharacterEncoding("GBK");

String date1="20101101";

String date2="20101131";

//报表起始时间,结束时间,实际应用中从程序中获得

String raqNames="testexcel,testexcel1";

//批量导出报表名称,此处可由客户程序传递进来

String burs="BDP";

//站名称

String root = getServletContext().getRealPath("/"); //获得应用根目录

String fileName = "srbbfx";//定义批量导出压缩包名称

String txtPath = root+"txtPath\\"+Double.toString(Math.random()*100000000).toString().substring(0,6)+"\\";

java.io.File file = new java.io.File(txtPath);

if(!file.exists()) {

file.mkdirs();

} else {

}

//防止名称冲突,每次导出新建临时文件夹

String[] raqN=raqNames.split(",");

String[] bur=burs.split(",");

//用公共类制作压缩包,应用中导入export.jar

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(txtPath+fileName+".zip"));

//导出时按报表名、站名循环,实际应用中增加时间循环

for(int i=0;i<raqN.length;i++){

for(int j=0;j<bur.length;j++){

String raq=raqN[i]+".raq";//报表名称,以raq结尾

//第一步,读取报表模板

InputStream fis=application.getResourceAsStream("/reportFiles/"+raq);

ReportDefine rd = (ReportDefine)ReportUtils.read( fis );

//第二步,运算报表

Context context = new Context();//构建报表环境

context.setParamValue("date1","20101101");//设置起始时间

context.setParamValue("date2","20101231");//设置结束时间,实际应用由程序获得或循环取值

//     context.setMacroValue("macro1"," and bur_sta_tel='"+bur[j]+"'");//给润乾宏赋值,每次取相应站数据

Engine enging = new Engine( rd, context);//构建润乾引擎

IReport iReport = enging.calc();//计算报表,生成结果文件

ExcelReport eReport = new ExcelReport();

eReport.export("test1",iReport);

eReport.setFomulaExported(true);

FileOutputStream fos = new FileOutputStream(txtPath+"b"+raqN[i]+bur[j]+"20101101"+".xls" );

eReport.saveTo(fos);

//将导出的txt文件放到待压缩的zip包中

String filePath=txtPath+"b"+raqN[i]+bur[j]+"20101101"+".xls";

File f = new File(filePath);

if(f.exists())

{   FileInputStream fis1 = new FileInputStream(f);

ZipEntry ze = new ZipEntry(f.getName());

zos.putNextEntry(ze);

int b;

while((b = fis1.read()) != -1)

zos.write(b);

fis1.close();

}

fos.flush();

fos.close();

}

}

zos.flush();

zos.close();

//判断文件是否存在,设置下等待时间

file = new java.io.File("txtPath/"+fileName+".zip");

if(!file.exists()) {

Thread.sleep(10000);

}

//将生成的压缩包下载到客户端,此处可自写代码实现,可自增代码将生成的文件删除

response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName+".zip"+ "\"");

try{

java.io.OutputStream os = response.getOutputStream();

java.io.FileInputStream fiss = new java.io.FileInputStream(txtPath+fileName+".zip");

byte[] b = new byte[10240];

int i = 0;

while ( (i = fiss.read(b)) > 0 )

{

os.write(b, 0, i);

}

fiss.close();

os.flush();

os.close();

}

catch ( Exception e )

{}

out.clear();

out = pageContext.pushBody();

%>

如何批量将报表导成excel文件并打包下载相关推荐

  1. 报表如何批量导出成 excel 文件

    需求说明 报表展现后可以通过工具栏中的导出按钮将当前展现的报表导出成 excel 文件,但是在实际使用中通常会要求报表不需要展现,直接通过一些操作将报表导出成 excel 文件,并且往往会要求批量导出 ...

  2. Vue将echarts数据导出成excel文件

    Vue将echarts数据导出成excel文件 一.下载vendor插件 下载 vendor 文件放置项目的 src 目录下 链接:https://pan.baidu.com/s/1XYYQ186zo ...

  3. 通过Java批量导出带有图片的Excel文件数据

    批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...

  4. 如何批量将word转换成excel表格

    平时我们工作总会接触很多的文档,转换文档格式也总是很多文件一起,不借助第三方工具的话只能一个个手动转换,非常浪费时间,为了解救大家,小编在这里分享可以批量转换的方法. 转换前的准备:批量将word转换 ...

  5. 怎么把pdf转换成excel文件?

    怎么把pdf转换成excel文件?互联网时代的今天,许多办公技巧都有了翻天覆地的变化,其中尤以pdf.excel.word.图片几种文件的相互转换变化较多.过去的办公文员们无论是把pdf转换成exce ...

  6. VFP导成EXCEL每次只能导16384行的解决方法

    以下是在网上找的一些内容,我是用的下面的 COPY TO TEST.CVS TYPE CVS方法解决的 为什么用VFP导成EXCEL每次只能导16384行? *-------------------- ...

  7. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件--select MID,CODE,NAME from Dxc_Goods_Cate where ...

  8. mongoDB如何将数据导成csv文件?

    mongoDB如何将数据导成csv文件? 1.代码如下: 2.详细参数如下 -h:mongo地址 -u:用户名 -p:密码 --port:端口号 -d:数据库 -c:collection --quer ...

  9. sqlite mysql excel_SQlite数据库信息怎么转成excel文件?

    展开全部 下面的程序能将SQlite数据库信息怎么转成excel文件:package zhaoxing.android.tool; import java.io.File; import java.i ...

  10. 使用Python批量筛选上千个Excel文件中的某一行数据并另存为新Excel文件(下篇)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 野火烧不尽,春风吹又生. 大家好, ...

最新文章

  1. Android View 的onDraw 和 draw 一定会调用吗?
  2. C++ 重载运算符和重载函数(一)
  3. 第三课时:PowerDesigner15基本操作
  4. 矩形分割(洛谷P1324题题解,Java语言描述)
  5. 往hbase插入数据,你会选择哪种?
  6. SAP License:FI疑难问题小结
  7. quartus的modelsim仿真
  8. Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例
  9. 【图像处理】MATLAB:彩色图像介绍
  10. launchMode的几种模式
  11. C#继承(初始化基类,重写,重载)
  12. PHP - 如何解析HTML文件
  13. Battle Zone 战争地带
  14. 三角波fft的c语言程序设计,dsp的fft实现设计报告.docx
  15. linux下载安装自我见解
  16. 计算机专业规划ppt模板,2021大学生个人规划ppt模板
  17. 计算机专业术语pe什么意思,pe是什么意思
  18. Echarts图表移动端手机横屏展示
  19. java 词频统计_Java实现的词频统计
  20. 详解凸优化、图神经网络、强化学习、贝叶斯方法等四大主题

热门文章

  1. Python 根据图片url,批量下载图片
  2. 2022-2028年中国海上石油勘探行业市场研究及前瞻分析报告
  3. GPS模块数据分析 -- linux
  4. php读取mysql单条数据_用PHP框架与原始代码读取Mysql单条数据性能比较
  5. DS Storage Manager 忘记管理密码恢复
  6. 了解Go编译处理(一)—— go tool
  7. JSP旅游景点网站系统myeclipse开发计算机程序web结构java编程网页源码
  8. 网络空间安全和计算机科学与技术的区别,密码与网络空间安全学科有什么区别...
  9. Hacking Diablo II之外挂实战教程:去除D2JSP试用版显示的Trial Version信息
  10. sqlserver 触发器 mysql_SQLServer触发器实例