使用POI的SXSSFWorkbook在带样式非空Excel单元格插入值报错如何解决?
问题解决方案
问题原因
代码中直接调用xSheet.createRow(5)会强制创建新行,覆盖原Excel中第5行已存在的样式(比如边框),导致SXSSF检测到原有样式范围被修改,从而输出提示。而空白工作表中没有原有行对象,所以不会触发这个问题。
修复代码
修改逻辑,优先复用已存在的行和单元格,而非直接创建:
public SXSSFWorkbook selectCalculateResultExcelValue(SXSSFWorkbook wb, Map<String, Object> searchParam) { SXSSFSheet xSheet = wb.getSheet("Sheet1"); String data = "JEJU"; // 先尝试获取已存在的行,不存在再创建 Row bodyRow = xSheet.getRow(5); if (bodyRow == null) { bodyRow = xSheet.createRow(5); } // 先尝试获取已存在的单元格,不存在再创建 Cell bodyCell = bodyRow.getCell(0); if (bodyCell == null) { bodyCell = bodyRow.createCell(0); } // 设置单元格值,保留原有样式 bodyCell.setCellValue(data); return wb; }
关键说明
- 复用已有行/单元格可以避免覆盖原有的样式对象,保留原Excel中的边框等格式,控制台的提示会消失。
- 这种方式完全兼容SXSSFWorkbook的大数据处理能力,另一张需要处理百万级数据的工作表不受任何影响。
内容的提问来源于stack exchange,提问作者yunju
相关产品推荐
相关产品推荐

