当前位置: 首页 > 面试题库 >

使用Apache POI访问单元时发生NullPointerException

蒯卓君
2023-03-14
问题内容

我正在尝试使用Apache
POI读取Excel文件。我的目标是从每行中获取单元格2和3,并将它们放入数组中。在某些行中,单元格3为空(我不是在谈论EMPTY,NULL或BLANK)。如果在Excel中检查它们,则为空。

这些空单元格中的一些(不是全部)导致NullPonterException: 线程“ main”
java.lang.NullPointerException中的异常
。尝试获取单元格值或单元格类型时会发生这种情况。我的印象是该位置没有牢房。

同时,如果我row.createCell(2).setCellType(1);为该特定行执行该程序,则继续到该类型的下一个单元格。那是(我能找到的)唯一的解决方法,可以继续从下一行读取单元格。

您能否帮助我了解如何(使用代码)识别这些单元并将解决方法放到适当的位置,以便我可以继续阅读直到文件末尾?

这是代码:

static ArrayList<String> getFirstFile() throws IOException
{
    FileInputStream fileIn = null;

    ArrayList <String> namesFirstFile = new ArrayList <String>();
    String folderPath = "C:\\";
    String indivList1 = "filename.xls";

    fileIn = new FileInputStream(folderPath+indivList1);
    POIFSFileSystem fs = new POIFSFileSystem(fileIn);
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);
    int rowNumber = 6; //skipping the first 6 rows as irrelevant
    HSSFRow row = sheet.getRow(rowNumber);
    String firstName = "";
    String lastName = "";

    while(row.getCell(0).getCellType() == 0) {
        lastName = row.getCell(1).toString();
        firstName = row.getCell(2).toString();

        namesFirstFile.add((rowNumber-6), (lastName + " " + firstName));
        rowNumber++;
        row = sheet.getRow(rowNumber);          
    }
}

问题答案:

尝试设置Row.MissingCellPolicy:

  • static Row.MissingCellPolicy CREATE_NULL_AS_BLANK

为缺少的单元格创建一个新的空白单元格。

  • static Row.MissingCellPolicy RETURN_BLANK_AS_NULL

缺少的单元格返回为null,空白单元格也返回

  • static Row.MissingCellPolicy RETURN_NULL_AND_BLANK

缺少的单元格返回为null,正常返回空白单元格



 类似资料:
  • 我正在使用Apache POI读取零件编号电子表格中的数据。我在我们的数据库中查找零件编号,如果我们有零件的计算机辅助设计图纸,我将零件编号单元格涂成绿色,如果没有,我将其涂成红色。处理完成后,将保存电子表格。我遇到的问题是那列中的每个细胞都是绿色的。我已经完成了代码,查找零件号的逻辑工作正常,确定单元格应该是什么颜色以及设置颜色和填充的逻辑似乎也工作正常。知道我做错了什么吗? 谢谢

  • 我正在尝试用Apache POI读取Excel文件。我的目标是从每一行获得单元格2&3,并将它们放入一个数组。在某些行中,单元格3是空的(我不是说空的、空的或空白的)。如果您在Excel中检查它们,则只需为空。 其中一些空单元格(不是全部)在线程“main”java.lang.NullPointerException中导致nullPonterException:Exception。在尝试获取单元格

  • 我有一个巨大的excel文件,其中包含大量列,如下所示:- 当我打印excel中的所有值时,我的代码生成的输出是:- 所以,如果我们看看上面的输出,我们可以注意到我留下空白值的单元格没有被POI库拾取。有没有一种方法可以让这些值为空?还是一种识别所呈现的值跳过空白单元格的方法? 请注意:我使用的不是usermodel(org.apache.poi.ss.usermodel),而是一个事件API来处

  • 我设置了一个AWS EMR集群,其中包括Spark 2.3.2、hive 2.3.3和hbase 1.4.7。如何配置Spark以访问hive表? 我采取了以下步骤,但结果是错误消息: Java语言lang.ClassNotFoundException:java。lang.NoClassDefFoundError:org/apache/tez/dag/api/SessionNotRunning使用

  • 当我在oozie中执行spark进程时,我有以下错误。找不到数据库。 这是我的火花配置

  • 尝试启动应用程序时,访问ControllerServlet时出现错误500(HTTP状态500–内部服务器错误),其代码如下所示 错误文本: 类型异常报告 消息[com.example.ControllerServlet] 说明服务器遇到意外情况,无法满足请求。 例外 雅加达。servlet。ServletException:БааС[com.example.ControllerServlet]。