Apache POI SXSSF Показывает исключение NullPointerException для строк гриппа sh - PullRequest
0 голосов
/ 18 февраля 2020

В моей таблице 500 строк. Когда я использую setRandomAccessWindowSize(1000), он работает нормально. Данные успешно экспортируются в файл Excel из набора результатов, но когда я использую setRandomAccessWindowSize(100), это дает мне NullPointerException Я не знаю, что я делаю неправильно. Пожалуйста, предложите правильный способ сделать это.

Вот мой код:

workbook = new SXSSFWorkbook(100);      //SXSSF workbook
workbook.setCompressTempFiles(true);
SXSSFSheet spreadsheet = workbook.createSheet("Sheet1");     //Generating Excel file
SXSSFRow row;
SXSSFCell cell;
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();//Create font
font.setBold(true);//Make font bold
style.setFont(font);//set it to bold

int y = 1;
if (rs.isBeforeFirst() == true) {
    while (rs.next()) {
        row = spreadsheet.createRow(0);
        cell = row.createCell(0);
        cell.setCellValue("SR NO");
        cell.setCellStyle(style);
        for (int s = 1; s <= rsmd.getColumnCount(); s++) {
            cell = row.createCell(s);
            cell.setCellValue(rs.getMetaData().getColumnName(+s).toUpperCase());
            cell.setCellStyle(style);
        }
        row = spreadsheet.createRow(y);
        cell = row.createCell(0);
        cell.setCellValue(y + "");
        //spreadsheet.autoSizeColumn(0);
        for (int x = 1; x <= rsmd.getColumnCount(); x++) {
            cell = row.createCell(x);
            String address = new CellReference(cell).formatAsString();
            cell.setCellValue(address);
            cell.setCellValue(rs.getString(+x));
            //spreadsheet.autoSizeColumn(x);
        }
        y++;
    }

    FileOutputStream out = new FileOutputStream(new File(destination));
    workbook.write(out);
    out.close();
    workbook.dispose();

1 Ответ

0 голосов
/ 19 февраля 2020

Я обновил пока l oop в коде выше. Он писал 0-й ряд несколько раз. Вот почему в 101-й строке было выдано исключение NullPointer, поскольку 0-я строка уже очищена.

Вот мое исправление -

if (rs.isBeforeFirst() == true) {
    while (rs.next()) {
        //writing columns
        if (rs.isFirst()) {
            row = spreadsheet.createRow(0);
            cell = row.createCell(0);
            cell.setCellValue("SR NO");
            cell.setCellStyle(style);
            for (int s = 1; s <= rsmd.getColumnCount(); s++) {
                cell = row.createCell(s);
                cell.setCellValue(rs.getMetaData().getColumnName(+s).toUpperCase());
                cell.setCellStyle(style);
            }
        }
        //Writing data
        row = spreadsheet.createRow(y);
        cell = row.createCell(0);
        cell.setCellValue(y + "");
        //spreadsheet.autoSizeColumn(0);
        for (int x = 1; x <= rsmd.getColumnCount(); x++) {
            cell = row.createCell(x);
            cell.setCellValue(rs.getString(+x));
            //spreadsheet.autoSizeColumn(x);
        }
        y++;
    }

    FileOutputStream out = new FileOutputStream(new File(destination));
    workbook.write(out);
    out.close();
    workbook.dispose();
...