2016-03-04 104 views
1

Excel电子表格,我有一个Java程序将数据添加到新行中使用Apache POI Excel电子表格。我能第一个10行打印至电子表格,但是当我试图打印11行,它会以某种方式创建的第一行新行(没有从以前的指数继续)是这样的:将数据写入到使用Apache POI

11 Jane 300 //?? 
12 Jane 300 //?? 
Emp No. Name Salary 
1 Jane 300 
2 Jane 300 
3 Jane 300 
4 Jane 300 
5 Jane 300 
6 Jane 300 
7 Jane 300 
8 Jane 300 
9 Jane 300 
10 Jane 300 

注意事项11日和12日上?我如何解决它们?这是我完整的Java代码:

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("0", new Object[] {"Emp No.", "Name", "Salary"}); 

     for (int i=1;i<13;i++){ 

      data.put(i + "", new Object[] {i, "Jane", "300"}); //print in different rows 
     } 

     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 Integer) 
        cell.setCellValue((Integer)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(); 
    } 

    } 

} 

回答

1

发生这种情况是因为您将行号放入HashMap中,而HashMap并未按照有用顺序返回。

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

为什么这是一张地图? 更好地使用

List<Object[]> rows = new ArrayList<>(); 
rows.add(new Object[] {"Emp No.", "Name", "Salary"}); 

名单将保持对事物的你加入他们的顺序相同。

0

键集包含的数据,以便

   [11, 12, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

尝试将这些数据accoording您的要求进行排序。