You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:27:57