如何通过 JasperReports 6.x 动态设置 Excel sheet 名称?
How to set Excel sheet name dynamically via JasperReports 6.x?
我必须将 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 sheet 名称
JRAbstractExporter exporter = new net.sf.jasperreports.engine.export.JExcelApiExporter();
exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
jasperreport-6.5.1 中 excel sheets 的替代命名是什么?
根据新的API(与4.x版本相比),您可以通过多种方式解决任务。
使用 ReportExportConfiguration
我们可以使用 SimpleXlsxReportConfiguration 设置 sheet 名称,在这种情况下我们应该覆盖 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>
生成的结果将是:
使用报告的参数和net.sf.jasperreports.export.xls.sheet.name 属性
sheet 名称可以在 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>
结果将是:
有关使用 xls/xlsx 出口商的更多信息:
我必须将 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 sheet 名称
JRAbstractExporter exporter = new net.sf.jasperreports.engine.export.JExcelApiExporter();
exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
jasperreport-6.5.1 中 excel sheets 的替代命名是什么?
根据新的API(与4.x版本相比),您可以通过多种方式解决任务。
使用 ReportExportConfiguration
我们可以使用 SimpleXlsxReportConfiguration 设置 sheet 名称,在这种情况下我们应该覆盖 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>
生成的结果将是:
使用报告的参数和net.sf.jasperreports.export.xls.sheet.name 属性
sheet 名称可以在 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>
结果将是:
有关使用 xls/xlsx 出口商的更多信息: