2016-03-03 42 views
1

我有Java程序,並且希望將數據輸出到Excel電子表格中。我發現我可以使用Apache POI來實現這一點。我嘗試使用發現的例子here,似乎一切正常。但是,我在示例程序中每次迭代(循環)時都無法在Excel中打印新行。使用Apache POI在循環中將數據打印到Excel單元格

這是我的計劃:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.sql.Date; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Set; 

import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.*; 

public class Excel { 

    public static void main(String[] args) throws Exception { 
     HSSFWorkbook workbook = new HSSFWorkbook(); 
     HSSFSheet sheet = workbook.createSheet("Sample sheet"); 

     Map<String, Object[]> data = new HashMap<String, Object[]>(); 
     data.put("1", new Object[] {"Emp No.", "Name", "Salary"}); 

     for (int i=0;i<5;i++){ 

      data.put("2", new Object[] {"5", "Jane", "300"}); 

     } 

     Set<String> keyset = data.keySet(); 
     int rownum = 0; 
     for (String key : keyset) { 
      Row row = sheet.createRow(rownum++); 
      Object [] objArr = data.get(key); 
      int cellnum = 0; 
      for (Object obj : objArr) { 
       Cell cell = row.createCell(cellnum++); 
       if(obj instanceof Date) 
        cell.setCellValue((Date)obj); 
       else if(obj instanceof Boolean) 
        cell.setCellValue((Boolean)obj); 
       else if(obj instanceof String) 
        cell.setCellValue((String)obj); 
       else if(obj instanceof Double) 
        cell.setCellValue((Double)obj); 
      } 
     } 

    try { 
     FileOutputStream out = 
       new FileOutputStream(new File("new.xls")); 
     workbook.write(out); 
     out.close(); 
     System.out.println("Excel written successfully.."); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    } 

} 

Supposely,我想要的輸出是這樣的:

EmpNo Name Salary 
5  Jane 300 
5  Jane 300 
5  Jane 300 
5  Jane 300 
5  Jane 300 

,但它始終只打印第一行中的Excel工作表。任何熟悉使用Apache POI的人都可以幫助我解決這個問題?謝謝!

回答

1

這裏data.put("2", new Object[] {"5", "Jane", "300"}); 「2」 - >表示行數。所以總是更換排NUMBER2 所以不是試圖

for (int i=2;i<7;i++){ 
     data.put(i + "", new Object[] {"5", "Jane", "300"}); 
    } 

,這意味着我將是動態的價值。你將有5行:d

1

你建立你的數據集,這樣的:

data.put("1", new Object[] {"Emp No.", "Name", "Salary"}); 
    for (int i=0;i<5;i++){ 
     data.put("2", new Object[] {"5", "Jane", "300"}); 
    } 

我想你應該:

data.put(0, new Object[] {"Emp No.", "Name", "Salary"}); 
    for (int i=1;i<6;i++){ 
     data.put(i, new Object[] {"5", "Jane", "300"}); 
    } 

如果有,爲什麼你使用字符串,因爲沒有具體的原因關鍵當然。

相關問題