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

使用Apache POI加载xlsx文件时出现NullpointerException

邓令
2023-03-14

在mac osx环境中使用Apache POI 3.8读取文件时,由于无法加载xlsx文件,因此在Windows中使用Open XML SDK 2.0 for Microsoft Office创建了一个文件。下面是堆栈跟踪。我可以打开文件并查看它。

同样的代码适用于我在mac os环境中创建的文件。如果我在处理之前打开并保存文件,我不会有任何问题。注意:保存后文件大小增加。是在.NET中生成文件并在mac osx环境中处理的问题。

有什么线索为什么我得到以下的错误。

Caused by: java.lang.NullPointerException
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:253)
        at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:183)
        at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:73) 

类如下所示,使用实用方法时,没有复制整个类。但在创建工作簿时,这会发生在wb=new XSSFWorkbook(bis)行。我尝试了一些选项,如workbookfactory.create(bis)而不是xssfworkbook,但错误仍然是一样的,主要是文件内容的问题。

public class XLSXReader {

    private BufferedInputStream bis;
    private boolean hasNext = true;
    int skipLines;

    private boolean linesSkiped;

    //   The default line to start reading.
    public static final int DEFAULT_SKIP_LINES = 0;

    private XSSFWorkbook wb =null;
    private XSSFSheet sheet=null;
    private int noOfCols;

    public XLSXReader(InputStream is){
        bis = new BufferedInputStream(is);
        this.noOfCols=0; 
        try {
            wb = new XSSFWorkbook(bis); 
            sheet = wb.getSheetAt(0);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

// with basic utility methods ....
}

共有1个答案

姬坚成
2023-03-14

我认为,您缺少类路径的问题。如下所示。确保属性目录必须位于类路径中。把你的doucments文件放在这些文件夹里。

public class WorkBookReader {
    public static void main(String[] args) {
        try {
            InputStream inp = new FileInputStream("properties/workbook.xls");
            Workbook wb = WorkbookFactory.create(inp);
            Sheet sheet = wb.getSheetAt(0);
            Row row = sheet.getRow(2);
            Cell cell = row.getCell(3);
            if (cell == null)
                cell = row.createCell(5);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            cell.setCellValue("Hello!");

            // Write the output to a file
            FileOutputStream fileOut = new FileOutputStream("properties/workbook.xls");
            wb.write(fileOut);
            fileOut.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }
    }
}
 类似资料:
  • 问题内容: 在上面指出的行中发现异常。无论语言是否是有效的属性文件,我都会在同一行上捕获相同的异常。 问题答案: 改成:

  • 我的问题是为什么我会被抛出错误... java.lang.NoClassDefoundError:org/apache/poi/openxml4j/exceptions/invalidformatexception ...当我在/org/apache/poi/openxml4j/exceptions/的“文件poi-ooxml-3.9-20121203.jar”中看到InvalidFormatEx

  • 我有一个大的。xlsx文件(141 MB,包含293413行,每行62列),我需要在其中执行一些操作。 我在加载此文件时遇到问题(

  • 我尝试以两种方式导入.xlsx文件: 1)如果我从日食中跑出来,如果我导入,我能够成功导入 2)如果我为我的产品创建了一个. jar文件,并在不使用eclipse的情况下作为一个独立的应用程序运行,我会得到一个OutOfMemoryException,因此无法导入 我的文件大小约为3mb,我使用poi 3.9、poi-ooxml-3.9、poi-ooxml-Schemas-3.9、dom4j和xm

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

  • 我不知道为什么会发生这种情况。我正在尝试使用xlsx包加载大约180.xlsx文件。我已经运行了代码,我认为将加载所有文件(不同的名称,但相同的格式),并从每个文件提取3行。见下文: 我得到以下错误 jcall中的错误(“rjavaTools”、“ljava/lang/object;”、“invokeMethod”、cl,:java.lang.IllegalArgumentException:您的