首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Word 程式設計:基於字型格式的尋找與取代實作

     編輯:關於.NET

前言

使用 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():搜尋結束後必須呼叫,重置格式條件,否則後續搜尋會繼承上次格式。

常見問題:Format 屬性無法設為 true

現象:執行 Find.Format = true 後讀取仍為 false。可能原因:

  1. 文件保護/唯讀:受保護文件可能限制格式搜尋。
  2. Range/Selection 狀態:嘗試改用 app.Selection.Find 或重新取得 doc.Content。
  3. COM 介面版本差異:確保引用的 Word 類別庫版本與目標 Word 版本相容。
  4. 替代方案:遍歷 doc.Content.Words 或 doc.Content.Characters 檢查 Font.Color,雖效能較差但相容性較好。

結語

Word COM 格式搜尋的關鍵在於 Find.Format = true 與 Find.Font 組合。遇到屬性設定失效時,優先排查文件狀態與 Range 物件有效性,必要時改用遍歷方式實現相同功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved