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

本文关键字:列表 编号 重新启动 互操作 Word | 更新日期: 2023-09-27 17:49:15

我有一个Word 2010模板,其中包含一些书签和样式,在从一些xml中获取信息后,我必须使用它来生成Word文档,并且我使用c#与互操作(版本8.3)。模板是给我的,我根本不能更改,因为它符合公司的文档规则。

有时候,当我使用模板的自定义编号列表样式时,编号搞砸了,莫名其妙地从2开始而不是1。其他时候,它遵循前一个列表的编号,当我不希望这种情况发生时。

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

如果我打开Word文档,右键单击列表并选择"在1重新启动"选项(我没有英文Word,希望这是正确的翻译),它解决了我可能遇到的大多数问题,但我不知道如何使用Interop。我记录了宏,然后翻译成c#,以了解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);
        }
    }
}

我找到了执行"Restart at 1"函数的确切方法,并查看了记录的宏。一旦你找到了带有编号列表样式的段落,你必须选择你想要"重新开始于1"的数字,并应用"List_Norm"样式:

listParagraph.SelectNumber(); //Select numbers from the NumberList paragraph
application.Selection.set_Style(document.Styles["List_Norm"]); //Apply "List_Norm" style

这样,列表的内容将保持原来的样式,但列表将从1开始。

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