2015-04-01 699 views
2

我有一個包含75行的表格的Excel工作表。 在第76行我有各列=SUM(A1:A75)=SUM(B1:B75) 在第77到第92位的行我有一個Excel圖表這需要A1的總功能:A75和B1:B75爲值 Picture of Data and Total and Chart使用Apache POI在Excel中刪除多行

如果我使用Apache POI填充所有75行,然後一切看起來很棒。我使用XSSFWorkbook

如果我使用Apache POI來填充30行,那麼我想刪除31到75行。這是我遇到問題的地方。

被我刪除Excel中的這些行,那麼總的功能更新和Excel圖表更新使用A1:A30和B1:B30,和Excel圖表上移至排31

我想鏡像使用Apache POI

此行爲這就是我試圖

xlsTable.shiftRows(75,91,-45) 

(行75到91的Excel排Apache的行當量76至92和包括總功能和圖表)

我也曾嘗試

for (int i = 75; i > 30; i--) { 
    Row r = CellUtil.getRow(i, xlsTable); 
    xlsTable.removeRow(r); 
} 

for (int i = 30; i < 75; i) { 
    Row r = CellUtil.getRow(i, xlsTable); 
    xlsTable.removeRow(r); 
} 

這只是因爲我的表變得凌亂與#REF錯誤。我想象我所需要的POI不可能實現,而且我需要實際構建必要數量的行的整個工作表,然後添加圖表。但我想我會問!

+0

它是xls還是xlsx? – Jimmy 2015-04-01 15:16:02

+0

XSSFWorkbook - xlsx(我也更新了這個問題) – gordon613 2015-04-01 15:19:05

+0

你需要將其中的兩個組合起來。在此代碼中根據需要播放索引:'HSSFRow rowToRemove = sheet.getRow(currentRowIndex); \t \t \t sheet.shiftRows(currentRowIndex + 1,lastRowIndex,-1); \t \t \t sheet.removeRow(rowToRemove);' – Jimmy 2015-04-01 15:22:13

回答

0

迄今爲止發現的最佳解決方案是簡單地隱藏行。這樣,大部分問題都解決了。

  1. Excel圖表上移
  2. Excel圖表事實上只使用它們沒有隱藏的(它忽略隱藏行這些行,所以這些隱藏的行不創建圖表中廣大「空的空間」 )
  3. 的總體功能工作

爲了更精確,一個也可以分配命名範圍的列,然後設置爲使用這些命名區域圖表,然後使用代碼來更新指定範圍。但是隱藏行仍然是必要的。