2017-09-28 21 views
0

私のような他の質問を読んだことがありますが、私の行が削除されないので何かが恋しいです...多くの試行の後に次のコードになりました..最初のJava POI以外のすべての行を削除します

私はすべてのエラーを得ることはありませんが、どれも行が削除される

//... 
FileInputStream file = new FileInputStream(new File("E:\\products.xls")); 
HSSFWorkbook workbook = new HSSFWorkbook(file); 
HSSFSheet sheet = workbook.getSheetAt(0); 

for(int i=1; i<= sheet.getLastRowNum(); i++){ 
    Row row = sheet.getRow(i); 
    deleteRow(sheet, row); 
} 

file.close(); 
FileOutputStream outFile = new FileOutputStream(new File("E:\\products.xls")); 
workbook.write(outFile); 
outFile.close(); 
//... 


//The delete method... 
private void deleteRow(HSSFSheet sheet, Row row) { 
    int lastRowNum = sheet.getLastRowNum(); 
    int rowIndex = row.getRowNum(); 
    if(rowIndex >= 0 && rowIndex < lastRowNum){ 
     sheet.shiftRows(rowIndex + 1, lastRowNum, -1); 
    } 
    if(rowIndex == lastRowNum){ 
     Row removingRow = sheet.getRow(rowIndex); 
     if(removingRow != null){ 
      sheet.removeRow(removingRow); 
      System.out.println("Deleting.... "); 
     } 
    } 
} 

...カウンターは1から始まる理由です、第一行以外のすべての行を削除したいです。

UPDATE

あなたは、私は、ファイルを保存していなかった、後述するように...私は今、私はそれを保存する場所を上記のコードを更新しました!しかし、私の行の一部が削除され、それらのすべてではありません... 何が起こっているのですか?

答えて

2

Yuorコードは一つだけでは不足している、完璧に動作します:結果をファイルに書き込む...

wb.write(new FileOutputStream(new File("E:\\products.xls"))); 

完全な作業例:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.Row; 


public class Main { 

    public Main() { 
     // TODO Auto-generated constructor stub 
    } 

    public static void main(String[] args) throws IOException { 
     FileInputStream file = null; 
     HSSFWorkbook wb = null; 
     FileOutputStream out = null; 
    try{ 
     file = new FileInputStream(new File("E:\\products.xls")); 

     wb = new HSSFWorkbook(file); 
     HSSFSheet sheet = wb.getSheetAt(0); 

     for(int i=1; i<= sheet.getLastRowNum(); i++){ 
      Row row = sheet.getRow(i); 
      deleteRow(sheet, row); 
     } 

     out = new FileOutputStream(new File("E:\\products.xls")); 
     wb.write(out); 


    } 
    catch(Exception e){} 
    finally{ 
     if(file!=null) 
     file.close(); 
     if(out!=null) 
     out.close(); 
     if(wb!=null) 
     wb.close(); 
    } 

    } 
     public static void deleteRow(HSSFSheet sheet, Row row) { 
      int lastRowNum = sheet.getLastRowNum(); 
      int rowIndex = row.getRowNum(); 
      if(rowIndex >= 0 && rowIndex < lastRowNum){ 
       sheet.shiftRows(rowIndex + 1, lastRowNum, -1); 
      } 
      if(rowIndex == lastRowNum){ 
       Row removingRow = sheet.getRow(rowIndex); 
       if(removingRow != null){ 
        sheet.removeRow(removingRow); 
        System.out.println("Deleting.... "); 
       }  
     } 
    } 

} 

あなたのコードのようbeavhiourで唯一の問題そのあなたはメソッドのdeleteRow(..)から期待していない私は、このようにあなたの方法を変更:

public static void deleteRow(HSSFSheet sheet, Row row) { 
      int lastRowNum = sheet.getLastRowNum();  
      if(lastRowNum !=0 && lastRowNum >0){ 
       int rowIndex = row.getRowNum(); 
       Row removingRow = sheet.getRow(rowIndex); 
       if(removingRow != null){ 
        sheet.removeRow(removingRow); 
        System.out.println("Deleting.... "); 
       }  
     } 
    } 

ファイルに行が1つしかない場合は、削除しません。それ以上あれば、最初の行を除くすべての行を削除します。

+0

ありがとうございました! – yaylitzis

+0

あなたは大歓迎です! – Frank

+0

'wb.write ...'と書いた行を 'file.close();で更新してください。 FileOutputStream outFile =新しいFileOutputStream(新しいファイル( "E:\\ products.xls")); workbook.write(outFile); outFile.close(); 'が正しく動作するようにします。 – yaylitzis

0

あなたは私はあなたが変更を保存し忘れてしまったと思う...どうやらブックを保存する

workbook.Save(path) 
0

を忘れてしまいました。

関連する問題