我正在尝试通过“transactionBatch”参数对我的交易进行“分组”。我看到我的 HashMap 成功收集了唯一的批处理。当我调试下面的代码时,一切似乎都正确完成。虽然当我检查Excel文件时,交易并没有相应地分组。它们应该分组:
batch # 1:
- transaction with batch # 1
- transaction with batch # 1
batch # 2:
- transaction with batch # 2
- transaction with batch # 2
结果 Excel 文件包含:
batch # 1:
- transaction with batch # 1
- transaction with batch # 2
batch # 2:
- transaction with batch # 4
- transaction with batch # 1
这是代码:
HashMap<String, String> hashMap = new HashMap<>();
for (int i = 0; i < nodeList.getLength(); i++) {
hashMap.put(((Element) (nodeList.item(i))).getElementsByTagName("transactionBatch").item(0)
.getFirstChild().getNodeValue(), ((Element) (nodeList.item(i))).getElementsByTagName("transactionBatchDate").item(0)
.getFirstChild().getNodeValue());
}
for (Map.Entry<String, String> entry : hashMap.entrySet()) {
for (int i = 0; i < nodeList.getLength(); i++) {
String transactionBatch = ((Element) (nodeList.item(i))).getElementsByTagName("transactionBatch").item(0)
.getFirstChild().getNodeValue();
String key = entry.getKey();
if (transactionBatch.equals(key)) {
HSSFRow dynamicRow = spreadSheet.createRow(i + 2);
if (nodeList.getLength() != 0) {
cell = dynamicRow.createCell((short) 0);
cell.setCellValue(((Element) (nodeList.item(i))).getElementsByTagName("transactionNumber").item(0)
.getFirstChild().getNodeValue());
cell.setCellStyle(styleWithDataCentered);
...
cell = dynamicRow.createCell((short) 8);
cell.setCellValue(((Element) (nodeList.item(i))).getElementsByTagName("transactionBatch").item(0)
.getFirstChild().getNodeValue());
cell.setCellStyle(styleWithDataCentered);
}
}
}
}
最佳答案
问题出在这一行:
HSSFRow dynamicRow = spreadSheet.createRow(i + 2);
我必须在 for 方法之外分配另一个变量来保留 int:
int rowNumber = 2;
然后每行增加它的值。
HSSFRow dynamicRow = spreadSheet.createRow(rowNumber += 1);
关于java - Apache POI生成文档并在内部排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39977110/