使用jxl.write做Excel数据导出时,格式化报错:Maximum number of format records exceeded. Using default format

Posted timeout

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jxl.write做Excel数据导出时,格式化报错:Maximum number of format records exceeded. Using default format相关的知识,希望对你有一定的参考价值。

  不想看分析的,直接看最后的总结。

  根据需求导出的数据,需要作格式化处理,如果数据为数字类型,则需要格式化。代码如下:

技术图片

  但是得到的效果并不让人满意,看下图Excel截图,敏感信息未截取:

技术图片

 

  然后看控制台报警告:

  Warning:  Maximum number of format records exceeded.  Using default format.

  百度到的基本指向一个方法,那就是改jxl的源码,修改最大值,链接是:https://blog.csdn.net/Dracotianlong/article/details/8928434 (ps:百度到的都是这个,不知道谁抄谁的。。。)

但是这个解决方法对于后续的维护极其不好,修改第三方的源码啊。。。

  后来没办法,只能去stackoverflow找答案了,答案没找到,找到了产生这个的原因:参考如下:https://stackoverflow.com/questions/4182782/jxl-and-maximum-number-of-formatted-cells

翻译摘录如下:

您如何创建CellFormat对象?

您要做的是确保您正在重用CellFormat对象,而不是在某个地方的循环中重新创建它们。

除非您确实有350个单元格,每个单元格具有不同的格式。否则,创建一个CellFormat对象并将其传递到中setCellFormat

从上面看,可以看出我们在不断的重新创建新的CellFormat对象,超过了jxl的最大值,回过头再看代码,发现确实有个for循环,重复创建。

如图,有一个循环,肯定超过100的,所以有警告。(ps:图片的代码是已经修改好了的)

技术图片

 

  总结:产生该警告的原因是因为,重复创建CellFormat的对象,超过了jxl设定的最大值100,所以这里我们要看我们的单元格是不是每一个都需要一个特定的格式,如果不需要则可以重复使用,创建的第一个对象,而不是重复创建。当然你本来想重复使用第一个CellFormat对象,但是一不小心重复创建了,那就要看是不是代码错误,跟我一样犯错了,将创建格式的代码放在了for循环中。

 

以上是关于使用jxl.write做Excel数据导出时,格式化报错:Maximum number of format records exceeded. Using default format的主要内容,如果未能解决你的问题,请参考以下文章

java中导出excel设置单元格的样式为数字格式怎么设置?

nodejs+express使用ejsexcel做复杂导出Excel

导出到 Excel 时将所有数据格式化为文本(非通用)

使用Apache POI导出Excel小结--导出XLS格式文档

为啥将数据导出到 Excel 时日期格式会发生变化?

POI框架实战——POI导出Excel时设置单元格类型为数值类型