Excel导出字符超长处理,The maximum length of cell contents (text) is 32767 characters 异常处理

Excel导出字符超长处理,The maximum length of cell contents (text) is 32767 characters 异常处理

  1. 异常信息
java.lang.IllegalArgumentException: The maximum length of cell contents (text) is 32767 characters
	at org.apache.poi.ss.usermodel.CellBase.checkLength(CellBase.java:309)
	at org.apache.poi.ss.usermodel.CellBase.setCellValue(CellBase.java:290)
	at com.alibaba.excel.write.executor.AbstractExcelWriteExecutor.converterAndSet(AbstractExcelWriteExecutor.java:86)
	at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addJavaObjectToExcel(ExcelWriteAddExecutor.java:174)
	at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addOneRowOfDataToExcel(ExcelWriteAddExecutor.java:82)
	at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.add(ExcelWriteAddExecutor.java:58)
	at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:59)
	at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:70)
	at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:47)
	at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:62)
  1. 产生原因
    org.apache.poi.ss.SpreadsheetVersion 中两个excel类型的字符长度设置为了32767。
    /**
     * Excel97 format aka BIFF8
     * <ul>
     * <li>The total number of available rows is 64k (2^16)</li>
     * <li>The total number of available columns is 256 (2^8)</li>
     * <li>The maximum number of arguments to a function is 30</li>
     * <li>Number of conditional format conditions on a cell is 3</li>
     * <li>Number of cell styles is 4000</li>
     * <li>Length of text cell contents is 32767</li>
     * </ul>
     */
    EXCEL97(0x10000, 0x0100, 30, 3, 4000, 32767),

    /**
     * Excel2007
     *
     * <ul>
     * <li>The total number of available rows is 1M (2^20)</li>
     * <li>The total number of available columns is 16K (2^14)</li>
     * <li>The maximum number of arguments to a function is 255</li>
     * <li>Number of conditional format conditions on a cell is unlimited
     * (actually limited by available memory in Excel)</li>
     * <li>Number of cell styles is 64000</li>
     * <li>Length of text cell contents is 32767</li>
     * <ul>
     */
    EXCEL2007(0x100000, 0x4000, 255, Integer.MAX_VALUE, 64000, 32767);
  1. 解决异常
    在导出或者在程序启动时修改 Length of text cell contents is 32767 参数,可以在每次导出时手动去修改,也可以在项目启动后实现CommandLineRunner 逻辑修改掉,这样的话每次在导出时就不需要手动进行修改。
    这里展示在程序启动后统一修改
@Component
public class ApplicationCommandLine implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        SpreadsheetVersion spreadsheetVersion = SpreadsheetVersion.EXCEL2007;
        Field maxTextLength = spreadsheetVersion.getClass().getDeclaredField("_maxTextLength");
        maxTextLength.setAccessible(true);
        maxTextLength.set(spreadsheetVersion, Integer.MAX_VALUE);
    }
}
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值