jacob方法大全

package com.xaeds.taecs.common.util;  
  
import com.jacob.activeX.ActiveXComponent;  
import com.jacob.com.Dispatch;  
import com.jacob.com.Variant;  
  
/** 
 * @author Administrator 
 *  
 */  
public class WordBean {  
  
    // word文檔  
    private Dispatch doc;  
  
    // word運行程序對象  
    private ActiveXComponent word;  
  
    // 所有word文檔集合  
    private Dispatch documents;  
  
    // 選定的範圍或插入點  
    private Dispatch selection;  
  
    private boolean saveOnExit = true;  
  
    public WordBean(boolean visible) throws Exception {  
        if (word == null) {  
            word = new ActiveXComponent("Word.Application");  
            word.setProperty("Visible", new Variant(visible)); // 不可見打開word  
            word.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏  
        }  
        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 docPath 
     *            -文件全名 
     * @param pwd 
     *            -密碼 
     */  
    public void openDocumentOnlyRead(String docPath, String pwd)  
            throws Exception {  
        closeDocument();  
        doc = Dispatch.callN(  
                documents,  
                "Open",  
                new Object[] { docPath, new Variant(false), new Variant(true),  
                        new Variant(true), pwd, "", new Variant(false) })  
                .toDispatch();  
        selection = Dispatch.get(word, "Selection").toDispatch();  
    }  
  
    public void openDocument(String docPath, String pwd) throws Exception {  
        closeDocument();  
        doc = Dispatch.callN(  
                documents,  
                "Open",  
                new Object[] { docPath, new Variant(false), new Variant(false),  
                        new Variant(true), pwd }).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 enterStart(){  
        if (selection == null)  
            selection = Dispatch.get(word, "Selection").toDispatch();  
        Dispatch.call(selection, "TypeParagraph");  
    }  
    /** 
     * 從選定內容或插入點開始查找文本 
     *  
     * @param toFindText 
     *            要查找的文本 
     * @return boolean true-查找到並選中該文本,false-未查找到文本 
     */  
    @SuppressWarnings("static-access")  
    public boolean find(String toFindText) {  
        if (toFindText == null || toFindText.equals(""))  
            return false;  
        // 從selection所在位置開始查詢  
        Dispatch find = word.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();  
    }  
  
    /** 
     * 把選定選定內容設定爲替換文本 
     *  
     * @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 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 fstCellRowIndex  
     *            第一個單元格的行索引  
     * @param fstCellColIndex  
     *            第一個單元格的列索引  
     * @param secCellRowIndex  
     *            第二個單元格的行索引  
     * @param secCellColIndex  
     *            第二個單元格的列索引  
     */   
    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 
     * @return 
     */  
    public String getTxtFromCell(int tableIndex, int cellRowIdx, int cellColIdx) {  
        // 所有表格  
        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");  
        String ret = "";  
        ret = Dispatch.get(selection, "Text").toString();  
        ret = ret.substring(0, ret.length() - 1); // 去掉最後的回車符;  
        return ret;  
    }  
  
    /** 
     * 在當前文檔拷貝剪貼板數據 
     *  
     * @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 pos 
     *            位置 
     * @param cols 
     *            列數 
     * @param rows 
     *            行數 
     */  
    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();  
            @SuppressWarnings("unused")  
            Dispatch newTable = Dispatch.call(tables, "Add", range,  
                    new Variant(numRows), new Variant(numCols),new Variant(1)).toDispatch();  
            Dispatch.call(selection, "MoveRight");  
        } else {  
            Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();  
            Dispatch range = Dispatch.get(selection, "Range").toDispatch();  
            @SuppressWarnings("unused")  
            Dispatch newTable = Dispatch.call(tables, "Add", range,  
                    new Variant(numRows), new Variant(numCols),new Variant(1)).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");  
    }  
  
    /** 
     * 自動調整表格 
     *  
     */  
    public void autoFitTable() {  
        Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();  
        int count = Dispatch.get(tables, "Count").toInt();  
        for (int i = 0; i < count; i++) {  
            Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))  
                    .toDispatch();  
            Dispatch cols = Dispatch.get(table, "Columns").toDispatch();  
            Dispatch.call(cols, "AutoFit");  
        }  
    }  
  
    /** 
     * 調用word裏的宏以調整表格的寬度,其中宏保存在document下 
     *  
     */  
    public void callWordMacro() {  
        Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();  
        int count = Dispatch.get(tables, "Count").toInt();  
        Variant vMacroName = new Variant("Normal.NewMacros.tableFit");  
        @SuppressWarnings("unused")  
        Variant vParam = new Variant("param1");  
        @SuppressWarnings("unused")  
        Variant para[] = new Variant[] { vMacroName };  
        for (int i = 0; i < count; i++) {  
            Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))  
                    .toDispatch();  
            Dispatch.call(table, "Select");  
            Dispatch.call(word, "Run", "tableFitContent");  
        }  
    }  
  
    /** 
     * 設置當前選定內容的字體 
     *  
     * @param boldSize 
     * @param italicSize 
     * @param underLineSize 
     *            下劃線 
     * @param colorSize 
     *            字體顏色 
     * @param size 
     *            字體大小 
     * @param name 
     *            字體名稱 
     */  
    public void setFont(boolean bold, boolean italic, boolean underLine,  
             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, "Size", size);  
    }  
  
    /** 
     * 設置單元格被選中 
     *  
     * @param tableIndex 
     * @param cellRowIdx 
     * @param cellColIdx 
     */  
    public void setTableCellSelected(int tableIndex, int cellRowIdx,  
            int cellColIdx) {  
        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");  
    }  
  
    /** 
     * 設置選定單元格的垂直對起方式, 請使用setTableCellSelected選中一個單元格 
     *  
     * @param align 
     *            0-頂端, 1-居中, 3-底端 
     */  
    public void setCellVerticalAlign(int verticalAlign) {  
        Dispatch cells = Dispatch.get(selection, "Cells").toDispatch();  
        Dispatch.put(cells, "VerticalAlignment", new Variant(verticalAlign));  
    }  
  
    /** 
     * 設置當前文檔中所有表格水平居中方式及其它一些格式,用在將word文件轉化爲html中,針對申報表 
     */  
    public void setApplyTableFormat() {  
        Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();  
        int tabCount = Integer  
                .valueOf(Dispatch.get(tables, "Count").toString()); // System.out.println(tabCount);  
        System.out  
                .println("*******************************************************");  
        for (int i = 1; i <= tabCount; i++) {  
            Dispatch table = Dispatch.call(tables, "Item", new Variant(i))  
                    .toDispatch();  
            Dispatch rows = Dispatch.get(table, "Rows").toDispatch();  
  
            if (i == 1) {  
                Dispatch.put(rows, "Alignment", new Variant(2)); // 1-居中,2-Right  
                continue;  
            }  
            Dispatch.put(rows, "Alignment", new Variant(1)); // 1-居中  
            Dispatch.call(table, "AutoFitBehavior", new Variant(1));// 設置自動調整表格方式,1-根據窗口自動調整  
            Dispatch.put(table, "PreferredWidthType", new Variant(1));  
            Dispatch.put(table, "PreferredWidth", new Variant(700));  
            System.out.println(Dispatch.get(rows, "HeightRule").toString());  
            Dispatch.put(rows, "HeightRule", new Variant(1)); // 0-自動wdRowHeightAuto,1-最小值wdRowHeightAtLeast,  
                                                                // 2-固定wdRowHeightExactly  
            Dispatch.put(rows, "Height", new Variant(0.04 * 28.35));  
            // int oldAlign = Integer.valueOf(Dispatch.get(rows,  
            // "Alignment").toString());  
            // System.out.println("Algin:" + oldAlign);  
        }  
    }  
  
    /** 
     * 設置段落格式 
     *  
     * @param alignment 
     *            0-左對齊, 1-右對齊, 2-右對齊, 3-兩端對齊, 4-分散對齊 
     * @param lineSpaceingRule 
     * @param lineUnitBefore 
     * @param lineUnitAfter 
     * @param characterUnitFirstLineIndent 
     */  
    public void setParagraphsProperties(int alignment, int lineSpaceingRule,  
            int lineUnitBefore, int lineUnitAfter,  
            int characterUnitFirstLineIndent) {  
        Dispatch paragraphs = Dispatch.get(selection, "Paragraphs")  
                .toDispatch();  
        Dispatch.put(paragraphs, "Alignment", new Variant(alignment)); // 對齊方式  
        Dispatch.put(paragraphs, "LineSpacingRule", new Variant(  
                lineSpaceingRule)); // 行距  
        Dispatch.put(paragraphs, "LineUnitBefore", new Variant(lineUnitBefore)); // 段前  
        Dispatch.put(paragraphs, "LineUnitAfter", new Variant(lineUnitAfter)); // 段後  
        Dispatch.put(paragraphs, "CharacterUnitFirstLineIndent", new Variant(  
                characterUnitFirstLineIndent)); // 首行縮進字符數  
    }  
  
    /** 
     * 設置當前段落格式, 使用前,請先選中段落 
     */  
    public void getParagraphsProperties() {  
        Dispatch paragraphs = Dispatch.get(selection, "Paragraphs")  
                .toDispatch();  
        String val = Dispatch.get(paragraphs, "LineSpacingRule").toString(); // 行距  
        val = Dispatch.get(paragraphs, "Alignment").toString(); // 對齊方式  
        val = Dispatch.get(paragraphs, "LineUnitBefore").toString(); // 段前行數  
        val = Dispatch.get(paragraphs, "LineUnitAfter").toString(); // 段後行數  
        val = Dispatch.get(paragraphs, "FirstLineIndent").toString(); // 首行縮進  
        val = Dispatch.get(paragraphs, "CharacterUnitFirstLineIndent")  
                .toString(); // 首行縮進字符數  
    }  
  
    /** 
     * 文件保存或另存爲 
     *  
     * @param savePath 
     *            保存或另存爲路徑 
     */  
    public void save(String savePath) {  
        Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),  
                "FileSaveAs", savePath);  
    }  
  
    /** 
     * 文件保存爲html格式 
     *  
     * @param savePath 
     * @param htmlPath 
     */  
    public void saveAsHtml(String htmlPath) {  
        Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {  
                htmlPath, new Variant(8) }, new int[1]);  
    }  
  
    /** 
     * 關閉文檔 
     *  
     * @param val 
     *            0不保存修改 -1 保存修改 -2 提示是否保存修改 
     */  
    public void closeDocument(int val) {  
        Dispatch.call(doc, "Close", new Variant(val));  
        doc = null;  
    }  
  
    /** 
     * 關閉當前word文檔 
     *  
     */  
    public void closeDocument() {  
        if (doc != null) {  
            Dispatch.call(doc, "Save");  
            Dispatch.call(doc, "Close", new Variant(saveOnExit));  
            doc = null;  
        }  
    }  
  
    public void closeDocumentWithoutSave() {  
        if (doc != null) {  
            Dispatch.call(doc, "Close", new Variant(false));  
            doc = null;  
        }  
    }  
  
    /** 
     * 關閉全部應用 
     *  
     */  
    public void close() {  
        // closeDocument();  
        if (word != null) {  
            Dispatch.call(word, "Quit");  
            word = null;  
        }  
        selection = null;  
        documents = null;  
    }  
  
    /** 
     * 打印當前word文檔 
     *  
     */  
    public void printFile() {  
        if (doc != null) {  
            Dispatch.call(doc, "PrintOut");  
        }  
    }  
  
    /** 
     * 保護當前檔,如果不存在, 使用expression.Protect(Type, NoReset, Password) 
     *  
     * @param pwd 
     *            WdProtectionType 可以是下列 WdProtectionType 常量之一: 
     *            1-wdAllowOnlyComments, 2-wdAllowOnlyFormFields, 
     *            0-wdAllowOnlyRevisions, -1-wdNoProtection, 
     *            3-wdAllowOnlyReading 
     *  
     *            使用參照 main1() 
     */  
    public void protectedWord(String pwd) {  
        String protectionType = Dispatch.get(doc, "ProtectionType").toString();  
        if (protectionType.equals("-1")) {  
            Dispatch.call(doc, "Protect", new Variant(3), new Variant(true),  
                    pwd);  
        }  
    }  
  
    /** 
     * 解除文檔保護,如果存在 
     *  
     * @param pwd 
     *            WdProtectionType 常量之一(Long 類型,只讀): 
     *            1-wdAllowOnlyComments,2-wdAllowOnlyFormFields、 
     *            0-wdAllowOnlyRevisions,-1-wdNoProtection, 3-wdAllowOnlyReading 
     *  
     *            使用參照 main1() 
     */  
    public void unProtectedWord(String pwd) {  
        String protectionType = Dispatch.get(doc, "ProtectionType").toString();  
        if (protectionType.equals("3")) {  
            Dispatch.call(doc, "Unprotect", pwd);  
        }  
    }  
  
    /** 
     * 設置word文檔安全級別 
     *  
     * @param value 
     *            1-msoAutomationSecurityByUI 使用“安全”對話框指定的安全設置。 
     *            2-msoAutomationSecurityForceDisable 
     *            在程序打開的所有文件中禁用所有宏,而不顯示任何安全提醒。 3-msoAutomationSecurityLow 
     *            啓用所有宏,這是啓動應用程序時的默認值。 
     */  
    public void setAutomationSecurity(int value) {  
        word.setProperty("AutomationSecurity", new Variant(value));  
    }  
  
    /** 
     * 讀取文檔中第paragraphsIndex段文字的內容; 
     *  
     * @param paragraphsIndex 
     * @return 
     */  
    public String getParagraphs(int paragraphsIndex) {  
        String ret = "";  
        Dispatch paragraphs = Dispatch.get(doc, "Paragraphs").toDispatch(); // 所有段落  
        int paragraphCount = Dispatch.get(paragraphs, "Count").getInt(); // 一共的段落數  
        Dispatch paragraph = null;  
        Dispatch range = null;  
        if (paragraphCount > paragraphsIndex && 0 < paragraphsIndex) {  
            paragraph = Dispatch.call(paragraphs, "Item",  
                    new Variant(paragraphsIndex)).toDispatch();  
            range = Dispatch.get(paragraph, "Range").toDispatch();  
            ret = Dispatch.get(range, "Text").toString();  
        }  
        return ret;  
    }  
  
    /** 
     * 設置頁眉文字 
     *  
     * @param cont 
     * @return 
     *  
     *         Sub AddHeaderText() '設置頁眉或頁腳中的文字 '由 Headers、Footers 和 
     *         HeaderFooter 屬性返回 HeaderFooter 對象。下列示例更改當前頁眉中的文字。 With 
     *         ActiveDocument.ActiveWindow.View .SeekView = 
     *         wdSeekCurrentPageHeader Selection.HeaderFooter.Range.Text = 
     *         "Header text" .SeekView = wdSeekMainDocument End With End Sub 
     */  
    public void setHeaderContent(String cont) {  
        Dispatch activeWindow = Dispatch.get(doc, "ActiveWindow").toDispatch();  
        Dispatch view = Dispatch.get(activeWindow, "View").toDispatch();  
        // Dispatch seekView = Dispatch.get(view, "SeekView").toDispatch();  
        Dispatch.put(view, "SeekView", new Variant(9)); // wdSeekCurrentPageHeader-9  
  
        Dispatch headerFooter = Dispatch.get(selection, "HeaderFooter")  
                .toDispatch();  
        Dispatch range = Dispatch.get(headerFooter, "Range").toDispatch();  
        Dispatch.put(range, "Text", new Variant(cont));  
        // String content = Dispatch.get(range, "Text").toString();  
        Dispatch font = Dispatch.get(range, "Font").toDispatch();  
  
        Dispatch.put(font, "Name", new Variant("宋體 (中文正文)"));  
        Dispatch.put(font, "Bold", new Variant(false));  
        // Dispatch.put(font, "Italic", new Variant(true));  
        // Dispatch.put(font, "Underline", new Variant(true));  
        Dispatch.put(font, "Size", 9);  
  
        Dispatch.put(view, "SeekView", new Variant(0)); // wdSeekMainDocument-0恢復視圖;  
    }  
}  

發佈了11 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章