




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA操作wordjacob(1)现在我们一起来看看,用Java如何操Word。jacob,官网是/jacob 这是一个开源的工具。最新版本1.7官方的解释是:The JACOB Project: A JAva-COM Bridge开发环境:JDK 1.6MyEclipse Enterprise Workbench Version: 7.0 Milestone-1Tomcat 5.5.27现在MyEclipse中新建一个项目jacob,将jacob的jar包放到该项目的类库中。我的jacob版本是1.14.3 。下面这一步非常重要,就是拷贝jacob目录中jacob-1.14.3-x86.dll文件到系统环境变量目录中一般情况就放在当前jdk中bin目录下。这里有一个MSWordManager 类,是jacob官方发布的工具类,里面有大多数Java操作MS Office的工具。package com.test;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List;import com.jacob.activeX.ActiveXComponent; import .Dispatch; import .Variant;public class MSWordManager / word文档 private Dispatch doc; / word运行程序对象 private ActiveXComponent word; / 所有word文档集合 private Dispatch documents; / 选定的范围或插入点 private Dispatch selection; private boolean saveOnExit = true; /* */* * * param visible 为true表示word应用程序可见 */ public MSWordManager(boolean visible) if (word = null) word = new ActiveXComponent(Word.Application); word.setProperty(Visible, new Variant(visible); if (documents = null) documents = word.getProperty(Documents).toDispatch(); /* */* * 设置退出时参数 * * param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件 */ public void setSaveOnExit(boolean saveOnExit) this.saveOnExit = saveOnExit; /* */* * 创建一个新的word文档 * */ public void createNewDocument() doc = Dispatch.call(documents, Add).toDispatch(); selection = Dispatch.get(word, Selection).toDispatch(); /* */* * 打开一个已存在的文档 * * param docPath */ public void openDocument(String docPath) closeDocument(); doc = Dispatch.call(documents, Open, docPath).toDispatch(); selection = Dispatch.get(word, Selection).toDispatch(); /* */* * 把选定的内容或插入点向上移动 * * param pos 移动的距离 */ public void moveUp(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveUp); /* */* * 把选定的内容或者插入点向下移动 * * param pos 移动的距离 */ public void moveDown(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveDown); /* */* * 把选定的内容或者插入点向左移动 * * param pos 移动的距离 */ public void moveLeft(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveLeft); /* */* * 把选定的内容或者插入点向右移动 * * param pos 移动的距离 */ public void moveRight(int pos) if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); for (int i = 0; i < pos; i+) Dispatch.call(selection, MoveRight); /* */* * 把插入点移动到文件首位置 * */ public void moveStart() if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); Dispatch.call(selection, HomeKey, new Variant(6); public void moveEnd() if (selection = null) selection = Dispatch.get(word, Selection).toDispatch(); Dispatch.call(selection, EndKey, new Variant(6); /* */* * 从选定内容或插入点开始查找文本 * * param toFindText 要查找的文本 * return boolean true-查找到并选中该文本,false-未查找到文本 */ public boolean find(String toFindText) if (toFindText = null | toFindText.equals() return false; / 从selection所在位置开始查询 Dispatch find = word.call(selection, Find).toDispatch(); / 设置要查找的内容 Dispatch.put(find, Text, toFindText); / 向前查找 Dispatch.put(find, Forward, True); / 设置格式 Dispatch.put(find, Format, True); / 大小写匹配 Dispatch.put(find, MatchCase, True); / 全字匹配 Dispatch.put(find, MatchWholeWord, True); / 查找并选中 return Dispatch.call(find, Execute).getBoolean(); /* */* * 把选定选定内容设定为替换文本 * * param toFindText 查找字符串 * param newText 要替换的内容 * return */ public boolean replaceText(String toFindText, String newText) if (!find(toFindText) return false; Dispatch.put(selection, Text, newText); return true; /* */* * 全局替换文本 * * param toFindText 查找字符串 * param newText 要替换的内容 */ public void replaceAllText(String toFindText, String newText) while (find(toFindText) Dispatch.put(selection, Text, newText); Dispatch.call(selection, MoveRight); /* */* * 在当前插入点插入字符串 * * param newText 要插入的新字符串 */ public void insertText(String newText) Dispatch.put(selection, Text, newText); /* */* * * param toFindText 要查找的字符串 * param imagePath 图片路径 * return */ public boolean replaceImage(String toFindText, String imagePath) if (!find(toFindText) return false; Dispatch.call(Dispatch.get(selection, InLineShapes).toDispatch(), AddPicture, imagePath); return true; /* */* * 全局替换图片 * * param toFindText 查找字符串 * param imagePath 图片路径 */ public void replaceAllImage(String toFindText, String imagePath) while (find(toFindText) Dispatch.call(Dispatch.get(selection, InLineShapes).toDispatch(), AddPicture, imagePath); Dispatch.call(selection, MoveRight); /* */* * 在当前插入点插入图片 * * param imagePath 图片路径 */ public void insertImage(String imagePath) Dispatch.call(Dispatch.get(selection, InLineShapes).toDispatch(), AddPicture, imagePath); /* */* * 合并单元格 * * param tableIndex * param fstCellRowIdx * param fstCellColIdx * param secCellRowIdx * param secCellColIdx */ public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx, int secCellRowIdx, int secCellColIdx) / 所有表格 Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); / 要填充的表格 Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex) .toDispatch(); Dispatch fstCell = Dispatch.call(table, Cell, new Variant(fstCellRowIdx), new Variant(fstCellColIdx) .toDispatch(); Dispatch secCell = Dispatch.call(table, Cell, new Variant(secCellRowIdx), new Variant(secCellColIdx) .toDispatch(); Dispatch.call(fstCell, Merge, secCell); /* */* * 在指定的单元格里填写数据 * * param tableIndex * param cellRowIdx * param cellColIdx * param txt */ public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx, String txt) / 所有表格 Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); / 要填充的表格 Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex) .toDispatch(); Dispatch cell = Dispatch.call(table, Cell, new Variant(cellRowIdx), new Variant(cellColIdx).toDispatch(); Dispatch.call(cell, Select); Dispatch.put(selection, Text, txt); /* */* * 在当前文档拷贝数据 * * param pos */ public void copy(String toCopyText) moveStart(); if (this.find(toCopyText) Dispatch textRange = Dispatch.get(selection, Range).toDispatch(); Dispatch.call(textRange, Copy); /* */* * 在当前文档粘帖剪贴板数据 * * param pos */ public void paste(String pos) moveStart(); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range).toDispatch(); Dispatch.call(textRange, Paste); /* */* * 在当前文档指定的位置拷贝表格 * param pos 当前文档指定的位置 * param tableIndex 被拷贝的表格在word文档中所处的位置 */ public void copyTable(String pos,int tableIndex) Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex) .toDispatch(); Dispatch range = Dispatch.get(table, Range).toDispatch(); Dispatch.call(range, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range).toDispatch(); Dispatch.call(textRange, Paste); /* */* * 在当前文档末尾拷贝来自另一个文档中的段落 * * param anotherDocPath 另一个文档的磁盘路径 * param tableIndex 被拷贝的段落在另一格文档中的序号(从1开始) */ public void copyParagraphFromAnotherDoc(String anotherDocPath, int paragraphIndex) Dispatch wordContent = Dispatch.get(doc, Content).toDispatch(); / 取得当前文档的内容 Dispatch.call(wordContent, InsertAfter, $selection$);/ 插入特殊符定位插入点 copyParagraphFromAnotherDoc(anotherDocPath, paragraphIndex, $selection$); /* */* * 在当前文档指定的位置拷贝来自另一个文档中的段落 * * param anotherDocPath 另一个文档的磁盘路径 * param tableIndex 被拷贝的段落在另一格文档中的序号(从1开始) * param pos 当前文档指定的位置 */ public void copyParagraphFromAnotherDoc(String anotherDocPath, int paragraphIndex, String pos) Dispatch doc2 = null; try doc2 = Dispatch.call(documents, Open, anotherDocPath) .toDispatch(); Dispatch paragraphs = Dispatch.get(doc2, Paragraphs).toDispatch(); Dispatch paragraph = Dispatch.call(paragraphs, Item, new Variant(paragraphIndex).toDispatch(); Dispatch range = Dispatch.get(paragraph, Range).toDispatch(); Dispatch.call(range, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range) .toDispatch(); Dispatch.call(textRange, Paste); catch (Exception e) e.printStackTrace(); finally if (doc2 != null) Dispatch.call(doc2, Close, new Variant(saveOnExit); doc2 = null; /* */* * 在当前文档指定的位置拷贝来自另一个文档中的表格 * * param anotherDocPath 另一个文档的磁盘路径 * param tableIndex 被拷贝的表格在另一格文档中的序号(从1开始) * param pos 当前文档指定的位置 */ public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex, String pos) Dispatch doc2 = null; try doc2 = Dispatch.call(documents, Open, anotherDocPath) .toDispatch(); Dispatch tables = Dispatch.get(doc2, Tables).toDispatch(); Dispatch table = Dispatch.call(tables, Item, new Variant(tableIndex).toDispatch(); Dispatch range = Dispatch.get(table, Range).toDispatch(); Dispatch.call(range, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range) .toDispatch(); Dispatch.call(textRange, Paste); catch (Exception e) e.printStackTrace(); finally if (doc2 != null) Dispatch.call(doc2, Close, new Variant(saveOnExit); doc2 = null; /* */* * 在当前文档指定的位置拷贝来自另一个文档中的图片 * * param anotherDocPath 另一个文档的磁盘路径 * param shapeIndex 被拷贝的图片在另一格文档中的位置 * param pos 当前文档指定的位置 */ public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex, String pos) Dispatch doc2 = null; try doc2 = Dispatch.call(documents, Open, anotherDocPath) .toDispatch(); Dispatch shapes = Dispatch.get(doc2, InLineShapes).toDispatch(); Dispatch shape = Dispatch.call(shapes, Item, new Variant(shapeIndex).toDispatch(); Dispatch imageRange = Dispatch.get(shape, Range).toDispatch(); Dispatch.call(imageRange, Copy); if (this.find(pos) Dispatch textRange = Dispatch.get(selection, Range) .toDispatch(); Dispatch.call(textRange, Paste); catch (Exception e) e.printStackTrace(); finally if (doc2 != null) Dispatch.call(doc2, Close, new Variant(saveOnExit); doc2 = null; Java操作Microsoft Word之jacob(2)(接上)/* */* * 创建表格 * * param pos 位置 * param cols 列数 * param rows 行数 */ public void createTable(int numCols, int numRows)/(String pos, int numCols, int numRows) / if (!find(pos) Dispatch tables = Dispatch.get(doc, Tables).toDispatch(); Dispatch range = Dispatch.get(selection, Range).toDispatch(); Dispatch newTable = Dispatch.call(tables, Add, range, new Variant(numRows), new Variant(numCols).toDispatch(); Dispatch.call(selection, MoveRight); moveEnd(); / /* */* * 在指定行前面增加行 * * param
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年3D打印技术的器官打印进展
- 农业银行2025黑河市秋招无领导小组面试案例题库
- 2025年3D打印的个性化医疗植入物
- 中国银行2025秋招面试典型题目及参考答案湖北地区
- 工商银行2025吉安市秋招无领导小组面试案例题库
- 工商银行2025张家口市秋招无领导模拟题角色攻略
- 中国银行2025萍乡市信息科技岗笔试题及答案
- 建设银行2025上饶市小语种岗笔试题及答案
- 建设银行2025兰州市秋招结构化面试经典题及参考答案
- 中国银行2025石家庄市秋招英文面试题库及高分回答
- 《基于模型的系统工程(MBSE)及MWORKS实践》全套教学课件
- 医务人员职业暴露与防护讲课
- 苏教版4四年级数学上册(全册)表格式教案
- 小学教育课件古诗
- BEC商务英语初级考试历年真题及答案6套
- 消除“艾梅乙”医疗歧视-从我做起
- 感恩老师课件教学课件
- GB/T 44625-2024动态响应同步调相机技术要求
- 不违反计划生育协议书模板
- (人教2024版)七年级数学开学第一课-课件
- 07FD02 防空地下室电气设备安装
评论
0/150
提交评论