我正在尝试使用此代码(取自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添加到我的库和我的运行时库。
如何解决此异常?
谢谢!
答案 0 :(得分: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 ...
workbook.getSheet(String name);
System.out.println("Relative path: " + System.getProperty("user.dir"));
问候,winklerrr
答案 1 :(得分:2)
你需要dom4j,这就是异常告诉你的事情
您可能希望查看POI网站上列出依赖项的the components页面
此外,由于你有一个File
,直接打开它,不要通过InputStream
。 Apache 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