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

时间:2013-06-21 01:03:41

标签: java excel loops apache-poi

有一个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的每个字符串元素都应在其对应的密钥下绘制。

这是实际的代码:

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  

我认为它正是我想要的,但由于每个循环创建的新行,每个循环都会删除单元格。这是一个非常具有挑战性的问题我很难来到这里,现在我完全陷入了困境。什么都行不通。细胞总是被抹去。

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

1 个答案:

答案 0 :(得分:2)

在内部for循环中,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编号的调试。这将显示索引是否遵循正确的模式。你想要的模式:

  • 0,0
  • 0,1
  • ....
  • 0,4
  • 1,0