目前的项目中需要将Excel内容显示在页面上,尝试了各种方法。 发下下面一种比较适合。 1.运行环境为win平台,不牵扯可移植 2.文档内容简单 3.简单显示 下面是一段代码
import java.io.File;
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
/**
* 将xls文件读出后并转换成xml文件
* @author Jeff
* @version v1.0
*/
public class ExcelUtil {
/**
*
* @param src 源文件xls文件
* @param dest 导出文件xml文件
*/
public static void saveXlsAsXml(String src, String dest) {
try {
Ole32.CoInitialize();
File file = new File(dest);
if (file.exists()) {
file.delete();
}
DispatchPtr app = new DispatchPtr ("Excel.Application");
app.put("Visible", false);
DispatchPtr books=(DispatchPtr)app.get("Workbooks");
DispatchPtr book = (DispatchPtr) books.invoke("Open", src);
/**
* for the benefit of others, here is the complete list of canstant values for the saveas function :
18=Excel
6=Comma-seperated values format
22=Macintosh comma-separated values format
24=MSDOS comma-seperated values format
23=MS windows comma-separated values format
-4158=O/S boing used comma-separated values format
7=DBase II format
8=DBase III format
11=DBase IV format
9=Data interchange format
16=Excel 2.0 format
27=Excel 2.0 (Far East) format
29=Excel 3.0 format
33=Excel 4.0 format
35=Excel 4.0 Workbook format
39=Excel 5.0 & Excel 97 format
43=Excel 95 & Excel 97 format
44=HTML
26=Excel international add-in
25=Excel international marco
2=symbolic link format
17=template file format
19=Mcintosh test file format
21=MSDOS test file format
36=text printer file (.prn)
20=MS Windows text file format
42=Unicode
45=Web archive format (.mht)
5=Lotus 2.x format
31==Lotus 2.x .all format
30=Lotus 2.x .fmt format
15=Lotus 3.x format
32=Lotus3.x and Lotus 123 for Windows format
38=Lotus 4.0 format
4=MS Works format
-4143=Excel workbook format
28=MS Works (far east) format
34=Quattro Pro for MSDOS format
46=XML format
*/
book.invoke("SaveAs",dest,new Integer(46));
book.invoke("Quit");
} catch (Exception e) {
}
}
}
问题出来了,单元测试时报了这个异常: java.lang.UnsatisfiedLinkError: win32Invoke0 at org.jawin.marshal.GenericStub.win32Invoke0(Native Method) at org.jawin.marshal.GenericStub.win32Invoke(GenericStub.java:152) at org.jawin.FuncPtr.invoke(FuncPtr.java:186) at org.jawin.FuncPtr.invoke(FuncPtr.java:205) at org.jawin.win32.Ole32.CLSIDFromProgID(Ole32.java:115) at org.jawin.win32.Ole32.GetFromProgID(Ole32.java:95) at org.jawin.COMPtr.(COMPtr.java:126) at org.jawin.DispatchPtr.(DispatchPtr.java:72) at com.intelsrc.util.ExcelUtil.saveXlsAsXml(ExcelUtil.java:26) at com.intelsrc.test.TestExcelOperate.testExportToExcel(TestExcelOperate.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41) at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner.java:220) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
我使用的是jawin来解析xls文档。 所以按照正常步骤 1.拷贝jawin.dll到system32目录下 2.将jawin-stubs.jar和jawin.jar包导入到jre/lib/ext目录下 3.执行 大家看看 是哪里有问题?