解決easyexcel合併單元格數組求和重複問題

背景

EasyExcel(根據條件動態合併單元格的重複數據))_Violet-CSDN博客_easyexcel動態合併單元格
現有的訂單導出是使用的easyExcel完成的.對於相同單元格的合併是自定義的策略,問題是對於重複單元格的值會合並,表格求和時值會虛高
excel
現需要對合並格做修改,做到值只有一個。

思路

sheet合併代碼主要爲: sheet.addMergedRegionUnsafe(cellRangeAddr);
問題是爲什麼合併單元格時會帶上原有的數據,猜測是刪除合併區域問題(removeMergedRegion)

關鍵代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 比較當前行單元格與上一行是否相同,相同合併當前單元格與上一行  
if (curData.equals(preData)) {

Sheet sheet = writeSheetHolder.getSheet();
List<CellRangeAddress\> mergeRegions = sheet.getMergedRegions();
boolean isMerged = false;
for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
CellRangeAddress cellRangeAddr = mergeRegions.get(i);
// 若上一個單元格已經被合併,則先移出原有的合併單元,再重新添加合併單元
if (cellRangeAddr.isInRange(curRowIndex \- 1, curColIndex)) {
sheet.removeMergedRegion(i);
cellRangeAddr.setLastRow(curRowIndex);
sheet.addMergedRegionUnsafe(cellRangeAddr);
isMerged = true;
}
}
// 若上一個單元格未被合併,則新增合併單元
if (!isMerged) {
CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex \- 1, curRowIndex, curColIndex, curColIndex);
sheet.addMergedRegionUnsafe(cellRangeAddress);
}
}
  1. 查看了有關問題解決方案:
  1. 猜測是刪除合併單元(removeMergedRegion)並沒有刪除包含的數據
  2. 準備一次合併所有相同單元格來實現
  3. 原有合併策略是根據行 列循環合併的,無法做到一次性合併,修改合併策略代價比較大,方案不可行。
  4. 通過寫Excel時,如果一列有合併單元格時,用excel對該列求和,會重複計算 · Issue #1673 · alibaba/easyexcel 知道,需要將中間值置空來解決
  5. 嘗試將合併cell 值設置爲空
  6. 將當前cell值設置爲空後,會導致無法觸發值相同的條件判斷,最多隻能合併兩行
  7. 修改合併條件判斷,當單元格不是第一列且當前單元格第一列與上一列值相同,且當前單元格與上一單元格相同或 上一單元格爲空時,值設置空.
  8. 測試可行 已解決 excel

解決代碼:

 
1
2
3
4
5
6
7
// 比較當前行單元格與上一行是否相同,相同合併當前單元格與上一行 //重複值處理  
if (curData.equals(preData) || preCell.getCellTypeEnum().equals(CellType.BLANK)) {
//當前單元格不在第一列 值設置空
if (curColIndex != 0){
cell.setCellType(CellType.BLANK);
}
...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章