TypeText后,替换不起作用

时间:2012-10-24 10:06:12

标签: c# word-automation word-2010

我需要生成doc(真实doc,而不是docx)文件,我发现的“最佳”方式是使用word自动化(Word 2010)。我有我打开的文件,然后在将其保存到新名称之前替换其中的值。 (例如:我将“CHRONO”替换为“155023”)。 为此,我使用Application.Selection.Find。当新值超过255个字符时(微软的限制......),我遇到了一个问题。为了避免这个问题,我在这种情况下使用TypeText。 我现在的问题是,一旦我使用TypeText,替换不再工作了。我找不到原因。 任何想法都将不胜感激。

我的代码在一个函数中,在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 个答案:

答案 0 :(得分:1)

我发现了问题。 在调试中使用单词visible运行程序时,我看到了它的功能以及它无法正常工作的原因。

实际上,Replace()有效,但它只替换了光标之后的事件。为了解决这个问题,我需要将光标重置为文档的原点:

else
{
    while (find.Execute())
    {
        selection.TypeText(tempNewValue);
    }
    selection.GoTo(1, 1);
}