Ms word 使用同一多级列表样式的多个标题样式

Ms word 使用同一多级列表样式的多个标题样式,ms-word,vsto,office-interop,Ms Word,Vsto,Office Interop,我试图为Word中的多个标题样式指定编号,以便获得如下内容: 6. <Heading 1> 6.1. <Heading 2> 6.1.1. <Heading 3> 6.2. <Heading 2> 6.2.1. <Heading 3> 6.3. <Heading 2> 但我试图通过在代码中应用第二种多级编号样式来动态实现这一点,结果如下: 1. 1.1. 1.1.1. 6. <Heading 1> 1.1 &

我试图为Word中的多个标题样式指定编号,以便获得如下内容:

6. <Heading 1>
6.1. <Heading 2>
6.1.1. <Heading 3>
6.2. <Heading 2>
6.2.1. <Heading 3>
6.3. <Heading 2>
但我试图通过在代码中应用第二种多级编号样式来动态实现这一点,结果如下:

1.
1.1.
1.1.1.
6. <Heading 1>
1.1 <Heading 2>
1.1.1 <Heading 3>
7. <Heading 1>
1.2 <Heading 2>
1.1.2 <Heading 3>
6。
1.1
1.1.1 
7.
1.2
1.1.2 
如果在此之后手动应用第二个多级编号样式,它将更改为所需的输出

这是我的代码(有点简化,但没有太多)

ListGallery gallery=doc.Application.ListGallery[WdListGalleryType.wdOutlineNumberGallery];
ListTemplate numberedTemplate=gallery.ListTemplates[2];
对于(int i=1;i<10;i++)
{
样式样式=文件样式[“标题”+i];
style.LinkToListTemplate(numberedTemplate,i);
}

使用ListGalleries不可靠/不可靠。在索引的情况下(从UI中的列表中选择数字格式),您无法确保列表的内容总是相同的——这一缺点是显而易见的

像您正在使用的内置库的问题是,这个特定库有一个“bug”(第一次发布时在UI中就是这样):级别2和级别3没有激活“重新启动后列表”设置,因此您得到了所描述的行为

因此,最好在创建自定义列表时录制宏,最好使用大纲编号菜单中的“定义新列表样式”。然后,您可以在任何地方使用该代码


定义命名列表样式将为您提供一个命名列表模板,这意味着它可以直接重用和管理。(在代码中,使用索引值引用列表模板,如果要使用的列表模板不是集合中的第二个列表模板,则可能会出错。)

不要依赖使用列表库。而是在定义自定义列表样式(模板)时录制宏。这将为所有9个级别生成代码(即使您不更改或不需要它们,宏也会记录它们),并包括将样式链接到标题级别。为什么是宏?我最初是用一个定制的ListTemplate(在代码中)来做这件事的,并且看到了同样的事情。我去掉了那部分,试图缩小原因。这基本上相当于一个宏,是吗?如果你不知道如何创建正确的大纲级别编号设置,那么这实际上更多的是一个最终用户的问题。。。查看定义各种列表级别的对话框。您缺少的是第二级和第三级的“在n级之后重新开始编号”设置。这似乎确实有效。这不是对实际问题的回答,但如果你把它转换成一个答案,我会投票表决。你实际上没有问问题,你知道…:-)我觉得解决根本问题比试图修补一个(IMO)不太理想的方法要好。手动方法起作用的原因是,UI使用的列表模板中的缺陷已在您使用的版本中修复,但原始的错误行为仍然存在于对象模型枚举中。您必须修复ListTemplate-但是出于我在“答案”中解释的原因,您最好创建一个自定义ListTemplate。。。
ListGallery gallery = doc.Application.ListGalleries[WdListGalleryType.wdOutlineNumberGallery];
ListTemplate numberedTemplate = gallery.ListTemplates[2];
for (int i = 1; i < 10; i++)
{
  Style style = doc.Styles["Heading " + i];
  style.LinkToListTemplate(numberedTemplate, i);
}