如何用POI SS打开.xlsx文件?
我想用这个代码(取自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添加到我的库和我的运行时库。
我怎样才能解决这个exception?
谢谢 !
我没有分析你的错误信息,但看到代码后,我看到有一些不正确的东西。
Wookbook不适用于* .xlsx(Office 2007及以后)文件。 所以你必须使用XSSFWorkbook。 您可能想要将wb初始化更改为:
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(inp);
你需要dom4j,这是例外情况告诉你的
您可能需要查看POI网站上列出依赖关系的组件页面
此外,由于您有一个File
,直接打开,不要通过一个InputStream
。 在Apache POI常见问题解答中有一部分 ,基本上使用文件比通过streamcaching整个文件更快,内存更低!
修复例外
有两个解决scheme:
- 正如Gagravarr已经提到:你需要dom4j来修复你的exception。
- 正如乔恩已经提到:你必须更新你的依赖关系,所以你不需要dom4j了。
如果你使用的是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>
打开.xlsx
如果您修复了exception,则可以使用以下代码打开您的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一样,我也推荐使用文件而不是文件inputstream。
- 如果你想打开某个工作表,你可以使用
workbook.getSheet(String name);
- 如果你不知道根据你的项目文件的相对path,你可以使用
System.out.println("Relative path: " + System.getProperty("user.dir"));
来轻松检查它System.out.println("Relative path: " + System.getProperty("user.dir"));
问候,winklerrr
这可以帮助你。
InputStream is = new FileInputStream(pathOfYourXlsxFile); XSSFWorkbook workbook = new XSSFWorkbook(is); //Get first sheet from the workbook XSSFSheet sheet = workbook.getSheetAt(0);
对于你的exception,你必须把dom4j.jar放到你的类path中。你可以在这里find它
我意识到线程已经老了,但是今天却让我意识到了同样的问题所需要的答案。
上面build议的页面上的文档(即包括dom4j.jar)说,这不再是必要的:
“OOXMLjar子曾经需要DOM4J,但现在代码已经改为使用JAXP,并且不需要额外的dom4jjar子。
我发现包括以下解决了这个问题:
poi-3.11-20141221.jar poi-ooxml-3.11-20141221.jar poi-ooxml-schemas-3.11-20141221.jar xmlbeans-2.6.0.jar