润乾报表页面超过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 就实现了。

热门文章