Apache POI写入短横线至单元格超255字符报错问题咨询
解决Apache POI HSSF写入超长纯特殊字符单元格无法读取的问题
这个问题我之前也碰到过,本质是Apache POI对HSSF(.xls格式)单元格文本存储的自动判断逻辑导致的,咱们一步步拆解:
核心原因:HSSF的两种文本存储模式
HSSF格式的单元格存储文本有两种模式:
- 普通文本:最多支持255个字符,是POI对部分简单文本的默认存储方式
- 富文本(RichTextString):最多支持32767个字符,也就是
wb.getSpreadsheetVersion().getMaxTextLength()返回的数值
你遇到的问题是:当写入纯重复的“-”字符时,POI的自动判断逻辑认为这是可以用普通文本存储的内容,所以触发了255字符的限制;而手动在Excel里写入超长“-”时,Excel会自动切换到富文本模式,所以没有报错;至于用“”时程序正常,是因为POI对“”的判断逻辑不同,自动用了富文本存储。
解决办法:强制使用富文本存储
只需要修改设置单元格值的代码,手动指定用HSSFRichTextString来封装超长文本,就能绕过普通文本的255字符限制:
Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet("Test"); int maxLength = wb.getSpreadsheetVersion().getMaxTextLength(); for (int idx = 0; idx < 5; idx++) { Row row = sheet.createRow(idx); Cell cell = row.createCell(0); // 手动用富文本封装超长字符串 String longText = StringUtils.repeat("-", maxLength); cell.setCellValue(new HSSFRichTextString(longText)); } FileOutputStream out = new FileOutputStream("test.xls"); wb.write(out); out.close(); wb.close();
这样修改后,生成的.xls文件就能正常打开读取,和你手动在Excel里操作的行为一致。
内容的提问来源于stack exchange,提问作者brecht-d-m
相关产品推荐
相关产品推荐

