C# Word.Office操作總結


  最近這段時間,一直忙於修改一個我感覺從設計和編碼方面都很爛的一個系統,各種軟件設計中的錯誤,我們一邊給他修改功能,一邊進行代碼重構,其中,讓我感覺比較麻煩的是Office的操作,所以我就花了一點時間總結了這個項目中需要的Office.Word的基本操作,主要是在這項目中用到的操作,沒有用到的也就沒有涉及到。

  首先,我要說一下的是Word中的表格操作。在我的程序中我是用WordTable這個類來實現的。按照一般思維,我們首先是需要一個Table對象,顯然,這個對象是 Microsoft.Office.Interop.Word.Table類型的。有了這個表格對象了,我們就可以在上面進行操作了,一幫的Table操作都有啥哪?

  1.構造一個表格(除了使用構造函數來構造WordTable這個類以外)我還專門寫了一個函數來構造表格。在這里我給出這個函數的完整代碼((*^__^*) 有原因的)

  public void ConstructTable(List<int> columnWeight)
        {
            _SetTableStyle(ref tableOne);
            DesginTableEvent(ref this.tableOne, columnWeight);
        }

這個函數里面調用了一個DesginTableEvent類似一個函數的東西,其實...

public delegate void DesginTableHandler(ref Microsoft.Office.Interop.Word.Table table, List<int> columnWeight);
        public event DesginTableHandler DesginTableEvent;

相信你已經看懂了,對了這是一個事件函數,我們為什么這樣設計哪,其實不難想想,你想,我們設計的表格是千變萬化的,怎么可能使用一個簡單的函數就能搞定了哪,我們肯定要會根據每個人的不同來進行自己設計啊,是啊,DIY的表格式多么有吸引力啊,這里我們就是基於這個目的的((*^__^*) 有點大..)

  2.上面的函數中有一個_SetTableStyle(ref tableOne)的函數,這個是設計表格的樣式的函數,由於我們修改的項目的表格樣式都基本上都是一致的所以,這里我把這個函數寫成了一個私有的函數,大家可以參考其中的內容進行自己的DIY設計。

  3.這里,我們馬上就要接觸到具體的表格操作了,先問自己一個問題,如何簡單的表示表格,YES!用單元格,那如何表示一個單元格,YES!行和列,所以,我就用一個新的類來表示表格中的單元格,WordTableCell,這里不用給出具體的代碼,大家都應該明白其中有啥了吧。

  4.下面我們開始真正的表格操作,第一個你想到的可定是如何填表了。我們使用了函數 

   public void FillingTableContent(Dictionary<WordCell, string> cellContent),應該很容易看明白這個函數的意圖和用法吧(如果實在不明白,可以參考完整源代碼,里面有詳細的說明)

  5.合並單元格函數 void MergeCell(WordCell merge, WordCell merged)

  6.合並標題性質的函數    public void MergeTitleCell(WordCell merge, WordCell merged),這個函數與上面的函數的區別在於:上面的單元格只是簡單的合並單元格,而這個合並以后會出現標題形式(我是個工科學生,真的沒有辦法有語言來解釋啥叫標題形式的,你可以運行代碼自己看或是看下面的圖片)

  

這個是標題式的合並

 這個是一般的單元格的合並,(其實看起來差不多,其實是有差別的,請仔細比較)

 

  7.在一個表格行后面添加一個行   public void AddTableRow(int row)

  8.在一個表格行后面刪除一行  public void DeleteTableRow(int row)

  9.在一個表格列后面添加以列  public void AddTableColumn(int column)

  10.在一個表格最后添加一列  public void AddColumnEndTable()(可以用上面的實現,但是由於非常常用,所有我單獨拿出來,其實內部也是用上面的這個函數實現的)

  11.在表格最后添加一行  public void AddRowEndTable()(不解釋)

  12.獲得表格當前的行數   public int CurrentTableRow(這是個屬性)

  13.獲得表格當前的列數   public int CurrentTableColumn

