C# Word Interop在分节符后缺少页眉和页脚

C# Word Interop在分节符后缺少页眉和页脚,c#,ms-word,office-interop,C#,Ms Word,Office Interop,我正在使用Word Interop为我的公司基于模板和UI输入生成一组文档(基本上用用户提供的值替换文档的某些区域)。在文档中的每个区域上使用Find.Execute()方法,这一切似乎都可以正常工作。StoryRanges但是,它似乎没有在节段结束后处理页眉和页脚(它在完全正常之前处理页眉和页脚) 如何确保捕获整个文档,包括页眉、页脚和正文 下面是我代码的相关部分,所使用的KVP本质上是在实例化引擎类时传递给它的find-replace对 private void ReplaceFie

我正在使用Word Interop为我的公司基于模板和UI输入生成一组文档(基本上用用户提供的值替换文档的某些区域)。在文档中的每个
区域上使用
Find.Execute()
方法,这一切似乎都可以正常工作。StoryRanges
但是,它似乎没有在节段结束后处理页眉和页脚(它在完全正常之前处理页眉和页脚)

如何确保捕获整个文档,包括页眉、页脚和正文

下面是我代码的相关部分,所使用的KVP本质上是在实例化引擎类时传递给它的find-replace对

    private void ReplaceFieldsWithValues(string tempFile)
    {
        object missing = Missing.Value;
        Application wordApp = new ApplicationClass();
        wordApp.Documents.Open(tempFile);
        Document doc = wordApp.ActiveDocument;
        object replaceAll = WdReplace.wdReplaceAll;
        foreach (Range range in doc.StoryRanges)
        {
            foreach (KeyValuePair<string, string> referenceValue in _referenceValuePair)
            {
                Find findObject = range.Find;
                findObject.ClearFormatting();
                findObject.Text = $"&{{{referenceValue.Key}}}&";
                findObject.Replacement.ClearFormatting();
                findObject.Replacement.Text = referenceValue.Value;
                findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref replaceAll, ref missing, ref missing, ref missing, ref missing);
            }
        }
        doc.Save();
        doc.Close();
    }
