我在使用 jasper 将数据写入 excel 文件时遇到问题,在尝试使用自定义分页并多次写入同一文件时,它要么被损坏,要么只有最终列表,尽管我注意到文件的大小保持不变随着写入变大。
如何使用 jasper 将多个列表写入同一个 excel 文件?
for (int pageNumber = 1; pageNumber < pagesMap.size() + 2; pageNumber++) {
// Retrieve List Of Data From DB
var recordsList = paginationManager.getPaginatedTrafficData(exportFetchSize, pagesMap, pageNumber, envelop);
Path downloadingFileExcel = Files.createTempFile(downloadingPath, filename, ".xls.gz");
final JasperPrint printExcel = JasperReportsUtility.getJasperPrint(recordsList, params, "report_templates/trafficExcel.jrxml");
var fileStreamExcel = new FileOutputStream(downloadingFileExcel.toFile(),true);
var gZipOutputStreamExcel = new GZIPOutputStream(fileStreamExcel);
JasperReportsUtility.createExcelReport(printExcel,gZipOutputStreamExcel);
gZipOutputStreamExcel.close();
fileStreamExcel.close();
}
public JasperPrint getJasperPrint(List listOfObject, Map<String, Object> parameters, String designFileName) throws JRException {
final InputStream stream = CIReportManager.class.getClassLoader().getResourceAsStream(designFileName);
final JasperReport report = JasperCompileManager.compileReport(stream);
final JRBeanCollectionDataSource source = new JRBeanCollectionDataSource(listOfObject);
final Map<String, Object> reportParams = new HashMap<>();
reportParams.put("TrafficDataSetParam", source);
reportParams.putAll(parameters);
final JasperPrint print = JasperFillManager.fillReport(report, reportParams, new JREmptyDataSource());
return print;
}
public void createExcelReport(JasperPrint print , OutputStream os) throws JRException {
JRXlsExporter exporter = new JRXlsExporter();
//JRXlsxExporter exporter = new JRXlsxExporter();
ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
SimpleXlsxReportConfiguration reportConfig = new SimpleXlsxReportConfiguration();
String sheetName = "Data " + (new Random()).nextInt(1000);
//reportConfig.setSheetNames(new String[] { sheetName });
reportConfig.setOnePagePerSheet(true);
reportConfig.setDetectCellType(true);
reportConfig.setWhitePageBackground(false);
reportConfig.setFontSizeFixEnabled(false);
reportConfig.setRemoveEmptySpaceBetweenRows(true);
reportConfig.setRemoveEmptySpaceBetweenColumns(true);
reportConfig.setShowGridLines(false);
exporter.setConfiguration(reportConfig);
exporter.setExporterInput(new SimpleExporterInput(print));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(os));
exporter.exportReport();
}
我尝试使用 List 但我不确定它的性能。