使用 Apache POI 删除 Excel 中的多行

Deleting multiple rows in Excel using Apache POI

我有一个 Excel sheet,table 有 75 行。 在第 76 行,我有每列 =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 行等效项,包括总计函数和图表)

我也试过了

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);
}

这些只会导致我的 sheet 因 #REF 错误而变得一团糟。我想我想要的可能无法通过 POI 实现,而且我需要实际构建整个 sheet 以获得所需的行数,然后添加图表。不过我想我会问!

到目前为止,我找到的最佳解决方案是简单地隐藏行。这样,大部分问题都解决了。

  1. Excel 图表向上移动
  2. Excel图表事实上只使用那些未隐藏的行(它忽略隐藏的行,所以这些隐藏的行不会产生大量"empty spaces" 在图表中)
  3. 总函数有效

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