【问题标题】:Naming the dyamically generated sheet names in excel in jasper reports在jasper报告中的excel中命名动态生成的工作表名称
【发布时间】:2014-11-04 05:30:22
【问题描述】:

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

【问题讨论】:

    标签: excel jasper-reports ireport


    【解决方案1】:

    您可以准备一份报告列表并将其添加到 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();
    

    【讨论】:

    • JRXlsAbstractExporterParameter 是不推荐使用的类(使用此代码返回 net.sf.jasperreports.engine.JRRuntimeException: Can't mix deprecated JRParameter API calls with new exporter configuration API calls. )。相反,您可以使用jasperPrint.setProperty("net.sf.jasperreports.export.xls.sheet.names.1", "SheetName1") 等。
    【解决方案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>
    

    【讨论】:

      【解决方案3】:

      在 iReport 设计器中

      使用 iReport Designer 您需要按照以下步骤操作:

      1. 转到元素的属性
      2. 滚动到名为“Properties”的属性
      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>
      

      【讨论】:

        猜你喜欢
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多