Java-Apache POI-使用循环填充行和单元格时出现问题(Excel)

Java-Apache POI-使用循环填充行和单元格时出现问题(Excel),java,excel,loops,apache-poi,Java,Excel,Loops,Apache Poi,有一个HashMap: HashMap<String, ArrayList<String>> matrix = new HashMap<String, ArrayList<String>>(); “hashkey”是“Categories”,每个key都有自己的ArrayList。ArrayList的每个字符串元素应在其对应键下绘制 以下是实际代码: int keyCell = -2; int row = 5; Row keyRow = work

有一个HashMap:

HashMap<String, ArrayList<String>> matrix = new HashMap<String, ArrayList<String>>();
“hashkey”是“Categories”,每个key都有自己的ArrayList。ArrayList的每个字符串元素应在其对应键下绘制

以下是实际代码:

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);
            }
        }
    }
我想它正是按照我想要的方式工作的,但是由于在每个循环中创建了新行,所以每个循环中的单元格都会被擦除。这是一个非常具有挑战性的问题。我很难做到这一点,现在我完全被卡住了。什么都不管用。细胞总是被擦除


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

在内部for循环中,keyCell从不更改值。这意味着您每次都在写入相同的单元格值。(由于这个问题,我很惊讶代码能正常工作。)

for(字符串s:e.getValue()){
如果((第5行)<(e.getValue().size()){
valueRow=工作表.createRow(行+=1);
valueRow.createCell(keyCell).setCellValue(s);
}否则{
valueRow.createCell(keyCell).setCellValue(s);
}
}
首先,我要解决这个问题并使用keyCell++。如果不起作用,请添加调试,每次调用createCell()时显示行和keyCell编号。这将显示索引是否遵循正确的模式。您需要以下模式:

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

我将keyCell增加2,因为我需要每个键之间有一个间隙(我将在那里为每个ArrayList值插入一个布尔值)。所以,我不能使用“keyCell++”。考虑到keyCell在外部循环中得到更新,如果我在内部循环中更改它的值,我会得到一个完全不同的模式。关键是需要在循环内更改keyCell。因为现在它多次向同一个细胞写信。我将深入分析你向我指出的这一点。如果我找到解决方案,我会把代码放在这里。我非常感谢你,珍妮。你说得对!!这是钥匙室。。。但是很难在内部循环中更新它,因为我依赖于它在外部循环中的值,因为它是正确的。但是我需要更新它以避免“擦除问题”,这是非常混乱的。这几乎是不可能的,因为内部循环迭代HashMap中数组的大小,而这个大小与keyCell数无关。我使用内部循环中的keyCell来获得正确的位置,以便将值放置在每个键下。
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  
 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);
            }
        }