Java中使用JCOM操作Office对象
来源:网络 更新时间:2014-12-6
通过使用COM技术,我们用微软Office应用程序能够建立很多应用程序扩展,但是Java开发人员却无法享受它带来的便利--除非他们拥有方便的Java访问COM的途径(Java-to-COM桥)。使用JCom的时候,你可以在Java中控制几乎所有的COM对象,而且它还带有一些用于Excel的强大的辅助类。
在你每次编写用HTML表格样式或Java表格对象显示数据的应用程序的时候,通常都需要带有"导出到Excel"功能。那么头疼的问题就出现了。怎么样实现这种功能呢?在HTML中显示的可以在Office2003中处理吗?没有这么好!你还必须支持Office97!
你只能去找一个符合当前需求的工具了,但是接着收到更多的要求了。"这能在Word中做到吗?PowERPoint能做到吗?能不能用调制解调器拨号到远程服务器上并发布数据?Java无法实现这些功能是什么意思啊?Java可以实现任何功能。"
感谢作为Java和COM桥梁的框架组件,它使你在遇到这些情况的时候都可以回答"Yes"。Java-COM桥梁使你能够根据自己的需要操作Windows组件--以前这是VB、C 和.net开发人员的领地。你通过实现一个与DCOM后端(backend)对话的Java前端(frontend),可以远离端对端(end-to-end)的COM系统。在本文的末尾,你可以使用其中一个Java-to-COM桥:它可以被命名为JCom。
Excel基础知识
开始之前,你需要首先从Sourceforge网站下载API。它包含了JCom所使用的Java类的所有源代码、C 代码和JCom用于配置Java和COM的编译好的DLL。把这个DLL放到你的Java主目录的/bin/目录下面,否则会出现问题。同时,为了不出现问题,还要正确地设置JAVA_HOME环境变量。JCom的大多数文档目前都是用日语写的,但是翻译工作正在进行中,因此以后会有些改进的。
下载和安装过程完成以后,用列表1中的代码试一试。这段代码会建立到Excel的JCom接口,并把"HelloWorld"写入第一个单元格中。你可以看到如图1所示的结果。尽管JCom是一个通用的COM类库,但是还是带有很多用于Excel的辅助类,这是因为Excel可能是最常用的自动化COM应用程序。这些辅助类可以为我们节省很多时间,它们使JCOM成为一个更好的类库了。
列表1:开始使用JCOM和Excel
importjp.ne.so_net.ga2.no_ji.jcom.excel8.*;
importjp.ne.so_net.ga2.no_ji.jcom.*;
publicclasstestSimple
{
publicstaticvoidmain(String[]args)throwsException{
ReleaseManagerrm=newReleaseManager();
try{
System.out.println("EXCELisStarting...");
ExcelApplicationexcel=newExcelApplication(rm);
excel.Visible(true);
ExcelWorkbooksxlBooks=excel.Workbooks();
ExcelWorkbookxlBook=xlBooks.Add();
ExcelWorksheetsxlSheets=xlBook.Worksheets();
ExcelWorksheetxlSheet=xlSheets.Item(1);
ExcelRangexlRange=xlSheet.Cells();
xlRange.Item(1,1).Value("Hello,World!");
}
catch(Exceptione){e.printStackTrace();}
finally{rm.release();}
}
}
图1:Java中使用Excel的第一个COM自动化
如果曾经使用VB或VBA来自动化Excel,那么你应该很熟悉列表1中的代码了。ExcelApplication类暴露了Workbooks()属性,它列举出Excel中当前打开的工作薄(workbook),并允许你向运行的Excel副本增加或删除工作薄。使用.Add()方法增加工作薄,这个方法会返回一个工作薄的引用。
在Excel中工作薄用于保存输入的数据。工作薄是XLS文件的基础。一个工作薄由多个工作表(worksheet,在图1中有三个工作表,分别叫做Sheet1、Sheet2和Sheet3)。工作表通过Item属性来枚举。你可以使用这个属性访问特定的工作表。在图1中,Sheet1是第一个工作表,因此你可以使用xlSheets.Item(1)来获取对它的引用。