4

我有一个要求,我需要生成 excel 格式的报告。excel表格的表格将动态生成。我想知道是否有办法命名这些动态生成的工作表。使用 net.sf.jasperreports.export.xls.sheet.names.{arbitrary_name} 属性我们只能命名我们知道的工作表。对于其他工作表碧玉将默认名称设为“Page X”,依此类推。谢谢

4

3 回答 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,您需要执行以下步骤:

  1. 转到元素的属性
  2. 滚动到名为“属性”的属性
  3. 单击 3 点按钮以打开“属性”窗口
  4. 点击添加
  5. 在名称中输入“net.sf.jasperreports.export.xls.sheet.name”
  6. 勾选“使用表达式”
  7. 按下值字段右侧的按钮,然后
  8. 选择您的字段、变量或参数。

在 JRXML

如果您想直接在 JRXML 文件中更改它,您需要找到您的元素并向其中添加以下 propertyExpression(用于使用字段作为工作表名称的输入):

 <propertyExpression name="net.sf.jasperreports.export.xls.sheet.name">
      <![CDATA[$F{FieldName}]]>
 </propertyExpression>
于 2014-11-03T21:30:22.123 回答