如何使用jacob操作word

本篇文章为大家展示了如何使用jacob 操作word,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比思礼网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式思礼网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖思礼地区。费用合理售后完善,十多年实体公司更值得信赖。

   private ActiveXComponent word = null; 
  private Dispatch documents = null; 
  private Dispatch vSelection = null; 
  private Dispatch wordfile = null;

1,初始化 

    word = new ActiveXComponent("Word.Application"); 
    documents = word.getProperty("Documents").toDispatch();

(将JACOB 放在 WINNT\system32\ 下比较简单省事) 

2,打开文件 

   wordfile = Dispatch.invoke( documents, "Open", Dispatch.Method, new Object[] { strFileName, 
  new Variant(true),//是否进行转换 ConfirmConversions 
  new Variant(false)//是否只读 
  }, new int[1]).toDispatch(); 
  vSelection = word.getProperty("Selection").toDispatch();

       在WORD中,选定内容进行转换时,不用象Java对象一样来回的重新取,这个对象一直有效。在WORD中

3,显示WORD 

  word.setProperty("Visible", new Variant(visible));

4,设置WORD的位置 

   Dispatch activeWindow = Dispatch.get(word, "Application").toDispatch(); 
  Dispatch.put(activeWindow, "WindowState", new Variant(0)); 
  Dispatch.put(activeWindow, "Top", new Variant(0)); 
  Dispatch.put(activeWindow, "Left", new Variant(0)); 
  Dispatch.put(activeWindow, "Height", new Variant(600)); 
  Dispatch.put(activeWindow, "width", new Variant(800));

进行将JAVA内的数据和WORD交换,常用的做法是,在WORD上作一些特殊的标记,利用 FIND 和 Replace的方法进行,这个方法不是太好。个人觉得使用超链接的模式比较方便。 

有几大优点: 

1, Hyperlink 有3个区域可以让开发者自己利用 

    ActiveDocument.Hyperlinks.Add 
  Anchor:=Selection.Range, 
  Address:="位置", //地址(可以利用) 有个缺点 
  SubAddress:="",//子位置(可以利用) 
  ScreenTip:="", //屏幕提示 
  TextToDisplay:="显示内容"//最好利用的东西

个人建议使用TextToDisplay。Address 会在保存时被替换成绝对路径。比如你录入一个 “AA.BB.CC” 

保存时可能会被替换成C:\Documents and Settings\Administrator \My Documents\AA.BB.CC 

2, 可以进行自动定位 利用Hyperlinks 可以将文章中所有的超链接得到。也可以将指定范围的超链接得到。 

3, 可以自由排版 

4, 可以拷贝粘贴 

添加超链接: 

   Dispatch Hyperlinks = Dispatch.get(wordfile, "Hyperlinks").toDispatch(); 
  Dispatch range = Dispatch.get(vSelection, "Range").toDispatch(); 
  Dispatch h=Dispatch.invoke(Hyperlinks, "Add", Dispatch.Method, new Object[] 
  { range, new Variant("Address"), new Variant("SubAddress"), 
  new Variant("{table.fieldName}"),//建议的数据链接处 
  new Variant("姓名") }, // 在WORD中显示的内容 
  new int[4]).toDispatch(); 
  Dispatch hRange=Dispatch.get(h, "Range").toDispatch(); 
  Dispatch.call(hRange,"select"); 
  //设置字体,颜色 
  Dispatch font = Dispatch.get(vSelection, "Font").toDispatch(); 
  Dispatch.put(font,"Underline", new Variant(0)); 
  Dispatch.put(font,"Color", new Variant(0)); 
  //取消选择 
  Dispatch.call(vSelection,"MoveRight",new Variant(1),new Variant(1));

超链接替换内容: 

1, 得到所有的超链接 

   Dispatch.call(dObject, "select"); //选择对象 
  Dispatch Hyperlinks = Dispatch.get(vSelection, "Hyperlinks").toDispatch(); //得到超链接集合 
  int nHyperlink = Dispatch.get(Hyperlinks, "count").toInt(); //得到有多少个超链接 
  Dispatch hyperlink=Dispatch.invoke(Hyperlinks, "item", 
  Dispatch.Method, new Object[] { new Integer(i + 1)}, 
  new int[1]).toDispatch())); //得到一个超链接

2, 替换内容 

Dispatch.put(hyperlink, "TextToDisplay", information);

3, 取消超链接,将超链接变成普通文字。 

Dispatch.call(hyperlink, "delete");

如何实现批量数据自动扩展,建议使用表格进行自动扩展,方便简单。 

结合使用上面超链接的技术。会非常简单: 

比如有如下数据: 

DataA DataB 

1, 列出所有表格 

和列出所有超链接基本一样: 

   private void getTables01(Dispatch objcet,Vector vTableStore) { 
    Dispatch tables = Dispatch.get(objcet, "tables").toDispatch(); 
  int nTableAmount = Dispatch.get(tables, "count").toInt(); 
  for (int i = 0; i < nTableAmount; i++) { 
  Dispatch table = 
  Dispatch .invoke( tables,"item",Dispatch.Method,new Object[] { new Integer(i + 1)}, new int[1]) .toDispatch(); 
  vTableStore.add(new DTable(table)); 
  getTables01(table,vTableStore);//处理表格套用表格的情况 
  } 
  }

2, 表格的可以控制的对象 

Dispatch dRows = Dispatch.get(dTable, "rows").toDispatch();//所有行 
int nRows = Dispatch.get(dRows, "count").toInt();

3, 取得一行的内容 

    Dispatch dRow = Dispatch
    .invoke(rows,"item", Dispatch.Method, 
    new Object[] { new Integer(row + 1)},new int[1]) .toDispatch(); 
  return dRow; 
  }catch(ComFailException cfe) 
  { return null; }

4, 得到一行的超链接 

DHyperlink dhInRow[] = listHyperlinks(dRow);

5, 将某一行拷贝很多次 

Dispatch.call(dRow, "select"); 
  Dispatch.call(vSelection, "Copy"); 
  int nCopyNow = nDataBlockRow - 1; 
  for (int nCopys = 0; nCopys < nCopyNow; nCopys++) { 
  try { 
  Dispatch.call(vSelection, "Paste"); 
  }catch(Exception e) { e.printStackTrace(); 
  //有时候文档损坏,可以忽略本问题,实际上已经粘贴上了 
  } 
  }

6, 替换内容,读到这里就不用介绍了。 

打印预览: 

Dispatch.call(wordfile,"PrintPreView");

其他的功能发掘利用WORD的宏录制,以及VB编辑器,辅助功能,都能发掘出来。 

public void close() 
  { 
  //word.invoke("Quit", new Variant[] {}); 
  Variant f = new Variant(false); 
  Dispatch.call(wordfile, "Close", f); 
  } 
  public void quit() { word.invoke("Quit", new Variant[] {}); }

上述内容就是如何使用jacob 操作word,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


名称栏目:如何使用jacob操作word
文章链接:http://scyanting.com/article/gdcoio.html