Проблема с записью значений в листах Excel с библиотекой POI для Java - PullRequest
0 голосов
/ 02 июля 2018

Я получаю значения из своей программы и хочу сохранить их в файле Excel, я использую библиотеку poi, у меня должно быть 9 листов, и на каждом отдельном листе мне нужно получить матрицу (строки * столбцы) в моем case (любое количество строк * 13 столбцов), но я получаю только 1 лист с именем по фамилии в массиве и заполненный только номером столбца 13

Вот метод

public static void writeExcelSheet(String categoryName) throws IOException {
    Workbook workbook=new HSSFWorkbook();
    Sheet sheet=workbook.createSheet(categoryName);
    int allength=arraylistCategory.size();

    for(int row=0;row<allength;row++){
        for(int column=0;column<13;column++){
             Cell cell=sheet.createRow(row).createCell(column);
             cell.setCellValue(arraylistCategory.get(row)[column]);
        }
    }

        FileOutputStream outputStream=new FileOutputStream("mel coef excel sheet.xls");
        workbook.write(outputStream);
        outputStream.close();



    arraylistCategory.clear();
}

Подскажите, пожалуйста, что отсутствует или нет, заранее спасибо

1 Ответ

0 голосов
/ 02 июля 2018

У меня должно быть 9 листов

Ваш метод создает только один лист в книге. Предполагая, что вы пытаетесь вызвать этот метод 9 раз, вы заново создаете новый пустой Workbook каждый раз, когда вызываете этот метод, перезаписывая файл каждый раз. Это объясняет, почему вы получаете только фамилию в массиве.

Вместо этого создайте Workbook один раз, затем передайте его этому методу, чтобы вы могли создавать листы на том же Workbook. Затем после последнего вызова этого метода, затем запишите его в FileOutputStream.

и заполняется только столбцом № 13

У вас здесь похожая проблема. Вы создаете строку с createRow(row) для каждого столбца. Когда вы делаете это, вы перезаписываете любую строку с новым пустым Row, стирая все значения ячеек, кроме последнего. Создайте Row вне внутреннего цикла for, но внутри внешнего цикла for и используйте его внутри внутреннего цикла for.

for(int row = 0; row < allength; row++){
    Row currentRow = sheet.createRow(row);
    for(int column = 0; column < 13; column++){
         Cell cell = currentRow.createCell(column);
         cell.setCellValue(arraylistCategory.get(row)[column]);
    }
}
...