Замена не работает после TypeText
Мне нужно сгенерировать файлы doc (real doc, а не docx), самый лучший способ, который я нашел, - это использовать автоматизацию слов (Word 2010). У меня есть файлы, которые я открываю, а затем заменяю значения внутри, прежде чем сохранить их под новым именем. (Пример: я заменяю "CHRONO" на "155023"). Для этого я использую Application.Selection.Find. У меня просто была проблема, когда новое значение имело более 255 символов (ограничения Microsoft...). Чтобы избежать этой проблемы, я использую Type Text в этом случае. Моя проблема сейчас, когда я использую TypeText, Replace больше не работают. И я не могу найти почему. Любая идея будет принята с благодарностью.
Мой код находится в функции, вызываемой в foreach с каждым заменяемым значением:
private void Replace(Application app, string name, string newValue)
{
Selection selection = app.Selection;
Find find = selection.Find;
Replacement replacement = find.Replacement;
find.ClearFormatting();
find.Text = "<" + name + ">";
// Word limitation : can't replace with more than 255 characters,
// use another way to do it if that's the case
if (tempNewValue.Length < 255)
{
replacement.ClearFormatting();
replacement.Text = tempNewValue;
find.Execute(Replace: replaceAll);
}
else
{
while (find.Execute())
{
selection.TypeText(tempNewValue);
}
}
Marshal.ReleaseComObject(replacement);
Marshal.ReleaseComObject(find);
Marshal.ReleaseComObject(selection);
}
1 ответ
Я нашел проблему. Запустив программу в режиме отладки со словом visible, я понял, что именно она делает, и почему она не работает.
На самом деле, Replace()
работал, но он заменяет только вхождения, которые находятся после курсора. Чтобы противостоять этому, мне нужно сбросить курсор на источник документа:
else
{
while (find.Execute())
{
selection.TypeText(tempNewValue);
}
selection.GoTo(1, 1);
}