使用Apache POI在Excel中删除多行

我有一个75行的表格的Excel工作表。 在第76行我有一个总和function的每个列=SUM(A1:A75)=SUM(B1:B75)在第77到第92行我有一个Excel图表,其中值为A1:A75和B1:B75 数据和总数和图表的图片

如果我使用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行76到92的Apache Row等价物,包括Total函数和图表)

我也试过了

 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,我需要实际build立我的整个工作表所需的行数,然后添加图表。 不过我想我会问!

迄今为止我find的最好的解决scheme是简单地隐藏行。 这样,大部分问题都解决了。

  1. Excel图表向上移动
  2. Excel图表事实上只使用那些未隐藏的行(它忽略隐藏的行,所以这些隐藏的行不会在图表中创build大量的“空白空间”)
  3. 总function工作

更确切地说,也可以为列指定命名范围,然后将图表设置为使用这些命名范围,然后使用代码更新命名范围。 但是隐藏行仍然是必要的。