使用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循环中。

 

原文地址:https://www.cnblogs.com/timeout/p/11988376.html