如何删除/移除 Excel (XLS) 文件中的整行

问题描述 投票:0回答:1

我使用 LibreOffice 创建了一个 XLS 文件,我想使用 IntelliJ 操作它(使用 Java 20 和 Apache POI 5.2.3)。在 else 语句中(当未选择 checkbox4 时)我希望完全删除特定行。

这是部分代码:

if (box4.isSelected()) {
    Row rowSales = sheet.getRow(30);
    Cell cell4 = rowSales.getCell(0); //getting cell at row 31 - column A
    cell4.setCellValue(sales); //setting a given value
} else {
    Row rowSales = sheet.getRow(30);
    sheet.removeRow(rowSales);
}

编辑后的 Excel 工作表将导出到新的 Excel 文件中,其中文件的第 31 行为空白,但未删除。

通过使用“removeRow”命令,该行将被留空,而不是被删除/移除。

我已经尝试过“shiftRows”命令的替代方法,其中所有行都被移动到顶部一个位置,但这不适合我,因为它会弄乱格式(每行都有特定的格式)。

java apache-poi
1个回答
0
投票

Sheet.removeRow 的命名令人困惑。它仅从工作表中删除给定行中的所有单元格定义以及行定义本身。因此

Row rowSales = sheet.getRow(30); sheet.removeRow(rowSales);
从工作表中删除第 31 行的所有定义。但尽管如此,sheet 中的前一个行定义是第 30 行的行定义,后面的行定义是第 32 行的行定义。因此,如果渲染了sheet,则渲染了第 30 行,然后没有任何定义被渲染为第 31 行,然后是第 32 行。 32 被渲染。

如果第 31 行消失,则表中的第 32 行到最后一行必须向上移动一行。这就是 [Sheet.shiftRows]/https://poi.apache.org/components/spreadsheet/quick-guide.html#ShiftRows) 的用途。

如果

Sheet.shiftRows
不适合你,那么这是另一个问题,也需要另一个SO问题提供一个最小的、可重现的示例

© www.soinside.com 2019 - 2024. All rights reserved.