【问题标题】:How to search for a specific font in a Word document with iterop如何使用 iterop 在 Word 文档中搜索特定字体
【发布时间】:2010-12-09 09:58:03
【问题描述】:

我使用这样的东西:

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

但是当我单步执行代码时,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);

【问题讨论】:

  • 你能告诉我们更多的代码吗?对于初学者,在这里的 sn-p 中,您将 name 属性设置为常量。

标签: fonts interop ms-word find readonly


【解决方案1】:

感谢您的回复,但不,您每次使用点符号时都不会得到一个新的 Find 对象。问题是您不应该在这种情况下使用 Doc.Content.Find。相反,您必须创建一个新的 Range 对象并使用它的 Find。像这样的:

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

【讨论】:

  • 很高兴您解决了您的问题,但您可能需要仔细检查当您通过这样的点符号引用时您没有获得新 Find 对象的断言。
  • 糟糕,编辑被抛出。重新发布....很高兴您解决了您的问题,并且您可能对 FIND 对象不是新的每个引用都是正确的(尽管我能够复制您的“字体名称始终返回空白”问题,这似乎表明了这一点. 但是我也可以使用 Content.Find 对象进行完美搜索,就像我描述的那样。或者,您可以刚刚完成 set Rng = Doc.Content.Duplicate
  • 是的,这很令人困惑,您可以设置 Find.Font 属性但无法读取它们。
  • 你能发布示例,完整的代码吗?有了完整的命名空间结果,我一开始无法理解Word.WdReplace..
【解决方案2】:

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

类似的东西

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

【讨论】:

    【解决方案3】:

    我用过这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2014-05-23
      • 2022-11-14
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多