知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > 设计基础 > API导出不同条件下报表到一个Excel的多个sheet

API导出不同条件下报表到一个Excel的多个sheet

需求背景

有的时候客户希望一次性导出某些参数下的结果分多个sheet页到一个excel中。如下图:

问题分析

通过API遍历学历列表,将每种学历分别传到报表中,计算得出IReport对象;将得到的每个iReport导出到sheet中,最后导出Excel完成。

需求实现

具体的API如下:

public class ExportExcelToSheet {
public static void main(String[] args) throws Throwable {
ExtCellSet.setLicenseFileName(”D:/Program Files/reportHome/webapps/demo/WEB-INF/classes/runqianWindowServer.lic”);//设置授权
ExportExcelToSheet eets = new ExportExcelToSheet();
Context cxt = new Context();
eets.getConnection(cxt);
String raqFile1 = “D:/Program Files/reportHome/webapps/demo/reportFiles/4.4_arg.raq”; //参数模板
String raqFile2 = “D:/Program Files/reportHome/webapps/demo/reportFiles/4.4.raq”; //数据报表
List<Object> dsList = eets.readRaq(cxt, raqFile1); //得到参数模板中下拉数据集列表
IReport[] iReport = new IReport[dsList.size()]; //定义IReport数组,存放每个参数下生成的报表
ExcelReport ert = new ExcelReport();
for(int i=0;i<dsList.size();i++){
System.out.print(dsList.get(i)+” “);
//iReport[i] = eets.readRaq(cxt, raqFile2, dsList.get(i));
iReport[i] = eets.readRaq(raqFile2, dsList.get(i));
ert.export(”sheet_”+i, iReport[i]); //将每个iReport分别导出到sheet中
}
ert.saveTo(”F:/test.xls”);
}
/**
* 获取数据源
* @param cxt
*/
public void getConnection(Context cxt) {
Connection conn = null;
try {
Driver driver = (Driver) Class.forName(”org.hsqldb.jdbcDriver”)
.newInstance();
DriverManager.registerDriver(driver);
conn = DriverManager.getConnection(
“jdbc:hsqldb:hsql://localhost/runqianDB”, “sa”, “”);
} catch (Exception e) {
e.printStackTrace();
}
//设置数据源,动态改变连接参数
cxt.setDefDataSourceName(”jdbc/defualt”);
//设置数据连接,也可以设置连接池工厂,如cxt.setConnectionFactory(sourceName,connectionFactory)
//其中connectionFactory这个类必须implements IConnectionFactory,并且实现他的public java.sql.Connection getConnection() throws Exception 方法
cxt.setConnection(”jdbc/defualt”,conn);
DataSourceConfig dsoc = new DataSourceConfig(2, true, “GBK”, “GBK”, false);
cxt.setDataSourceConfig(”jdbc/defualt”, dsoc);
}
/**
* 单纯计算报表,比如计算参数模板
* @param cxt
* @param raq
* @throws Exception
*/
public List<Object> readRaq(Context cxt,String raq) throws Exception{
ReportDefine rd = (ReportDefine)ReportUtils.read(raq);//读入报表
Engine engine = new Engine(rd,cxt);
IReport iReport = engine.calc();
List<Object> colList = new ArrayList<Object>();
DataSet ds = cxt.getDataSet(”ds2″); //根据数据集的名称获取已算出的数据集
if(ds==null) return null;
int colCount=ds.getColCount(); //获得数据集的行数列数
//System.out.println(”ds2中列数:”+colCount);
int rowCount=ds.getRowCount();
//System.out.println(”ds2中行数:”+rowCount);
for(int i=1;i<=rowCount;i++){ //注意数据集的行号列号从1开始
System.out.println(ds.getData(i, 1)+” “);
colList.add(ds.getData(i,1));//将数据集中第一个字段存入List
//}
}
return colList;
}
/**
* 没有context的方法
* @param raq
* @param params
* @return
* @throws Exception
*/
public IReport readRaq(String raq,Object params) throws Exception{
Context cxt = new Context();
new ExportExcelToSheet().getConnection(cxt);
ReportDefine rd = null;
rd=(ReportDefine)ReportUtils.read(raq);//读入报表
//设置参数
ParamMetaData pmd = rd.getParamMetaData();
String paramName = “”; //参数名
if(pmd != null){
for(int i=0,count=pmd.getParamCount();i<count;i++){
paramName = pmd.getParam(i).getParamName();
cxt.setParamValue(paramName,params); //设置报表参数值
System.out.println(”&&&&&”+params);
}
}
Engine engine = new Engine(rd,cxt);
IReport iReport = engine.calc();
return iReport;
}
}

需求即实现。

本文标签:
发布日期:2010/09/15
本文分类: 设计基础