jacob处理word文档
2009-11-22 15:11
281 查看
Java 控制Office 控件是非常麻烦的一件事情。
自从有了JACOB后,事情变得简单多了。
但是要实现Java灵活的控制Word还是一件非常麻烦的事情。
下面介绍几个WORD常见的对象以及一些典型的处理过程,希望对大家有帮助。
(请注意:JDK1.3.2运行 Jacob比较正常,JDK1.4有问题)
3,显示WORD
word.setProperty("Visible", new Variant(visible));
4,设置WORD的位置
个人觉得使用超链接的模式比较方便。
有几大优点:
1, Hyperlink 有3个区域可以让开发者自己利用
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, 列出所有表格
和列出所有超链接基本一样:
DHyperlink dhInRow[] = listHyperlinks(dRow);
5, 将某一行拷贝很多次
打印预览:
Dispatch.call(wordfile,"PrintPreView");
其他的功能发掘
利用WORD的宏录制,以及VB编辑器,辅助功能,都能发掘出来。
自从有了JACOB后,事情变得简单多了。
但是要实现Java灵活的控制Word还是一件非常麻烦的事情。
下面介绍几个WORD常见的对象以及一些典型的处理过程,希望对大家有帮助。
(请注意:JDK1.3.2运行 Jacob比较正常,JDK1.4有问题)
/** WORD对象*/ private ActiveXComponent word = null; /** 文档对象*/ private Dispatch documents = null; /** selection 对象是比较重要的一个对象 */ private Dispatch vSelection = null; /** 一个WORD文档 */ 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对象一样来回的重新取,这个对象一直有效。
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编辑器,辅助功能,都能发掘出来。
相关文章推荐
- Jacob处理Word文档总结以及Java操作Office2007
- 使用Jacob来处理Word文档
- 使用Jacob来处理Word文档
- Java处理word文档 用jacob 表格图片文字替换
- 终于把Jacob处理Word文档搞定了
- 7.4 使用Jacob来处理Word文档
- Jacob处理Word文档的方法
- 利用Java-JACOB操作WORD文档2
- jacob 处理word
- 合并word文档时,用Jacob 插入分节符以达到保持原来的页眉的一个可行方案
- Java 使用jacob实现各类办公文档(ppt,Excel,word,text,imge)转换成PDF
- .NET平台开源文档与报表处理组件包括Execel PDF Word等
- .Net 中处理Word(2007)文档的一种方法
- C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化
- (转载)java操作word文档(jacob)
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片(这个不错,可以拿来直接用,非常好)
- 如何利用Java-JACOB操作WORD文档
- java 处理word文档 (含图片,表格内容)
- Word 2007 WWLib.DLL文档处理溢出漏洞