Почему я получаю только последний ряд, заполненный Apache POI? - PullRequest
0 голосов
/ 23 марта 2020

Я немного объясню, что делает программа: она просто получает файл 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);
    }

Метод помощника c чтобы заполнить подмножества:

        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());
        }
    }

Оценка и ответ являются атрибутами класса Вопроса, эти списки объектов Вопроса получены из HashMap, который содержит имя подмножества и соответствующий им список вопросов.

Надеюсь, я дал понять, заранее большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...