前些時間工作上有遇到客戶下載下來的xlsx報表檔案用Excel開啟會跳提示

在查了許久之後,發現是使用POI設定的儲存格樣式的問題,具體是這樣的:
首先POI會建立Workbook(xlsx檔案),而其中.createSheet()
、.createCellStyle()
、.createDataFormat()
等方法是針對建立的Workbook,是不能跨Workbook使用的,所以每次建新的Workbook的時候樣式之類的東西都需要重建一次,不過建過的樣式可以在同一份Excel文件內重複去套用。
簡單來說問題和解決方法就上面那樣,來說說當時是怎麼排查的好了。
xlsx檔案其實是可以用壓縮軟體開啟,每個Sheet路徑存放在xl/worksheets底下的xml檔,其中指定的樣式會在欄位<c>
裡面以s="xxx"
的方式指向特定ID的Style。也就是對應xl底下的styles.xml內的<cellXfs>
內的內容。
排查的時候便是把幾項可疑的內容依序移除看看會不會移除後就能正常開啟,結果在s="xxx"這項移除的時候就找到問題了,後續就回頭找到上面的問題與解法。