[原创]C#操作Word
C#操作Office套件的时候都需要用到COM组件,需要在项目里添加相应的COM组件。用C#在Word里查找指定关键字的方法有两种:Selection对象和Range对象。
Selection对象的用法:
// C#
internal void SelectionFind()
{
string strFind = "find me";
Word.Find fnd = ThisApplication.Selection.Find;
fnd.ClearFormatting();
fnd.Text = strFind;
object missingValue = Type.Missing;
if (fnd.Execute(ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue))
{
MessageBox.Show("Text found.");
}
else
{
MessageBox.Show("The text could not be located.");
}
}
Range对象的用法:
// C#
internal void RangeFind()
{
Word.Range rng = ThisDocument.Paragraphs[2].Range;
Word.Find fnd = rng.Find;
fnd.ClearFormatting();
object missingValue = Type.Missing;
object findStr = "find me";
if (fnd.Execute(ref findStr, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue))
{
MessageBox.Show("Text found.");
}
else
{
MessageBox.Show("Text not found.");
}
rng.Select();
}
下面是我自己写的一段完整的代码,功能:在一个指定的Word文档中查找指定的关键字,并打印出包含该关键字的段落。使用的Range对象。
using System;
using System.Collections;
using Word;
namespace SearchWordDoc
{
/// <summary>
/// SearchWordDoc's summary
/// </summary>
public class SearchWordDoc
{
// search word in document.
// strName is the document name which is searched.
// strFind is the key word or phrase.
// return the match paragraphs.
public ArrayList swd(string strFName, string strFind)
{
ArrayList textsFound = new ArrayList(); // matched texts
object missingValue = Type.Missing;
Word.ApplicationClass wdApp = null; // Word Application object
try
{
object fName = strFName as object;
wdApp = new ApplicationClass(); // create a Word application object
Word.Document wdDoc = wdApp.Documents.Open(ref fName, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue); // open a Word object
// the Word object has paragraphs or not
if (wdDoc.Paragraphs != null && wdDoc.Paragraphs.Count > 0)
{
int count = wdDoc.Paragraphs.Count; // the number of doc paragraphs
Word.Range rng; // Word.Range object
Word.Find fnd; // Word.Find object
Console.WriteLine("There are {0} paragraphs in document '{1}'.", count, strFName);
for (int i = 1; i <= count; ++ i) // search key words in every paragraphs
{
rng = wdDoc.Paragraphs[i].Range;
fnd = rng.Find;
fnd.ClearFormatting();
fnd.Text = strFind;
if (fnd.Execute(ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue, ref missingValue, ref missingValue,
ref missingValue))
{
// if find the matched paragrahps, add it into the textsFound ArrayList.
textsFound.Add("[" + i.ToString() + "] " + wdDoc.Paragraphs[i].Range.Text.Trim());
}
}
}
}
catch (NullReferenceException e)
{
Console.WriteLine(e.ToString());
wdApp.Quit(ref missingValue, ref missingValue, ref missingValue);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
wdApp.Quit(ref missingValue, ref missingValue, ref missingValue);
}
// release the Word application object
wdApp.Quit(ref missingValue, ref missingValue, ref missingValue);
return textsFound;
}
// Display usage
public void usage()
{
Console.WriteLine("/nUsage: SearchWordDoc doc_name string_found " +
"[start_paragraph_NO.]/n/t/t [end_paragraph_NO.]");
}
// Print the result
public void printText(ArrayList lst)
{
if (lst == null)
{
Console.WriteLine("Error: Null ArrayList./n");
return;
}
int len = lst.Count;
for (int i = 0; i < len; ++ i)
{
Console.WriteLine("/t" + lst[i] as string);
}
Console.WriteLine("/nThere are {0} records.", len);
}
// Function Main
public static void Main(string[] args)
{
ArrayList textsFound = new ArrayList();
SearchWordDoc sobject = new SearchWordDoc();
switch (args.Length)
{
case 0:
case 1:
sobject.usage();
break;
case 2:
textsFound = sobject.swd(args[0], args[1]);
Console.WriteLine("Search Result:/n");
sobject.printText(textsFound);
break;
default:
sobject.usage();
break;
}
}
}
} // End
C#对Word的操作和对Excel等的操作方法很相似。具体的对象说明可以参考.NET SDK。