- jacob1.11版本与JDK1.5匹配
- jacob.dll放到windows/system32/下
- jacob.jar放到工程classpath下
实例:
public static void writeDoc(String inputFIle, String outputFile) {
boolean flag = false;
// 打开Word应用程序
ActiveXComponent app = new ActiveXComponent("Word.Application");
System.out.println("app======"+app);
try {
// 设置word不可见
app.setProperty("Visible", new Variant(false));
// 打开word文件
Dispatch doc1 = app.getProperty("Documents").toDispatch();
Dispatch doc2 = Dispatch.invoke(
doc1,
"Open",
Dispatch.Method,
new Object[] { inputFIle, new Variant(false),
new Variant(true) }, new int[1]).toDispatch();
// 作为txt格式保存到临时文件
Dispatch.invoke(doc2, "SaveAs", Dispatch.Method, new Object[] {
outputFile, new Variant(7) }, new int[1]);
// 关闭word
Variant f = new Variant(false);
Dispatch.call(doc2, "Close", f);
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
app.invoke("Quit", new Variant[] {});
}
if (flag == true) {
System.out.println("Transformed Successfully");
} else {
System.out.println("Transform Failed");
}
}
Jacob1.11版本下载地址:
下载完以后,解压缩出来,把里面的jacob.jar添加到classpath中
把jacob.dll放入windows/system32下面
添加到系统环境变量中:右键我的电脑->属性->高级->系统变量
类一:WordService.java
import com.jacob.activeX.*;
import com.jacob.com.*; /** * 采用Jacob1.11操作Word * * @author liuxt * */ public class WordService extends java.awt.Panel { private static final long serialVersionUID=-1L; public ActiveXComponent MsWordApp = null; private Dispatch document = null; public WordService() { super(); } public void openWord(boolean makeVisible) { //Open Word if we/'ve not done it already if (MsWordApp == null) { MsWordApp = new ActiveXComponent("Word.Application"); } //Set the visible property as required. Dispatch.put(MsWordApp, "Visible", new Variant(makeVisible)); }
/**
* 打开已知的word文档 * @param markVisible 可视化状态 * @param docPath 文档路径 */ public void openWord(boolean markVisible,final String docPath) { if (MsWordApp == null) { MsWordApp = new ActiveXComponent("Word.Application"); } //Set the visible property as required. Dispatch.put(MsWordApp, "Visible", new Variant(markVisible)); Dispatch docs = MsWordApp.getProperty("Documents").toDispatch(); document = Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{docPath}, new int[1]).toDispatch(); } /** * 创建Word文档 * */ public void createNewDocument() { //Find the Documents collection object maintained by Word Dispatch documents = Dispatch.get(MsWordApp,"Documents").toDispatch(); //Call the Add method of the Documents collection to create //a new document to edit document = Dispatch.call(documents,"Add").toDispatch(); } /** * 插入文本 * @param textToInsert */ public void insertText(String textToInsert) { // Get the current selection within Word at the moment. If // a new document has just been created then this will be at // the top of the new doc Dispatch selection = Dispatch.get(MsWordApp,"Selection").toDispatch(); //Put the specified text at the insertion point Dispatch.put(selection,"Text",textToInsert); } public void saveFileAs(String filename) { Dispatch.call(document,"SaveAs",filename); } public void printFile() { //Just print the current document to the default printer Dispatch.call(document,"PrintOut"); } /** * 查找替换文本 * @param searchText 需要查找的关键字 * @param replaceText 要替换成的关键字 */ public void searchReplace(final String searchText,final String replaceText) { Dispatch selection=MsWordApp.getProperty("Selection").toDispatch(); Dispatch find = ActiveXComponent.call(selection, "Find").toDispatch(); //查找什么文本 Dispatch.put(find, "Text", searchText); //替换文本 Dispatch.call(find,"ClearFormatting"); Dispatch.put(find, "Text", searchText); Dispatch.call(find, "Execute"); Dispatch.put(selection, "Text", replaceText); } /** * 把指定的值设置到指定的标签中去 * @param bookMarkKey */ public void setBookMark(final String bookMarkKey,final String bookMarkValue) { Dispatch activeDocument=MsWordApp.getProperty("ActiveDocument").toDispatch(); Dispatch bookMarks = ActiveXComponent.call(activeDocument, "Bookmarks").toDispatch(); boolean bookMarkExist1=Dispatch.call(bookMarks,"Exists",bookMarkKey).getBoolean(); if(bookMarkExist1==true){ Dispatch rangeItem = Dispatch.call(bookMarks, "Item",bookMarkKey).toDispatch(); Dispatch range = Dispatch.call(rangeItem, "Range").toDispatch(); //取标签的值 //String bookMarkValue=Dispatch.get(range,"Text").toString(); //bookMarkValue="test"; if(bookMarkValue!=null){ Dispatch.put(range, "Text",new Variant(bookMarkValue)); } }else{ System.out.println("not exists bookmark!"); } } /** * 保存Word文档到指定的目录(包括文件名) * @param filePath */ public void saveWordFile(final String filePath) { //保存文件 Dispatch.invoke(document, "SaveAs", Dispatch.Method, new Object[] {filePath, new Variant(0)} , new int[1]); //作为word格式保存到目标文件 Variant f = new Variant(false); Dispatch.call(document, "Close", f); } public void closeDocument() { // Close the document without saving changes // 0 = wdDoNotSaveChanges // -1 = wdSaveChanges // -2 = wdPromptToSaveChanges Dispatch.call(document, "Close", new Variant(0)); document = null; } public void closeWord() { Dispatch.call(MsWordApp,"Quit"); MsWordApp = null; document = null; } }
类二:WordExample.java
import com.suypower.yxsj.common.WordService;
public class WordExample {
public static void main(String[] args) { WordService word=new WordService(); word.openWord(true); word.createNewDocument(); word.insertText("Hello word."); word.searchReplace("Hello", "哈喽"); word.setBookMark("bookMarkKey","bookMarkValue"); //word.MsWordApp.setProperty("UserName","xiantongsky"); //word.saveWordFile("D:/xiantong.doc"); } } |