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

时间:2019-01-10 21:40:39

标签: c# ms-word vsto word-addins

TL; DR:

如何捕获段落编号作为文本的“一部分”并将其导出到DOCX?


问题

我有一个文档,该文档分为几个部分和几个小节,其内容与一组状态法规(Statute 208,包括小节Statute 208.1Statute 208.2等)相似。我们通过修改.docx zip中的numbering.xml文件来创建此文件。

我想将“子节”(208.5)及其文本导出到单独的.docx文件中。我的VSTO外接程序可以很好地导出文本,但是编号重设208.1。确实有道理,因为它现在是文档中带有<ilvl>的第一段。

PDF可以正常工作

很有趣的是,我能够调用Word.Range的{​​{1}}函数并将此选择导出到PDF很好-甚至保留编号。这就引出了我尝试“渲染”所选内容(可能是将其打印出来)以将其放入新的.docx文件的方法,但是我也没有弄清楚。


我尝试过的事情:

  • ExportAsFixedFormat同时使用Range.ExportFragment()wdFormatStrictOpenXMLDocument作为wdFormatDocumentDefault值。

    • 这些导出操作还会重置编号。
  • wdSaveType,使用Document.PrintOut()和有效的文件名。我现在意识到,从字面上看,这会生成“打印指令”,并且不会在路径PrintToFile = true处注入具有任何有效文件结构的新文件。

    • 简单地不起作用。 :)
  • filename到变量Application.Selection.XML,并在新添加的Document对象上调用content

    • 仍然重设编号。

上下文代码段

Document.Content.InsertXML(content)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

此(日期)链接上有一些很好的信息,这些信息仍应适用于当前的Word API: https://forums.windowssecrets.com/showthread.php/27711-Determining-which-ListTemplates-item-is-in-use-(VBA-Word-2000)

该链接上的信息表明,您可以为ListTemplate创建名称/句柄,以便您可以在代码中引用它-只要法规样式项目符号与文档的命名样式相关联即可。这个想法是先命名与活动文档的法规项目符号样式关联的ListTemplate,然后在访问ListLevels集合时引用该名称。

例如,您可能具有类似如下的代码:

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

完成上述分配后,您可以按名称引用模板:

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

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

有帮助吗?