使用 Apache POI HSSF 从 Excel 工作表中删除行

2022-09-01 11:46:22

我正在使用Apache POi HSSF库将信息导入我的应用程序。问题是文件有一些额外的/空行,在解析之前需要先删除这些行。

没有方法。只。这样做的问题是无法删除空行。例如:HSSFSheet.removeRow( int rowNum )removeRow( HSSFRow row )

sheet.removeRow( sheet.getRow(rowNum) );

在空行上给出一个 NullPointerException,因为返回 null。此外,正如我在论坛上阅读的那样,仅删除单元格内容,但该行仍作为空行存在。getRow()removeRow()

有没有办法删除行(空的或非空的),而不创建一个没有我要删除的行的全新工作表?


答案 1
 /**
 * Remove a row by its index
 * @param sheet a Excel sheet
 * @param rowIndex a 0 based index of removing row
 */
public static void removeRow(HSSFSheet sheet, int rowIndex) {
    int lastRowNum=sheet.getLastRowNum();
    if(rowIndex>=0&&rowIndex<lastRowNum){
        sheet.shiftRows(rowIndex+1,lastRowNum, -1);
    }
    if(rowIndex==lastRowNum){
        HSSFRow removingRow=sheet.getRow(rowIndex);
        if(removingRow!=null){
            sheet.removeRow(removingRow);
        }
    }
}

答案 2

我知道,这是一个3年前的问题,但我最近必须解决同样的问题,我必须用C#来做。这是我与NPOI一起使用的函数,.Net 4.0

    public static void DeleteRow(this ISheet sheet, IRow row)
    {
        sheet.RemoveRow(row);   // this only deletes all the cell values

        int rowIndex = row.RowNum;

        int lastRowNum = sheet.LastRowNum;

        if (rowIndex >= 0 && rowIndex < lastRowNum)
        {
            sheet.ShiftRows(rowIndex + 1, lastRowNum, -1);
        }
    }

推荐