首页 > 解决方案 > 为什么我只得到最后一行充满 Apache POI?

问题描述

我将解释一下该程序的作用:它只是获取一个带有心理学或其他类型测试的 JSON 文件并进行更正。您可以创建具有不同区域或子集的测试,并使用它们自己的校正和百分比尊重总数。稍后,它会询问用户是否要将数据保存在 xsls 文件中以供进一步分析。

我正在尝试使用一些用户信息来填充和超越。问题是,我只得到每个子集的最后一个答案和分数。似乎行被覆盖或其他东西。

一些代码:

这是被调用的方法:

   public void subsetWriter(String userName, RandomTest t, Corrector c) {
        Workbook subsetWorkbook = new XSSFWorkbook();
        Sheet sheet = subsetWorkbook.createSheet(userName);

        styleCreation(sheet);

        Row headerRow = sheet.createRow(0);
        Row titleRow = sheet.createRow(1);
        for (int i = 2; i < t.getQuestions().size() + 2; i++) {
            punctuations = sheet.createRow(i);
        }

        Cell subsetHeader;
        Cell scoreTitle;
        Cell answerTitle;

        sheet.addMergedRegion(new CellRangeAddress(0, 0, 1, 2));
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 3, 4));
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 5, 6));

        int plusTwoCounter = -1;

        for (int i = 0; i < c.getSubsetNames().size(); i++) {
            subsetHeader = headerRow.createCell(plusTwoCounter + 2);
            subsetHeader.setCellValue(c.getSubsetNames().get(i));
            subsetHeader.setCellStyle(headerStyle);

            scoreTitle = titleRow.createCell(plusTwoCounter + 2);
            scoreTitle.setCellValue(COLUMN1);
            scoreTitle.setCellStyle(titleStyle);

            answerTitle = titleRow.createCell(plusTwoCounter + 3);
            answerTitle.setCellValue(COLUMN2);
            answerTitle.setCellStyle(titleStyle);

            fillSubset(i, t.getSubsets().get(c.getSubsetNames().get(i)), t.getSubsets().get(c.getSubsetNames().get(i)), punctuations);

            plusTwoCounter += 2;
        }

        rowResization(sheet, 1, 7);
        saveFile(subsetWorkbook, userName);
    }

填充子集的辅助静态方法:

        private static void fillSubset(int subsetPosition, ArrayList<Question> scores, ArrayList<Question> answers, Row punctuations) {
        Integer[] scorePositions = {1, 3, 5, 7, 9};
        Integer[] answerPositions = {2, 4, 6, 8, 10};

        Cell scoreCell;
        Cell answerCell;

        for (int j = 0; j < scores.size(); j++) {
            scoreCell = punctuations.createCell(scorePositions[subsetPosition]);
            scoreCell.setCellValue(scores.get(j).getScore());

            answerCell = punctuations.createCell(answerPositions[subsetPosition]);
            answerCell.setCellValue(answers.get(j).getUserAnswer());
        }
    }

Score 和 Answer 是 Question 的类属性,这些 Question 对象列表来自一个 HashMap,其中包含子集名称及其对应的问题列表。

我希望我说清楚了,提前非常感谢!

标签: javaapache-poi

解决方案


推荐阅读