5

どのタイプのデータも持たない空の行を完全に削除したいと思います! 私はこれを次のようにやっています:

 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);
    int rowIndex = 0;
    int lastRowNum = sheet.getLastRowNum();

   if (rowIndex >= 0 && rowIndex < lastRowNum) {
   sheet.shiftRows(rowIndex, lastRowNum, 500);
   }

        FileOutputStream fileOut = new FileOutputStream("C:/juni.xls");
         wb.write(fileOut);
         fileOut.close();
    }
    catch(Exception e){
        System.out.print("SERRO "+e);
    }

}

shiftRows() の後、新しいファイルを書き込みます。しかし、私のコードは有効になりました。データ内にある空の行を削除/削除する必要があります(これまでに)。そうすることは可能ですか?はいの場合、私は正しくやっていますか?いいえの場合、誰かがそうするのを手伝ってくれませんか? 前もって感謝します!

4

2 に答える 2

11

メモリのリコールshiftRows(int startRow, int endRow, int n)が必要な場合。行が空かどうかを確認する方法はよく覚えていませんが、行が空であることを (通常は を使用してremoveRow(Row row)) 知っていて、rowIndex を知っていれば、それほど悪くはありません。次のように呼び出します。

int rowIndex; //Assume already known and this is the row you want to get rid of
int lastIndex = sheet.getLastRowNum();
sheet.shiftRows(rowIndex + 1, lastIndex, -1);

[rowIndex + 1, lastIndex] 内のすべての行を 1 ずつシフトします (これにより、空の行が効果的に削除されます)。複数の行があり、行が空かどうかを判断する方法がある場合は、次のようなことをお勧めします。

for(int i = 0; i < sheet.getLastRowNum(); i++){
    if(isEmpty(sheet.getRow(i)){
        sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
        i--;//Adjusts the sweep in accordance to a row removal
    }
}

boolean isEmpty(Row row){

//Code to determine if a row is empty

}

が負の場合nは、行が上にシフトします。nが正の場合、行は下にシフトします。そのため、提供されたコードでその行のチャンクを 500 だけ下にシフトするつもりだったのかどうかはよくわかりません。これが役立つことを願っています。

于 2013-06-22T04:31:22.047 に答える
3

メソッドの代わりにshiftRows。方法を試してくださいremoveRow

詳細については、こちらをご覧ください。

于 2013-06-22T01:59:34.127 に答える