日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jacob操作Word文档转换-XXOO

發布時間:2024/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jacob操作Word文档转换-XXOO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

JACOB一個Java-COM中間件.通過這個組件你可以在Java應用程序中調用COM組件和Win32程序庫。


一、準備

<!--添加本地的jacob.jar包--><dependency><groupId>com.jacob</groupId><artifactId>jacob</artifactId><version>1.19</version><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/jacob.jar</systemPath></dependency>

jacob.jar 下載鏈接?https://mvnrepository.com/artifact/com.jacob/jacob/1.10?

或者??https://download.csdn.net/download/qq_35731570/13117233

二、代碼示例

1.JacobUtil 工具類

package com.yl.util;import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import org.springframework.stereotype.Component;import java.io.*;/**** @author yl* @date 2020/5/22* Jacob 操作API*/ @Component public class JacobUtil {/*** word文檔*/private Dispatch doc;/*** word運行程序對象*/private ActiveXComponent word;/*** 所有word文檔集合*/private Dispatch documents;/*** 選定的范圍或插入點*/private Dispatch selection;private boolean saveOnExit = true;public JacobUtil() {ComThread.InitSTA();if (word == null) {word = new ActiveXComponent("Word.Application");word.setProperty("Visible", new Variant(false));}if (documents == null){documents = word.getProperty("Documents").toDispatch();}}/*** 設置退出時參數** @param saveOnExit* boolean true-退出時保存文件,false-退出時不保存文件*/public void setSaveOnExit(boolean saveOnExit) {this.saveOnExit = saveOnExit;}/*** 創建一個新的word文檔**/public void createNewDocument() {doc = Dispatch.call(documents, "Add").toDispatch();selection = Dispatch.get(word, "Selection").toDispatch();}/*** 打開一個已存在的文檔** @param docPath*/public void openDocument(String docPath) {closeDocument();doc = Dispatch.call(documents, "Open", docPath).toDispatch();selection = Dispatch.get(word, "Selection").toDispatch();}/*** 把選定的內容或插入點向上移動** @param pos* 移動的距離*/public void moveUp(int pos) {if (selection == null){selection = Dispatch.get(word, "Selection").toDispatch();}for (int i = 0; i < pos; i++){Dispatch.call(selection, "MoveUp");}}/** *//*** 把選定的內容或者插入點向下移動** @param pos* 移動的距離*/public void moveDown(int pos) {if (selection == null) {selection = Dispatch.get(word, "Selection").toDispatch();}for (int i = 0; i < pos; i++){Dispatch.call(selection, "MoveDown");}}/** *//*** 把選定的內容或者插入點向左移動** @param pos* 移動的距離*/public void moveLeft(int pos) {if (selection == null) {selection = Dispatch.get(word, "Selection").toDispatch();}for (int i = 0; i < pos; i++) {Dispatch.call(selection, "MoveLeft");}}/** *//*** 把選定的內容或者插入點向右移動** @param pos* 移動的距離*/public void moveRight(int pos) {if (selection == null) {selection = Dispatch.get(word, "Selection").toDispatch();}for (int i = 0; i < pos; i++) {Dispatch.call(selection, "MoveRight");}}/*** 把插入點移動到文件首位置**/public void moveStart() {if (selection == null) {selection = Dispatch.get(word, "Selection").toDispatch();}Dispatch.call(selection, "HomeKey", new Variant(6));}/*** 把插入點移動到文件結尾位置**/public void moveEnd() {if (selection == null)selection = Dispatch.get(word, "Selection").toDispatch();Dispatch.call(selection, "EndKey", new Variant(6));}/*** 從選定內容或插入點開始查找文本** @param toFindText* 要查找的文本* @return boolean true-查找到并選中該文本,false-未查找到文本*/public boolean find(String toFindText) {if (toFindText == null || toFindText.equals("")){return false;}// 從selection所在位置開始查詢Dispatch find = ActiveXComponent.call(selection, "Find").toDispatch();// 設置要查找的內容Dispatch.put(find, "Text", toFindText);// 向前查找Dispatch.put(find, "Forward", "True");// 設置格式Dispatch.put(find, "Format", "True");// 大小寫匹配Dispatch.put(find, "MatchCase", "True");// 全字匹配Dispatch.put(find, "MatchWholeWord", "True");// 查找并選中return Dispatch.call(find, "Execute").getBoolean();}/*** 函數名: replaceStr 描述:改變內容** @param strToFind* @param strToReplace* @return* @exception*/public void replaceStr(String strToFind, String strToReplace) {// 提取word文檔內容?象Object content = Dispatch.get(this.doc, "Content").toDispatch();// 提取find?象,也就?找替?的那個?象Object finder = Dispatch.get((Dispatch) content, "Find").toDispatch();boolean rt = true;Variant f = new Variant(false);while (rt) {rt = Dispatch.invoke((Dispatch) finder, "Execute", Dispatch.Method,new Object[] { strToFind, f, f, f, f, f, f, f, f,strToReplace, new Variant(true) }, new int[1]).toBoolean();}}/*** 把選定選定內容設定為替換文本** @param toFindText* 查找字符串* @param newText* 要替換的內容* @return*/public boolean replaceText(String toFindText, String newText) {if (!find(toFindText)) {return false;}Dispatch.put(selection, "Text", newText);return true;}/*** 全局替換文本** @param toFindText* 查找字符串* @param newText* 要替換的內容*/public void replaceAllText(String toFindText, String newText) {while (find(toFindText)) {Dispatch.put(selection, "Text", newText);Dispatch.call(selection, "MoveRight");}}/** *//*** 在當前插入點插入字符串** @param newText* 要插入的新字符串*/public void insertText(String newText) {Dispatch.put(selection, "Text", newText);}/** *//*** 在當前插入點插入字符串** @param newText 要插入的新字符串*/public void insertAfterText(String newText) {moveEnd();// 取得當前文檔的內容Dispatch wordContent = Dispatch.get(doc, "Content").toDispatch();// 插入特殊符定位插入點Dispatch.call(wordContent, "InsertAfter", newText);}/*** 在末尾插入回車**/public void insertNewParagraph() {moveEnd();Dispatch.call(selection, "TypeParagraph");}/**** @param toFindText* 要查找的字符串* @param imagePath* 圖片路徑* @return*/public boolean replaceImage(String toFindText, String imagePath) {if (!find(toFindText)) {return false;}Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture", imagePath);return true;}/** *//*** 全局替換圖片** @param toFindText* 查找字符串* @param imagePath* 圖片路徑*/public void replaceAllImage(String toFindText, String imagePath) {while (find(toFindText)) {Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture", imagePath);Dispatch.call(selection, "MoveRight");}}/** *//*** 在當前插入點插入圖片** @param imagePath* 圖片路徑*/public void insertImage(String imagePath) {Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture", imagePath);}/** *//*** 合并單元格** @param tableIndex* @param fstCellRowIdx* @param fstCellColIdx* @param secCellRowIdx* @param secCellColIdx*/public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,int secCellRowIdx, int secCellColIdx) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();Dispatch fstCell = Dispatch.call(table, "Cell",new Variant(fstCellRowIdx), new Variant(fstCellColIdx)).toDispatch();Dispatch secCell = Dispatch.call(table, "Cell",new Variant(secCellRowIdx), new Variant(secCellColIdx)).toDispatch();Dispatch.call(fstCell, "Merge", secCell);}/** *//*** 在指定的單元格里填寫數據** @param tableIndex* @param cellRowIdx* @param cellColIdx* @param txt*/public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,String txt) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),new Variant(cellColIdx)).toDispatch();Dispatch.call(cell, "Select");Dispatch.put(selection, "Text", txt);}/** *//*** 在指定的單元格里填寫數據** @param tableIndex* @param cellRowIdx* @param cellColIdx* @param txt*/public void putTxtToCellCenter(int tableIndex, int cellRowIdx,int cellColIdx, String txt) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),new Variant(cellColIdx)).toDispatch();Dispatch.call(cell, "Select");Dispatch alignment = Dispatch.get(selection, "ParagraphFormat").toDispatch();Dispatch.put(alignment, "Alignment", "3");Dispatch.put(selection, "Text", txt);}/** *//*** 在當前文檔拷貝剪貼板數據** @param pos*/public void pasteExcelSheet(String pos) {moveStart();if (this.find(pos)) {Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();Dispatch.call(textRange, "Paste");}}/** *//*** 在當前文檔指定的位置拷貝表格** @param pos* 當前文檔指定的位置* @param tableIndex* 被拷貝的表格在word文檔中所處的位置*/public void copyTable(String pos, int tableIndex) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();Dispatch range = Dispatch.get(table, "Range").toDispatch();Dispatch.call(range, "Copy");if (this.find(pos)) {Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();Dispatch.call(textRange, "Paste");}}/** *//*** 在當前文檔指定的位置拷貝來自另一個文檔中的表格** @param anotherDocPath* 另一個文檔的磁盤路徑* @param tableIndex* 被拷貝的表格在另一格文檔中的位置* @param pos* 當前文檔指定的位置*/public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex,String pos) {Dispatch doc2 = null;try {doc2 = Dispatch.call(documents, "Open", anotherDocPath).toDispatch();// 所有表格Dispatch tables = Dispatch.get(doc2, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item",new Variant(tableIndex)).toDispatch();Dispatch range = Dispatch.get(table, "Range").toDispatch();Dispatch.call(range, "Copy");if (this.find(pos)) {Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();Dispatch.call(textRange, "Paste");}} catch (Exception e) {e.printStackTrace();} finally {if (doc2 != null) {Dispatch.call(doc2, "Close", new Variant(saveOnExit));doc2 = null;}}}/** *//*** 在當前文檔指定的位置拷貝來自另一個文檔中的圖片** @param anotherDocPath* 另一個文檔的磁盤路徑* @param shapeIndex* 被拷貝的圖片在另一格文檔中的位置* @param pos* 當前文檔指定的位置*/public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex,String pos) {Dispatch doc2 = null;try {doc2 = Dispatch.call(documents, "Open", anotherDocPath).toDispatch();Dispatch shapes = Dispatch.get(doc2, "InLineShapes").toDispatch();Dispatch shape = Dispatch.call(shapes, "Item",new Variant(shapeIndex)).toDispatch();Dispatch imageRange = Dispatch.get(shape, "Range").toDispatch();Dispatch.call(imageRange, "Copy");if (this.find(pos)) {Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();Dispatch.call(textRange, "Paste");}} catch (Exception e) {e.printStackTrace();} finally {if (doc2 != null) {Dispatch.call(doc2, "Close", new Variant(saveOnExit));doc2 = null;}}}/*** 在當前文檔末尾拷貝來自另一個文檔中的段落** @param anotherDocPath 另一個文檔的磁盤路徑* @param paragraphIndex 被拷貝的段落在另一格文檔中的序號(從1開始)*/public void copyParagraphFromAnotherDoc(String anotherDocPath, int paragraphIndex) {// 取得當前文檔的內容Dispatch wordContent = Dispatch.get(doc, "Content").toDispatch();// 插入特殊符定位插入點Dispatch.call(wordContent, "InsertAfter", "$selection$");copyParagraphFromAnotherDoc(anotherDocPath, paragraphIndex,"$selection$");}/*** 在當前文檔指定的位置拷貝來自另一個文檔中的段落** @param anotherDocPath 另一個文檔的磁盤路徑* @param paragraphIndex 被拷貝的段落在另一格文檔中的序號(從1開始)* @param pos 當前文檔指定的位置*/public void copyParagraphFromAnotherDoc(String anotherDocPath, int paragraphIndex, String pos) {Dispatch doc2 = null;try {doc2 = Dispatch.call(documents, "Open", anotherDocPath).toDispatch();Dispatch paragraphs = Dispatch.get(doc2, "Paragraphs").toDispatch();Dispatch paragraph = Dispatch.call(paragraphs, "Item",new Variant(paragraphIndex)).toDispatch();Dispatch range = Dispatch.get(paragraph, "Range").toDispatch();Dispatch.call(range, "Copy");if (this.find(pos)) {Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();Dispatch.call(textRange, "Paste");}} catch (Exception e) {e.printStackTrace();} finally {if (doc2 != null) {Dispatch.call(doc2, "Close", new Variant(saveOnExit));doc2 = null;}}}/*** 在當前文檔末尾拷貝來自另外個文檔中的表格** @param anotherDocPath 另一個文檔的磁盤路徑* @param tableIndex 被拷貝的表格在word文檔中所處的位置(從1開始)*/public void copyTable2(String anotherDocPath, int tableIndex) {// 取得當前文檔的內容Dispatch wordContent = Dispatch.get(doc, "Content").toDispatch();// 插入特殊符定位插入點Dispatch.call(wordContent, "InsertAfter", "$selection$");copyTableFromAnotherDoc(anotherDocPath, tableIndex, "$selection$");}/*** 創建表格** @param pos* 位置* @param numCols* 列數* @param numRows* 行數*/public void createTable(String pos, int numCols, int numRows) {if (find(pos)) {Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();Dispatch range = Dispatch.get(selection, "Range").toDispatch();Dispatch newTable = Dispatch.call(tables, "Add", range,new Variant(numRows), new Variant(numCols)).toDispatch();Dispatch.call(selection, "MoveRight");}}/** *//*** 在指定行前面增加行** @param tableIndex* word文件中的第N張表(從1開始)* @param rowIndex* 指定行的序號(從1開始)*/public void addTableRow(int tableIndex, int rowIndex) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch rows = Dispatch.get(table, "Rows").toDispatch();Dispatch row = Dispatch.call(rows, "Item", new Variant(rowIndex)).toDispatch();Dispatch.call(rows, "Add", new Variant(row));}/** *//*** 在第1行前增加一行** @param tableIndex* word文檔中的第N張表(從1開始)*/public void addFirstTableRow(int tableIndex) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch rows = Dispatch.get(table, "Rows").toDispatch();Dispatch row = Dispatch.get(rows, "First").toDispatch();Dispatch.call(rows, "Add", new Variant(row));}/** *//*** 在最后1行前增加一行** @param tableIndex* word文檔中的第N張表(從1開始)*/public void addLastTableRow(int tableIndex) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch rows = Dispatch.get(table, "Rows").toDispatch();Dispatch row = Dispatch.get(rows, "Last").toDispatch();Dispatch.call(rows, "Add", new Variant(row));}/** *//*** 增加一行** @param tableIndex* word文檔中的第N張表(從1開始)*/public void addRow(int tableIndex) {Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch rows = Dispatch.get(table, "Rows").toDispatch();Dispatch.call(rows, "Add");}/** *//*** 增加一列** @param tableIndex* word文檔中的第N張表(從1開始)*/public void addCol(int tableIndex) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch cols = Dispatch.get(table, "Columns").toDispatch();Dispatch.call(cols, "Add").toDispatch();Dispatch.call(cols, "AutoFit");}/** *//*** 在指定列前面增加表格的列** @param tableIndex* word文檔中的第N張表(從1開始)* @param colIndex* 制定列的序號 (從1開始)*/public void addTableCol(int tableIndex, int colIndex) {// 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch cols = Dispatch.get(table, "Columns").toDispatch();System.out.println(Dispatch.get(cols, "Count"));Dispatch col = Dispatch.call(cols, "Item", new Variant(colIndex)).toDispatch();// Dispatch col = Dispatch.get(cols, "First").toDispatch();Dispatch.call(cols, "Add", col).toDispatch();Dispatch.call(cols, "AutoFit");}/** *//*** 在第1列前增加一列** @param tableIndex* word文檔中的第N張表(從1開始)*/public void addFirstTableCol(int tableIndex) {Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch cols = Dispatch.get(table, "Columns").toDispatch();Dispatch col = Dispatch.get(cols, "First").toDispatch();Dispatch.call(cols, "Add", col).toDispatch();Dispatch.call(cols, "AutoFit");}/** *//*** 在最后一列前增加一列** @param tableIndex* word文檔中的第N張表(從1開始)*/public void addLastTableCol(int tableIndex) {Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch cols = Dispatch.get(table, "Columns").toDispatch();Dispatch col = Dispatch.get(cols, "Last").toDispatch();Dispatch.call(cols, "Add", col).toDispatch();Dispatch.call(cols, "AutoFit");}/** *//*** 設置當前選定內容的字體** @param bold* @param italic* @param underLine* 下劃線* @param colorSize* 字體顏色* @param size* 字體大小* @param name* 字體名稱*/public void setFont(boolean bold, boolean italic, boolean underLine,String colorSize, String size, String name) {Dispatch font = Dispatch.get(selection, "Font").toDispatch();Dispatch.put(font, "Name", new Variant(name));Dispatch.put(font, "Bold", new Variant(bold));Dispatch.put(font, "Italic", new Variant(italic));Dispatch.put(font, "Underline", new Variant(underLine));Dispatch.put(font, "Color", colorSize);Dispatch.put(font, "Size", size);}public void setFontCenter(String name) {Dispatch font = Dispatch.get(selection, "Font").toDispatch();Dispatch alignment = Dispatch.get(selection, "ParagraphFormat").toDispatch();Dispatch.put(alignment, "Alignment", "3");Dispatch.call(selection, "TypeText", name);}/** *//*** 文件保存或另存為** @param savePath 保存或另存為路徑** word 保存或另存為 word* Dispatch.invoke(this.doc, "SaveAs", Dispatch.Method, new Object[] {* savePath, new Variant(0) }, new int[1]);*/public void save(String savePath, int format) {/*** Dispatch.call(doc, "SaveAs", savePath);* Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),* "FileSaveAs", savePath);*/// word 保存或另存為 wordDispatch.invoke(this.doc, "SaveAs", Dispatch.Method, new Object[] {savePath, new Variant(format) }, new int[1]);}public void saveCall2(String savePath) {Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),"FileSaveAs", savePath);}public void saveCall(String savePath, int format) {Dispatch.call(doc, "SaveAs", savePath, format);}/** *//*** 關閉當前word文檔**/public void closeDocument() {if (doc != null) {Dispatch.call(doc, "Save");Dispatch.call(doc, "Close", new Variant(saveOnExit));doc = null;}}/** *//*** 關閉全部應用**/public void close() {closeDocument();if (word != null) {Dispatch.call(word, "Quit");word = null;}selection = null;documents = null;ComThread.Release();}/** *//*** 打印當前word文檔**/public void printFile() {if (doc != null) {Dispatch.call(doc, "PrintOut");}}/** *//*** 刪除一行** @param tableIndex* word文檔中的第N張表(從1開始)*/public void delRow(int tableIndex) {Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();// 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();// 表格的所有行Dispatch rows = Dispatch.get(table, "Rows").toDispatch();Object temp1 = Dispatch.get(rows, "Count");String temp2 = temp1.toString();int count = Integer.parseInt(temp2);while (count > 1) {Dispatch row = Dispatch.get(rows, "Last").toDispatch();Dispatch.call(row, "Delete");rows = Dispatch.get(table, "Rows").toDispatch();temp1 = Dispatch.get(rows, "Count");temp2 = temp1.toString();count = Integer.parseInt(temp2);}}public void setProp(String sName, String sValue) {Dispatch props = Dispatch.get(doc, "CustomDocumentProperties").toDispatch();Dispatch prop = Dispatch.call(props, "Item", sName).toDispatch();String sOldVal = Dispatch.get(prop, "Value").toString();if (!sOldVal.equals(sValue)) {Dispatch.put(prop, "Value", sValue);}}/** *//*** @param nType:* 1, number; 2,bool; 3,date; 4,str;*/public void addProp(String sName, int nType, String sValue) {Dispatch props = Dispatch.get(doc, "CustomDocumentProperties").toDispatch();Dispatch prop = null;try {prop = Dispatch.call(props, "Item", sName).toDispatch();} catch (Exception e) {prop = null;}if (prop != null) {return;}// 1, number; 2,bool; 3,date; 4,str;prop = Dispatch.call(props, "Add", sName, false, nType, sValue).toDispatch();Dispatch.put(prop, "Value", sValue);}public String getProp(String sName) {String sValue = null;Dispatch props = Dispatch.get(doc, "CustomDocumentProperties").toDispatch();Dispatch prop = Dispatch.call(props, "Item", sName).toDispatch();sValue = Dispatch.get(prop, "Value").toString();@SuppressWarnings("unused")String sType = Dispatch.get(prop, "Type").toString();try {Dispatch prop0 = Dispatch.call(doc, "CustomDocumentProperties",sName).toDispatch();sValue = Dispatch.get(prop0, "Value").toString();} catch (Exception e) {e.printStackTrace();}return sValue;}public void fack_change() {Dispatch _sel = Dispatch.call(doc, "Range", 0, 0).toDispatch();Dispatch.call(_sel, "InsertBefore", "A");Dispatch.call(_sel, "Select");Dispatch.call(_sel, "Delete");}/*** 拷貝Word文檔* @param src* @param dest*/public void copyWordFile(String src, String dest){InputStream is=null;OutputStream os=null;try {is=new BufferedInputStream(new FileInputStream(src));os=new BufferedOutputStream(new FileOutputStream(dest));byte[] b=new byte[256];int len=0;try {while((len=is.read(b))!=-1){os.write(b,0,len);}os.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(is!=null){try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(os!=null){try {os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

2.Word文檔轉其他-操作示例

package com.yl.test;import com.yl.util.JacobUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired;import java.io.File; import java.time.LocalDate; import java.time.LocalDateTime;/*** Word文檔轉其他* @author yl* @date 2020/5/22*/ @Slf4j public class WordConvertOther {@Autowiredprivate JacobUtil jacobUtil = new JacobUtil();/*** WORD 轉 PDF 格式*/private static final int WORD_TO_PDF_FORMAT_ = 17;/*** WORD 轉 XML 格式*/private static final int WORD_TO_XML_FORMAT_ = 11;/*** WORD 轉 HTML 格式*/private static final int WORD_TO_HTML_FORMAT_ = 8;/*** WORD 另存 格式*/private static final int WORD_TO_WORD_FORMAT_ = 0;/*** WORD 轉 PDF* @param fromFileName* @param toFileName*/public void wordToPDF(String fromFileName, String toFileName){try{log.info("word 文檔路徑=, {}, \t pdf文檔路徑=, {}", fromFileName, toFileName);// 打開文檔jacobUtil.openDocument(fromFileName);// 開始轉換jacobUtil.save(toFileName, WORD_TO_PDF_FORMAT_);}catch (Exception e){e.printStackTrace();}finally {// 關閉文檔jacobUtil.closeDocument();// 關閉程序jacobUtil.close();}}/*** WORD 轉 HTML* @param fromFileName* @param toFileName*/public void wordToHTML(String fromFileName, String toFileName){try{log.info("word 文檔路徑=, {}, \t html文檔路徑=, {}", fromFileName, toFileName);// 打開文檔jacobUtil.openDocument(fromFileName);// 開始轉換jacobUtil.save(toFileName, WORD_TO_HTML_FORMAT_);}catch (Exception e){e.printStackTrace();}finally {// 關閉文檔jacobUtil.closeDocument();// 關閉程序jacobUtil.close();}}/*** WORD 轉 XML* @param fromFileName* @param toFileName*/public void wordToXML(String fromFileName, String toFileName){try{log.info("word 文檔路徑=, {}, \t xml文檔路徑=, {}", fromFileName, toFileName);// 打開文檔jacobUtil.openDocument(fromFileName);// 開始轉換jacobUtil.save(toFileName, WORD_TO_XML_FORMAT_);}catch (Exception e){e.printStackTrace();}finally {// 關閉文檔jacobUtil.closeDocument();// 關閉程序jacobUtil.close();}}/*** WORD 另存* @param fromFileName* @param toFileName*/public void wordToSave(String fromFileName, String toFileName){try{log.info("word 文檔路徑=, {}, \t 新word文檔路徑=, {}", fromFileName, toFileName);// 打開文檔jacobUtil.openDocument(fromFileName);// 開始轉換jacobUtil.save(toFileName, WORD_TO_WORD_FORMAT_);// 替換內容jacobUtil.replaceAllText("東芝電梯", "著水電站");// 再次轉換jacobUtil.save(toFileName, WORD_TO_WORD_FORMAT_);}catch (Exception e){e.printStackTrace();}finally {// 關閉文檔jacobUtil.closeDocument();// 關閉程序jacobUtil.close();}}/*** 創建Word文檔* @param fromFileName* @param toFileName*/public void createWord(String fromFileName, String toFileName){try{log.info("createWord 文檔路徑=, {}, \t 新word文檔路徑=, {}", fromFileName, toFileName);// 獲取臨時文件log.info("創建臨時文件");String proDir = System.getProperty("user.dir") +"/springboot-jacob/src/main/resources";String tempFileName = proDir +"/temp/"+System.currentTimeMillis()+"-WJZ_Apply.doc";// 模板文件1String modelOne = proDir +"/fromFiles/2020-05-22-0922147777meetingInfo.doc";// 模板文件2String modelTwo = proDir +"/fromFiles/2020-05-22-0922147777meetingInfomeetingCopytemp.doc";// 復制模板1到臨時文件jacobUtil.copyWordFile(modelOne, tempFileName);// 打開臨時文件log.info("打開臨時文件");jacobUtil.openDocument(tempFileName);// 替換值// 時間jacobUtil.replaceAllText("${meeting_date}$", "2020-07-10 08:56:26");// 地點jacobUtil.replaceAllText("${meeting_address}$", "上海寶山區");// 出席者jacobUtil.replaceAllText("${meeting_attend_dept}$", "程序員XX");// 復制模板2到臨時文件jacobUtil.copyParagraphFromAnotherDoc(modelTwo, 1);// 插入數據String temp;for (int i = 0; i < 100; i++) {// 插入標識符jacobUtil.insertAfterText("${WordContent}$");// 替換標識符temp = "本月回復:催款人" + i+ " 拖欠原因" + i+ " 現場動態描述" + i+ " 本月工作實施記錄" + i+ " 客戶意見" + i+ " 代理店意見" + i+ " 代理店意見" + i;log.info("WordContent --- temp , {}", temp);jacobUtil.moveStart();jacobUtil.replaceAllText(temp, "${WordContent}$");// 在末尾插入回車jacobUtil.insertNewParagraph();jacobUtil.moveEnd();// 日期jacobUtil.insertAfterText("${Word_Time}$");LocalDate today = LocalDate.now();int year = today.getYear();int month = today.getMonthValue();int day = today.getDayOfMonth();temp = year + "年"+ month + "月"+ day + "日" + "會議記錄:";log.info("Word_Time --- temp , {}", temp);jacobUtil.moveStart();jacobUtil.replaceAllText(temp, "${Word_Time}$");// 在末尾插入回車jacobUtil.insertNewParagraph();jacobUtil.moveEnd();jacobUtil.copyParagraphFromAnotherDoc(toFileName, 2);// COPY 表格jacobUtil.copyTable2(tempFileName, 1);jacobUtil.insertNewParagraph();log.info("執行 "+i+" 次 , "+System.currentTimeMillis());}}catch (Exception e){e.printStackTrace();}finally {// 關閉文檔jacobUtil.closeDocument();// 關閉程序jacobUtil.close();}}public static void main(String[] args) throws Exception{String proDir = System.getProperty("user.dir") +"/springboot-jacob/src/main/resources";WordConvertOther wordConvertOther = new WordConvertOther();String fromFileName = proDir +"/fromFiles/2020-05-22-0922147777meetingInfo.doc";String toFileName = proDir +"/toFiles/"+System.currentTimeMillis()+"-meetingInfo.doc";wordConvertOther.createWord(fromFileName, toFileName);// String fromFileName = proDir +"/fromFiles/2020-05-22-0922147777WJZ_Apply.doc"; // // // WORD 轉 PDF 自身office不支持 // String toPdfFileName = proDir +"/toFiles/"+System.currentTimeMillis()+"-WJZ_Apply.pdf"; // wordConvertOther.wordToPDF(fromFileName, toPdfFileName); // // // WORD 轉 HTML OK // String toHtmlFileName = proDir +"/toFiles/"+System.currentTimeMillis()+"-WJZ_Apply.html"; // wordConvertOther.wordToHTML(fromFileName, toHtmlFileName); // // // WORD 轉 HTML OK // String toXmlFileName = proDir +"/toFiles/"+System.currentTimeMillis()+"-WJZ_Apply.xml"; // wordConvertOther.wordToXML(fromFileName, toXmlFileName); // // // WORD 另存 OK // String toWordFileName = proDir +"/toFiles/"+System.currentTimeMillis()+"-WJZ_Apply.doc"; // wordConvertOther.wordToSave(fromFileName, toWordFileName);} }

以上

總結

以上是生活随笔為你收集整理的Jacob操作Word文档转换-XXOO的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。