Java Jasper 写入 Excel 文件

问题描述 投票:0回答:0

我在使用 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 但我不确定它的性能。

java excel spring-boot jasper-reports jaspersoft-studio
© www.soinside.com 2019 - 2024. All rights reserved.