Apache POI生成文档和内部排序

时间:2016-10-11 12:19:33

标签: java excel apache-poi

我试图通过'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);
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

HSSFRow dynamicRow = spreadSheet.createRow(i + 2);

我必须在for方法之外分配另一个变量来保持int:

int rowNumber = 2;

然后只需增加每行的值。

HSSFRow dynamicRow = spreadSheet.createRow(rowNumber += 1);