<%@ page contentType="text/html; charset=gb2312"%> 浅谈Java中利用JCOM实现仿Excel编程
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
浅谈Java中利用JCOM实现仿Excel编程
     发布者: 发布时间:2007-10-03
  在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
//----------------------------------------------------------------

  如有不对请多多指教!!谢谢

  查阅关于Java的全部文档
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
Hibernate配置文件中映射元素详解
基于Java的界面布局DSL的设计与实现
反射在Java Swing编程中的应用
Java开发中的事件驱动模型实例详解
Java对象的序列化和反序列化实践
Spring集成XFire开发WebService
 
最近评论:
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(4935)
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(8754)
        
那天的情景!
Maple Story mesos,MapleStory mesos,ms mesos,mesos,SilkRoad Gold, max(9895)
        
左边的风景!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(4170)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold, max(7870)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(1294)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(5306)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(3235)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(3611)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号