C# word全文替换
生活随笔
收集整理的這篇文章主要介紹了
C# word全文替换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????????我們手動處理word 全部替換時,只需要ctrl+H 就可以調出,執行過程中,我們并沒有看到word對那些區域處理,只知道結果是全部替換了。
????????而在C#通過Microsoft.Office.Interop 來處理時,理所當然地認為只要對doc.range進行替換就可以了,實際上效果并不是跟我們想的一樣,比如文本框的內容就沒有替換。
????????原因是,word里面將不同的區域分成了不同類型的story類型,每個story類型有多個story,例如文本框就是一種story類型,不同文本框又是該類型下的各個子story。
???????? 因此,我們需要對所有的story類型的所有的story的range進行替換就可以達到全局替換的效果。
示例代碼如下:
/// <summary>/// 替換所有符合的text/// </summary>/// <param name="doc"></param>/// <param name="text"></param>/// <param name="replaceText"></param>public static void ReplaceAll(Word.Document doc, string text, string replaceText, Logger log){//story ranges 里面保存了不同類型的story range, 每個story range可以通過NextStoryRange來獲取同一類型下所有的story range。foreach (Word.Range storyRange in doc.StoryRanges){Word.Range range = storyRange;while (range != null){ReplaceAllText(range, text, replaceText, log);range = range.NextStoryRange;}}}private static void ReplaceAllText(Word.Range range, string text, string replaceText, Logger log){Word.Find find = range.Find;find.ClearFormatting();find.Replacement.ClearFormatting();find.Text = text;find.Replacement.Text = replaceText;find.Forward = true;find.Wrap = Word.WdFindWrap.wdFindContinue;find.Format = false;find.MatchCase = true;find.MatchWholeWord = false;find.MatchWildcards = false;find.MatchSoundsLike = false;find.MatchAllWordForms = false;try{log.WriteLine($"替換所有【{text}】->【{replaceText}】!");find.Execute(find.Text, find.MatchCase, find.MatchWholeWord, find.MatchWildcards, find.MatchSoundsLike, find.MatchAllWordForms,find.Forward, find.Wrap, find.Format, find.Replacement.Text, Word.WdReplace.wdReplaceAll, false, false, false, false);}catch (Exception ex){log.WriteException(ex, "ReplaceAll");}}總結
以上是生活随笔為你收集整理的C# word全文替换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java模式之装饰器模式
- 下一篇: 害!天天在公司写业务代码,面几家挂几家,