Java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlObject错误

48

我遇到了以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObject at OrderBook.WriteToExcelSheet.CreateOutPutFile(WriteToExcelSheet.java:20) at OrderBook.MainMethod.main(MainMethod.java:71)

我在网上查找了这个错误的原因,但是没有找到为什么出现这个错误。

我已经包含了以下jar文件:

poi-3.9-20121203.jar, 
poi-excelant-3.9-20121203.jar,
poi-examples-3.9-20121203.jar,
poi-ooxml-3.9-20121203.jar,
poi-ooxml-schemas-3.9-20121203.jar,
poi-scratchpad-3.9-20121203.jar

代码:

public class WriteToExcelSheet {
    public static Map < Integer, Object[] > data = new TreeMap < Integer, Object[] > ();
    public static void CreateOutPutFile() {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Orderbook Stats");
        //This data needs to be written (Object[])
        //Iterate over data and write to sheet
        Set < Integer > keyset = data.keySet()
        int rownum = 0;
        for (Integer key: keyset) {
            Row row = sheet.createRow(rownum++);
            Object[] objArr = data.get(key);
            int cellnum = 0;
            for (Object obj: objArr) {
                Cell cell = row.createCell(cellnum++);
                if (obj instanceof String) cell.setCellValue((String) obj);
                else if (obj instanceof Integer) cell.setCellValue((Integer) obj);
            }
        }
        try {
            //Write the workbook in file system
            System.out.println("OutPutStats.xlsx writing..............................");
            FileOutputStream out = new FileOutputStream(new File("FileLocation/o.xlxs"));
            workbook.write(out);
            out.close();
            System.out.println("OutPutStats.xlsx written successfully on disk.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}    
9个回答

100

你需要包含另一个jar。

xmlbeans-2.3.0.jar

添加这个并尝试。

注意:这仅适用于以 .xlsx 格式结尾的文件,不适用于仅以 .xls 格式结尾的文件。


2
@user2942227,您可以从这里下载它。 - Jhanvi
现在它抛出了这个错误,"main"线程中的异常java.lang.NoClassDefFoundError: org/dom4j/DocumentExceptionCaused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException,你知道为什么吗? - user2942227
1
@user2942227 添加 dom4j-1.6.1.jar,可以从这里下载。 - Jhanvi
1
在您下载的POI存档中查找名为ooxml-lib的文件夹。 - Tejas Kale
1
@asiya,你能列出你添加的所有JAR包吗? - Jhanvi
显示剩余4条评论

4

你需要包含两个额外的jar文件。

xmlbeans-2.3.0.jar 和 dom4j-1.6.1.jar 加上试试,它就能工作了。

注意:这仅适用于带有 .xlsx 格式的文件,而不是只有 .xlt 格式的文件。


3

当尝试翻译后缀为.xlsx的Excel文件时,您需要添加额外的jar包,即xmlbeansxxx.jar。 xxxx是版本号,例如xmlbeans-2.3.0.jar


它修复了那个错误。现在,它抛出了这个错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException。由于:java.lang.ClassNotFoundException: org.dom4j.DocumentException,你知道为什么吗? - user2942227
1
你需要添加dom4j.jar。因为POI中的一些XML文件使用dom4j来处理XML文件。 - Mengjun
当你下载POI的源代码或二进制文件时,应该有一个名为lib的文件夹。所有的依赖库,比如xmlBeans和dom4j.jar都在那里。 - Mengjun

1
如果你添加了xmlbeans-2.3.0.jar却无法正常工作,那么在添加jar后必须使用HSSFWorkbook而不是XSSFWorkbook。例如:
    Workbook workbook = new HSSFWorkbook();
    Sheet listSheet = workbook.createSheet("Kişi Listesi");

    int rowIndex = 0;
    for (KayitParam kp : kayitList) {
        Row row = listSheet.createRow(rowIndex++);
        int cellIndex = 0;
        row.createCell(cellIndex++).setCellValue(kp.getAd());
        row.createCell(cellIndex++).setCellValue(kp.getSoyad());
        row.createCell(cellIndex++).setCellValue(kp.getEposta());
        row.createCell(cellIndex++).setCellValue(kp.getCinsiyet());
        row.createCell(cellIndex++).setCellValue(kp.getDogumtarihi());
        row.createCell(cellIndex++).setCellValue(kp.getTahsil());
    }

    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        workbook.write(baos);
        AMedia amedia = new AMedia("Kisiler.xls", "xls",
                "application/file", baos.toByteArray());
        Filedownload.save(amedia);
        baos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

1
我遇到了类似的情况,所以我替换了所有外部的jar文件(poi-bin-3.17-20170915),并确保您添加了lib和ooxml-lib文件夹中存在的其他jar文件。
希望这可以帮助您!!! :)

1
你需要包含xmlbeans-xxx.jar,如果你已经下载了POI二进制压缩包,你将在ooxml-lib文件夹中获得xmlbeans-xxx.jar(例如:\poi-3.11\ooxml-lib)。
这个jar用于XML绑定,适用于.xlsx文件。

0

如果要以正确的方式进行操作,您需要创建一个Maven项目,并将所有依赖项放入pom.xml文件中。 Maven的依赖关系可以通过Google搜索获得,例如:https://mvnrepository.com/artifact/org.apache.poi/poi/5.0.0

如果要采用困难的方式进行,则需下载POI库二进制文件,并添加来自所有文件夹(对于POI 5.0.0这个版本, 这些文件夹包括辅助文件夹、ooxml-lib文件夹、lib文件夹和根目录下的所有.jar文件)。在我看来,如果您不想弄清楚哪个库与哪个相关,那么这种方法也可以。

类似于这样:

enter image description here


0
我正在使用Talend V7.3.1,我的poi版本是“4.1.0”,包括xml-beans在依赖列表中并没有解决我的问题(即2.3.0和2.6.0)。
It was fixed by downloading the jar "xmlbeans-3.0.1.jar" and adding it to the project

enter image description here


-1

当类路径中找不到类时,会抛出ClassNotFoundException异常。 添加以下jar文件(包含XmlObject接口的定义)将解决该问题。

xmlbeans-x.y.z.jar

您可以在以下链接中下载最新的xmlbeans jar文件https://xmlbeans.apache.org/download/index.html

如果您正在使用apache poi库,请确保将lib和ooxml-lib文件夹中的jar文件添加到项目中。


@TammaliDeppak,7年前的被接受答案是添加一个特定缺失的JAR文件 - 添加所有的JAR文件虽然可能有效,但似乎并没有为问题增添新的思路。请随意更新您的答案,提供新的见解。 - Mr R
@MrR 我在使用apache poi库时遇到了同样的问题。我发现我没有添加lib和ooxml-lib文件夹中存在的jar文件。添加所有依赖项jar包有所帮助。虽然正如你所说,我在撰写文章时应该考虑周全,但它没有传达正确的信息。谢谢: )。 - king.reflex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接