如何从jasper报告导出到excel中的多个工作表

时间:2016-01-15 10:13:02

标签: jasper-reports

我正在制作一份包含许多子报告的iReport报告。

我希望从我的应用程序生成报告时,在excel文件中有另外两张表。

在互联网上搜索时,我找到了关于在报告中创建中断的答案,并选择了#34;忽略分页"在子报告中" true" ,但我现在还不清楚。

我可以选择控制创建新工作表的方式和时间

1 个答案:

答案 0 :(得分:5)

在jasper报告中,在jrxmljava代码中有不同的方法来实现新工作表。默认行为是为每个页面创建一个新工作表。我将说明使用它们时相对问题的3种最常见的方法。

  

忽略分页和中断元素

方式

isIgnorePagination="true"标记上设置jasperReport并添加

<break>
  <reportElement x="0" y="0" width="100" height="1" uuid="c5371aa4-2eb4-4ab9-8cae-39f50da3317b"/>
</break>

当您需要新表时。

问题:如果您导出为pdf(因为它忽略了分页),报告也不会很漂亮

  

使用jrxml属性

方式 要避免在每个新页面上创建新工作表,请设置属性

net.sf.jasperreports.export.xls.one.page.per.sheet="false"

如果您希望它在reportElement添加相对属性之前或之后创建新工作表:

net.sf.jasperreports.export.xls.break.before.row="true"
net.sf.jasperreports.export.xls.break.after.row="true"

问题:每张工作表上的列都是相同的,这可能会导致不同工作表上出现丑陋的colspan

  

根据需要使用java并控制工作表(加载不同的报告)

方式

List<JasperPrint> sheets = new ArrayList<JasperPrint>();
for (int i=1;i<=8;i++){
   JasperPrint print = JasperFillManager.fillReport("subReport_" + i + ".jasper", paramMap, connection);
   sheets.add(print); 
}
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("text.xlxs"));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setSheetNames(sheetNames): //sheets names is an array of the different names.
configuration.setOnePagePerSheet(false); //remove that it break on new page
configuration.setDetectCellType(true);
exporter.setConfiguration(configuration);
exporter.exportReport();

问题:如果您使用的是jasper报表服务器,则无法使用此方法。