如何在 C# 中使用 OpenXML 更新 Word 文档的目录

问题描述 投票:0回答:2

我正在 .net core 6.1 应用程序中使用 OpenXML 库创建 Word 文档。一切都很完美并且工作顺利。但完成所有操作后,我需要更新目录,但我找不到该问题的有效解决方案。

是否有任何方法可用于 OpenXML 库,例如右键单击 Word 文档中的目录,然后单击“更新字段”。更新 Word 文档中的目录仍然有效,但这不是我的产品的预期输出。我想更新下面代码中

document.close()
行之前的目录。

我的代码示例如下:

using (var document = WordprocessingDocument.Open(memoryStream, true))
{
    document.ChangeDocumentType(WordprocessingDocumentType.Document);
    body = document.MainDocumentPart.Document.Body;

    //setting word cover
    //setting nodes;
    //setting business lists and insterting them to Word document;

    document.Close();
}
c# ms-word openxml tableofcontents
2个回答
0
投票

几个月前我尝试了一切来更新目录,从几页中得到的最佳解决方案是放置一个代码来更新所有目录和参考文献(还有页码)。

代码是这样的: Document 是保存 WordprocessingDocument 的变量。根据需要重命名它。

DocumentSettingsPart settingsPart = Document.MainDocumentPart.GetPartsOfType<DocumentSettingsPart>().FirstOrDefault(); // FirstOrDefault because First gave error "Sequence contains no elements
if (settingsPart != null) // if null, the document does not have ANY references to update and would give error if tried
{
    // Create object to update fields on open
    UpdateFieldsOnOpen updateFields = new UpdateFieldsOnOpen
    {
        Val = new DocumentFormat.OpenXml.OnOffValue(true)
    };
    // Insert object into settings part.
    settingsPart.Settings.PrependChild<UpdateFieldsOnOpen>(updateFields);
    settingsPart.Settings.Save();
}

使用此代码,您下次打开文档时,会打开一个小窗口,警告文档未更新,并询问您是否要更新它。如果选择“是”,则会更新全部。这是我当时得到的最好的解决方案,如果有人有更好的解决方案,我将在这篇文章中等待。

希望对你有帮助。


0
投票

是否可以在不显示更新字段警告窗口的情况下完成同样的操作?不用问就直接更新吧。

© www.soinside.com 2019 - 2024. All rights reserved.