2013-11-28 90 views
0

我試圖從SQL表中提取數據並將其寫入Excel工作表。將數據寫入Excel中的問題

我目前正在創建一個HashMap - HashMap<Integer, ArrayList<String>> tblDataMap = new HashMap<Integer, ArrayList<String>>()並將表中的所有數據寫入hashmap。

當我嘗試寫出相同的東西來超越,只有最後一列被寫入,其餘的列是空白的。

下面是我的代碼迭代。

public String writeDataToExcel(String fileLoc, String tblName) 
    { 
     try{ 
      LisaDBUtil lisaDb = new LisaDBUtil(); 
      HashMap<Integer, ArrayList<String>> tblDataMap = lisaDb.getTableDetails(tblName); 
      System.out.println("Map : " +tblDataMap.toString()); 
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet sheet = workbook.createSheet(tblName); 

      Integer rowCount = 0; 
      Integer key = 1; 

      short col = 0; 
      ArrayList<String> tmpArr = null; 

      while(tblDataMap.containsKey(key)) 
      { 

       tmpArr = tblDataMap.get(key); 
       System.out.println("tmpArr : " +tmpArr.toString()); 
       for (String val : tmpArr) 
       { 
        XSSFRow row = sheet.createRow(rowCount); 
        System.out.println("Cell value : " +val +"Col : " +col); 
        XSSFCell cell = row.createCell(col); 
        cell.setCellValue(val); 
        System.out.println("Cel Value set : " +cell.getColumnIndex() +cell.getRowIndex()); 
        col++; 
        sheet.autoSizeColumn(col); 
       } 

       col = 0; 
       rowCount++; 
       key++; 

       System.out.println("row value : " +rowCount); 
      } 
      DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
      //get current date time with Date() 
      Date date = new Date(); 
      System.out.println(dateFormat.format(date)); 
      //Write the workbook in file system 
      FileOutputStream out = new FileOutputStream(new File(fileLoc+"/"+tblName+"_"+dateFormat.format(date)+".xlsx")); 
      workbook.write(out); 
      out.close(); 
      FILE_CREATION_STATUS = "success"; 
      System.out.println("Excel written successfully on disk."); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return FILE_CREATION_STATUS; 
    } 

我能夠看到單元格值設置正確..請在控制檯日誌下面找到。

Map : {1=[tdm_id, Account_No, Customer_Name, IACode, Supp_Account], 2=[1001, 9384938493, Sindhu, YW, 34545655667], 3=[1002, 9486958958, Ussanar, LLB, 656565576], 4=[1003, 8568632432, XYZ, YB, 45654654654]} 
tmpArr : [tdm_id, Account_No, Customer_Name, IACode, Supp_Account] 
Cell value : tdm_idCol : 0 
Cel Value set : 00 
Cell value : Account_NoCol : 1 
Cel Value set : 10 
Cell value : Customer_NameCol : 2 
Cel Value set : 20 
Cell value : IACodeCol : 3 
Cel Value set : 30 
Cell value : Supp_AccountCol : 4 
Cel Value set : 40 
row value : 1 
tmpArr : [1001, 9384938493, Sindhu, YW, 34545655667] 
Cell value : 1001Col : 0 
Cel Value set : 01 
Cell value : 9384938493Col : 1 
Cel Value set : 11 
Cell value : SindhuCol : 2 
Cel Value set : 21 
Cell value : YWCol : 3 
Cel Value set : 31 
Cell value : 34545655667Col : 4 
Cel Value set : 41 
row value : 2 
tmpArr : [1002, 9486958958, Ussanar, LLB, 656565576] 
Cell value : 1002Col : 0 
Cel Value set : 02 
Cell value : 9486958958Col : 1 
Cel Value set : 12 
Cell value : UssanarCol : 2 
Cel Value set : 22 
Cell value : LLBCol : 3 
Cel Value set : 32 
Cell value : 656565576Col : 4 
Cel Value set : 42 
row value : 3 
tmpArr : [1003, 8568632432, XYZ, YB, 45654654654] 
Cell value : 1003Col : 0 
Cel Value set : 03 
Cell value : 8568632432Col : 1 
Cel Value set : 13 
Cell value : XYZCol : 2 
Cel Value set : 23 
Cell value : YBCol : 3 
Cel Value set : 33 
Cell value : 45654654654Col : 4 
Cel Value set : 43 
row value : 4 
2013-11-28 
Excel written successfully on disk. 
Status : success 

單元格正確迭代並且值設置正確。但是一旦生成了excel,只有一列中有值。有人請幫忙。

回答

1

似乎只是一個愚蠢的錯誤。 XSSFRow row = sheet.createRow(rowCount);應該在for循環之前。一旦創建了該行,您就不必爲同一行的單元格重複創建。每次創建單元格時,只需用新創建的空白行替換同一行的以前的數據。這就是爲什麼只有最後一列出現。

while(tblDataMap.containsKey(key)) 
     { 

      tmpArr = tblDataMap.get(key); 
      System.out.println("tmpArr : " +tmpArr.toString()); 
      // for all the column of same row, you just need to create row only once 
      XSSFRow row = sheet.createRow(rowCount); 
      for (String val : tmpArr) 
      { 
       System.out.println("Cell value : " +val +"Col : " +col); 
       XSSFCell cell = row.createCell(col); 
       cell.setCellValue(val); 
       System.out.println("Cel Value set : " +cell.getColumnIndex() +cell.getRowIndex()); 
       col++; 
       sheet.autoSizeColumn(col); 
      } 

      col = 0; 
      rowCount++; 
      key++; 

      System.out.println("row value : " +rowCount); 
     } 
+2

您還應該將'sheet.autoSizeColumn'調用拉到最後 - 這是一個昂貴的調用,您不希望每行處理它,只是在處理結束時 – Gagravarr