2015-03-02 25 views
1

我需要查找所有出現的特定單詞並使其斜體。 我可以很容易地找到每個單詞的第一次出現,但是使用while循環我不能,它會創建一個inifite循環,就像設置開始範圍不會更新範圍一樣......也許我很愚蠢,但這裏是我的邏輯:如何在Office Interop中查找並將單詞更改爲斜體文字

獲得第一次出現, 做出斜體,

集開始至第一次出現後,下一個字符,

重複直到有沒有更多的事件...

appWord = new Microsoft.Office.Interop.Word.Application(); 
wordDocument = appWord.Documents.Open("pathToFile", Type.Missing, false); 
Microsoft.Office.Interop.Word.Range rng = wordDocument.Range(); 

string[] latinTerms = new []{"inter alia","invicta" }; 
for (int i = 0; i < latinTerms.Length; i++) 
{ 
     while (rng.Text.IndexOf(latinTerms[i]) != -1) 
     { 
      int start = rng.Text.IndexOf(latinTerms[i]); 
      int end = start + latinTerms[i].Length; 

      Microsoft.Office.Interop.Word.Range tmpRange = wordDocument.Range(start, end); 
      tmpRange.Select(); 
      Microsoft.Office.Interop.Word.Selection currSel = appWord.Selection; 
      currSel.ItalicRun(); 
      rng.Start = end + 1; 
     } 
} 

我使用Find.Execute替換字符和字符串,但效果很好,但我還沒有找到方法將字符和字符串更改爲斜體...

+1

您是否需要使用Office Interop?另一種方法是將文件保存爲.rtf文件,然後使用C#程序讀取該文件,並使用簡單的字符串處理在RTF數據上查找並替換。然後將結果保存爲.rtf並將其讀回到Word中。 – RenniePet 2015-03-02 10:55:56

+1

這是一個更大的文件解析應用程序的「微不足道」的一部分,所以這可能是最後的手段,幸運的是我找到了解決方案,謝謝你的時間和輸入,欣賞它! +1 – EaziLuizi 2015-03-02 14:48:12

回答

0
private void FindAndItalicize(Microsoft.Office.Interop.Word.Application doc, object findText) 
    { 
     var rng = doc.Selection.Range; 

     while(rng.Find.Execute(findText)) 
     { 
      rng.Font.Italic = 1; 
     } 
    } 
1

看起來您對Italic屬性感興趣字體類。

查看Word 2007 VBA - Making some text BOLD & other ITALIC獲取示例代碼。

+0

+1雖然它沒有給我答案,但你絕對向我展示了它如何在VBA中得到類似的解決,所以我搜索並玩弄,直到我得到它在一個百日咳3行......感謝你尤金 – EaziLuizi 2015-03-02 14:46:28

相關問題