1

我需要生成 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);
}
4

1 回答 1

1

我发现了问题。在调试中使用可见字运行程序时,我确切地看到了它的作用以及它为什么不起作用。

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

else
{
    while (find.Execute())
    {
        selection.TypeText(tempNewValue);
    }
    selection.GoTo(1, 1);
}
于 2012-10-24T11:39:33.400 回答