2010-12-09 9 views
1

ich so etwas wie dieses:Wie mit für eine bestimmte Schriftart in einem Word-Dokument suchen iterop

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

aber wenn ich Schritt durch den Code der Eigenschaft Name ändert sich nicht. danke.


Ich arbeite mit VS2010 und MS Word 2007, und ich will alles "Times New Roman" Schriften mit "Arial" finden und zu ersetzen.

Hier ist, was passiert:

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

Können Sie uns mehr vom Code zeigen? Für den Anfang, im Snippet hier, setzen Sie die Eigenschaft name auf eine Konstante. – ForEachLoop

Antwort

1

Vielen Dank für Ihre Antwort, aber nicht Sie Sie Punktnotation verwenden keine neue bekommen findet jedes Mal widersprechen. Das Problem ist, dass Sie Doc.Content.Find in dieser Situation nicht verwenden sollten. Stattdessen müssen Sie ein neues Range-Objekt erstellen und dessen Suche verwenden. Etwas wie dieses:

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

Ich bin froh, dass Sie Ihr Problem gelöst haben, aber Sie sollten die Behauptung, dass Sie kein neues Find-Objekt erhalten, wenn Sie durch die Punktnotation darauf verweisen, überprüfen. – DarinH

+0

Hoppla, Edit wurde rausgeworfen. Umbuchung .... Schön, dass Sie Ihr Problem gelöst haben, und vielleicht haben Sie recht, dass das FIND-Objekt nicht jeder Verweis neu ist (obwohl ich das Problem "Schriftname gibt immer leer" replizieren kann), was darauf hinweist Aber ich konnte auch mit dem Objekt Content.Find ganz genau suchen, wie ich es beschrieben habe. Alternativ hätten Sie auch einfach Rng = Doc.Content.Duplicate setzen können. – DarinH

+0

Ja, das ist verwirrend, aber Sie können Find.Font-Eigenschaften einstellen kann sie nicht lesen. – nima

0

Ich glaube, Sie brauchen ein FIND-Objekt zu erhalten und dann verwenden, wenn Sie auf das Objekt über die Punktnotation verweisen wie Sie haben, sind Sie immer bekommen ein nagelneues FIND-Objekt, damit Sie jedes Mal Ihre Einstellungen verlieren.

so etwas wie dieser

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