当前位置: 首页 > 知识库问答 >
问题:

使用apache POI/MonitorJBL/Excel-Streaming-Reader读取大型xlsx文件中的空白单元格问题

狄玉书
2023-03-14

我正在工作的需求,在那里我需要读取大型xlsx文件包含超过一百万条记录。apache POI在读取大文件时内存效率不高,因此我使用了下面的API,它添加

https://github.com/monitorjbl/excel-streaming-reader,它是流式API包装器,同时保留了标准POI API的语法。除了读取行中的空白单元格外,所有操作都很正常。如果单元格为空,上述API抛出空指针

       for(int i=0; i<=expectedColumns-1; i++) {
              Cell cell = row.getCell(i);
    switch (cell.getCellType()) {
    }
            }
java.lang.NullPointerException
at test.XLSXToCSVConverterStreamer.xlsx(XLSXToCSVConverterStreamer.java:67)
at test.XLSXToCSVConverterStreamer.main(XLSXToCSVConverterStreamer.java:164)

如果行中的单元格为null,则在开关大小写处抛出null指针,即cell.GetCellType。我修改了代码,将空单元格读为空单元格,但它不支持

    for(int i=0; i<=expectedColumns-1; i++) {
      //Cell cell = row.getCell(i);
     Cell cell = row.getCell(i, Row.CREATE_NULL_AS_BLANK);
switch (cell.getCellType()) {
}
    }

如果我使用Cell Cell=row.getcell(I,row.create_null_as_blank)将空单元格读取为空,我将得到以下问题。请帮我解决这个问题

com.monitorjbl.xlsx.exceptions.NotSupportedException
at com.monitorjbl.xlsx.impl.StreamingRow.getCell(StreamingRow.java:108)

共有1个答案

柳胜
2023-03-14

流式excel不支持许多方法,但它为读取大型excel文件提供了优势。您可以按如下方式读取一行中的空白单元格(使用流式Excel Reader V1.1.0)

boolean flag = false;
int lastcolno = row.getLastCellNum();

for (colno = 0; colno < lastcolno; colno++) {
    colFlag = isColumnEmpty(row, colno);

    if (flag == true)
        break;
}

if (colFlag == true) {
     System.out.println("In index row, column no: "
            + (colno + 1) + " is empty");
}

public static boolean isColumnEmpty(Row row, int colno) {
     Cell c = row.getCell(colno);
     if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK)
            return true;
return false;
}
 类似资料:
  • 我有一个巨大的excel文件,其中包含大量列,如下所示:- 当我打印excel中的所有值时,我的代码生成的输出是:- 所以,如果我们看看上面的输出,我们可以注意到我留下空白值的单元格没有被POI库拾取。有没有一种方法可以让这些值为空?还是一种识别所呈现的值跳过空白单元格的方法? 请注意:我使用的不是usermodel(org.apache.poi.ss.usermodel),而是一个事件API来处

  • 我在用图书馆 我在努力 库,但无法将其转换为工作簿 注意:在最终结果中,我希望返回XSSFWorkbook 上面的代码会内存溢出,任何帮助都将提前感谢

  • 我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。

  • 在谷歌搜索StackOverflow之后,我还没有找到与这个问题相关的地方。目前我可以将空白单元格读取为空,但一次只能读取一个单元格。所以我必须写这样的东西: 这对我来说不太好,因为我对重复感到不满。我们可以设置返回?

  • 背景:我正在尝试将Excel文件读入Java程序。我的Excel文件的意思是表示一个网格或栅格地图,所以我使每个单元格的高度和宽度为一英寸。我的想法是,我可以“绘制”一个地图或图像,通过阴影在每个单元格与一个颜色。然后,我可以将Excel文件读到一个我自己用“Pixel”对象创建的Java程序,并创建一个更文字化的图像。我是计算机科学的本科生,到目前为止我只上过四节计算机科学课。我懂OOP,能用J

  • 我正在尝试使用Apache POI来读取旧的(2007年之前和XLS)Excel文件。我的程序走到行的末尾并进行迭代,直到找到非null或非空的内容。然后它迭代几次并获取这些细胞。该程序可以很好地读取Office 2010中的XLSX和XLS文件。 我收到以下错误消息: 排队的时候: 根据代码: 其中是文档中最后一个不为空或null的单元格。当我尝试打印第一个不为空或null的单元格时,它不会打印