excel导出时报样式不能超过4000的解决方案

  • 问题描述
    • 问题原因
    • 解决方法

问题描述

之前写了一个导出excel的功能,但是今天在使用时,由于数据量比较大导致报错 报错如下:
Caused by: java.lang.IllegalStateException: The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook

问题原因

我们通过 CellStyle contextstyle = wb.createCellStyle();来获取单元格样式,但是将这个方法放到for循环里时,创建的单元格样式超过了4000个就会报错。

解决方法

思考了一下,基本上在导出excel时单元格的样式肯定不会很多,所以我们在自定义单元格样式的时候无需每次去创建一个单元格样式,我们可以创建一个缓存,将之前没有出现过的样式放到缓存里,在为下一个单元格定义样式的时候首先从缓存里查一下,如果没有再创建新的样式。

我们将代码用键值对的方式放到map里作为缓存,先用key到map里匹配没有的话再创建新的。

修改前的代码:

private CellStyle getCellDataStyle(CellStyle contextstyle,DataFormat df, String dataType) {if (DATA_TYPE_NUM.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("#,##0"));}else if (DATA_TYPE_MONEY.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("#,##0.00"));}else if (DATA_TYPE_PER.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("0.00%"));}else if (DATA_TYPE_DATE.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("yyyy-MM-dd"));}else if (DATA_TYPE_TIME.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("yyyy-MM-dd hh:mm:ss"));}return contextstyle;}```
修改后的代码:private CellStyle getCellDataStyleFromCache(DataFormat df, String dataType,Map<String,CellStyle> contextstyleCache,Workbook wb) {if(contextstyleCache.containsKey(dataType)){return contextstyleCache.get(dataType);}else{CellStyle contextstyle = wb.createCellStyle();if (DATA_TYPE_NUM.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("#,##0.00"));}else if (DATA_TYPE_MONEY.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("#,##0.00"));}else if (DATA_TYPE_PER.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("0.00%"));}else if (DATA_TYPE_DATE.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("yyyy-MM-dd"));}else if (DATA_TYPE_TIME.equals(dataType)) {contextstyle.setDataFormat(df.getFormat("yyyy-MM-dd hh:mm:ss"));}contextstyleCache.put(dataType,contextstyle);return contextstyle;}}

对与excel导出时报样式不能超过四千的解决方案相关推荐

  1. golang excel导出 style样式和所有流程

    先抛出两个站: Excelize 官方文档:https://xuri.me/excelize/zh-hans/ RGB颜色表: https://www.114la.com/other/rgb.htm ...

  2. 纯前端excel导出

    文章目录 背景 技术选型 1.xlsx(`不满足`) 2.xlsx-style(`不推荐,后期问题太多`) 3.lay-excel(`推荐`) 一.准备内容数据 二.准备表头数据 三.认识lay-ex ...

  3. easyPoi导出excel工具类和设置excel导出样式(边框,背景色,字体)

    如有疑问可加easypoi官方群,QQ群号码: 116844390 引入依赖,此样式基于springboot版本.依赖版本如下(maven):<dependency><groupId ...

  4. vue3+vite项目使用xlsx+xlsx-style+file-saver导出带有样式的excel表格方法

    基于vue3+vite的项目实现导出带有样式的excel表格,框架用的是vben,所以表格用的是ant的table组件数据源,如果用原生表格需要用到备注的另外方法. 首先需要下载xlsx.xlsx-s ...

  5. XLSX实现导出带样式的Excel表格的坑

    XLSX导出带样式的Excel表格失败 导入XLSX xlsx-style的使用 项目的要求,需要导出一个结果到Excel表格中,因为所以,没有用Java的方式去实现,而选择了Vue前端直接导出的方式 ...

  6. PHP excel导出(自定义样式,行高,合并单元格等)

    PHP 导出多个sheet 或者导出带样式的excel 修改样式方式见下文 具体使用需要根据具体业务进行一些调整和封装 $PHPExcel = new \PHPExcel(); $sheetIndex ...

  7. Oracle EBS 导出EXCEL文件CSS样式应用

    Oracle EBS 导出EXCEL文件CSS样式应用 在css中加入:mso-number-format定义数据格式,格式可以在excel中查看自定义格式,具体可以参考一下: mso-number- ...

  8. pandas导出excel表格时报错:ValueError: No engine for filetype: ‘‘

    pandas导出excel表格时报错:ValueError: No engine for filetype: '' pandas导出表格时报错 解决办法 pandas导出表格时报错 raise Val ...

  9. Java Excel导出复杂excel表格样式之ExcelUtil工具类

    Java Excel导出包括普通导出及复杂表格样式,主要是对于需要进行行列合并的列进行特殊处理,计算清楚起始行,结束行,起始列,结束列. 普通导出可以是所有列,也可以是包含某些列,或者排除某些列: 1 ...

最新文章

  1. 关于 Git 提交这些规范,你都遵守了吗?
  2. matlab学习(二)
  3. vue——去除白色边框
  4. php word com,php 展示word
  5. Spark 广播变量 TorrentBroadcast
  6. 难道是我洞悉了CSDN网站订阅专栏收益的秘密?带你看看网站专栏一天营收几何?
  7. html小米秒杀倒计时,JavaScript_JQuery仿小米手机抢购页面倒计时效果,1、效果及功能说明 通过对时 - phpStudy...
  8. vue+高德地图 点击地图获取经纬度和详细地址
  9. sklearn.utils.Bunch的属性
  10. 大乐斗2服务器维护,腾讯《QQ宠物》、《乐斗Ⅱ》正式停止运营
  11. 5.5.JMeter中调度器起作用(需要循环次数设置成永远)
  12. Java实现 LeetCode 321 拼接最大数
  13. 698. 划分为k个相等的子集:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。
  14. 【Spring源码】ClassPathResource 资源文件源码分析
  15. windows色彩管理工具
  16. ifup,ifdown命令详解
  17. React 模拟点击事件
  18. Java环境变量配置超详细教程
  19. vue父组件中调用子组件中的方法 及vue父组件调用孙子组件的方法
  20. 亿图AI助手一键生成思维导图,捕捉万千灵感,快速出彩!

热门文章

  1. 手把手教会你:VMware Esxi系统安装步骤(版本7.0.3)
  2. WinSock2网络通信(win32编程)
  3. 虚拟机开机报错:“Could not initialize plugin ‘/usr/lib64/vmware/plugin/libnvidia-vgx.so‘ for vGPU “
  4. z世代消费力白皮书_从需求端出发,仪玳用“新奇特”抓住Z世代
  5. 【某区护网】从外网打点到拿下域控
  6. 从追赶到超越,中国开源正在蜕变!
  7. “应该为在运行时可能编辑的任何文本嵌入字体,具有”使用设备字体”设置的文本除外。使用”文本” “字体嵌入”命令嵌入字体。”
  8. java基础-Idea开发工具介绍
  9. java 虚拟机 xms,堆内存分配: -Xms 256m -千热网Xmx 256m JVM初始分配的内存由-Xms指定...
  10. 【ROS笔记本】ros::Rate loop_rate( ) loop_rate.sleep()