`
xiuying
  • 浏览: 541662 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

浅谈JAVA中应用JCOM

    博客分类:
  • java
阅读更多
在JAVA中使用JCOM和JXL注意要点:
(1)在你的lib下要有jdom-1.0.jar,jxl-2.5.5.jar,jcom-2.2.4.jar,jcom.dll。
(2)要把jcom.dll同时放到你JDK的bin目录下或者放到系统盘的windows下(推荐放到JDK的BIN下)

把上面的JAR包都放好后开始写应用中的工具类(申明一下在JCOM中得到的都是IDispatch对象,以下还会抛出一个JComException的异常)
(1)首先应该判断一个传进来的路径是Word 或是 Excel 还是其他的东东。
if(path.endsWith(".doc")){
   ......
}
注:如果是excel后缀是".xls";
(2)然后你要有两个对象:
ReleaseManager rm = new ReleaseManager();
IDispatch xlsApp=null;
注:ReleaseManager相当于一个容器,与你机器上的所有JCOM组建交互,根据你传的参数他会去寻找你机器上的所有JCOM能操作的组建;
    IDispatch 可以理解为一个对象,所有的东东都是对象;
(3)你要让他知道你要和EXCEL交互你得这样做
xlsApp = new IDispatch(rm, "Excel.Application");
(4)接着要得到一个Workbooks(工作薄)
IDispatch excel = (IDispatch) xlsApp.get("Workbooks");
(5)设置当前对象是否可见
xlsApp.put("Visible", new java.lang.Boolean(false));
(6)得到工作薄以后要打开
IDispatch workbook = (IDispatch) excel.method("open", new Object[] { FilePath(EXCEL存放的路径) });
(7)判断文件是否存在如果存在则删除
File f = new File(outPath);
if (f.exists())
    f.delete();
(8)将工作薄另存为
workbook.method("saveAs", new Object[] { outPath, new Integer(9) });
(9)获得一个工作薄(workbook)下的所有工作表(Sheets)
IDispatch sheets = (IDispatch) workbook.get("Sheets");
注:得到的是一个数组;
(10)获得工作表(Sheets)的总数
int sheetsCount = Integer.parseInt(sheets.get("Count").toString());
(11)得到每个工作表(Sheets)的名称
for(int sheetInx=1;sheetInx <= sheetsCount;sheetInx++) {
IDispatch sheet = (IDispatch) sheets.get("item", new Object[] { new Integer(sheetInx) });
String sheetName = sheet.get("name").toString();
}
注意:excel都是从1开始遍历 而不是从0开始 所以for里面有多种写法看自己怎么顺手怎么写;
      遍历工作表除了传索引还能传工作表名称:IDispatch sheet = ((IDispatch) sheets.get("item", new Object[] { sheetName }));
(12)获得正在活动的工作表(sheet)
IDispatch asheet = (IDispatch) xlsApp.get("ActiveSheet");
注:xlsApp是从ReleaseManager里面获得EXCEL对象的一个IDispatch对象
    如果是获得sheets要先获得工作薄(Workbook)然后用工作薄(Workbook)获得他下的所有工作表(sheets)
(13)获得工作表里面的所有行总数(6万多行吧)
IDispatch row = (IDispatch)cursheet.get("Rows");
int rows = Integer.parseInt(row.get("Count").toString());
(14)获得工作表里面的所有列总数(256列)
IDispatch col = (IDispatch)sheet.get("Columns");
int cols = Integer.parseInt(col.get("Count").toString());
(15)获得工作表里面可视的所有行总数
IDispatch row = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Rows");
int rows = Integer.parseInt(row.get("Count").toString());
(16)获得工作表里面可视的所有列总数
IDispatch col = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Columns");
int cols = Integer.parseInt(col.get("Count").toString());
(17)获得行列以后要获得里面的内容(这里用的rows 和 cols就是上面所得的)
String cellVal="";
String cellTxt="";
String hasFormula= "";
String cellFormula="";
for(int i=0;i<rows;i++){
   for(int j=0;j<cols;j++){
IDispatch cells = (IDispatch) cursheet.get("Cells", new Object[] { new Integer(i+1),new Integer(j+1) });
cellVal = cells.get("value").toString();
cellTxt = cells.get("text").toString();
hasFormula = cells.get("HasFormula").toString();
cellFormula = cells.get("FormulaR1C1").toString();
   }
}
注:这个遍历的时候也是从1开始;
    cells.get("value")获得的是浮点数格式 如果你输入的是1,得到的会是1.0;
    cells.get("text")获得的是本身,你输入什么获得的就是什么;
    cells.get("HasFormula")判断是否是公式,如果单元格里是公式则返回真(true),如果不是公式则返回假(false);
    cells.get("FormulaR1C1")获得公式,获得单元格里公式的内容;
(18)保护工作表
asheet.method("Protect", new Object[] { password, new java.lang.Boolean(true), new java.lang.Boolean(true) });
注:Protect后有N多参数 第1--3个分别是 password,DrawingObjects,Contects。
(19)解工作表保护
asheet.method("Unprotect", new Object[] { password });
(20)在finally里面写关闭
if (xlsApp != null) {
    ((IDispatch) xlsApp.get("ActiveWorkbook")).put("Saved", new java.lang.Boolean(true)); //保存工作薄
    xlsApp.method("quit", null);    //quit 是关闭的是整个EXCEL
    xlsApp = null;
}
rm.release();
rm = null;
(21)关闭根据情况也写在finally 里面
workbook.method("close", null);
xlsApp.method("quit", null);
xlsApp=null;
rm.release();
rm = null;
注:workbook.method("close", null);关闭的是Workbook里的工作表;
    xlsApp.method("quit", null);关闭的是整个工作薄
注意:
关闭的时候一定要加上
//rm 就是ReleaseManager的实例
rm.release();
rm = null;
如果你打开EXCEL不加上面两句的话在进程里面还运行着EXCEL.EXE
//----------------------------------------------------------------
如有不对请多多指教!!谢谢
分享到:
评论
1 楼 xiuying 2007-08-28  
用Range遍历excel表格(有限的遍历,建议使用Cells遍历)
for(int i=0;i<rows;i++){
   for(int j=0;j<cols;j++){
cellindex=getExcelCellIndex(i,j);
IDispatch cells = ((IDispatch) asheet.get("Range", new Object[] { cellindex }));
cellVal = cells.get("value").toString();
   }
}
注:getExcelCellIndex是一个函数;
函数如下:
private String getExcelCellIndex(int row, int col) {
String[] tmp = new String[] { "A", "B", "C", "D", "E", "F","G","H","I","J","K","L","M","N" };
return tmp[col] + String.valueOf(row + 1);
}

相关推荐

    Java中使用JCOM操作Office对象

    Java中的JCOM技术允许开发人员使用Java来操作Microsoft Office对象,比如Excel、Word和PowerPoint,这主要得益于Java与COM(Component Object Model)之间的桥梁。COM是微软的一种接口技术,常用于Windows平台上的...

    Java的COM桥 JCom技术文档资料

    2. **JCom库**:JCom库是Java中的核心部分,它包含了COM组件的Java绑定。开发者需要在Java项目中引入这个库,才能使用JCom的功能。 3. **创建COM对象**:在Java中,可以通过JCom库提供的API创建COM对象。这通常涉及...

    jcom java调用com+组件

    在Java中调用COM组件,我们需要依赖于JCOM库,这是一个Java COM桥接器,能够帮助Java程序与COM组件进行交互。在本例中,"jcom224"可能是JCOM的一个版本,用于支持Java与COM+组件的通信。 使用JCOM调用COM+组件的...

    java打印Excel源码(jcom)

    在Java中,打印主要是通过`java.awt.print`包中的类来实现的,如`PrinterJob`、`PageFormat`和`PrintService`等。这些类允许开发者定义打印任务,设置页面布局,并将内容发送到打印机。 JCOM,全称Java COM Bridge...

    jcom_jcom_

    在Java中,你可以先通过JCom加载Excel的COM组件,然后创建新的工作簿,添加工作表,写入数据,格式化单元格,甚至执行复杂的公式计算。这个过程无需了解COM的具体细节,只需使用JCom提供的简单API即可。 此外,JCom...

    java源码:Java的COM桥 JCom.zip

    在JCom之前,若要在Java中使用COM组件,通常需要通过JNI来实现。然而,JNI的使用较为复杂,需要编写C/C++代码,增加了开发的难度和出错的可能性。 2. **COM组件注册**:在使用JCom前,需要确保COM组件在目标系统上...

    Jcom jcom.dll

    在Java中,直接操作Microsoft Office文件,如Excel,通常需要借助第三方库或API,因为Java的标准库并不直接支持这种操作。`jcom.dll` 可能是实现了这样的接口,允许Java代码通过JNI(Java Native Interface)来调用...

    java jcom word,excel打印

    Java JCom库是Java开发中用于与Microsoft Office应用程序交互的工具,主要支持Word和Excel的打印功能。在Java应用程序中,如果我们需要对Word文档或Excel表格进行打印操作,而直接使用Java内置的打印API可能无法满足...

    jcom.jar和jcom.dll

    标题中的"jcom.jar和jcom.dll"是两个关键组件,它们在Java环境中用于与Microsoft Office应用程序,如Visio、Word和Excel进行交互,并支持文件转换功能。jcom.jar是Java类库,它包含了用于与DLL(动态链接库)交互的...

    基于Java的的COM桥 JCom.zip

    1. **跨平台**: 尽管COM是Windows平台的,但JCom让Java应用可以在任何Java运行环境中使用COM组件。 2. **灵活性**: JCom允许Java开发者充分利用COM组件的丰富功能,扩展Java应用的潜力。 3. **性能**: 由于JCom基于...

    Java的COM桥 JCom.7z

    - **集成现有COM组件**:如果你有一个已有的Windows应用程序,其中包含COM组件,而你需要在Java环境中使用这些组件,JCom提供了一个方便的桥梁。 - **跨语言交互**:Java应用可以通过JCom与用其他语言(如C++、VB等...

    基于java的的COM桥 JCom.zip

    Java的COM桥JCom是一个强大的工具,它允许Java应用程序与微软的组件对象模型(Component Object Model,简称COM)进行交互。在Windows环境下,COM技术被广泛用于构建可重用的软件组件,而JCom则为Java开发者提供了一...

    jcom-2.2.4-docs_sources_jar_dll

    `jcom.jar`包含了jcom组件的Java实现,允许Java开发者在应用程序中使用jcom的功能。通过导入`jcom.jar`,开发者可以轻松地在Java项目中集成jcom,利用其提供的接口和类进行跨平台通信,增强了软件的可移植性。 再者...

    基于Java的源码-COM桥 JCom.zip

    在Java中直接操作COM组件并不像在.NET或VB环境中那样直接,但JCom为开发者提供了一个方便的解决方案。以下是关于这个主题的详细知识点: 1. **什么是COM?** Component Object Model(COM)是Microsoft提出的一种...

    jcom 实现 java 写 Excel实例(包含jar包_dll文件_api)资料全

    接下来,让我们探讨如何在Java中使用`jcom`写入Excel。以下是一个基本步骤概述: 1. **初始化Excel对象**:首先,需要创建一个`IDispatch`对象,代表Excel应用程序实例。这通常通过`JComDispatch.createInstance`...

    java资源Java的COM桥JComjava资源Java的COM桥JCom

    java资源Java的COM桥 JComjava资源Java的COM桥 JCom提取方式是百度网盘分享地址

    JAVA JCOM 224 资源下载

    JAVA JCOM 资源下载, JCom (Java-COM Bridge) 可以让 Java程序轻松访问 Windows平台上的 COM组件。 我们不支持 IE 10及以下版本浏览器, 通过jcom可以对excel、word文档进行操作

    jcom-2.2.4-docs.zip

    JCOM主要通过动态链接库(DLL)的方式,在JAVA中实现对COM组件的调用。 JCOM的工作原理主要包括以下几个步骤: 1. **注册COM组件**:首先,需要在JAVA环境中注册COM组件,这通常通过JCOM提供的工具完成,将COM组件...

Global site tag (gtag.js) - Google Analytics