我有一个要求,我需要生成 excel 格式的报告。excel表格的表格将动态生成。我想知道是否有办法命名这些动态生成的工作表。使用 net.sf.jasperreports.export.xls.sheet.names.{arbitrary_name} 属性我们只能命名我们知道的工作表。对于其他工作表碧玉将默认名称设为“Page X”,依此类推。谢谢
问问题
7569 次
3 回答
2
您可以准备一份报告列表并将其添加到 JasperPrint 列表中。
最后,您可以将列表中所有工作表的名称设置为:
exporterXLS.setParameter(JRXlsAbstractExporterParameter.SHEET_NAMES, new String[] {"sheet one", "sheet two",
"sheet three"});
其中 exporterXLS 是 JRXlsExporter 类的一个实例。
下面是我上面描述的更完整的例子:
Connection con = this.jdbcTemplate.getDataSource().getConnection();
Map<String, String> hashmap = new HashMap<String, String>();
hashmap.put("ReportQuery", this.ReportQuery);
JasperReport myJasperReport = JasperCompileManager.compileReport(this.reportJRXML);
JasperPrint myJasperPrint = JasperFillManager.fillReport(myJasperReport, hashmap, con);
List<JasperPrint> jprintList = new ArrayList<JasperPrint>();
jprintList.add(myJasperPrint);
OutputStream outputfile = new FileOutputStream(new File(this.outputExcel));
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jprintList);
exporterXLS.setParameter(JRExporterParameter.OUTPUT_STREAM, outputfile);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.IS_DETECT_CELL_TYPE, Boolean.FALSE);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.IS_IGNORE_GRAPHICS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsAbstractExporterParameter.SHEET_NAMES, new String[] {"first report"});
exporterXLS.exportReport();
于 2012-06-06T11:49:31.990 回答
2
您可以通过在页眉或任何位置使用 line 元素动态地为单独的工作表命名。
注意:我们可以在元素级别而不是报表级别设置此属性,这就是我在示例中使用线作为元素的原因。
例子 :
<line>
<reportElement x="140" y="17" width="50" height="1">
<propertyExpression name="net.sf.jasperreports.export.xls.sheet.name"><![CDATA[$F{TERRITORY}]]></propertyExpression>
</reportElement>
</line>
于 2012-08-17T09:25:54.550 回答
0
在 iReport 设计器中
使用 iReport Designer,您需要执行以下步骤:
- 转到元素的属性
- 滚动到名为“属性”的属性
- 单击 3 点按钮以打开“属性”窗口
- 点击添加
- 在名称中输入“net.sf.jasperreports.export.xls.sheet.name”
- 勾选“使用表达式”
- 按下值字段右侧的按钮,然后
- 选择您的字段、变量或参数。
在 JRXML
如果您想直接在 JRXML 文件中更改它,您需要找到您的元素并向其中添加以下 propertyExpression(用于使用字段作为工作表名称的输入):
<propertyExpression name="net.sf.jasperreports.export.xls.sheet.name">
<![CDATA[$F{FieldName}]]>
</propertyExpression>
于 2014-11-03T21:30:22.123 回答