使用 Word COM 物件模型(非 VSTO)實作「尋找紅色文字」等格式化搜尋。核心在於 Find.Format = true 啟用格式搜尋,配合 Find.Font 設定目標格式屬性。
object missing = Type.Missing;
object falseVal = false;
object trueVal = true;
Application app = new ApplicationClass();
app.Visible = false;
object filename = "test.doc";
Document doc = app.Documents.Open(ref filename, ref missing, ref falseVal, ref falseVal,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
// 關鍵:啟用格式搜尋
doc.Content.Find.Format = true;
doc.Content.Find.Forward = true;
// 設定搜尋目標格式:紅色字體
doc.Content.Find.Font.Color = WdColor.wdColorRed;
// 執行搜尋(第 9 參數 FindText 設為 true 表示尋找符合格式的文字)
doc.Content.Find.Execute(ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref trueVal,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
System.Diagnostics.Trace.WriteLine(doc.Content.Find.Text); // 輸出找到的文字
// 清除格式設定,避免影響後續操作
doc.Content.Find.ClearFormatting();
doc.Save();
doc.Close(ref missing, ref missing, ref missing);
app.Quit(ref missing, ref missing, ref missing);
Find.Format = true:必須設為 true,否則 Find.Font 設定無效。Find.Font:支援 Color、Bold、Italic、Size、Name 等所有字型屬性。Find.Execute 第 9 參數 FindText:true 表示尋找符合格式的文字內容;false 僅檢查格式是否存在。Find.ClearFormatting():搜尋結束後必須呼叫,重置格式條件,否則後續搜尋會繼承上次格式。現象:執行 Find.Format = true 後讀取仍為 false。可能原因:
app.Selection.Find 或重新取得 doc.Content。doc.Content.Words 或 doc.Content.Characters 檢查 Font.Color,雖效能較差但相容性較好。Word COM 格式搜尋的關鍵在於 Find.Format = true 與 Find.Font 組合。遇到屬性設定失效時,優先排查文件狀態與 Range 物件有效性,必要時改用遍歷方式實現相同功能。