集智平台页面超过255列导出excel

最近接触到一些客户的需求,客户想在页面展现的时候不分页,然后在导出excel的时候分页,而客户的报表列数很多,超过了excel255列的限制。这样如果不做任何处理,直接在页面上点击导出excel的按钮,就会弹出对话框提示excel不支持超过255列,也就无法正常导出,所以要想导出这样的报表就必须采取一些特殊的设置,下面就做一个简单的例子,实现超过255列的不分页报表导出excel

有两种办法可以实现上面的需求,分别为:

1.展现时候展现一张不分页的,导出的时候导出另外一张报表,在导出的时候调用API导出那个分页的报表。

2.在jsp中设置width=”-1″ ,excelUsePaperSize=”yes”然后把报表设置成按纸分页的,也可以正常导出excel。

下面分别介绍一下这两种方法的实现过程:

第一种:调用API的方法。

第一步:制作一张超过255列的报表,报表的样式如下图所示(这里直接用to(1,300)函数实现了)

保存这个报表为300col.raq

第二步:设置分页。

点击属性报表属性分页,设置分页方式为按纸分页,然后另存这个报表为300col1.raq

第三步:编写导出的API

导出excelAPI内容如下:

 

<%@ 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导出,就可以实现导出超过255excel的需求了。

 

第二种:使用标签实现。

在展现报表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就实现了。