润乾报表页面超过255列导出excel
润乾报表页面超过 255 列导出 excel
最近接触到一些客户的需求,客户想在页面展现的时候不分页,然后在导出 excel 的时候分页,而客户的报表列数很多,超过了 excel 的 255 列的限制。这样如果不做任何处理,直接在页面上点击导出 excel 的按钮,就会弹出对话框提示 excel 不支持超过 255 列,也就无法正常导出,所以要想导出这样的报表就必须采取一些特殊的设置,下面就做一个简单的例子,实现超过 255 列的不分页报表导出 excel 。
有两种办法可以实现上面的需求,分别为:
1 .展现时候展现一张不分页的,导出的时候导出另外一张报表,在导出的时候调用API导出那个分页的报表。
2 .在jsp中设置width=”-1″ ,excelUsePaperSize=”yes”然后把报表设置成按纸分页的,也可以正常导出excel。
下面分别介绍一下这两种方法的实现过程:
第一种:调用 API 的方法。
第一步:制作一张超过 255 列的报表,报表的样式如下图所示 ( 这里直接用 to(1,300) 函数实现了 )
保存这个报表为 300col.raq 。
第二步:设置分页。
点击属性 - 报表属性 - 分页,设置分页方式为按纸分页,然后另存这个报表为 300col1.raq
第三步:编写导出的 API
导出 excel 的 API 内容如下:
<%@ 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
“%>
<%
Context cxt = new Context();
String reporthome = Context.getInitCtx().getMainDir();
String path = application.getRealPath(reporthome);
String raq = path+File.separator+”300col1.raq”;
ReportDefine rd = (ReportDefine) ReportUtils.read(raq);
Engine engine = new Engine(rd,cxt);
IReport ir = engine.calc();
ReportUtils.exportToExcel(path+File.separator+”300col.xls”,ir,true);
%>
在发布不分页的报表 ( 也就是 300col.raq) 的 jsp 中调用上面的 jsp ,将 300col1.raq 导出,就可以实现导出超过 255 列 excel 的需求了。
第二种:使用标签实现。
在展现报表 jsp 的润乾标签中加入如下两个内容: width=”-1″ , excelUsePaperSize=”yes” ,width=”-1“的含义是页面展现的时候纸张宽度无线大,这样展现的时候就不分页了,而excelUsePaperSize=”yes”的含义是导出excel的时候按照设置的纸张大小来分页,jsp的内容如下:
<%@ page contentType=”text/html;charset=GBK” %>
<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %>
<% //这里为两种方法准备图片连接的公共部分
String appmap = request.getContextPath();
String printImage = “<img alt= 打印 src=’” + appmap + “/images/print.gif’ border=no style=’vertical-align:middle’>”;
String wordImage = “<img alt= 导出 Word src=’” + appmap + “/images/doc.gif’ border=no style=’vertical-align:middle’>”;
String excelImage = “<img alt= 导出 excel src=’” + appmap + “/images/excel.gif’ border=no style=’vertical-align:middle’>”;
String pdfImage = “<img alt= 导出 PDF 文件 src=’” + appmap + “/images/pdf.gif’ border=no style=’vertical-align:middle’>”;
String firstPageImage = “<img src=’” + appmap + “/images/firstpage.gif’ border=no style=’vertical-align:middle’>”;
String lastPageImage = “<img src=’” + appmap + “/images/lastpage.gif’ border=no style=’vertical-align:middle’>”;
String nextPageImage = “<img src=’” + appmap + “/images/nextpage.gif’ border=no style=’vertical-align:middle’>”;
String prevPageImage = “<img src=’” + appmap + “/images/prevpage.gif’ border=no style=’vertical-align:middle’>”;
String submitImage = “<img alt= 保存到数据库 src=’” + appmap + “/images/savedata.gif’ border=no style=’vertical-align:middle’>”;
String importExcelImage = “<img alt= 导入 Excel 文件 src=’” + appmap + “/images/importExcel.gif’ border=no style=’vertical-align:middle’>”;
%>
<form id=”form1″ action=”excel.jsp”>
<table align=center>
<tr><td>
<input type=”button” onclick=”form1.action” value=” 导出 excel”>
<report:html name=”report1″ reportFileName=”300col.raq”
needSaveAsWord=”yes”
needSaveAsPdf=”yes”
needSaveAsExcel=”yes”
width=”-1″
excelUsePaperSize=”yes”
wordLabel=”<%=wordImage%>”
pdfLabel=”<%=pdfImage%>”
submit=”<%=submitImage%>”
/>
</td></tr>
</table>
</form>
使用上面的 jsp 发布第一种方法制作的 300col1.raq ,点击导出 excel 的按钮,选择分页方式导出,具体样式如下图所示:
点击确定,就会导出按纸分页的 excel 了,这样在页面上导出超过 255 列不分页报表的 excel 就实现了。