java 如何使用 POI SS 打开 .xlsx 文件?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5836965/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to open .xlsx files with POI SS?
提问by Yoni
I am trying to open .xlsx files with POI SS with this code (taken from http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook):
我正在尝试使用此代码(取自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();
and I get this error message:
我收到此错误消息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException
I add the xbean.jar to my library and to my run-time libraries.
我将 xbean.jar 添加到我的库和运行时库中。
how can I resolve this exception?
我该如何解决这个异常?
Thanks !
谢谢 !
回答by winklerrr
First: Fix the Exception
第一:修复异常
There are two solutions:
有两种解决方案:
- As Gagravarr already mentioned: you need dom4j to fix your exception.
- As Jon already mentioned: you have to update your dependencies, so you don't need dom4j anymore.
- 正如 Gagravarr 已经提到的:您需要 dom4j 来修复您的异常。
- 正如 Jon 已经提到的:您必须更新您的依赖项,因此您不再需要 dom4j。
If you're using Maven, you can add the necessary dependencies with: (Maybe check for newer versions at: Maven Repository: org.apache.poi)
如果您使用的是 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>
Then: Open the File
然后:打开文件
If you've fixed the exception, you can open your file.xlsx
file with the following code:
如果您已修复异常,则可以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 ...
Further tips
更多提示
- Like Gagravarr, I also recommend to use a file instead of a file input stream.
- If you want to open a certain sheet you can use
workbook.getSheet(String name);
- If you don't know the relative path to your file according to your project, you can easily check it with
System.out.println("Relative path: " + System.getProperty("user.dir"));
- 和 Gagravarr 一样,我也推荐使用文件而不是文件输入流。
- 如果你想打开某个工作表,你可以使用
workbook.getSheet(String name);
- 如果根据您的项目不知道文件的相对路径,您可以轻松地检查它
System.out.println("Relative path: " + System.getProperty("user.dir"));
Regards, winklerrr
问候,温克勒
回答by Gagravarr
You need dom4j, that's what the exception is telling you
你需要 dom4j,这就是异常告诉你的
You might want to look at the componentspage on the POI website which lists the dependencies
您可能想查看POI 网站上的组件页面,其中列出了依赖项
Also, since you have a File
, open directly with that, don't go via an InputStream
. There's a section in the Apache POI FAQ on that, basically using a file is quicker and lower memory than buffering the whole thing via a stream!
另外,因为你有一个File
, 直接用它打开,不要通过InputStream
. Apache POI 常见问题中有一个部分,基本上使用文件比通过流缓冲整个事情更快,内存更少!
回答by Envil
I haven't analyzed your error message, but after seeing the code, I see that there is something not correct.
The Wookbook is not work with *.xlsx (Office 2007 and after) files. So you have to use the XSSFWorkbook. You may want to change the wb initialization to:
我还没有分析你的错误信息,但看到代码后,我发现有一些不正确的地方。
Wookbook 不适用于 *.xlsx(Office 2007 及更新版本)文件。所以你必须使用 XSSFWorkbook。您可能希望将 wb 初始化更改为:
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(inp);
回答by khaled Rihane
This can help you.
这可以帮助你。
InputStream is = new FileInputStream(pathOfYourXlsxFile);
XSSFWorkbook workbook = new XSSFWorkbook(is);
//Get first sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
For your Exception you have to put dom4j.jar to your classpath.You can find it here
对于您的异常,您必须将 dom4j.jar 放到您的类路径中。您可以在此处找到它
回答by Jon
I realize the thread is old, but it led me today to the answer I needed for the same problem.
我意识到这个线程已经过时了,但它今天让我找到了解决同一问题所需的答案。
The docs on the page suggested above (i.e include dom4j.jar) say that's no longer necessary:
上面建议的页面上的文档(即包括 dom4j.jar)说不再需要:
"The OOXML jars used to require DOM4J, but the code has now been changed to use JAXP and no additional dom4j jars are required."
“OOXML jar 过去需要 DOM4J,但现在代码已更改为使用 JAXP,并且不需要额外的 dom4j jar。”
I found that including the following resolved the problem:
我发现包括以下内容解决了问题:
poi-3.11-20141221.jar
poi-ooxml-3.11-20141221.jar
poi-ooxml-schemas-3.11-20141221.jar
xmlbeans-2.6.0.jar