0

POI と hashMaps を使用して Excel シートを作成しようとしています。私のコードは Excel シートを正常に作成して入力しますが、すべての情報がシートに書き込まれるわけではありません。デバッグ モードでは、5 つのキーと値のペアを書き込んでから、キー [0] で開始するようにループします。誰かが私の論理のどこに間違いがあるか教えてもらえますか?

HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet(make + " sheet");
        int rowNum = 0;
        ConcurrentHashMap <Integer, String[] > data = new 
                        ConcurrentHashMap<Integer, String[]>();

        data.put(rowNum++, new String[] {"VIN", "Make", "Model", "Year", 
                        "Major Group", "Caption", "Cap Filter", "Illustration",
                        "Illus Filter", "PNC", "Part Name", "Part Number", "Quantity",
                        "Part Filter"});

        for (Part p : plist){
            String PNC = p.getPNC();
            String quantity = p.getQuantity();

            if(vFilterId.contains(p.getId())) {
                data.put(rowNum++ , new String[] {vinId, make, 
                                    model, year, group, caption, capFilter, illusName,
                                    iFilter, PNC, p.getName(), p.getPartNumber(), 
                                    quantity, "NONFILTERED"});

            } else {
                data.put(rowNum++ , new String[] {vinId, make, 
                                    model, year, group, caption, capFilter, illusName,
                                    iFilter, PNC, p.getName(), p.getPartNumber(), 
                                    quantity, "NONFILTERED"});

            }

        }
        int rowIndex = 0;
        Set<Integer> keyset = data.keySet();
        for (Integer key : keyset) {
            Row row = sheet.createRow(rowIndex++);
            Object[] objArr = data.get(key);
            int cellIndex = 0;
            for (Object obj : objArr) {
                Cell cell = row.createCell(cellIndex++);
                cell.setCellValue((String) obj);
            }

        }

        try {
            FileOutputStream fos = new FileOutputStream(outputFile);
            workbook.write(fos);
            fos.close();
            System.out.println("XLS sheet written.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return ReturnConstants.SUCCESS;
}

前もって感謝します!

4

2 に答える 2

0

行を表すデータをテーブルに格納するためにマップを使用しています。マップは一般にソートされていないため、List を使用する方がよいでしょう (つまり、エントリの順序は時間の経過とともに変化する可能性があります)。

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(make + " sheet");
List<String[]> data = new ArrayList<String[]>();

data.add(new String[] {"VIN", "Make", "Model", "Year", 
        "Major Group", "Caption", "Cap Filter", "Illustration",
        "Illus Filter", "PNC", "Part Name", "Part Number", "Quantity",
"Part Filter"});

for (Part p : plist){
    String PNC = p.getPNC();
    String quantity = p.getQuantity();

    if(vFilterId.contains(p.getId())) {
        data.add(new String[] {vinId, make, 
                model, year, group, caption, capFilter, illusName,
                iFilter, PNC, p.getName(), p.getPartNumber(), 
                quantity, "NONFILTERED"});

    } else {
        data.add(new String[] {vinId, make, 
                model, year, group, caption, capFilter, illusName,
                iFilter, PNC, p.getName(), p.getPartNumber(), 
                quantity, "NONFILTERED"});

    }

}
for (int rowIndex=0; rowIndex<data.size(); rowIndex++) {
    Row row = sheet.createRow(rowIndex);
    Object[] objArr = data.get(rowIndex);
    int cellIndex = 0;
    for (Object obj : objArr) {
        Cell cell = row.createCell(cellIndex++);
        cell.setCellValue((String) obj);
    }
}
于 2013-07-19T16:08:46.657 に答える