I do not use swap file virtualize. I virtualize by report. Perhaps you should not set virtualizer to read only. I am not sure. I DO : virtualizer = new JRFileVirtualizer(1, tmpDirectory); ... reportParameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer); ... JasperPrint reportPrint = reportGenerationBusinessService.fillReport(reportObj, reportParameters, new JREmptyDataSource()); .... export to XLS I made test with more than 20 000 lines of data I do not use the JExcel exporter because it is low. I use POI exporter (like you, it seems) Here my params : logger.debug("Start Export XLS POI"); long nanoTime = System.nanoTime(); File reportOutputFile = createExportFile(reportFileName, ".xls"); JRXlsExporter exporterJRX = new JRXlsExporter(); exporterJRX.setParameter(JRExporterParameter.OUTPUT_FILE, reportOutputFile); exporterJRX.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporterJRX.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF8"); exporterJRX.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, true); exporterJRX.setParameter(JRXlsExporterParameter.SHEET_NAMES, sheetsName); exporterJRX.setParameter(JRXlsExporterParameter.MAXIMUM_ROWS_PER_SHEET, 65000); exporterJRX.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, true); exporterJRX.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BACKGROUND, false); exporterJRX.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BORDER, false); exporterJRX.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, true); exporterJRX.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, false); exporterJRX.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, false); exporterJRX.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, false); Map<String, String> numberFormats = new HashMap<String, String>(); numberFormats.put("#,##0.0000000000", "#,##0.00;-#,##0.00"); numberFormats.put("#,##0.0000000000 %", "#,##0.00;-#,##0.00" ); exporterJRX.setParameter(JRXlsExporterParameter.FORMAT_PATTERNS_MAP, numberFormats); exporterJRX.exportReport(); logger.info("End Export XLS POI " + (System.nanoTime()-nanoTime)/MILLIS + "ms" ); return reportOutputFile; HOPE it'll help you Post Edited by neozerabbit at 10/07/2011 14:56