我几乎可以解决我的问题,但只是陷入了小问题。我正在尝试从LinkedHashmap
打印excel文件。我将Java和POI库用于我的目的。
我从LinkedHashmap中的另一个excel文件中提取一些数据,然后将这些数据打印到新的excel文件中。
LinkedHashmap
中存储的数据很大,并按以下方式列出:
Keys | Values
-----------------------------------
Key1 : value1, value1, value1
Key2 : value2, value2, value2
key3 : value3, value3, value3
我想要的是什么:
excel文件中的输出应以下列格式显示:
Excel_file_out_deserved.xslx:
+
key1 | value1
key1 | value1
key1 | value1
| // (if possible, empty cell space here will look good)
key2 | value2
key2 | value2
key2 | value2
| // (if possible, empty cell space here will look good)
key3 | value3
key3 | value3
key3 | value3
我得到了什么:
My_excel_file_out.xslx:
| value1 // (why my first column is empty?!, it should print keys there)
| value1
| value1
| value2
| value2
| value2
| value3
| value3
| value3
我尝试了什么:
FileOutputStream out = new FileOutputStream(new File("my_excel.xlsx"));
XSSFWorkbook newWorkbook = new XSSFWorkbook();
XSSFSheet sheet = newWorkbook.createSheet("print_vertical");
int row = 0;
// loop through all the keys
for(String key : linkMap.keySet()){
List<String> values = linkMap.get(key);
for (String value:values){
// print keys in 1st column
sheet.createRow(row).createCell(0).setCellValue(key); // why this doesn't work? :-/
// print values in 3rd column
sheet.createRow(row).createCell(2).setCellValue(value); // this works fine
row++;
}
}
newWorkbook.write(out);
out.close();
神奇的是,当我在不省略sheet.createRow(row).createCell(0).setCellValue(key);
行的情况下删除内部for循环值时,外部循环将在第一列中正确地打印键值。我无法弄清楚我在哪里弄错了。谢谢。
答案 0 :(得分:2)
通过调用
创建两次行sheet.createRow(row)
您需要将行存储在变量中并调用createCell(x)
那里
for (String value:values){
Row newRow = sheet.creatRow(row);
newRow.createCell(0).setCellValue(key);
newRow.createCell(2).setCellValue(value);
row++;
}
问题是:
<强> sheet.createRow(行)强> .createCell(0).setCellValue(键); //在索引'row'创建新行 的 sheet.createRow(行)强> .createCell(2).setCellValue(值); //在同一行索引处创建新行
所以你的第一行会被覆盖。