gpt4 book ai didi

java - 使用 Apache POI 将数据写入 Excel 电子表格

转载 作者:行者123 更新时间:2023-11-30 07:33:08 25 4
gpt4 key购买 nike

我有一个 Java 程序,可以使用 Apache POI 将数据添加到 Excel 电子表格的新行中。我能够将前 10 行打印到电子表格,但是当我尝试打印第 11 行时,它会以某种方式在第一行上创建一个新行(不从上一个索引继续),如下所示:

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();
}

}

}

最佳答案

发生这种情况是因为您将行号放入 HashMap 中,而 HashMap 并没有以有用的顺序返回它们。

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

为什么这是一张 map ?最好使用

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

列表将按照您添加的顺序保留内容。

关于java - 使用 Apache POI 将数据写入 Excel 电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35787747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com