2016-10-25 55 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。但是在第二次执行时,第一次执行期间写入的xls中显示的数据相同。无法再次写入xls使用Apache POI的文件

回答

1

我可以看到两个原因,为什么你有第二次运行写入相同的数据。

首先,我认为这是因为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} 

第二,你也始终处于复位状态rowCountcolumnCount为0,你的代码覆盖在每次运行相同的行和列。

+0

columnCount将需要重置为始终从0开始。但是rowCount是静态的。它的值永远是递增的fr每次运行 –

+0

我已经添加了System.out.println(“lWorkBook:”+ lWorkBook);在if和else中,发现两者都有不同的哈希码。这意味着两者都是不同的工作簿 –