Замена не работает после 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);
}
Другие вопросы по тегам