Apache POI SXSSF 在刷新行上显示 NullPointerException
Apache POI SXSSF Shows NullPointerException on flush rows
我的 table 中有 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();
我更新了上面代码中的 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();
我的 table 中有 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();
我更新了上面代码中的 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();