快速上手之 C#操作WORD物件模型

來源:互聯網
上載者:User

標籤:word   c#   vba   

想當年省電腦一級考了60飄過,暗自竊喜。

如今要考慮它是怎麼給我判了個60分。

當年不會做Excel題,OUTLOOK題,IE題。

如今要搞清楚它判分的邏輯是什麼。

兩年如此大的差距,暈暈的開始沒有頭緒,後來...


矯情一番,收。什麼是WORD物件模型?


初步認識:


word主要有五大對象,Application,Document,Selection,Bookmarks,Range。


  • Application:代表Microsoft Word應用程式本身,是所有對象的基類,對word環境的控制是通過Application的一些屬性和方法。
  • Document:代表一個word文檔,就是點擊你案頭上右擊,建立一個word文檔,那個執行個體化出來的對象就是document對象。因為是Application的子類,所以可以通過Application對象的activedocument屬性擷取當前文檔對象。
  • Selection:代表當前選中的地區(高亮),沒有選中地區時代表游標點。
  • Bookmarks:書籤。
  • Range(很常用):代表一塊地區,與Selection類似,不過一般不可見

  1>包含一個起始位置和一個結束位置
  2>它可以包含游標點,一段文本或者整個文檔
  3>它包含空格,tab以及paragraph marks
  4>它可以是當前選中的地區,當然也可以不是當前選中地區
  5>它被動態建立
  6>當你在一個Range的末尾插入文本,這將擴充該Range






找到技巧:


  我用了一天的時間查了很多資料關於VBA,關於C# Winform開發word對象。發現這些知識很散很零碎,為什麼這麼說呢?首先word對象很多,譬如一個文檔,一個段落,一個可選地區等等。一個對象又有N多的屬性和方法。查了一天的資料,除了震驚它的強大之外,沒別的想法。。冷靜過後,覺得,大海撈針一般去查去找。不如把這一年的word操作題分類匯總,包括所有的操作題分類匯總。

  

  於是我們做了以下的工作:

1、將所有題進行橫向對比,找到固定題型,將一個大問題word操作,使它的粒度變小。

2、分到任務的人,主要去找這個東西是word下的什麼對象,找它對應的屬性和方法。

3、判分的關鍵點在於最後結果,至於過程不重要。例如:不管他是怎麼移動的,總之最後結果是A存在,B不存在就好。


執行個體操作:


1、第一步引用word對象。在擴充中選擇Microsoft.Office.Interop.Word。



在類檔案中添加應用如下:

using Word = Microsoft.Office.Interop.Word;using System.IO;using System.Reflection;

2、找到你要操作的對象,和想尋找該對象的某個屬性。


例1:

  題目是將全文的“.”替換為“。”   因為我們要最後的結果,我就想到用IndexOf()去尋找“.”的位置,如果找不到它的位置返回為-1,就證明沒有這個符號。

首先對複用的語句可以寫成一個Wordhelper:

  /// <summary>        /// 讀取 word文檔 返回內容        /// </summary>        /// <param name="path"></param>        /// <returns></returns>        public static string GetWordContent(string path)        {            try            {                Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();                Type wordType = app.GetType();                Microsoft.Office.Interop.Word.Document doc = null;                object unknow = Type.Missing;                app.Visible = false;                object file = path;                doc = app.Documents.Add (ref file,                    ref unknow, ref unknow, ref unknow);                int count = doc.Paragraphs.Count;                StringBuilder sb = new StringBuilder();                for (int i = 1; i <= count; i++)                {                                        sb.Append(doc.Paragraphs[i].Range.Text.Trim());                }                //關閉word進程                doc.Close (ref unknow, ref unknow, ref unknow);                wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, app, null);                doc = null;                app = null;                //記憶體回收                GC.Collect();                GC.WaitForPendingFinalizers();                string temp = sb.ToString();                return temp;            }            catch            {                return "";            }        }

這個方法,只有你傳路徑給它,它就可以返回給你文檔中的內容。我們就可以去尋找文檔中的文字了。

 private void button1_Click(object sender, EventArgs e)        {            //判斷尋找替換題,是否完成正確            string wordcontent = GetWordContent(@"H:\12080141043.docx");            //得到wordcontent為word中的內容            int keyword = wordcontent.IndexOf(".");            //keyword是要尋找的關鍵字            if (keyword == -1)   //等於-1代表沒有找到它的位置,證明替代成功。            {                MessageBox.Show("我沒有找到英文句號哦,替換成功,加一分!!");            }            else            {                MessageBox.Show("我發現了英文句號哦,替換失敗,不加分!!");            }        }

  上面的wordhelper中就用到了Application對象和document對象擷取文檔中的paragraphs。



例2:設定行間距的最小值等屬性。我們要考慮如何取得doc對象,確定是哪個屬性。


private void button1_Click(object sender, EventArgs e)        {            //設定全文段落:設定文章中本文文字為宋體、小四號字,靠左對齊,首行縮排2字元,行距為最小值20磅。            Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();            object unknow = Type.Missing;            object file = "H:\\12080141043.docx";            Microsoft.Office.Interop.Word.Document doc = app.Documents.Add(ref file, ref unknow, ref unknow, ref unknow);                        //行間距為22            string rightkey = "22";            if (app.Selection.ParagraphFormat.LineSpacing.ToString()==rightkey )            {                MessageBox.Show("當前行距為最小值22磅。設定成功+1分!");            }            else            {                MessageBox.Show("設定失敗!");            }                       //字型設定為小四  ==14            string rightsize = "14";            if (doc.Paragraphs.Last.Range.Font.Size.ToString()==rightsize )            {                MessageBox.Show("當前本文字型為小四號體,設定成功+1分!");            }            else            {                MessageBox.Show("設定失敗!");            }            //字型為黑體            string rightstyle = "黑體";            if (doc.Paragraphs[1].Range.Font.Name == rightstyle)            {                MessageBox.Show("當前本文字型黑體的,設定成功+1分!");            }            else            {                MessageBox.Show("設定失敗!");            }            //靠左對齊            //app.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;            if (app.Selection.ParagraphFormat.Alignment == Word.WdParagraphAlignment.wdAlignParagraphLeft)            {                MessageBox.Show("當前設定為靠左對齊,加一分!");            }            else            {                MessageBox.Show("設定失敗!");            }                                               // 首行縮排2個字元   32.15            string firstline = "32.15";            if (app.Selection.ParagraphFormat.FirstLineIndent.ToString()==firstline )            {                MessageBox.Show("設定首行縮排兩個字元成功!加一分!!");            }            else            {                MessageBox.Show("設定失敗!");            }        }
  

  這兩個只是一個例子,比如版面設定,頁首頁尾的設定都可以實現的。等著你去發現~


小結:

  開始覺得這個任務很難,之前沒有接觸過VBA,後來查了一些資料,才發現什麼都是可以實現的,就怕你不敢想。開始因為恐懼不敢開始,不如把困難最小化,一個一個的攻破。感謝這篇部落格,給我帶來很多的協助:http://www.cnblogs.com/eye-like/p/4121219.html

還有這一篇C#word常用操作匯總BaiDu文庫。


最近體會很深刻的:

1、開始都不知道自己在百度什麼東西,需要一點點的去改變搜尋索引鍵。

2、遇到多,大,散的東西。就歸類,匯總。把問題集中,分到各個人去解決小問題。大問題就不攻自破了。

3、給自己及時的反饋,積累有信心去解決下一個大問題!









著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

快速上手之 C#操作WORD物件模型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.