以程式設計方式在文件中搜尋和取代文字
Find 物件是 Selection 和 Range 物件共有的成員,您可以使用這個成員在 Microsoft Office Word 文件中搜尋文字。 取代命令是尋找命令的擴充功能。
使用 Find 物件在 Microsoft Office Word 文件中逐一搜尋特定的文字、格式或樣式,並使用 Replacement 屬性取代任何找到的項目。
適用對象:本主題資訊適用於文件層級的專案和 Word 的 VSTO 增益集專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
使用 Selection 物件
使用 Selection 物件尋找文字時,所指定的任何搜尋準則都只會套用至目前選取的文字。 如果 Selection 是插入點,則會搜尋該文件。 找到符合搜尋準則的項目時,便會自動選取該項目。
請務必注意,Find 準則是累加式的,這意味著準則會加入先前的搜尋準則。 進行搜尋前,請使用 ClearFormatting 方法清除之前搜尋的格式設定。
使用 Selection 物件尋找文字
將搜尋字串指派至變數。
清除之前搜尋的格式設定。
執行搜尋並顯示含有結果的訊息方塊。
if (Application.Selection.Find.Execute(ref findText, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing)) { MessageBox.Show("Text found."); } else { MessageBox.Show("The text could not be located."); }
下列範例示範完整的方法:
private void SelectionFind() { object findText = "find me"; Application.Selection.Find.ClearFormatting(); if (Application.Selection.Find.Execute(ref findText, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing)) { MessageBox.Show("Text found."); } else { MessageBox.Show("The text could not be located."); } }
使用 Range 物件
使用 Range 物件可讓您搜尋文字,而不必在使用者介面中顯示任何資訊。 如果找到與搜尋條件相符的文字,則 Find 物件傳回 True;如果找不到,則傳回 False。 如果找到文字,該方法還會重新定義 Range 物件以符合搜尋準則。
使用 Range 物件尋找文字
定義一個由文件第二段組成的 Range 物件。
下列程式碼範例可用於文件層級自訂。
下列程式碼範例可用於 VSTO 增益集。 本範例使用現用文件。
在訊息方塊中顯示搜尋結果,並選取 Range 以讓它顯示。
如果搜尋失敗,就會選取第二段;如果成功,就會顯示搜尋準則。
下列範例顯示文件層級自訂的完整程式碼。 若要使用這個範例,請從專案中的
ThisDocument
類別執行程式碼。private void RangeFind() { object findText = "find me"; Word.Range rng = this.Paragraphs[2].Range; rng.Find.ClearFormatting(); if (rng.Find.Execute(ref findText, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing)) { MessageBox.Show("Text found."); } else { MessageBox.Show("Text not found."); } rng.Select(); }
下列範例顯示 VSTO 增益集的完整程式碼。 若要使用這個範例,請從專案中的 ThisAddIn
類別執行程式碼。
private void RangeFind()
{
object findText = "find me";
Word.Document document = this.Application.ActiveDocument;
Word.Range rng = document.Paragraphs[2].Range;
rng.Find.ClearFormatting();
if (rng.Find.Execute(ref findText,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing))
{
MessageBox.Show("Text found.");
}
else
{
MessageBox.Show("Text not found.");
}
rng.Select();
}
搜尋和取代文件中的文字
以下程式碼搜尋目前的選取範圍,並將所有出現的 find me 字串替換為 Found 字串。
搜尋和取代文件中的文字
請將下列範例程式碼加入專案的
ThisDocument
或ThisAddIn
類別。private void SearchReplace() { Word.Find findObject = Application.Selection.Find; findObject.ClearFormatting(); findObject.Text = "find me"; findObject.Replacement.ClearFormatting(); findObject.Replacement.Text = "Found"; object replaceAll = Word.WdReplace.wdReplaceAll; findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref replaceAll, ref missing, ref missing, ref missing, ref missing); }
Find 類別具有 ClearFormatting 方法,而 Replacement 類別也有自己的 ClearFormatting 方法。 當您執行尋找和取代作業時,必須使用兩個物件的 ClearFormatting 方法。 如果您只在 Find 物件上使用它,則可能會在取代文字中得到非預期的結果。
使用 Find 物件的 Execute 方法取代每一個找到的項目。 若要指定要取代的項目,請使用 Replace 參數。 這個參數可以是下列其中一個 WdReplace 值:
wdReplaceAll 會取代所有找到的項目。
wdReplaceNone 不會取代任何找到的項目。
wdReplaceOne 會取代第一個找到的項目。