从 Excel 读取时获取空指针异常 java XSSFCell cell = row.getCell(j);.


private String[][] data;
// to read from excel file
public void readFile() throws IOException {
    // Path to the excel file
    // File datafile = new File("C:\Users\atomar\Documentstest.xlsx");
    // A Buffered File Input Stream to read the data
    FileInputStream f = new FileInputStream(
            "C:\Users\atomar\Documents\test.xlsx");
    System.out.println("file found");
    // InputStream fis = new BufferedInputStream(new FileInputStream("f"));
    // We create a workbook which represents the excel file
    XSSFWorkbook book = new XSSFWorkbook(f);
    // Next a sheet which represents the sheet within that excel file
    XSSFSheet sheet = book.getSheet("Sheet1");
    // No of rows in the sheet
    int rowNum = sheet.getLastRowNum() + 1;
    System.out.println("rowNum");
    // No of columns in the sheet
    int colNum = sheet.getRow(0).getLastCellNum();
    // A Two dimensional array of Strings which represents the data in the
    // sheet
    data = new String[rowNum][colNum];
    {
        for (int i = 0; i < rowNum; i++) {
            // Get the row
            XSSFRow row = sheet.getRow(i);
        for (int j = 0; j < colNum; j++) {
            // Get the columns or cells for the first row and keep
                // looping
                // for the other rows
        XSSFCell cell = row.getCell(j);
        // Make a call to the method cellToString which actually
                // converts the cell contents to String
                data[i][j] = cellToString(cell);
            //  data[i][j] = value;
    // Here is where you write the logic to handle the data.I am
                // just printing out the contents here.
                //System.out.println("The value is " + data[i][j]);

            }
        }

在这里我调用该函数

public void InterestedParty() throws InterruptedException {
    try {
        readFile();
    } catch (IOException e1) {
    }
}

收到错误:不支持此类型的单元格我从输入 excel 文件中删除了两行数据,然后在它正常工作之前启动。但是现在我已经完全删除了这些行,另一个问题是<</p>

div class="one_answers">

如果没有数据,XSSFCell将被null.检查是否null。调用cellToString()方法后。

    XSSFCell cell = row.getCell(j);
    if(cell != null) {
        data[i][j] = cellToString(cell);
    } else {
        // if you would like to set value when cell is null
        row.createCell(j).setCellValue(your value);
    }

您可以有一行包含数据,接下来是空行,然后是另一行包含数据。如果未定义,则可以将中间行视为 null,所以我的建议是对行使用迭代器。
RowIteratior 这里是一个好的开始。
此外,获得行后,可以使用单元格迭代器循环访问单元格。请记住,未定义的单元格将被视为 null 并被跳过,但空单元格不为 null!
单元格迭代器在此处记录。
您的方法也很好,但是在使用对象之前,您需要在每次迭代中检查空值或空值。

最新更新