替换后,单词页脚文本不会更新

时间:2013-02-14 18:50:22

标签: c# replace ms-word vsto footer

我正在尝试替换页脚中的部分文本。我正在使用Range.Find来查找文本并替换它。在调试过程中我设置了一些断点,这样我就可以在更改之前和之后检查页脚的Range.Text。它似乎在做它的工作。当我在Locals窗口中检查Rang.Text时,文本会更改我希望它更改的方式。问题是它不会更新文档。

当我第二次尝试时,Range.Text仍然有我所做的更改,但它不会更新文档。

我已尝试使用文档的主体执行此操作,它工作得很好。我不确定我在这里缺少什么。

我正在尝试一些保存的文件。我必须取消对页脚的保护,以便在我尝试查找和替换文本时不会给我一个例外。

任何人都知道我是否缺少某种安全措施?

这是我的代码:

Word.Range docRange = currentDoc.Sections[1].Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
docRange.Find.ClearFormatting();
docRange.Find.Text = find;
docRange.Find.Replacement.ClearFormatting();
docRange.Find.Replacement.Text = replace;

object replaceAll = Word.WdReplace.WdReplaceAll;
docRange.Find.Execute(Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                      ref replaceAll, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

如果您需要更多代码,请与我们联系。

编辑:我尝试将页脚移动到一个新文档,保存它然后用调试器打开新文档,它似乎与新文档一起正常工作。仍然 但不适用于原始文档。

1 个答案:

答案 0 :(得分:1)

我能够解决我的问题。我不太确定实际问题是什么,但我的猜测是页脚格式非常奇怪。因此我决定更改代码以遍历“页脚”部分中的每个页脚,这似乎解决了我的问题。

以下是我为其他人更改代码的内容,希望有所帮助:

foreach (Word.Section wordSection in currentDoc.Sections)
{
    foreach (Word.HeaderFooter wordFooter in wordSection.Footers)
    {
        Word.Range docRange = wordFooter.Range; 

        docRange.Find.ClearFormatting();
        docRange.Find.Text = find;
        docRange.Find.Replacement.ClearFormatting();
        docRange.Find.Replacement.Text = replace;

        object replaceAll = Word.WdReplace.wdReplaceAll;
        docRange.Find.Execute(Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                  ref replaceAll, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    }
}

如果有人可能会暗示为什么有必要进行这些循环,那么它会有所帮助。