请问:
java 中如何实现创建、编辑一个WORD文档呢?
即把文本写入WORD文档,并能够设置其中的字体、换行等等。各位有没有用过或听说的,急等。
多谢了。
java 中如何实现创建、编辑一个WORD文档呢?
即把文本写入WORD文档,并能够设置其中的字体、换行等等。各位有没有用过或听说的,急等。
多谢了。
解决方案 »
- ibates里parameterClass里的值做什么用的
- 如何在java程序中用exec函数运行jetty的start.jar文件
- JAVA如何修改JDK功能?
- 字段是text类型,是否能用setString ?(关于长文本插入数据库)
- java工厂模式的一个例子
- JAVA执行下载包不完全,该如何办!-期待高手(高分求助)
- 如何编译和运行多个文件的java程序?
- 一个简单的程序我搞了一天了还没搞定,兄弟们帮我看看好吗???
- 谢谢大家的帮助,最后需要简化一步,可是不知道怎么简化
- 关于document的问题
- 请问建一个JFrame如何让它初始就是最大化?而且除掉任务栏那部份。
- 请问java如何人为建立一个KeyEvent类的实例?
private ActiveXComponent word = null; /** WORD对象*/
private Dispatch documents = null; /** 文档对象*/
private Dispatch vSelection = null; /** selection 对象是比较重要的一个对象 */
private Dispatch wordfile = null; /** 一个WORD文档 */ 1,初始化
word = new ActiveXComponent("Word.Application");
documents = word.getProperty("Documents").toDispatch(); 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"); 详细看看JACOB的说明