Java – Apache POI – 用循环填充行和单元格错误(Excel)

有一个HashMap:

HashMap<String, ArrayList<String>> matrix = new HashMap<String, ArrayList<String>>(); 

我想填写这种模式的Excel表:

 hashkey1 | hashkey2 | hashkey3 | hashkey4 value1-1 | value2-1 | value3-1 | value4-1 value1-2 | value2-2 | value3-2 | value4-2 value1-3 | value2-3 | value3-3 | value4-3 value1-4 | value2-4 | value3-4 | value4-4 value1-5 | value2-5 | value3-5 | value4-5 

“hashKeys”是“Categories”,每个键都有自己的ArrayList。 ArrayLists的每个string元素都应该在其对应的关键字下绘制。

这是实际的代码:

 int keyCell = -2; int row = 5; Row keyRow = worksheet.createRow(4); Row valueRow = null; for (Map.Entry<String, ArrayList<String>> e : matrix.entrySet()) { keyRow.createCell(keyCell += 2).setCellValue(e.getKey()); for (String s : e.getValue()) { if ((row - 5) < (e.getValue().size())) { valueRow = worksheet.createRow(row += 1); valueRow.createCell(keyCell).setCellValue(s); } else { valueRow.createCell(keyCell).setCellValue(s); } } } 

它的效果非常好,除了结果是这样的:

 hashkey1 | hashkey2 | hashkey3 | hashkey4 value1-1 | | | value1-2 | | | value1-3 | | | value1-4 | | | value1-5 | value2-5 | value3-5 | value4-5 

我认为它正在按照我想要的方式工作,但是由于在每个循环创build的新行,单元在每个循环都被擦除。 这是一个非常有挑战性的问题。 我遇到了很大困难,现在我完全陷入困境。 没有任何工作 单元格总是被擦除。

那么,我希望这是一个不太冗长的话题。 我非常感谢大家的帮助。

在内循环中,keyCell永远不会改变值。 这意味着您每次都写入相同的单元格值。 (由于这个问题,我感到惊讶的是代码工作。)

  for (String s : e.getValue()) { if ((row - 5) < (e.getValue().size())) { valueRow = worksheet.createRow(row += 1); valueRow.createCell(keyCell).setCellValue(s); } else { valueRow.createCell(keyCell).setCellValue(s); } } 

所以首先,我会解决这个问题,并使用keyCell ++。 如果这不起作用,每次调用createCell()时都要添加显示行和keyCell编号的debugging信息。 这将显示索引是否遵循正确的模式。 你想要的模式:

  • 0,0
  • 0,1
  • ….
  • 0,4
  • 1,0
  • 等等