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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章