C# 使用C Word互操作重新启动列表编号

C# 使用C Word互操作重新启动列表编号,c#,ms-word,interop,C#,Ms Word,Interop,我有一个Word 2010模板,其中包含一些书签和样式,在从一些XML获取信息后,我必须使用这些书签和样式生成Word文档,并且我在Interop版本8.3中使用c。模板是给我的,我根本无法更改,因为它遵循公司的文档规则 有时,当我使用模板的自定义编号列表样式时,编号会出错,令人费解的是从2开始,而不是从1开始。其他时候,它遵循前面列表的编号,而我并不总是希望这种情况发生 如果我可以从模板中修改现有样式,或者从程序中使用continueprevouslist:false应用自定义样式,那么修复这

我有一个Word 2010模板,其中包含一些书签和样式,在从一些XML获取信息后,我必须使用这些书签和样式生成Word文档,并且我在Interop版本8.3中使用c。模板是给我的,我根本无法更改,因为它遵循公司的文档规则

有时,当我使用模板的自定义编号列表样式时,编号会出错,令人费解的是从2开始,而不是从1开始。其他时候,它遵循前面列表的编号,而我并不总是希望这种情况发生

如果我可以从模板中修改现有样式,或者从程序中使用continueprevouslist:false应用自定义样式,那么修复这些情况将很容易,但是生成的Word文档必须具有它们强制我使用的样式


如果我打开Word文档,在列表上单击鼠标右键,然后选择“在1处重新启动”选项“我没有英文版的Word,希望这是正确的翻译,它修复了我可能遇到的大多数问题,但我不知道如何从互操作中使用它。”。我已经录制了宏,然后翻译成c,以了解Word如何实现某些功能,但当我开始录制宏时,鼠标被锁定。有什么想法吗?

鼠标已锁定,但您可以使用键盘上的获取上下文菜单,然后在录制宏时选择“在1重新启动”

我使用C interop完成了以下操作:

using System.Runtime.InteropServices;
using MSWord = Microsoft.Office.Interop.Word;

namespace ResetNumberingInWordDoc
{
    class Program
    {
        static void Main()
        {
            var application = new MSWord.Application();
            var document = application.Documents.Open(@"C:\mydocument.docx");

            const int listNumber = 1; //The first list on the page is list 1, the second is list 2 etc etc

            document.Range().ListFormat.ApplyListTemplateWithLevel(
                ListTemplate: document.ListTemplates[listNumber], 
                ContinuePreviousList: false, 
                ApplyTo: MSWord.WdListApplyTo.wdListApplyToWholeList,
                DefaultListBehavior: MSWord.WdDefaultListBehavior.wdWord10ListBehavior);

            document.Save();
            document.Close();

            application.Quit();

            Marshal.ReleaseComObject(application);
        }
    }
}

通过查看录制的宏,我找到了执行“在1时重新启动”功能的确切方法。找到具有编号列表样式的段落后,必须选择要在1处重新启动的编号并应用列表样式:

listParagraph.SelectNumber(); //Select numbers from the NumberList paragraph
application.Selection.set_Style(document.Styles["List_Norm"]); //Apply "List_Norm" style
这样,列表的内容将保持原始样式,但列表将从1开始


同样的代码可以应用于重新启动标题样式,但是应用Tit_列表样式而不是List_Norm。

我的ListFormat中似乎没有ApplyListTemplateWithLevel方法,可能是因为我的interop版本太旧了,但我在用鼠标右键录制宏时看到的是您的代码,谢谢!另一种似乎对我有效的方法是,一旦你找到了带有编号列表格式的段落,将列表样式应用于列表的编号,而不是列表内容。这是我的第一篇帖子,所以我不知道如何继续,即使我已经接受了你的答案,我是否应该用另一个解决方案来回答我自己的问题?