繁体   English   中英

无法使用Apache POI删除排空Excel文件

[英]Unable to delete the Empty Rows Excel File using Apache POI

我一直在尝试删除我的excel文件中的空行的代码! 我的代码是:

private void shift(File f){
    File F=f;
    HSSFWorkbook wb = null;
    HSSFSheet sheet=null;
    try{
        FileInputStream is=new FileInputStream(F);

         wb= new HSSFWorkbook(is);
         sheet = wb.getSheetAt(0);
         for(int i = 0; i < sheet.getLastRowNum(); i++){
if(sheet.getRow(i)==null){
    sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
    i--;
}
}

FileOutputStream fileOut = new FileOutputStream("C:/juni1.xls");
wb.write(fileOut);
fileOut.close();
        //Here I want to write the new update file without empty rows! 
    }
    catch(Exception e){
        System.out.print("SERRO "+e);
    }

}

该代码完全无效。 任何人都可以告诉我问题是什么,请帮助我,自最近10个小时以来,我一直在尝试做这件事。 提前致谢!

当任何行为空白时,将有两种情况。

  1. 首先,该行位于其他行之间,但从不初始化或创建。 在这种情况下, Sheet.getRow(i)将为null。
  2. 其次,行已创建,其单元格可能会或可能不会被使用,但现在其所有单元格都为空白。 在这种情况下, Sheet.getRow(i)不会为null (您可以使用Sheet.getRow(i).getLastCellNum()进行检查,它始终会向您显示与其他行相同的计数。)

通常,第二种情况会发生。 也许就您而言,这应该是原因。 为此,您需要添加其他条件以检查所有单元格是否为空白。

    for(int i = 0; i < sheet.getLastRowNum(); i++){
        if(sheet.getRow(i)==null){
            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--;
        }
    }

好的,我不确定您为什么会有问题,但是我认为这是由于您访问工作簿的方式所致。 假设您向下发送的file是您要使用的XLS工作簿的位置。 您需要检查的第一件事是该工作簿是否存在,因为POI对现有v不存在的工作簿的处理方式是不同的。 这样完成:

HSSFWorkbook wb;
HSSFSheet sheet;
if(file.exists()) {//The workbook has been created already
    wb = (HSSFWorkbook) WorkbookFactory.create(new FileInputStream(file));//Line 1
    sheet = wb.getSheetAt(0);
} else {//No workbook exists at the location the "file" specifies
    wb = new HSSFWorkbook();
    sheet = wb.createSheet();
}

一些注意事项: Line 1抛出java.io.IOException 2个异常IOExceptionorg.apache.poi.openxml4j.exceptions.InvalidFormatException InvalidFormatException 因此,您可以根据需要抛出异常或用try-catch包围。

现在,如果文件始终存在,则实际上不需要if-else语句。 但是,要正确打开所需的工作簿,我将使用WorkbookFactory

最后,您只需输入以下内容即可简化文件保存:

wb.write(new FileOutputStream("C:/juni1.xls");

请注意,您还将保存的文件写入其他位置。 因此,在更正后的原始工作簿位于其他位置时,原始工作簿不会受到影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM