簡體   English   中英

使用Excel工作簿時出現異常

[英]exception while using excel workbook

我在使用poi jars在excel工作簿中寫入一些數據時,在代碼中得到了這些異常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    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)
    at WorkBookDemo.main(WorkBookDemo.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.UnsupportedFileFormatException
    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)
    ... 13 more

我添加了以下罐子:

  1. xmlbeans-2.4.0
  2. poi-ooxml-schemas-3.11
  3. poi-3.11
  4. commons-logging-1.1
  5. dom4j-1.6.1
  6. log4j-1.2.17

     import java.io.File; import java.io.FileOutputStream; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class WorkBookDemo { public static void main(String[] args) { //Blank workbook XSSFWorkbook workbook = new XSSFWorkbook(); //Create a blank sheet XSSFSheet sheet = workbook.createSheet("Employee Data"); //This data needs to be written (Object[]) Map<String, Object[]> data = new TreeMap<String, Object[]>(); data.put("1", new Object[] {"ID", "NAME", "LASTNAME"}); data.put("2", new Object[] {1, "Amit", "Shukla"}); data.put("3", new Object[] {2, "Lokesh", "Gupta"}); data.put("4", new Object[] {3, "John", "Adwards"}); data.put("5", new Object[] {4, "Brian", "Schultz"}); //Iterate over data and write to sheet Set<String> keyset = data.keySet(); int rownum = 0; for (String 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 FileOutputStream out = new FileOutputStream(new File("exps.xlsx")); workbook.write(out); out.close(); System.out.println("exps.xlsx written successfully on disk."); } catch (Exception e) { e.printStackTrace(); } } } 

您缺少jar文件。 我在工作區中運行了您的代碼,並添加了所需的jar來構建路徑。 它先后工作。

org/apache/poi/UnsupportedFileFormatException is under poi-x.xx-xxx-xx.jar

您的代碼沒有錯誤,這是正確的。 添加罐子以構建路徑。

FileOutputStream out = new FileOutputStream(new File("exps.xlsx"));

文件輸出流是用於將數據寫入文件或FileDescriptor的輸出流。 文件是否可用或是否可以創建取決於底層平台。 特別是某些平台,一次只允許一個FileOutputStream(或其他文件寫入對象)打開一個文件進行寫入。 在這種情況下,如果所涉及的文件已經打開,則此類中的構造函數將失敗。

由於您正在顯式創建File對象,並將其傳遞給FileOutputStream構造函數。 假定文件"exps.xlsx"已經創建。 [參考。]

如果不是這樣,您只需在FileOutputStream構造函數中傳遞文件名FileOutputStream

FileOutputStream out = new FileOutputStream("exps.xlsx");

如果尚未創建文件,它將自動創建文件。

此外,我測試了您的給定代碼,並使用了以下Maven依賴關系,並且可以正常工作。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.10-FINAL</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.10</version>
</dependency>

如果您不使用maven項目,則可以顯式添加上述版本的上述jars

apachePOI庫所需的jar的以下列表應均為相同版本,如下所示:

org.apache.poi.3.11
org.apache.poi-ooxml.3.11
org.apache.poi-ooxml-schemas.3.11

如果同一庫的上述jar版本不同,則您將得到異常,例如“ java.lang.NoClassDefFoundError:org / apache / poi / UnsupportedFileFormatException”

您也可以檢查是否有重復的poi jar,假設您需要poi-ooxml-3.9。 罐。 但是在您的lib文件夾中,既有poi-ooxml-3.11.jar,又有poi-ooxml-3.9.jar,然后刪除poi-ooxml-3.11.jar,則它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM