使用 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.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.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.run(Unknown Source)
at java.net.URLClassLoader.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
我添加了以下罐子:
- xmlbeans-2.4.0
- poi-ooxml-schemas-3.11
- poi-3.11
- commons-logging-1.1
- dom4j-1.6.1
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 文件。我 运行 你的代码在我的工作区,我添加了所需的 jars 来构建路径。它相继起作用。
org/apache/poi/UnsupportedFileFormatException is under poi-x.xx-xxx-xx.jar
您的代码没有错误,它是正确的。将 jars 添加到构建路径。
FileOutputStream out = new FileOutputStream(new File("exps.xlsx"));
因为您显式创建了一个 File
对象,并将其传递给 FileOutputStream
构造函数。它假定文件 "exps.xlsx"
已经创建。 [Reference.]
以防万一,您只需在 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
。
你也可以检查重复的 poi jar,假设你需要 poi-ooxml-3.9。罐。但是在你的 lib 文件夹中有 poi-ooxml-3.11.jar, poi-ooxml-3.9.jar 然后删除 poi-ooxml-3.11.jar,它应该可以工作。
下面列出的 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 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.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.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.run(Unknown Source)
at java.net.URLClassLoader.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
我添加了以下罐子:
- xmlbeans-2.4.0
- poi-ooxml-schemas-3.11
- poi-3.11
- commons-logging-1.1
- dom4j-1.6.1
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 文件。我 运行 你的代码在我的工作区,我添加了所需的 jars 来构建路径。它相继起作用。
org/apache/poi/UnsupportedFileFormatException is under poi-x.xx-xxx-xx.jar
您的代码没有错误,它是正确的。将 jars 添加到构建路径。
FileOutputStream out = new FileOutputStream(new File("exps.xlsx"));
因为您显式创建了一个 File
对象,并将其传递给 FileOutputStream
构造函数。它假定文件 "exps.xlsx"
已经创建。 [Reference.]
以防万一,您只需在 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
。
你也可以检查重复的 poi jar,假设你需要 poi-ooxml-3.9。罐。但是在你的 lib 文件夹中有 poi-ooxml-3.11.jar, poi-ooxml-3.9.jar 然后删除 poi-ooxml-3.11.jar,它应该可以工作。
下面列出的 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"