`
gingguoqiu
  • 浏览: 25109 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jawin操作word

 
阅读更多

jawin下载地址:

http://sourceforge.net/projects/jawinproject/files/jawinproject/Jawin-2.0-alpha1/

 

jawin-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

 

分享到:
评论

相关推荐

    使用jawin将word转成html

    有源代码·有jar包·还有操作说明·按照操作说明执行即可完整运行·生成的html页面会跟在word文档在同一路径下

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA上百实例源码以及开源项目源代码

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java开源包1

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包11

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包2

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包3

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包6

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包5

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包10

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包4

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包8

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包7

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包101

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java资源包01

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

Global site tag (gtag.js) - Google Analytics