private void ReplaceFieldsWithValues(字符串tempFile)
{
缺少对象=缺少.Value;
Application wordApp=新应用程序类();
wordApp.Documents.Open(tempFile);
Document doc=wordApp.ActiveDocument;
对象replaceAll=WdReplace.wdReplaceAll;
foreach(文档StoryRanges中的范围)
{
foreach(KeyValuePair referenceValue在_referenceValuePair中)
{
Find findObject=range.Find;
findObject.ClearFormatting();
findObject.Text=$“&{{{{{referenceValue.Key}}}&”;
findObject.Replacement.ClearFormatting();
findObject.Replacement.Text=referenceValue.Value;
findObject.Execute(参考缺失,参考缺失,参考缺失,参考缺失,参考缺失,参考缺失,参考缺失,参考缺失,
参考缺失,参考替换全部,参考缺失,参考缺失,参考缺失,参考缺失,参考缺失);
}
}
doc.Save();
doc.Close();
}

Word Interop的文档不是最好的,但我找到了一个解决方案,基本上是按节获取
headerfooter
范围
对象,而不是按
故事范围
对象,然后分别处理它们。我将查找和替换代码提取到一个单独的方法中,现在我的方法如下所示:

    private void ReplaceFieldsWithValues(string tempFile)
    {

        Application wordApp = new ApplicationClass();
        wordApp.Documents.Open(tempFile);
        Document doc = wordApp.ActiveDocument;
        foreach (Range range in doc.StoryRanges)
        {
            foreach (KeyValuePair<string, string> referenceValue in _referenceValuePair)
            {
                FindReplaceInRange(referenceValue.Key,referenceValue.Value,range,true);
            }
        }
        foreach (Section section in doc.Sections)
        {
            foreach (HeaderFooter header in section.Headers)
            {
                foreach (KeyValuePair<string, string> referenceValue in _referenceValuePair)
                {
                    FindReplaceInRange(referenceValue.Key, referenceValue.Value, header.Range, true);
                }
            }
            foreach (HeaderFooter footer in section.Footers)
            {
                foreach (KeyValuePair<string, string> referenceValue in _referenceValuePair)
                {
                    FindReplaceInRange(referenceValue.Key, referenceValue.Value, footer.Range, true);
                }
            }
        }
        doc.Save();
        doc.Close();
    }
private void ReplaceFieldsWithValues(字符串tempFile)
{
Application wordApp=新应用程序类();
wordApp.Documents.Open(tempFile);
Document doc=wordApp.ActiveDocument;
foreach(文档StoryRanges中的范围)
{
foreach(KeyValuePair referenceValue在_referenceValuePair中)
{
FindReplaceInRange(referenceValue.Key,referenceValue.Value,range,true);
}
}
foreach(文件章节中的章节)
{
foreach(第节标题中的标题页眉)
{
foreach(KeyValuePair referenceValue在_referenceValuePair中)
{
FindReplaceInRange(referenceValue.Key、referenceValue.Value、header.Range、true);
}
}
foreach(节.页脚中的页眉页脚)
{
foreach(KeyValuePair referenceValue在_referenceValuePair中)
{
FindReplaceInRange(referenceValue.Key、referenceValue.Value、footer.Range、true);
}
}
}
doc.Save();
doc.Close();
}

现在,这似乎工作得很好。

Word Interop的文档不是最好的,但我找到了一个解决方案,基本上是按节获取
headerfooter
范围
对象,而不是按
故事范围
对象,然后分别处理它们。我将查找和替换代码提取到一个单独的方法中,现在我的方法如下所示:

    private void ReplaceFieldsWithValues(string tempFile)
    {

        Application wordApp = new ApplicationClass();
        wordApp.Documents.Open(tempFile);
        Document doc = wordApp.ActiveDocument;
        foreach (Range range in doc.StoryRanges)
        {
            foreach (KeyValuePair<string, string> referenceValue in _referenceValuePair)
            {
                FindReplaceInRange(referenceValue.Key,referenceValue.Value,range,true);
            }
        }
        foreach (Section section in doc.Sections)
        {
            foreach (HeaderFooter header in section.Headers)
            {
                foreach (KeyValuePair<string, string> referenceValue in _referenceValuePair)
                {
                    FindReplaceInRange(referenceValue.Key, referenceValue.Value, header.Range, true);
                }
            }
            foreach (HeaderFooter footer in section.Footers)
            {
                foreach (KeyValuePair<string, string> referenceValue in _referenceValuePair)
                {
                    FindReplaceInRange(referenceValue.Key, referenceValue.Value, footer.Range, true);
                }
            }
        }
        doc.Save();
        doc.Close();
    }
private void ReplaceFieldsWithValues(字符串tempFile)
{
Application wordApp=新应用程序类();
wordApp.Documents.Open(tempFile);
Document doc=wordApp.ActiveDocument;
foreach(文档StoryRanges中的范围)
{
foreach(KeyValuePair referenceValue在_referenceValuePair中)
{
FindReplaceInRange(referenceValue.Key,referenceValue.Value,range,true);
}
}
foreach(文件章节中的章节)
{
foreach(第节标题中的标题页眉)
{
foreach(KeyValuePair referenceValue在_referenceValuePair中)
{
FindReplaceInRange(referenceValue.Key、referenceValue.Value、header.Range、true);
}
}
foreach(节.页脚中的页眉页脚)
{
foreach(KeyValuePair referenceValue在_referenceValuePair中)
{
FindReplaceInRange(referenceValue.Key、referenceValue.Value、footer.Range、true);
}
}
}
doc.Save();
doc.Close();
}
现在看来这一切都很顺利