如何使用interop在Word文档中搜索特定字体

时间:2010-12-09 09:58:03

标签: fonts interop ms-word find readonly

我使用这样的东西:

doc.Content.Find.Font.Name = "Times New Roman";

但是当我单步执行代码时,Name属性不会改变。 谢谢。


我正在使用VS2010和MS Word 2007,我想找到并用“Arial”替换所有“Times New Roman”字体。

以下是发生的事情:

Word.Application wordApp = new Word.Application();
Word.Documents docs = wordApp.Documents;
doc = docs.Open(fileName, Visible: false);
doc.Content.Find.ClearFormatting();
doc.Content.Find.Replacement.ClearFormatting();

// Here the value of Find.Font.Name and Replacement.Font.Name is ""

doc.Content.Find.Font.Name = "Times New Roman";
doc.Content.Find.Replacement.Font.Name = "Arial";

// The value of Find.Font.Name and Replacement.Font.Name still "" !!!

doc.Content.Find.Execute(Format: true, Replace: Word.WdReplace.wdReplaceAll);

3 个答案:

答案 0 :(得分:1)

感谢您的回复,但是每次使用点表示法时都没有获得新的Find对象。问题是你不应该在这种情况下使用Doc.Content.Find。相反,您必须创建一个新的Range对象并使用其Find。像这样:

Word.Range range = doc.Range(0, doc.Content.End);

答案 1 :(得分:0)

我相信你需要获得一个FIND对象然后使用它,当你通过点符号引用对象时,你总是得到一个全新的FIND对象,所以你每次都会丢失你的设置

像这样的东西

With Doc.content.Find
    .clearFormatting
    .Font.name = "blah"
    .Execute .....
End With

答案 2 :(得分:0)

我用了这个:

Microsoft.Office.Interop.Word._Application word;
Microsoft.Office.Interop.Word._Document doc;

bool found_next = false;
private void search_Replace1()
{
    word = Globals.ThisAddIn.Application;
    doc = word.ActiveDocument;
    word.Selection.Find.Font.Name = "My Font";
    found_next= word.Selection.Find.Execute(Format: true);
    if (found_next)
    {
        word.Selection.Font.Name = "Arial"; 
        //word.Selection.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdRed;  //change color to red
    }
}