您的位置:首页 > 其它

2015-12-18 学习心得

2015-12-18 16:48 176 查看
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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: