当前位置: 首页 > 面试题库 >

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

白烨煜
2023-03-14
问题内容

我一直在尝试删除我的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--;
        }
    }


 类似资料:
  • 问题内容: 尝试使用ApachePOI打开Excel时,我得到 我检查了。没有创建这样的文件夹。我正在使用Apache POI 3.6版。 有什么帮助吗?类似的代码在其他工作区中运行良好。在这里不知所措。 码: 问题答案: 您为什么要制作一个非常好的文件,将其包装在中,然后要求POI必须为您缓冲整个文件,以便可以进行随机访问?如果直接将文件直接传递给POI,生活会好很多,因此可以根据需要跳过它!

  • 用户可以将Excel文档保存为. xls或xml-table。结果是一个具有固定结构的xml-file,Excel可以用它纠正工作。 可以用java中的ApachePOI打开这种类型的excel文件吗? 事先谢谢你,安德烈。

  • 我有一个有3000行的excel文件。我删除了2000(用ms excel应用程序),但是当我从代码中调用sheet.getLastRowNum()时,它给我3000(而不是1000)...我如何删除空白行? 我尝试从这里的代码,但它不工作......

  • 问题内容: 现在已经苦了两天,只是不能删除文件 在这里,我将放置将进行测试的代码,希望有人可以指出我做错了的事情,以及已经尝试过的事情: 将Lucene版本从更新为 使用代替 特林的配置为或 这里的代码: 首先将在中生成索引,并 显示将成功查询该索引,然后希望删除该文档,但再次将证明删除操作失败。 这是pom依赖关系,以防有人可能需要测试 渴望得到答案。 问题答案: 您的问题出在分析仪中。将标记定

  • 我无法使用ApachePOI删除docx文件中的所有注释。有没有其他方法可以使用docx4j api删除注释?

  • 我正在使用Poi.jar从excel表输入,想知道如何检查单元格是否为空。 现在我使用下面的代码。