190321 Apache POI
因要插入一行,在 shiftColumns 時會影響到 Merged Regions
而 XSSFSheet 針對 Merged Regions 所提供的方法只有 addMergedRegion, getMergedRegion, getMergedRegions, removeMergedRegion, removeMergedRegions
上面除了 addMergedRegion 給的是 CellRangeAddress 外,其餘的方法使用的都是 CellRangeAddress 的索引值。
但吊詭的是,當呼叫 removeMergedRegion 後,某些 CellRangeAddress 在整份 XSSFSheet 裡的索引值就變了。
這可傷腦筯了。
目前想到的方式如下
1. 用 getMergedRegions 取得所有 CellRangeAddress
2. 用 removeMergedRegion 依索引值由大至小移除 CellRangeAddress
3. shiftColumns
4. 修改 1. 中被影響到的 CellRangeAddress
5. addMergedRegion
希望上面的方法可行。
-----------------------------------------------------------------------------------------------
目前 1., 2. 執行沒有問題
但在 3. shiftColumns 後,在 Excel 中開啟程式處理後的檔案時,會出現修復警告。
修復後,可以發現,插入的那行沒有框線(原檔案有設框線)。
而且,如果有隱藏的行,也會影響到之後的格式。
先來解決隱藏行的問題。
* 從 0 開始到 max last col 如果為隱藏,則改為顯示。
shift 完後,再將原本的 Column 隱藏
(記得原本的 Column Index 要加 Shift 行數後再進行隱藏)
這樣做目前已無大礙。
再來處理 Excel 出現修復的問題。
目前處理方向是在向右 shift 後,進行 column 的 create。
而 XSSFSheet 針對 Merged Regions 所提供的方法只有 addMergedRegion, getMergedRegion, getMergedRegions, removeMergedRegion, removeMergedRegions
上面除了 addMergedRegion 給的是 CellRangeAddress 外,其餘的方法使用的都是 CellRangeAddress 的索引值。
但吊詭的是,當呼叫 removeMergedRegion 後,某些 CellRangeAddress 在整份 XSSFSheet 裡的索引值就變了。
這可傷腦筯了。
目前想到的方式如下
1. 用 getMergedRegions 取得所有 CellRangeAddress
2. 用 removeMergedRegion 依索引值由大至小移除 CellRangeAddress
3. shiftColumns
4. 修改 1. 中被影響到的 CellRangeAddress
5. addMergedRegion
希望上面的方法可行。
-----------------------------------------------------------------------------------------------
目前 1., 2. 執行沒有問題
但在 3. shiftColumns 後,在 Excel 中開啟程式處理後的檔案時,會出現修復警告。
修復後,可以發現,插入的那行沒有框線(原檔案有設框線)。
而且,如果有隱藏的行,也會影響到之後的格式。
先來解決隱藏行的問題。
* 從 0 開始到 max last col 如果為隱藏,則改為顯示。
shift 完後,再將原本的 Column 隱藏
(記得原本的 Column Index 要加 Shift 行數後再進行隱藏)
這樣做目前已無大礙。
再來處理 Excel 出現修復的問題。
目前處理方向是在向右 shift 後,進行 column 的 create。
留言
張貼留言