如何用POI SS打开.xlsx文件?

时间:2011-04-29 20:17:23

标签: java excel apache-poi

我正在尝试使用此代码(取自http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook)使用POI SS打开.xlsx文件:

InputStream inp = new FileInputStream("workbook.xls");
//InputStream inp = new FileInputStream("workbook.xlsx");

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(3);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("a test");

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

我收到此错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException

我将xbean.jar添加到我的库和我的运行时库。

如何解决此异常?

谢谢!

5 个答案:

答案 0 :(得分:3)

首先:修复例外

有两种解决方案:

  1. 正如Gagravarr已经提到的:你需要dom4j来修复你的异常。
  2. 正如Jon已经提到的:你必须更新你的依赖项,所以你不再需要dom4j了。
  3. 如果你正在使用Maven,你可以添加必要的依赖项:(也许可以在Maven Repository: org.apache.poi检查更新的版本)

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
    </dependency>
    

    然后:打开文件

    如果您已修复例外,则可以使用以下代码打开file.xlsx文件:

    String path = "Relative/Path/To/Your/File/file.xlsx";
    File file = new File(path);
    
    XSSFWorkbook workbook = new XSSFWorkbook(file);
    XSSFSheet sheet = workbook.getSheetAt(0);
    // Use your sheet ...
    

    进一步提示

    • 与Gagravarr一样,我也建议使用文件而不是文件输入流。
    • 如果您想要打开某个工作表,可以使用workbook.getSheet(String name);
    • 如果您根据项目不知道文件的相对路径,可以使用System.out.println("Relative path: " + System.getProperty("user.dir"));
    • 轻松查看文件。

    问候,winklerrr

答案 1 :(得分:2)

你需要dom4j,这就是异常告诉你的事情

您可能希望查看POI网站上列出依赖项的the components页面

此外,由于你有一个File,直接打开它,不要通过InputStreamApache POI FAQ on that中有一个部分,基本上使用文件比通过流缓冲整个内容更快更低内存!

答案 2 :(得分:2)

我没有分析您的错误消息,但在看到代码后,我发现有些内容不正确 Wookbook不适用于* .xlsx(Office 2007及更高版本)文件。所以你必须使用XSSFWorkbook。您可能希望将wb初始化更改为:

XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(inp);

答案 3 :(得分:1)

这可以帮到你。

InputStream is = new FileInputStream(pathOfYourXlsxFile);
                XSSFWorkbook workbook = new XSSFWorkbook(is);
                //Get first sheet from the workbook
                XSSFSheet sheet = workbook.getSheetAt(0);

对于你的例外,你必须把dom4j.jar放到你的类路径中。你可以找到它here

答案 4 :(得分:0)

我意识到线程已经过时了,但它今天引导我找到了同样问题所需的答案。

上面提到的页面上的文档(即包括dom4j.jar)说不再需要:

“OOXML jar用于需要DOM4J,但代码现已更改为使用JAXP,并且不需要额外的dom4j jar。”

我发现包含以下内容解决了问题:

poi-3.11-20141221.jar
poi-ooxml-3.11-20141221.jar
poi-ooxml-schemas-3.11-20141221.jar
xmlbeans-2.6.0.jar