润乾报表导出CSV格式的文件

CSV:文件开头是不留空的,以行为单位,每行中记录了多项数据,每项数据用逗号来分隔(标准英文逗号)。CSV首行的数据项分别是对应列的标签。

润乾报表支持导出word、pdf、excel、txt格式的文件,但没有导出CSV文件格式。虽然使用润乾导出的txt文件格式跟CSV格式差不多,但是还是有差别。

区别:

使用润乾的txt,设置分隔标签textDataSeparator=”,” textDataLineBreak=”\r\n”,除了后缀名为txt与csv不同外,内容也不同,润乾导出的txt会在每一个数据项后都补充一个英文逗号”,”,而CSV文件每一行末的数据项都不补充英文逗号”,”。

做一个简单的CSV导出,我们可以通过直接调用API的方式生成,首先是运算报表,然后根据报表的行列,依次读取每一个单元格对象的值,并把值合并成CSV格式的内容。最后使用response文件的格式生成下载文件。通过API方式生成CSV的方式,还可以选择忽略哪一行哪一列的值。详细可以看下面的一些简单程序:

<%@ page contentType=”text/html;charset=gb2312″ %>
<%@ page import=”java.io.*”%>
<%@ page import=”com.runqian.report4.usermodel.*”%>
<%@ page import=”com.runqian.report4.model.*”%>
<%@ page import=”com.runqian.report4.view.html.*”%>
<%@ page import=”com.runqian.report4.util.*”%>

<%
//报表路径
String reportFile = request.getRealPath(“/reportFiles/newFunc/通讯录/viewABList.raq”); //该文件名可以为绝对路径,也可以相对当前程序启动路径
ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );

//运算报表
Context context = new Context();

//设置参数,通讯录的参数deptid:部门,name:名字
//context.setParamValue(“deptid”,”BDB021011501″);
//context.setParamValue(“name”,”3″);

Engine enging = new Engine(rd, context);
IReport iReport = enging.calc();
ReportUtils ruReport = new ReportUtils();

//取报表中的格子数
//固定标签
String s=(“姓名,地点,部门,职务,主要电话,移动电话,电子邮件,电子邮件 2\r\n”);
for(int i=4;i<=iReport.getRowCount();i++){
for(int j=2;j<=iReport.getColCount()-2;j++){
INormalCell iCell=iReport.getCell(i, (short)j);
if(j!=3)
{
String str=”";
if(!”".equals(iCell.getValue().toString()))
str=iCell.getValue().toString();
if(j<iReport.getColCount()-2)
s+=str+”,”;
else
s+=str;
}
}
s+=(“\r\n”);
}

response.setContentType(“application/csv;charset=gb18030″);
response.setHeader(“Content-Disposition”,”attachment; filename=Runqian_Email_Address.csv”);
PrintWriter pw = response.getWriter();
pw.print(s);
pw.flush();
pw.close();
%>

附注:对于带有参数的报表,还得在生成报表时传递参数。

热门文章