如何使用POI删除工作表之间的空白行?

时间:2012-09-12 06:00:41

标签: java excel apache-poi

我想使用POI从Excel工作表中删除空白行。

我们有像shiftRow()removeRow()这样的方法,但不能使用它 在这种情况下。请帮我完成它。

4 个答案:

答案 0 :(得分:4)

请尝试以下代码。当存在多个连续的空白行时,它也适用于我。

    for(int i = 0; i < sheet.getLastRowNum(); i++){
        if(sheet.getRow(i)==null){
            isRowEmpty=true;
            sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
            i--;
        continue;
        }
        for(int j =0; j<sheet.getRow(i).getLastCellNum();j++){
            if(sheet.getRow(i).getCell(j).toString().trim().equals("")){
                isRowEmpty=true;
            }else {
                isRowEmpty=false;
                break;
            }
        }
        if(isRowEmpty==true){
            sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
            i--;
        }
    }

答案 1 :(得分:0)

虽然没有经过测试,但试试这个:

HSSFSheet sheet = workBook.getSheetAt(0);
HSSFRow row = sheet.getRow(0);
sheet.removeRow(row);

答案 2 :(得分:0)

这是一种在删除被视为非空白行的行时打破单元格读取的方法

while(cellsIterator.hasNext()) {
                Cell currentCell = cellsIterator.next();

                if(currentCell.getCellType() == Cell.CELL_TYPE_BLANK) {
                    this.currentArraySheet.put("Headers",this.currentArraySheetHeaders);
                    this.currentArraySheet.put("Rows",this.currentArraySheetRows);
                    return;
                }

                if (currentCell.getCellTypeEnum() == CellType.STRING) {
                    System.out.print(currentCell.getStringCellValue() + " | ");
                } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
                    System.out.print(currentCell.getNumericCellValue() + "| ");
                } else if (currentCell.getCellTypeEnum() == CellType.BOOLEAN) {
                    System.out.println(currentCell.getBooleanCellValue() + " | ");
                }
}

答案 3 :(得分:0)

更改为@Sankumarsingh代码以使其工作

@Sankumarsingh代码对我不起作用,因为它没有删除空的第一行。解决此问题的方法是:

private void removeEmptyRows(XSSFSheet sheet) {
    Boolean isRowEmpty = Boolean.FALSE;
    for(int i = 0; i <= sheet.getLastRowNum(); i++){
      if(sheet.getRow(i)==null){
        isRowEmpty=true;
        sheet.shiftRows(i + 1, sheet.getLastRowNum()+1, -1);
        i--;
        continue;
      }
      for(int j =0; j<sheet.getRow(i).getLastCellNum();j++){
        if(sheet.getRow(i).getCell(j) == null || 
        sheet.getRow(i).getCell(j).toString().trim().equals("")){
          isRowEmpty=true;
        }else {
          isRowEmpty=false;
          break;
        }
      }
      if(isRowEmpty==true){
        sheet.shiftRows(i + 1, sheet.getLastRowNum()+1, -1);
        i--;
      }
    }
  }