我需要生成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);
}
答案 0 :(得分:1)
我发现了问题。 在调试中使用单词visible运行程序时,我看到了它的功能以及它无法正常工作的原因。
实际上,Replace()
有效,但它只替换了光标之后的事件。为了解决这个问题,我需要将光标重置为文档的原点:
else
{
while (find.Execute())
{
selection.TypeText(tempNewValue);
}
selection.GoTo(1, 1);
}