我使用的是SXSSFWorkbook,经过排查在构建表格这一块时非常缓慢,我有尝试过使用new ThreadPoolExecutor线程池,但还是很慢,友友们有好的优化方案嘛?
2条回答 默认 最新
- Ycj_3355 2023-03-19 17:10关注
对于SXSSFWorkbook构建表格缓慢的问题,可以考虑以下几个优化方案:
使用SXSSFRow和SXSSFCell:SXSSFWorkbook是基于XSSFWorkbook的,但是SXSSFWorkbook使用了一些优化技术,例如使用SXSSFRow和SXSSFCell代替XSSFRow和XSSFCell,从而提高了构建表格的效率。
使用SXSSFDataValidationHelper:SXSSFWorkbook中提供了SXSSFDataValidationHelper,可以用于构建数据校验规则,从而提高了构建表格的效率。
使用SXSSFSheet.setAutoFilter:SXSSFWorkbook中提供了SXSSFSheet.setAutoFilter,可以用于设置自动筛选,从而提高了构建表格的效率。
使用SXSSFWorkbook.setCompressTempFiles:SXSSFWorkbook中提供了SXSSFWorkbook.setCompressTempFiles,可以用于设置是否压缩临时文件,从而提高了构建表格的效率。
需要根据实际情况进行选择和优化,综合考虑效率、稳定性、可维护性等因素。
以下是使用SXSSFWorkbook构建Excel的Java示例代码:
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class ExcelWriter { public static void main(String[] args) throws IOException { // 创建SXSSFWorkbook对象 SXSSFWorkbook wb = new SXSSFWorkbook(100); // 创建Sheet对象 XSSFSheet sheet = wb.createSheet("Sheet1"); // 写入数据 for (int rownum = 0; rownum < 1000000; rownum++) { org.apache.poi.ss.usermodel.Row row = sheet.createRow(rownum); for (int cellnum = 0; cellnum < 10; cellnum++) { org.apache.poi.ss.usermodel.Cell cell = row.createCell(cellnum); cell.setCellValue("value" + cellnum); } } // 输出Excel文件 FileOutputStream out = new FileOutputStream("example.xlsx"); wb.write(out); out.close(); // 关闭SXSSFWorkbook对象 wb.dispose(); } }
以上代码使用Apache POI库构建了一个包含1000000行、10列的Excel文件,可以作为SXSSFWorkbook构建Excel的参考。需要注意的是,SXSSFWorkbook需要占用大量的内存,需要根据实际情况进行调整和优化。
参考于:Cursor 应用解决 无用评论 打赏 举报
悬赏问题
- ¥50 HAL ADCDMA单次触发转换
- ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
- ¥15 wpf datagrid如何实现多层表头
- ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
- ¥20 网站后台使用极速模式非常的卡
- ¥20 Keil uVision5创建project没反应
- ¥15 mmseqs内存报错
- ¥15 vika文档如何与obsidian同步
- ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
- ¥15 陆空双模式无人机飞控设置