java - XSSF。空指针异常

标签 java apache-poi xssf

我收到以下代码的NullPointerException。有人可以帮忙解决这个问题吗?我正在尝试将数据库值获取到现有的 Excel 工作表。

Statement statement = connect.createStatement();
  ResultSet resultSet = statement.executeQuery("select * from basicinfo");
  FileInputStream fis = new FileInputStream(new File("exceldatabase.xlsx"));
  XSSFWorkbook workbook = new XSSFWorkbook(fis); 
  XSSFSheet spreadsheet = workbook.getSheetAt(0);
  XSSFRow row=spreadsheet.getRow(2);
  XSSFCell cell;
  cell=row.getCell(2);
  cell.setCellValue("user_name");
  cell=row.getCell(3);
  cell.setCellValue("email");
  cell=row.getCell(3);
  cell.setCellValue("phonenum");
  cell=row.getCell(4);
  cell.setCellValue("address");

最佳答案

您需要创建行和单元格对象:

  XSSFRow row=spreadsheet.createRow(2);
  XSSFCell cell;
  cell=row.createCell(2);
  cell.setCellValue("user_name");
  cell=row.createCell(3);
  cell.setCellValue("email");
  cell=row.createCell(3);
  cell.setCellValue("phonenum");
  cell=row.createCell(4);
  cell.setCellValue("address");

如果您要打开现有笔记本并且行/单元格/工作表可能存在,则需要如下所示的内容:

Sheet sheet=workbook.getSheet("foo");
if (sheet==null){
  sheet=workbook.createSheet("foo");
}
Row row=sheet.getRow(2);
if (row==null){
  row=sheet.createRow(2);
}
Cell cell=row.getCell(12);
if (cell==null){
  cell=row.createCell(12);
}
cell.setValue("phonenum");

当然,您可能应该创建一些辅助方法,如下所示:

private Sheet getOrCreateSheet(Workbook workbook, String sheetName){
  Sheet sheet=workbook.getSheet(sheetName);
  if (sheet==null){
    sheet=workbook.createSheet(sheetName);
  }
 return sheet;
}

private Row getOrCreateRow(Sheet sheet, int rowIndex){
  Row row=sheet.getRow(rowIndex);
  if (row==null){
    row=sheet.createRow(rowIndex);
  }
  return row;
}

private Cell getOrCreateCell(Row row, int colIndex){
  Cell cell=row.getCell(colIndex);
  if (cell==null){
    cell=row.createCell(colIndex);
  }
  return cell;
}

那么上面的代码就变得更加整洁:

Sheet sheet=getOrCreateSheet(workbook, "foo");
Row row=getOrCreateRow(sheet, 2);
Cell cell=getOrCreateCell(row, 12);
cell.setValue("phonenum");

关于java - XSSF。空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674650/

相关文章:

java - Java中的线程与C++中的线程有什么不同?

Java 堆空间错误,我无法在 Java 中处理大型 xlsx 文件

java - POI - 同一张纸上的多个数据验证范围

java excel读取一列

java - 获取ShapeGroup中的所有形状

java - 如何在 Hibernate 4 中进行带限制的关联获取?

java - 如何配置 Hibernate 5 强制 Mysql 使用 Innodb 引擎创建表?

java - Apache-POI 在 Excel 中设置值,但另一个单元格的公式无法使用该值,直到我在处理条中手动按 Enter 键

java - 如何根据方向旋转标记(总线)?

使用 apache poi 3.9 的 Java 程序在 XML 构建文件中遇到错误