還有很多的操作可以完成,我這里只是使用了這些,所有就說這么多

  下面我們開始進行Word操作的說明。主要也就是類MyWord(這個是我自己的類)的實現

  protected Microsoft.Office.Interop.Word.Application _WordApplicMain;
  protected Microsoft.Office.Interop.Word.Document _MainDoc;

  上面這兩個,不管你是否知道啥意思,都必須包含在你的類中,其實我們可以望文生義的認為,_WordApplicationMain這個是用來管理整個Word應用程序的,而_MainDOc這個僅僅是表示的是Word中的文檔元素(是不是感覺起一個好的名字,可以讓你的API更加流行,尤其是這種分層的命名方法,也就是一層一層的加上命名空間的方法,是不是看起來很爽啊!(*^__^*) )。下面我們按照一般Word操作的順序來說明。

  1.要操作Word必須打開(新建)一個Word. CreateWord()這個函數就幫你搞定了,但是,你必須在構建MyWord類是傳遞一個保存路徑,不然的話,新建的word就保存到了默認的路徑(看代碼中)下。

  2.設置頁面格式函數 public void SetPageDefaultStyle(MyWordPageStyle myWordPageStyle) 其中,有個MyWordPageStyle的類。

  3.設置當前頁面格式的函數 public void SetCurrentPageStyle(MyWordCurrentStyle currentPageStyle)其中,有個MyWordCurrentSytle的類

  4. 向Wrod中寫入內容的函數:public void WriteContent(string content)

  5.換頁   public void Feed()

  6. 設置頁眉  public void SetPageHeader(string pageHeaderContent)

  7.設置頁腳  public void SetPageFooter(string pageFooterContent)

  8.下面的幾個函數是在Word中添加表格,一開始想把表格創建放到WrodTable這個類中,但是,最后想了想,只有Word才可以創建表格,而表格自己創建了表格放在那里啊,所有,果斷的把Word創建表格的方法放在了MyWrod中.

  創建表格  

   

    public void CreateTable(int rowNumber, int columnNumber, List<int> columnWeight)
        {
            _WordTable = new MyWordTable.WordTable();
            _WordTable.TableOne = _MainDoc.Tables.Add(_WordApplicMain.Selection.Range, rowNumber, columnNumber, ref Nothing, ref Nothing);
            _WordTable.DesginTableEvent += _DesginTable;
            _WordTable.ConstructTable(columnWeight);
        }

  你可能欣喜的發現,我們終於使用了_WordTable.DesginTableEvent += _DesginTable;然而,當你看到下面一個函數時,你又是一頓失望,(這么麻煩)

  protected virtual void _DesginTable(ref Microsoft.Office.Interop.Word.Table table, List<int> columnWeight)
        {
            DesginTable(ref table, columnWeight);
            _WordTable.TableOne = table;
        }
  public delegate void DesginTableHandler(ref Microsoft.Office.Interop.Word.Table table, List<int> columnWeight);
        public event DesginTableHandler DesginTable;

我暈,又是一次....

這下你明白了嗎?是不是更暈了,這里不做過多的解釋,如果想看的更明白,請參考完整代碼。

  9.     public void SaveWord()((*^__^*) 我不知道這個是干嘛的,你知道嗎?)

以上基本上已經是一個相對比較完整的Word操作了,但是,在我們的項目中,有了很大的Word模板,所以,這里我也加入了MyWordWithTemplate這個類,關於這個類的解釋,我在MyWordWithTemplate.cs中開始做了解釋,這里不在廢話了。

 這個類中沒有什么其他的,就是一些常用的函數,這里也就不過多的說明。好了,希望大家在我這個基礎上加入更多的功能,我已經搭建了一個名字很大的項目,叫(忘了),里面的層次應該還算是比較清晰,希望大家在這個基礎上再添加新的功能。

 完整代碼下載:Microsoft.Office.rar(名字夠唬吧)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM