2016-02-27 48 views
0

对于以下代码,我得到NullPointerException。有人可以帮忙吗?我正在尝试将数据库值提供给现有的Excel表单。java - XSSF。 NullPointerException

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"); 
+1

帖子日志的'Exception'的。 – jaibatrik

+0

无需知道哪条生产线给NPE,哪个生产对象为空,我们在这里可以做的事情并不多 – Gagravarr

回答

1

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

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");