2010-12-09 3 views
1

я использую что-то вроде этого:Как искать конкретный шрифт в документе Word, с iterop

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

Можете ли вы показать нам больше кода? Во-первых, в этом фрагменте вы задаете свойство name константе. – ForEachLoop 2010-12-10 15:59:43

ответ

1

Спасибо за ваш ответ, но не вы не получите новый Найти объект каждый раз, когда вы используете точечную нотацию. Проблема в том, что вы не должны использовать Doc.Content.Find в подобной ситуации. Вместо этого вам нужно создать новый объект Range и использовать его Find. Что-то вроде этого:

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

Рад, что вы решили свою проблему, но вам может потребоваться дважды проверить утверждение о том, что вы не получаете новый объект Find, когда вы ссылаетесь на точечную нотацию. – DarinH 2010-12-13 20:39:32

0

Я считаю, что вам нужно, чтобы получить объект FIND, а затем использовать его, когда вы обращаетесь к объекту с помощью точечной нотации, как вы есть, вы всегда получаете совершенно новый FIND, поэтому вы теряете свои настройки каждый раз.

Что-то вроде этого

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