Apache POI SXSSF показывает исключение NullPointerException в очищенных строках
У меня в таблице 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 ответ
Решение
Я обновил цикл while в приведенном выше коде. Он записывал 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();