Java-Apache POI-使用循环填充行和单元格时出现问题(Excel)
有一个HashMap: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<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
- 等
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);
}
}