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

Fonts 如何使用iterop在Word文档中搜索特定字体,fonts,interop,ms-word,find,readonly,Fonts,Interop,Ms Word,Find,Readonly,我用这样的方式: doc.Content.Find.Font.Name = "Times New Roman"; Word.Range range = doc.Range(0, doc.Content.End); 但是,当我逐步完成代码时,Name属性并没有改变。 谢谢 我正在使用VS2010和MS Word 2007,我想找到所有“Times New Roman”字体,并将其替换为“Arial” 下面是发生的情况: Word.Application wordApp = new Word.

我用这样的方式:

doc.Content.Find.Font.Name = "Times New Roman";
Word.Range range = doc.Range(0, doc.Content.End);
但是,当我逐步完成代码时,Name属性并没有改变。 谢谢


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

下面是发生的情况:

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);

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

像这样的

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

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

像这样的

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

谢谢您的回复,但不,您不会每次使用点符号时都得到一个新的Find对象。问题是在这种情况下不应该使用Doc.Content.Find。相反,您必须创建一个新的范围对象并使用其“查找”。大概是这样的:

doc.Content.Find.Font.Name = "Times New Roman";
Word.Range range = doc.Range(0, doc.Content.End);

谢谢您的回复,但不,您不会每次使用点符号时都得到一个新的Find对象。问题是在这种情况下不应该使用Doc.Content.Find。相反,您必须创建一个新的范围对象并使用其“查找”。大概是这样的:

doc.Content.Find.Font.Name = "Times New Roman";
Word.Range range = doc.Range(0, doc.Content.End);
我用了这个:

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
    }
}
我用了这个:

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
    }
}

你能给我们看更多的代码吗?首先,在这里的代码片段中,您将name属性设置为常量。您能向我们展示更多的代码吗?首先,在这里的代码段中,您将name属性设置为常量。很高兴您解决了问题,但您可能需要再次检查这样的断言,即当您通过点符号进行引用时,您没有获得新的查找对象。噢,edit被抛出。转载。。。。很高兴您解决了您的问题,您可能对每个引用的FIND对象都不是新的(尽管我能够复制您的“字体名称始终返回空白”问题,这似乎表明了这一点。但我也能够使用内容进行完美的搜索。正如我所描述的查找对象。或者,您可以只设置Rng=Doc.Content.duplicate。是的,这很混乱,您可以设置Find.Font属性,但无法读取它们。您可以发布示例,完整的代码吗?使用它的f在所有名称空间结果中,我一开始无法理解哪个是
Word.WdReplace..
很高兴您解决了问题,但您可能想再次检查这样的断言,即当您通过点表示法引用时,没有得到新的查找对象。Ooops,edit被抛出。Reposting…很高兴您解决了问题,并且您每个引用中的FIND对象都不是新的,这一点我是对的(尽管我能够复制您的“字体名称始终返回空白”问题,这似乎表明了这一点。但我也能够使用内容进行完美的搜索。正如我所描述的查找对象。或者,您可以只设置Rng=Doc.Content.duplicate。是的,这很混乱,您可以设置Find.Font属性,但无法读取它们。您可以发布示例,完整的代码吗?使用它的f所有名称空间结果,一开始我无法理解哪个是
Word.WdReplace..