jawin操作word

来源:互联网 发布:淘宝有在线人工客服吗 编辑:程序博客网 时间:2024/05/20 16:37

转载于:http://gingguoqiu.iteye.com/blog/1218119


awin-2.0-alpha1.zip解压得到jawin.dll,jawin.jar

jawin.dll放在C:\WINDOWS\system32下

jawin.jar放在项目的lib下

 

可以使用包中的jawinBrowser.jar,解析MSWORD.OLB(word版本不同,名称稍有不同),获得方法xml文件。

 

 

测试代码

package tdh.jawin;import org.jawin.COMException;import org.jawin.DispatchPtr;import org.jawin.win32.Ole32;public class WordComm {  public void newWord() {    try {      // 初始化      Ole32.CoInitialize();      // 创建word对象      DispatchPtr app = new DispatchPtr("Word.Application");      // 使word 可见      app.put("Visible", true);      // 获得document对象集合      DispatchPtr docs = (DispatchPtr) app.get("Documents");      // 新增一个文档      DispatchPtr doc = (DispatchPtr) docs.invoke("Add");      // 激活当前文档      app.invoke("Activate");      // 取得Font对象,设置字体,设置字号      DispatchPtr objTextFont = (DispatchPtr) ((DispatchPtr) doc.get("Content")).get("Font");      objTextFont.put("Name", "黑体");      objTextFont.put("Size", "12");      // 取得Selection对象      DispatchPtr docSelection = (DispatchPtr) app.get("Selection");      // 取得段落对象      DispatchPtr paragraphFormat = (DispatchPtr) docSelection.get("ParagraphFormat");      paragraphFormat.put("Alignment", "0");      docSelection.invoke("TypeText", "第一行文字...");      insertRowBreak(docSelection);      docSelection.invoke("TypeText", "TDHTEXT...");      // 新段落,设置段落的对齐方式为居中      docSelection.invoke("TypeParagraph");      paragraphFormat = (DispatchPtr) docSelection.get("ParagraphFormat");      paragraphFormat.put("Alignment", "1");      docSelection.invoke("TypeText", "第二行图片...");      insertRowBreak(docSelection);      docSelection.invoke("TypeText", "TDHIMG");      // 新段落,添加表格      docSelection.invoke("TypeParagraph");      DispatchPtr range = (DispatchPtr) docSelection.get("Range");      DispatchPtr tables = (DispatchPtr) doc.get("Tables");      tables.invokeN("Add", new Object[] { range, new Integer(3), new Integer(3) });// 三行,三列      // 获取刚添加的表格,设置表格为网格型(word2000没用,word2003有用)      // DispatchPtr currentTable = (DispatchPtr) tables.invokeN("Item", new      // Object[] { new Integer(1) });      // currentTable.put("Style", "网格型");      // 重新设置选取位置为文档内容的最后,这样后面的操作就会不会在表格里操作      DispatchPtr cont = (DispatchPtr) doc.get("Content");      docSelection.invokeN("SetRange", new Object[] { cont.get("End"), cont.get("End") });      // 移动到最后      docSelection.invoke("EndKey", 6);      // 移动到最前      docSelection.invoke("HomeKey", 6);      // 移动到最前      docSelection.invoke("HomeKey", 6);      while (find(docSelection, "TDHTEXT"))        docSelection.put("Text", "替换后的文字");      String path = WordComm.class.getResource("").getPath();      if (path != null && path.length() > 0) {        path = path.substring(1);      }      System.out.println("class所在地址:" + path);      // 移动到最前      docSelection.invoke("HomeKey", 6);      while (find(docSelection, "TDHIMG")) {        insertImg(docSelection, path + "1.png");      }      // 移动到最后      docSelection.invoke("EndKey", 6);      // 插入分页符      insertPageBreak(docSelection);      // 插入文件      insertFile(docSelection, path + "1.rtf");      // 保存文档,关闭当前文档,退出Word      doc.invoke("SaveAs", path +"jawin操作后的文档.doc");      doc.invoke("Close");      app.invoke("Quit");      Ole32.CoUninitialize();      // 释放对象    } catch (Exception e) {      e.printStackTrace();    }  }  /**   * 打开文档   */  public static DispatchPtr openWord(String path) {    try {      Ole32.CoInitialize();      DispatchPtr app = new DispatchPtr("Word.Application");      app.put("Visible", true);      DispatchPtr docs = (DispatchPtr) app.get("Documents");      DispatchPtr doc = (DispatchPtr) docs.invoke("Open", path);      app.invoke("Activate"); // 激活当前文档      Ole32.CoUninitialize();      return doc;    } catch (Exception e) {      e.printStackTrace();    }    return null;  }  /**   * 查找   */  public boolean find(DispatchPtr docSelection, String findStr) throws COMException {    DispatchPtr docFind = (DispatchPtr) docSelection.get("Find");    return (Boolean) docFind.invokeN("Execute", new Object[] { findStr, new Boolean(true), new Boolean(true), new Boolean(false), new Boolean(false), new Boolean(false), new Boolean(true) });  }  /**   * 插入图片   */  public void insertImg(DispatchPtr docSelection, String imgPath) throws COMException {    DispatchPtr inlineShapes = (DispatchPtr) docSelection.get("InlineShapes");    inlineShapes.invokeN("AddPicture", new Object[] { imgPath, new Boolean(false), new Boolean(true) });  }  /**   * 插入文件   */  public void insertFile(DispatchPtr docSelection, String path) throws COMException {    docSelection.invokeN("insertFile", new Object[] { path, "", new Boolean(false), new Boolean(false), new Boolean(false) });  }  /**   * 插入分页符   */  public void insertPageBreak(DispatchPtr docSelection) throws COMException {    docSelection.invoke("InsertBreak", 7);  }  /**   * 插入换行符   */  public void insertRowBreak(DispatchPtr docSelection) throws COMException {    docSelection.invoke("InsertBreak", 11);  }  public static void main(String[] args) {    new WordComm().newWord();  }}

 

感谢以下网络资源:

http://blog.csdn.net/luzuobin/article/details/2779029