2014-01-17 70 views
0

我想填充一個名稱爲excel的文件。我正在查詢數據庫,需要根據名稱更新excel值。我有問題,因爲我認爲值被覆蓋,只有最後一個值被存儲在文本中。在Excel中使用java填充值 - excel有主鍵值

我正在迭代結果集並檢查excel中的名稱。如果它們匹配,我就會填充這些值。

我的代碼如下 - 對於很多的SOP

public class ExcelWriteDB { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    try 
    { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection connection2 = null; 
     // Create a connection to the database 
     connection2 = DriverManager.getConnection(""); 
     Statement mystat2 = connection2.createStatement(); 

     String query = ""; 

     ResultSet result = mystat2.executeQuery(query); 

     ResultSetMetaData rsmd2=result.getMetaData(); 

     FileInputStream file = new FileInputStream(new File("source.xlsx")); 

     XSSFWorkbook workbook = new XSSFWorkbook(file); 
     XSSFSheet sheet = workbook.getSheetAt(2); 


     while(result.next()){ 

     Iterator<Row> rowIterator = sheet.iterator(); 

     while (rowIterator.hasNext()) 
     { 
      Row row = rowIterator.next(); 
      //For each row, iterate through all the columns 
      Iterator<Cell> cellIterator = row.cellIterator(); 

      Cell cell = row.getCell(0); 
      Cell cell3 = row.createCell(2); 

      if (cell != null) { 

      switch (cell.getCellType()) 
      { 
       case Cell.CELL_TYPE_NUMERIC: 
        break; 
       case Cell.CELL_TYPE_STRING: 
        if(cell.getStringCellValue().equals(result.getString("NAME"))){ 
         double UPB = Double.parseDouble(result.getString("UPB")); 

         cell3.setCellValue(UPB); 
        } 
        break; 
      } 
      } 
     } 



     }// while(result.next()){ 

     FileOutputStream out = new FileOutputStream(new File("ZXC.xlsx")); 
     workbook.write(out); 
     out.close(); 

     file.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

} 

}的道歉

我相信我失去了一些東西,但我不知道是什麼。任何幫助讚賞。謝謝。

回答

0

首先,您沒有在switch聲明的第一個Case中做任何事情。那是對的嗎? 其次,你根本不需要重複你的cellIterator。你總是得到第零個單元格。另外,你還沒有寫入文件。

+0

感謝您的回覆。 - SWITCH這裏只是佔位符,我稍後會添加更多的邏輯。 - 邏輯是檢查每行第一列的名稱,這就是爲什麼我遍歷每一行並獲取第一列。同樣基於名稱,我需要在結果集中查找名稱的值。所以每次我需要獲得第一列並在第三列更新(更多列後面)。 - 我在遍歷所有數據庫結果集後寫入下面的文件。 問題是結果沒問題,只是最後一行得到更新。 再次感謝。 – user115391

+0

我得到了這個工作。這是邏輯錯誤,添加了以下邏輯 Cell cell3 = row.getCell(2); if(cell3 == null){cell_3 = row.createCell(2); } 而不是每次迭代創建單元格。再次感謝您的幫助。 – user115391