2010-12-09 83 views
1

-je utiliser quelque chose comme ceci:Comment rechercher une police spécifique dans un document Word avec iterop

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

mais quand je fais un pas dans le code de la propriété Name ne change pas. merci.


Je travaille avec VS2010 et MS Word 2007 et je veux trouver et remplacer toutes les polices "Times New Roman" avec "Arial".

Voici ce qui se passe:

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

Pouvez-vous nous montrer plus du code? Pour commencer, dans l'extrait ici, définissez la propriété name sur une constante. – ForEachLoop

Répondre

1

Merci pour votre réponse, mais pas vous ne recevez pas un nouveau Trouver un objet chaque fois que vous utilisez la notation par points. Le problème est que vous ne devriez pas utiliser Doc.Content.Find dans ce genre de situation. Au lieu de cela, vous devez créer un nouvel objet Range et utiliser sa recherche. Quelque chose comme ceci:

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

Heureux que vous ayez résolu votre problème, mais vous voudrez peut-être vérifier l'affirmation selon laquelle vous n'obtiendrez pas un nouvel objet Find lorsque vous faites référence à l'aide de la notation par points comme cela. – DarinH

+0

Oups, l'édition a été rejetée. Repositionnement ... Heureux que vous ayez résolu votre problème, et vous avez peut-être raison de dire que l'objet FIND n'est pas nouveau pour chaque référence (bien que je puisse répliquer votre problème de "nom de police renvoie toujours vide", ce qui semble indiquer Mais j'étais aussi capable de chercher parfaitement bien en utilisant l'objet Content.Find comme je l'ai décrit. Sinon, vous auriez pu faire Rng = Doc.Content.Duplicate – DarinH

+0

Oui, c'est confus, vous pouvez définir les propriétés de Find.Font mais vous Je ne peux pas les lire. – nima

0

Je crois que vous devez obtenir un objet FIND puis l'utiliser, lorsque vous faites référence à l'objet via la notation de points comme vous avez, vous êtes toujours obtenir une nouvelle marque FIND objet, de sorte que vous perdrez vos paramètres à chaque fois.

Quelque chose comme ce

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