我想阅读excel文件但是要提供
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObject
at ExcelReader.main(ExcelReader.java:32)
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlObject
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
请帮帮我。 首先打开.xlsx文件,然后给出第一张表。 最后在控制台上打印excel文件的数据。 Ps:我在我的项目中添加了poi-ooxml-3.9-20121203.jar。
import java.io.File;
import java.io.FileInputStream;
import javax.swing.text.html.HTMLDocument.Iterator;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import java.util.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* @author mohammad hosein
*
*/
public class ExcelReader {
/**
* @param args
*/
public static void main(String[] args) {
try
{
FileInputStream file = new FileInputStream(new File("E:\\test.xlsx"));
//Get the workbook instance for XLS file
XSSFWorkbook workbook = new XSSFWorkbook (file);
//Get first sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Get iterator to all the rows in current sheet
java.util.Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext())
{
Row row = rowIterator.next();
java.util.Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext())
{
Cell cell = cellIterator.next();
System.out.print(cell.getStringCellValue() + "\t");
}
System.out.println("");
}
}
catch(Exception e)
{
System.out.println("EROR!");
}
//Get iterator to all cells of current row
}
}
答案 0 :(得分:12)
您的代码无关紧要。当编译时可用的类在运行时不可用时,会发生NoClassDefFoundError
。如果您提供了完整的堆栈跟踪,以及未找到的类的实际名称,则可以提供更精确的建议。
通常,当您使用与构建代码的JAR不同版本的JAR运行代码时会发生这种情况。流氓JAR可能来自应用程序容器或类似物,并且比类型JAR更早地放在类路径上。
鉴于您添加的堆栈跟踪,您缺少Apache POI的传递依赖关系:XMLBeans。您可能在运行时缺少此JAR。这一切都取决于您运行项目的具体程度。
答案 1 :(得分:4)
我想你忘了检查Project的财产中的库。
答案 2 :(得分:2)
当没有添加所有必需的poi jar文件时会发生这种情况。所以我的建议是添加所有必需的jar文件。在lib和ooxml-lib文件夹中添加jar文件以及poi-3.15-beta2 jar文件。 如何添加jar
答案 3 :(得分:1)
Apache POI文档提供了a full list of the different components and their dependencies。您声明要使用poi-ooxml
,但您似乎错过了xmlbeans
依赖关系(也许还有其他人!)。有关所有内容的详细信息,请参阅components page。
如果您下载binary release of Apache POI,那么您将找到您可能需要随手包含的所有依赖项。只需添加您需要的那些。
如果所有这些手册对您来说都有点困难,请使用Apache Maven或Apache Ivy之类的内容来管理您的依赖项。
接下来,你需要两次可用的所有罐子。一次编译,一次运行。只是让日食或类似的罐子可能还不够,你还需要让它们进入你的生产环境!
答案 4 :(得分:1)
确保您在库中添加了“commons-collections.jar”文件,否则从此处下载所有库文件:
http://www-us.apache.org/dist/poi/release/bin/poi-bin-3.16-20170419.zip
在zip文件中打开后打开“lib”文件夹,你会发现需要在项目库中添加的common-collectins.jar文件,如附图所示:
答案 5 :(得分:0)
NoClassDefFoundError
将会出现。通常,当您获得NoClassDefFoundError:
This site为您提供了解决此错误原因的所有理由3种解决方法
答案 6 :(得分:0)
顾名思义,ClassNotFoundException
在Java中是java.lang.Exception
的子类,当 Java虚拟机尝试加载特定类并且未找到时类路径中请求的类。
关于此异常的另一个重点是,它是一个已检查的异常,并且您需要在使用可能通过使用try在Java中抛出ClassNotFoundException
的方法时提供显式异常处理-catch块或使用throws子句。
public class ClassNotFoundException
extends ReflectiveOperationException
当应用程序尝试使用以下命令通过其字符串名称加载类时抛出:
但是找不到具有指定名称的类的定义。
将poi-ooxml-schemas-3.9-20121203.jar
文件添加到类路径以避免异常
你会在这些链接上找到
修改
您错过了POI附带的额外jar文件。将它们包含在您的课程路径中
你需要包含一个名为xmlbeans-x.x.x.jar
的jar文件
get jar here。
XMLBeans
答案 7 :(得分:0)
当所需的jar不可用时,通常会发生NoClassDefFoundError
exception
检查以下条件
Jar file path
poi-ooxml-3.9-20121203.jar
在编译时完全检查是否需要任何额外的jar 程序可能需要您尚未导入的任何类文件
poi-3.7-jdk1.4-20110508-rc2
jar是必需的。
答案 8 :(得分:0)
有两个重要的jar文件与poi-3.9一起提供,需要包含在XSSFWorkbook中使用它们
的xmlbeans的* .jar DOM4J - *罐
这两个jar都存在于ooxml-lib文件夹中,是poi-3.9 * .zip的一部分。 将它们包含在您的资料库中,这应该可以解决问题。
答案 9 :(得分:0)
我遇到了同样的问题。 我通过将整个文件夹添加到库(使用Netbeans)在\ ooxml-lib \文件夹中添加了JAR。 我删除了这个并手动添加了每个,它工作。
答案 10 :(得分:0)
在构建路径中添加xmlbeans-2.3.0.jar。这是xlsx所必需的。