2

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時間から私がやろうとしていたことを助けてください。前もって感謝します!

4

2 に答える 2

6

行が空白になるケースは 2 つあります。

  1. まず、行は他の行の間にありますが、初期化または作成されることはありません。この場合、Sheet.getRow(i) は null になります。
  2. 次に、行が作成されました。そのセルは使用される場合と使用されない場合がありますが、現在はすべてのセルが空白になっています。この場合、Sheet.getRow(i) は null になりません( Sheet.getRow(i).getLastCellNum()を使用して確認できます。他の行と同じ数が常に表示されます。)

一般に、2 番目の条件が発生します。おそらくあなたの場合、それが理由であるはずです。このためには、すべてのセルが空白かどうかを確認する条件を追加する必要があります。

    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--;
        }
    }
于 2013-06-22T19:44:37.237 に答える
0

問題が発生している理由は正確にはわかりませんが、ワークブックへのアクセス方法が原因だと思います。file送信するファイルが、作業する XLS ワークブックの場所であると仮定しましょう。最初に確認する必要があるのは、既存のワークブックと存在しないワークブックの POI の処理が異なるため、そのワークブックが存在するかどうかです。それは次のように達成されます。

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 12 つの例外をスローします。したがって、必要に応じて、例外をスローするか、try-catch で囲みます。IOExceptionjava.io.IOExceptionInvalidFormatExceptionorg.apache.poi.openxml4j.exceptions.InvalidFormatException

ファイルが常に存在する場合、if-else ステートメントは実際には必要ありません。ただし、目的のワークブックを適切に開くには、WorkbookFactory.

最後に、次のように入力するだけで、ファイルの保存を簡素化できます。

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

保存したファイルも別の場所に書き込んでいることに注意してください。したがって、元のワークブックは変更されませんが、修正されたワークブックは別の場所にあります。

于 2013-06-22T17:59:06.600 に答える