如何导出一段 DOCX 文件并保持相同的段落编号?

How can I export a piece of a DOCX file and keep the same paragraph numbering?

长话短说:

如何将段落编号捕获为文本的 'part' 并将其导出到 DOCX?


问题

我有一份文件分为章节和小节,读起来类似于一组州法规(Statute 208,有小节 Statute 208.1Statute 208.2 等) .我们通过修改 .docx zip 中的 numbering.xml 文件来创建它。

我想将 'sub-section' (208.5) 及其文本导出到单独的 .docx 文件。我的 VSTO 加载项可以很好地导出文本,但 编号重置 208.1。这确实有一定道理,因为它现在是文档中 <ilvl> 的第一段。

PDF 工作正常

有趣的是,我能够调用 Word.RangeExportAsFixedFormat 函数并将此选择导出为 PDF 就好了——甚至保留了编号。这让我走上了尝试 'render' 选择的道路,可能会打印出来,以便将其放入新的 .docx 文件中,但我也没有弄清楚。


我尝试过的:


上下文的代码部分

using Word = Microsoft.Office.Interop.Word;

Word.Range range = Application.ActiveDocument.Range(startPosition, endPosition);
range.Select();

//export to DOCX?
Application.Selection.Range.ExportFragment(
    filename, Word.WdSaveFormat.wdFormatDocumentDefault);

您可以在导出前使用 ConvertNumbersToText(wdNumberAllNumbers),然后 _Document.Undo() 或在导出后关闭而不保存。

此(已过时)link 中有一些有用的信息仍然适用于当前的 Word API: https://forums.windowssecrets.com/showthread.php/27711-Determining-which-ListTemplates-item-is-in-use-(VBA-Word-2000)

那里的信息 link 建议您可以为您的 ListTemplate 创建一个 name/handle 以便您可以在代码中引用它——只要您的法规样式项目符号与命名的相关联文档的样式。这个想法是首先命名与活动文档的法规项目符号样式关联的 ListTemplate,然后在访问 ListLevels 集合时引用该名称。

例如,您的代码可能如下所示:

ActiveDocument.Styles("StatutesBulletStyle").ListTemplate.Name = "StatuteBulletListTemplate";

完成上述赋值后,您可以通过名称引用模板:

ActiveDocument.ListTemplates("StatuteBulletListTemplate").ListLevels(1).StartAt = 5;

使用上述技术不再需要您尝试弄清楚活动模板是什么...

有帮助吗?