使用Java POI编写带有LinkedHashmap的Excel工作表

我几乎在那里解决我的问题,但只是陷入小问题。 我正在尝试从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(); 

神秘的是,当我删除内部for循环的值不省略sheet.createRow(row).createCell(0).setCellValue(key); 行,外层循环将正确地打印第一列中的键值。 我不知道我在哪里犯错。 谢谢。

你通过调用两次创build你的行

 sheet.createRow(row) 

您需要将行存储在一个variables中,并在createCell(x)调用createCell(x)

 for (String value:values){ Row newRow = sheet.creatRow(row); newRow.createCell(0).setCellValue(key); newRow.createCell(2).setCellValue(value); row++; } 

问题是:

sheet.createRow(row) .createCell(0).setCellValue(key); //在索引'row'创build新行sheet.createRow(row) .createCell(2).setCellValue(value); //在同一行索引处创build新行

所以你的第一行将被覆盖。