- 浏览: 543861 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
xuehanxin:
修改tomcat-maven-plugin启动端口 -
maimode:
嗯,受用了。
java移动文件 -
huqing2010:
不灵!
java移动文件 -
yhx432:
zk1878 写道楼主,直接在eclipse中使用file-& ...
将maven2创建的web项目转为myEclipse项目 -
zk1878:
楼主,直接在eclipse中使用file->import ...
将maven2创建的web项目转为myEclipse项目
在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)在你的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);
}
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);
}
发表评论
-
sh+tomcat 启动时报内存溢出
2013-11-27 13:59 1041ERROR o.s.web.context.ContextLo ... -
将java项目设置为web项目
2011-05-26 11:46 1510修改项目的.project文件,保存. 在< ... -
java 定时器
2010-04-12 13:15 1438引入定时器相应的jar包。 第一步编写实现类Quart ... -
Java compiler level does not match the version of the installed Java project
2009-12-08 11:02 2577错误:Java compiler level does not ... -
eclipse 常用插件安装地址
2009-11-30 13:04 62791. 安装 Subclipse要安装Subclipse,使用下 ... -
kubuntu下安装eclipse3.5.1点击按钮不行,只能用enter键
2009-11-30 13:01 1260kubuntu下安装eclipse3.5.1在线更新插件的时候 ... -
Flex Builder 3.0 For MyEclipse 7.0M1 安装方法
2009-11-24 17:29 2543今天突然说要搞flex,所以就在网上搞了点环境安装的方法 F ... -
基于fileupload文件批量上传
2008-11-11 11:44 3433执行类: /** * @author LXY * @date ... -
关于JAVA的Date
2008-03-21 10:30 12221.计算某一月份的最大天数 Calendar time=Ca ... -
jdk5的装箱与拆箱
2007-12-13 21:08 1338java的8个基本类型: 整数:short byte lon ... -
限制使用泛型可用类型
2007-12-09 15:48 1470package com.jdk150.bean; impor ... -
jdk1.5泛型的应用
2007-12-09 14:52 1771package com.jdk150.bean; impor ... -
1.5下数组可以这样输出
2007-11-30 15:06 1450String stra[]={"1",&q ... -
对BigDecimal常用方法的归类
2007-11-20 22:16 18928package com.org.assistant.util; ... -
java递归删除文件和文件夹
2007-10-24 14:13 4802public class DelFileTest() { ... -
用jndi连接数据库
2007-10-17 16:08 2777在appContext下配: <bean id=&quo ... -
无法解析类型 java.lang.Object。从必需的 .class 文件间接引用了它
2007-09-29 22:29 16354今天突然碰到一个郁闷问题 无法解析类型 java.lang.O ... -
java移动文件
2007-09-20 18:03 10596//文件原地址 File oldFile = new ... -
JAVA格式化日期
2007-09-13 09:34 2582Date dd = new Date(); //String ... -
需求分析的20条法则
2007-09-11 09:06 1466需求分析的20条法则 邢 ...
相关推荐
Java中的JCOM技术允许开发人员使用Java来操作Microsoft Office对象,比如Excel、Word和PowerPoint,这主要得益于Java与COM(Component Object Model)之间的桥梁。COM是微软的一种接口技术,常用于Windows平台上的...
2. **JCom库**:JCom库是Java中的核心部分,它包含了COM组件的Java绑定。开发者需要在Java项目中引入这个库,才能使用JCom的功能。 3. **创建COM对象**:在Java中,可以通过JCom库提供的API创建COM对象。这通常涉及...
在Java中调用COM组件,我们需要依赖于JCOM库,这是一个Java COM桥接器,能够帮助Java程序与COM组件进行交互。在本例中,"jcom224"可能是JCOM的一个版本,用于支持Java与COM+组件的通信。 使用JCOM调用COM+组件的...
在Java中,打印主要是通过`java.awt.print`包中的类来实现的,如`PrinterJob`、`PageFormat`和`PrintService`等。这些类允许开发者定义打印任务,设置页面布局,并将内容发送到打印机。 JCOM,全称Java COM Bridge...
在JCom之前,若要在Java中使用COM组件,通常需要通过JNI来实现。然而,JNI的使用较为复杂,需要编写C/C++代码,增加了开发的难度和出错的可能性。 2. **COM组件注册**:在使用JCom前,需要确保COM组件在目标系统上...
在Java中,直接操作Microsoft Office文件,如Excel,通常需要借助第三方库或API,因为Java的标准库并不直接支持这种操作。`jcom.dll` 可能是实现了这样的接口,允许Java代码通过JNI(Java Native Interface)来调用...
Java JCom库是Java开发中用于与Microsoft Office应用程序交互的工具,主要支持Word和Excel的打印功能。在Java应用程序中,如果我们需要对Word文档或Excel表格进行打印操作,而直接使用Java内置的打印API可能无法满足...
JAVA源码Java的COM桥JComJAVA源码Java的COM桥JCom
标题中的"jcom.jar和jcom.dll"是两个关键组件,它们在Java环境中用于与Microsoft Office应用程序,如Visio、Word和Excel进行交互,并支持文件转换功能。jcom.jar是Java类库,它包含了用于与DLL(动态链接库)交互的...
1. **跨平台**: 尽管COM是Windows平台的,但JCom让Java应用可以在任何Java运行环境中使用COM组件。 2. **灵活性**: JCom允许Java开发者充分利用COM组件的丰富功能,扩展Java应用的潜力。 3. **性能**: 由于JCom基于...
- **集成现有COM组件**:如果你有一个已有的Windows应用程序,其中包含COM组件,而你需要在Java环境中使用这些组件,JCom提供了一个方便的桥梁。 - **跨语言交互**:Java应用可以通过JCom与用其他语言(如C++、VB等...
java资源Java的COM桥 JComjava资源Java的COM桥 JCom提取方式是百度网盘分享地址
Java的COM桥JCom是一个强大的工具,它允许Java应用程序与微软的组件对象模型(Component Object Model,简称COM)进行交互。在Windows环境下,COM技术被广泛用于构建可重用的软件组件,而JCom则为Java开发者提供了一...
在Java中,你可以先通过JCom加载Excel的COM组件,然后创建新的工作簿,添加工作表,写入数据,格式化单元格,甚至执行复杂的公式计算。这个过程无需了解COM的具体细节,只需使用JCom提供的简单API即可。 此外,JCom...
`jcom.jar`包含了jcom组件的Java实现,允许Java开发者在应用程序中使用jcom的功能。通过导入`jcom.jar`,开发者可以轻松地在Java项目中集成jcom,利用其提供的接口和类进行跨平台通信,增强了软件的可移植性。 再者...
在Java中直接操作COM组件并不像在.NET或VB环境中那样直接,但JCom为开发者提供了一个方便的解决方案。以下是关于这个主题的详细知识点: 1. **什么是COM?** Component Object Model(COM)是Microsoft提出的一种...
接下来,让我们探讨如何在Java中使用`jcom`写入Excel。以下是一个基本步骤概述: 1. **初始化Excel对象**:首先,需要创建一个`IDispatch`对象,代表Excel应用程序实例。这通常通过`JComDispatch.createInstance`...
JAVA JCOM 资源下载, JCom (Java-COM Bridge) 可以让 Java程序轻松访问 Windows平台上的 COM组件。 我们不支持 IE 10及以下版本浏览器, 通过jcom可以对excel、word文档进行操作