删除包含特定字符串的多个行

时间:2013-06-21 15:12:54

标签: java excel apache-poi

我一直在尝试开发一个可以删除包含特定字符串“POST”的多行的代码。我一直这样做:

 private void processExcelFile(File f_path){
    File path=f_path;
    HSSFWorkbook wb = null;
    try{   
        FileInputStream is=new FileInputStream(path);

        wb= new HSSFWorkbook(is);
        HSSFSheet sheet = wb.getSheetAt(0);
        int j = 0;

        for(Row row: sheet){
           for(Cell cell : row){
               count++;
                   if (cell.getCellType() == Cell.CELL_TYPE_STRING){
                       if (cell.getRichStringCellValue().getString().trim().contains("POST")){
                           rowcount_post=row.getRowNum();
                           System.out.print("ROW COUNT= "+rowcount_post);
                           HSSFRow removingRow = sheet.getRow(rowcount_post);

                           if (removingRow != null) {
                               sheet.removeRow(removingRow);
                           }
                       }
                   }
               }
           }
       } catch(Exception e){
           JOptionPane.showMessageDialog(this,e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
       }

       try{
           FileOutputStream fileOut = new FileOutputStream("C:/juni.xls");
           wb.write(fileOut);
       } catch(Exception e) {
           JOptionPane.showMessageDialog(this,e.getMessage(),"SAVE Error",JOptionPane.ERROR_MESSAGE);
       }
   }

事实上,它一次只删除一行。是否有可能删除包含String POST的所有行?

2 个答案:

答案 0 :(得分:1)

为什么一次删除一个有问题?它看起来效率不高......

无论如何,我很确定你仍然需要遍历每个单元格以查看它是否包含“POST”。 如果您有一个问题,一次只删除一行,您可以在数组中保存要删除的行的索引;然后使用该数组删除已保存的行。

答案 1 :(得分:1)

您一次删除一个原因是因为您一次只能找到一个。正如另一张海报所提到的,你可以通过你的程序跟踪位置(无论是在这个循环中),但这不会使它在算法上有效(除非你在其他地方跟踪它并将该信息传递给它法)。

我不太熟悉在Java中使用Excel文件,但这些似乎是一种可行的方法。