EasyExcel单元格数据超过32767报错问题处理

EasyExcel描述

EasyExcel是一款基于Java的简单、省内存的读写Excel的开源项目。官网。使用起来确实比较方便,但是对于一些比较复杂的场景,比如多单元格,现在的版本兼容不是很好,不过效率和使用上确实体验还可以。

问题描述

不过今天在做一个数据量很大的Excel表导出的时候,遇到一个异常,这个字段数据量太多了,导出时候直接抛出如下异常:

IllegalArgumentException: The maximum length of cell contents (text) is 32,767 characters

看起来好像是超过框架限制了

在poi3.7.1版本找到代码org.apache.poi.hssf.usermodel.HSSFCell#setCellValue(org.apache.poi.ss.usermodel.RichTextString)

public void setCellValue(RichTextString value){int row=_record.getRow();short col=_record.getColumn();short styleIndex=_record.getXFIndex();if (value == null){notifyFormulaChanging();setCellType(CellType.BLANK, false, row, col, styleIndex);return;}if(value.length() > SpreadsheetVersion.EXCEL97.getMaxTextLength()){throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters");}if (_cellType == CellType.FORMULA) {// Set the 'pre-evaluated result' for the formula// note - formulas do not preserve text formatting.FormulaRecordAggregate fr = (FormulaRecordAggregate) _record;fr.setCachedStringResult(value.getString());// Update our local cache to the un-formatted version_stringValue = new HSSFRichTextString(value.getString());// All donereturn;}// If we get here, we're not dealing with a formula,//  so handle things as a normal rich text cellif (_cellType != CellType.STRING) {setCellType(CellType.STRING, false, row, col, styleIndex);}int index = 0;HSSFRichTextString hvalue = (HSSFRichTextString) value;UnicodeString str = hvalue.getUnicodeString();index = _book.getWorkbook().addSSTString(str);(( LabelSSTRecord ) _record).setSSTIndex(index);_stringValue = hvalue;_stringValue.setWorkbookReferences(_book.getWorkbook(), (( LabelSSTRecord ) _record));_stringValue.setUnicodeString(_book.getWorkbook().getSSTString(index));}

解决方法

在网上搜索,整理一下两种处理方法:

  • 复制org.apache.poi.ss.SpreadsheetVersion代码到项目里,包路径这些不能修改,然后找到EXCEL2007(0x100000, 0x4000, 255, Integer.MAX_VALUE, 64000, 32767);,修改最后面的值,可以修改为Integer.MAX_VALUE
  • 通过反射机制修改
public static void resetCellMaxTextLength() {SpreadsheetVersion excel2007 = SpreadsheetVersion.EXCEL2007;if (Integer.MAX_VALUE != excel2007.getMaxTextLength()) {Field field;try {// SpreadsheetVersion.EXCEL2007的_maxTextLength变量 field = excel2007.getClass().getDeclaredField("_maxTextLength");// 关闭反射机制的安全检查,可以提高性能field.setAccessible(true);// 重新设置这个变量属性值field.set(excel2007,Integer.MAX_VALUE);} catch (Exception e) {e.printStackTrace();}}
}

参考资料

  • https://www.jianshu.com/p/9e73399b6c38
  • https://blog.csdn.net/yandype/article/details/122718307

EasyExcel单元格数据超过32767报错问题处理相关推荐

  1. Excel单元格数据超过32767报错问题处理

    Excel单元格数据超过32767报错问题处理 EasyExcel描述 EasyExcel是一款基于Java的简单.省内存的读写Excel的开源项目.官网.使用起来确实比较方便,但是对于一些比较复杂的 ...

  2. EasyExcel 实现单元格数据下拉选

    EasyExcel 实现单元格数据下拉选 前言 easyExcel导出模板的时候,固定的某个列我们有固定的是选项值的时候,我们需要将excel的单元格做成下拉选的情况:满足实际的业务需求. 实现 1. ...

  3. easyexcel导出excel文件合并相同单元格数据

    1.引入easyexcel依赖 !-- 阿里开源easyexcel--><dependency><groupId>com.alibaba</groupId>& ...

  4. easyexcel处理合并单元格数据

    一.背景 一次工作任务是要解析excel数据,采用阿里的 easyexcel 工具进行解析,由于表格有合并单元格,但是 easyexcel 读取合并单元格只会读取一次,导致下面单元格数据为空,这样会影 ...

  5. easyexcel读取excel合并单元格数据

    普通的excel列表,easyexcel读取是没有什么问题的.但是,如果有合并单元格,那么它读取的时候,能获取数据,但是数据是不完整的.如下所示的单元格数据: 我们通过简单的异步读取,最后查看数据内容 ...

  6. POI 操作Excel的单元格样式超过64000的异常问题解决

    文章目录 POI 操作Excel的单元格样式超过64000的异常问题解决 问题描述 问题原因 问题分析和解决 简单的Excel文件生成Demo 最终的解决方案 POI 操作Excel的单元格样式超过6 ...

  7. 如何读取Excel表格中不同sheet表的同一位置单元格数据,并绘制条形图呢?

    作者 | 黄伟呢 来源 | 数据分析与统计学之美 今天,有位朋友在群里面咨询了一个问题:如何读取Excel表格中"不同sheet表"的同一位置单元格数据,并绘制条形图呢? 有人提议 ...

  8. c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据

    批量对单元格区域内每个单元格中的数据按照一定的规则进行拆分是职场工作中经常碰到的操作.Excel数据选项卡中"分列"提供了基础的功能.能帮助用户通过鼠标快速分列数据. 本篇< ...

  9. 高效便捷地创建单元格数据图表

    您能想象折线图.柱状图这些图表被放在一个小小的单元格中的样子吗?Excel 2010的迷你图功能为您提供了这样的便捷体验,让您高效便捷地创建单元格数据图表! 1.打开您想要创建迷你图的Excel工作簿 ...

最新文章

  1. SQL基础学习总结:3(select语句基础算术运算符比较运算符)
  2. 马斯克因何财报会议怒爆粗口?明明是史上最佳Q1业绩,股价还一度大涨10%
  3. apache的日志级别和设置
  4. python自学时间-学习Python、Python时间操作有哪些?
  5. HTML5与HTML4的区别
  6. 【抽奖直播】今日16:30,云信特邀部长大人给你抽6s!
  7. yapi 事件创建、修改等接口事件监听
  8. iPhone开发 调用阿asp.net程序的webservice
  9. Docker快速入门实践-纯干货文章
  10. 红黑树 键值_Java集合框架:红黑树概念、插入及旋转操作详细解读就问你会不会...
  11. likely() 和 unlikely()内建宏定义函数
  12. oracle的LAG和LEAD分析函数
  13. python成功之路,Day1-发展历史
  14. 更改自身web项目的图标(默认为tomcat的小喵咪)
  15. 中国数据量占全球27.8%!安防能否借机“回血”?
  16. Android Animation动画详解(二): 组合动画特效
  17. 每周一品 · 磁选机中的磁性材料
  18. [关键字]volatile
  19. Altera 逻辑锁定
  20. Visual Studio 2019 (VS2019)安装Spy++工具

热门文章

  1. Python小白数据可视化教程:PyEcharts 精讲
  2. 耳机线,绿色,红色,怎么插?主板上为什么有三个口。真的服了,这种弱智设计。
  3. 关于冒用Adobe Certified Professional 相关品牌的严正声明
  4. Umi-OCR,可离线使用的OCR识别工具
  5. openSUSE 截图快捷键配置
  6. 创建一个学生管理系统数据库_建立一个问答系统
  7. 前台商品条码效验算法
  8. 大掌门手游外挂(大掌门代练助手)
  9. 两两交换链表中的结点
  10. 修理堵头的3d打印机