浅谈Java中利用JCOM实现仿Excel编程

GS0H5U

GS0H5U

2016-02-19 20:06

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐浅谈Java中利用JCOM实现仿Excel编程,希望大家看完后也有个好心情,快快行动吧!
在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;irows;i++){
  for(int j=0;jcols;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
  //----------------------------------------------------------------

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

浅谈Java中利用JCOM实现仿Excel编程

编程语言 网络编程
浅谈Java中利用JCOM实现仿Excel编程

浅谈Excel的VB编程

编程语言 网络编程
浅谈Excel的VB编程

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在Java中实现UDP协议编程的方法

编程语言 网络编程
在Java中实现UDP协议编程的方法

轻松实现Java用户界面编程

编程语言 网络编程
轻松实现Java用户界面编程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Java 中利用管道实现线程间的通讯

编程语言 网络编程
Java 中利用管道实现线程间的通讯

C#编程实现在Excel文档中搜索文本

编程语言 网络编程
C#编程实现在Excel文档中搜索文本

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

反射在Java Swing编程中的应用

反射在Java Swing编程中的应用

Win10修改默认播放器的步骤

Win10修改默认播放器的步骤
下拉加载更多内容 ↓