代码之家  ›  专栏  ›  技术社区  ›  user3311231

如何通过JasperReports 6动态设置Excel工作表名称。x?

  •  2
  • user3311231  · 技术社区  · 6 年前

    我必须将jasperreport-4.0.2升级到jasperreport-6.5.1我发现将报表导出到excel格式有一些差异

    net.sf.jasperreports.engine.export.JExcelApiExporter
    

    已弃用并替换为

    net.sf.jasperreports.engine.export.JRXlsExporter
    

    还有很多其他的事情也改变了。 在jasperreport-4.0.2中,我可以通过以下代码更改excel工作表名称

    JRAbstractExporter exporter = new net.sf.jasperreports.engine.export.JExcelApiExporter();
    exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
    

    jasperreport-6.5.1中excel工作表的命名替代方法是什么?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alex K    6 年前

    根据新的API(与4.x版本相比),您可以通过多种方式解决该任务。

    使用ReportExportConfiguration

    我们可以使用 SimpleXlsxReportConfiguration ,在这种情况下,我们应该覆盖 getSheetNames() 方法

    Java代码:

    Map<String, Object> params = new HashMap<>();
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
    
    JRXlsxExporter exporter = new JRXlsxExporter();
    
    exporter.setConfiguration(new SimpleXlsxReportConfiguration() {
    
        @Override
        public String[] getSheetNames() {
            return new String[]{"MyName"};
        }
    });
    exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
    SimpleOutputStreamExporterOutput exporterOutput = null;
    try (OutputStream outputStream = new FileOutputStream(file)) {
        exporterOutput = new SimpleOutputStreamExporterOutput(outputStream);
        exporter.setExporterOutput(exporterOutput);
        exporter.exportReport();
    } finally {
        if (exporterOutput != null) {
            exporterOutput.close();
        }
    }
    

    报告模板:

    <?xml version="1.0" encoding="UTF-8"?>
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Set sheet name via exporter's configuration" pageWidth="595" pageHeight="200" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
        <title>
            <band height="30">
                <staticText>
                    <reportElement x="0" y="0" width="100" height="30"/>
                    <text><![CDATA[Set sheet name via exporter's configuration]]></text>
                </staticText>
            </band>
        </title>
    </jasperReport>
    

    生成的结果将是:

    Generated result at MS Excel

    使用报表的参数和网络。旧金山。jasperreports。出口xls。床单name属性

    可以通过帮助设置图纸名称 net.sf.jasperreports.export.xls.sheet.name 所有物如果要动态设置此名称,可以使用报表的参数传递名称。

    Java代码:

    Map<String, Object> params = new HashMap<>();
    params.put("stringParam", "ZZZ");
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
    
    JRXlsxExporter exporter = new JRXlsxExporter();
    
    exporter.setConfiguration(new SimpleXlsxReportConfiguration());
    exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
    SimpleOutputStreamExporterOutput exporterOutput = null;
    try (OutputStream outputStream = new FileOutputStream(file)) {
        exporterOutput = new SimpleOutputStreamExporterOutput(outputStream);
        exporter.setExporterOutput(exporterOutput);
        exporter.exportReport();
    } finally {
        if (exporterOutput != null) {
            exporterOutput.close();
        }
    }
    

    报告模板:

    <?xml version="1.0" encoding="UTF-8"?>
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Set sheet name via parameter" pageWidth="595" pageHeight="200" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
        <parameter name="name" class="java.lang.String"/>
        <title>
            <band height="30">
                <staticText>
                    <reportElement x="0" y="0" width="100" height="30">
                        <propertyExpression name="net.sf.jasperreports.export.xls.sheet.name"><![CDATA[$P{name}]]></propertyExpression>
                    </reportElement>
                    <text><![CDATA[Set sheet name via parameter]]></text>
                </staticText>
            </band>
        </title>
    </jasperReport>
    

    结果将是:

    Generated result at MS Excel


    有关使用xls/xlsx导出器的更多信息: