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
相关推荐
3. **打开Word文档**:使用Jawin提供的方法,如`JWin.openDoc()`,可以打开指定路径的Word文档。 4. **执行转换**:接下来,你可以调用Word的宏或者命令来执行转换。这可能需要对Word的COM接口有一定的了解,因为...
5. **Java调用Word示例**:展示使用Jawin和Jacob进行实际操作Word文档的Java代码片段,例如添加文本、插入图片、格式化文档等。 6. **问题解决和最佳实践**:可能包含了开发者在使用这些库时可能遇到的问题及其解决...
综上所述,Java调用DLL和COM组件通过Jawin框架,可以让Java开发者更便捷地操作Word和Excel文档,而不需要深入学习底层的JNI和COM技术。同时,提供的源码和工具能帮助开发者更好地理解和应用这一技术。
1. **利用Windows API**:例如,Java程序可以使用Jawin调用Windows的API函数,实现屏幕截图、文件操作等系统级功能。 2. **集成ActiveX控件**:Java应用可以与ActiveX控件交互,如播放视频、处理Excel文档等。 3. **...
Jacob 的优势在于提供了一个纯 Java 的解决方案来操作 COM 组件,避免了 JNI 的复杂性和 Jawin 的 Windows API 风格,使得 Java 开发者能更自然地与 Office 应用程序交互。它的使用流程清晰,文档较为完善,对于需要...
3. **Office Automation**: Office自动化是指使用编程语言(如Java)控制Microsoft Office应用程序,如Word、Excel和PowerPoint,实现自动化操作,如创建、修改、读取文档,执行宏命令等。 4. **COM(Component ...
ICTCLAS(Chinese Word Segmentation for Information Content Extraction and Linguistic Analysis System)是由北京师范大学的陈天教授基于ICTCLAS(信息内容提取与语言分析系统)进一步开发的一个Java分词系统。...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...