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. 统计简单学_正态分布
  2. Atitit.导出excel报表的设计与实现java .net php 总
  3. python语言必背代码-让你的Python代码实现类型提示功能
  4. DirectX Shader 入门学习
  5. memcpy 头文件_C|memcpy()和memmove()的比较及实现
  6. python 百度词典_python在线抓取百度词典的翻译结果翻译单词
  7. 把男朋友变成儿子你只需要一秒
  8. 《小狗钱钱》:理财首先应该有一种强烈的意识
  9. c语言函数实际参数,C语言:函数声明与定义的参数不一致问题,后果可能很严重哦!!!!!...
  10. C++成员函数的重载、覆盖与隐藏
  11. android去除标题栏和状态栏(全屏)
  12. ACM图论、网络流题目总结
  13. 高级软件测试人员考核指标,软件测试人员绩效考核详细-20210406011350.docx-原创力文档...
  14. J2SE-Java帝国的诞生
  15. 2018-09-27工作日报
  16. mk突变点检测_科学网—从网上找的M-K突变检验的程序 - 张乐乐的博文
  17. 查询手机号的归属地及运营商接口(验证可用)
  18. 【React】Mobx
  19. Git学习笔记之三:Git 工作区、暂存区和版本库
  20. 黑苹果检测_苹果技术进行情绪检测

热门文章

  1. 【小程序】PCM音频录制播放小工具
  2. 更多体会,更多收获!(2015年终总结)
  3. error: insufficient permissions for device
  4. 统计Walden中单词出现的次数
  5. 这个神器,让 Python 爬虫如此简单
  6. 企业技术图纸管理系统,实现图纸管理的规范化、自动化
  7. 4个封神的电脑工具,颠覆你对免费白嫖的认知,干货奉上
  8. 开关电源各种拓扑鉴赏(持续更新)
  9. 【小卒ubuntu使用第六篇】ubuntu下如何搭建远程控制服务(包括命令行方式的ssh局域网搭建、和图形化界面的teamviewer和anydesk工具的安装使用)
  10. 打印直角三角型、等腰三角型、菱形