2016-10-25 7 views
0
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import org.apache.poi.poifs.filesystem.POIFSFileSystem; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
public class WriteToExcel 
{ 
     public static int rowCount=0; 
     public static void main(String[] args) throws IOException 
     { 
      File xlsFile =new File("C:\\Users\\Atul.Patel_New\\Desktop\\IDFC_MerchantOnBoarding_DocDwnld\\Reports\\Test.xls"); 
      FileInputStream lFin = null; 
      HSSFWorkbook lWorkBook = null; 
      HSSFSheet lWorkSheet = null; 
      FileOutputStream lFout = null; 
      //POIFSFileSystem lPOIfs = null; 
      HSSFRow lRow=null; 
      int columnCount=0; 

      if(xlsFile.exists()) 
      { 
       System.out.println("In Exists"); 
       lFout=new FileOutputStream(xlsFile,true); 
       lFin=new FileInputStream(xlsFile); 
       //lPOIfs = new POIFSFileSystem(lFin); 
       lWorkBook=new HSSFWorkbook(lFin); 
       lWorkSheet = lWorkBook.getSheet("Java Books"); 
       System.out.println(lWorkSheet.toString()); 
       System.out.println("lWorkSheet.getLastRowNum():"+lWorkSheet.getLastRowNum()+1); 
       lRow = lWorkSheet.createRow(lWorkSheet.getLastRowNum()); 


      } 
      else 
      { 
       xlsFile.createNewFile(); 
       lFout = new FileOutputStream(xlsFile,true); 
       lWorkBook = new HSSFWorkbook(); 
       lWorkSheet = lWorkBook.createSheet("Java Books"); 
       System.out.println("Else: lWorkSheet.getLastRowNum():"+lWorkSheet.getLastRowNum()); 
       lRow = lWorkSheet.createRow(lWorkSheet.getLastRowNum()); 
       //columnCount = 0; 
      } 
      Object[][] bookData = 
       { 
        {"Head First Java", "Kathy Serria", 79}, 
        {"Effective Java", "Joshua Bloch", 36}, 
        {"Clean Code", "Robert martin", 42}, 
        {"Thinking in Java", "Bruce Eckel", 35}, 
       }; 
      for (Object[] aBook : bookData) 
      { 
       Row row = lWorkSheet.createRow(rowCount); 
       columnCount = 0; 
       for (Object field : aBook) 
       { 
        Cell cell = row.createCell(columnCount); 
        if (field instanceof String) 
        { 
         cell.setCellValue((String) field); 
        } 
        else if (field instanceof Integer) 
        { 
         cell.setCellValue((Integer) field); 
        } 
        ++columnCount; 

       } 
       ++rowCount; 
      } 
      System.out.println("rowCount: "+rowCount); 
      try 
      { 
       lFin=new FileInputStream(xlsFile); 
       lFout=new FileOutputStream(xlsFile,true); 
       lWorkBook.write(lFout); 
       lFout.flush(); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
      finally 
      { 
       lFout.close(); 
       lFin.close(); 

      } 
      System.out.println("Done"); 
     } 
} 

最初の実行はxlsにデータを正常に書き込みます。しかし、2回目の実行では、最初の実行中に書き込まれたxlsに同じデータが表示されます。Apache POIを使用してxlsファイルに再度書き込むことができません

答えて

1

2回目の実行で同じデータが書き込まれている理由は2つあります。

まず、Object[][] bookDataが変更されないと思います。 あなたはいつもあなたのExcelファイルに書き込まれ、次のデータを持っています:

{"Head First Java", "Kathy Serria", 79}, 
{"Effective Java", "Joshua Bloch", 36}, 
{"Clean Code", "Robert martin", 42}, 
{"Thinking in Java", "Bruce Eckel", 35} 

第二に、あなたはまた、常に0からrowCountcolumnCountをリセットし、あなたのコードが実行のたびに同じ行と列を上書きします。

+0

columnCountは、常に0から開始するようにリセットする必要があります。しかし、rowCountは静的です。値は常に1回ごとにインクリメントされます。 –

+0

System.out.println( "lWorkBook:" + lWorkBook)を追加しました。 ifとelseの両方で異なるハッシュコードを持っています。両方が異なるワークブックであることを意味します –

関連する問題