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

标签 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。 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);
            }
        }
    }

它工作得很好,除了结果是这样的模式:

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

我认为它完全按照我想要的方式工作,但是由于在每个循环中创建的新行,单元格在每个循环中都会被删除。这是一个非常具有挑战性的问题。我遇到了很大的困难才做到这一点,现在我完全陷入困境。什么都不起作用。单元格总是会被删除。

好吧,我希望这不是一个太冗长的话题。我真的很感谢大家的帮助。

最佳答案

在内部 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
  • 等等

关于Java - Apache POI - 使用循环填充行和单元格时遇到问题(Excel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17226194/

相关文章:

java - 动态地点 NameTokens GWT-Platform

c# - 使用 C# 在 Excel 工作表中查找粗体文本

java - 邮件 API - SSL 消息 - 如何正确设置发件人电子邮件

excel - 如何处理等待另一个应用程序 (SAP GUI) 完成 OLE 操作的情况?

html - 使用 VBA 进行网页抓取 - 更改输入框的值

r - 如何在r中的许多数据帧中的列上循环函数

javascript - 使用相同类的div循环获取文本内容

r - 有关如何使用 for 循环比较列和向量输入的建议

java - 如何配置 JComboBox 在创建时不选择第一个元素?

java - 使用 Jackson 将名称值对数组反序列化为对象