最近一段时间在解决客户问题的过程中,遇到这样一个需求,客户希望将多个自己的报表文件导入到一个excel文件中,导成excel的多个sheet页,从而更直观的展现自己的数据,查看起来也更方便一些。下面就用一个例子实现上面的需求。
实现思路:在报表应用的JSP中编写API代码,将传过来的多个报表文件分别计算,得到IReport对象,分别将每个IReport对象导出到一个ExcelReport对象中,在导出时给每个IReport对象起一个不同的名字。
第一步:制作三张报表(这里以三张为例)
制作三张报表,连接demo数据源,三张报表的信息如下:
第一张报表数据集ds1的sql为:SELECT 产品.产品ID,产品.产品名称,产品.单价 FROM 产品 报表的样式如下图所示:
第二张报表数据集ds1的sql为:SELECT 类别.类别ID,类别.类别名称,类别.说明 FROM 类别 报表的样式如下图所示:
第三张报表数据集ds1的sql为:SELECT 运货商.公司名称,运货商.电话,运货商.运货商ID FROM 运货商 报表的样式如下图所示:
第二步:编写导出三张报表的JSP文件。
jsp文件的内容如下:
<%@ page language=”java” contentType=”text/html; charset=gbk”
pageEncoding=”gbk”%>
<%@page
import=”com.runqian.report4.usermodel.*,com.runqian.report4.util.*,com.runqian.report4.model.ReportDefine”%>
< %@ page import=”java.io.*,com.runqian.report4.usermodel.DataSetConfig,java.util.*,com.runqian.report4.view.excel.ExcelReport”%>
< %
List<String> list = new ArrayList<String>();
list.add(“F:/1.raq”);
list.add(“F:/2.raq”);
list.add(“F:/3.raq”);
System.out.println(“共有”+list.size()+”个raq文件”);
OutputStream os = new FileOutputStream(“F:/Reports.xls”);
ExcelReport er = new ExcelReport();
for(int i = 0; i<list.size(); i++){
ReportDefine rd = (ReportDefine)ReportUtils.read(list.get(i));
Context ctx = new Context();
Engine engine = new Engine(rd,ctx);
IReport ireport = engine.calc();
System.out.println(“i=============”+i);
er.export(“sheet_”+String.valueOf(i),ireport);
}
er.saveTo(“F:/Reports.xls”);
//System.out.println(“已经导出了一个sheet_”+i);
os.close();

%>
第三步:运行jsp,导出报表文件。
把上面的jsp放到应用中,然后访问上面的jsp,就会看见三张报表被导出到了指定的路径,具体的样式如下图所示。
在客户实际应用的过程中,根据上面的代码把需要导出的报表路径都写到一个list里面就可以了,可以直接套用下面的循环,这样减少了代码量,也更直观。
通过上面几步就可以将多张报表导入到同一个excel里面了。