2013-12-13 119 views
0

如何使用Apache POI逐列寫入?使用Apache POI按列逐列寫入

我有一個自定義地圖,其中我有包含多個值的鍵。

{a=[1, 2], b=[3, 4, 5]} 

現在我想把這些東西寫入excel,其中a和b作爲列名和它們的值作爲單元格值。

Desired Output 
a  b 
1  3 
2  4 
     5 

我所得到的就是使用Apache POI逐行寫入。任何人都可以提出我的詭計,以便我可以一欄一列地寫出來嗎?

+0

請不要忘記加上「?」提問!有些人在頁面中搜索'?'如果'問題'中不存在,則直接進入下一個(實際)問題。 –

+0

ok @AndrewThompson,我會在下一次 – Pulkit

回答

1

我找到答案,其實POI只支持逐行插入,所以通過柱插入做專欄中,我應用這個邏輯

HSSFWorkbook workbook = new HSSFWorkbook(); 
    HSSFSheet sheet = workbook.createSheet("sheet"); 
    //Create a new row in current sheet 
    Row row = sheet.createRow(0); 
    //Create a new cell in current row 
    for(String key:map.keySet()) 
    { 
     Cell cell1=row.createCell(columnNum); 
     cell1.setCellValue(key); 
     //System.out.println(map.get(key)); 
     List<Integer> columnValues = map.get(key); 
     int tempHeight=columnValues.size(); 
     /*if(maxRows<tempHeight) 
     { 
      maxRows=tempHeight; 
     }*/ 
     int temp=1; 
     for(int i:columnValues) 
     { 
      Row row2; 
      //System.out.println("no of rows:"+(sheet.getPhysicalNumberOfRows()-1)+", height:"+tempHeight); 
      if(sheet.getPhysicalNumberOfRows()-1>temp-1) 
      { 
       //System.out.println("take row"); 
       row2=sheet.getRow(temp); 

      } 
      else 
      { 

       //System.out.println("Row inserted"); 
       row2=sheet.createRow(temp); 
      } 
      Cell cell2=row2.createCell(columnNum); 
      cell2.setCellValue(i); 
      temp=temp+1; 
     } 

     columnNum=columnNum+1; 


    } 
3

我知道POI只支持添加行。您可以通過查看最長的值列表來創建行數。在你的情況下b。然後遍歷單元格並插入值。 POI Sheet

+0

的時候記住這一點,我也是通過相同的邏輯,尋找特定的鍵集並找到它的深度,然後將它與我們在excel中插入的maxRows進行比較,但是我無法使其效率,反正你的建議是高度讚賞 – Pulkit