使用C#Word Interop重新启动列表编号

时间:2012-12-20 16:55:58

标签: c# ms-word interop

我有一个Word 2010模板,其中包含一些书签和样式,在从某些XML获取信息后,我必须使用它来生成Word文档,而我正在使用c#和Interop(版本8.3)。模板是给我的,我根本不能改变它,因为它遵循公司的文档规则。

有时候,当我使用模板的自定义编号列表样式时,编号会弹出,莫名其妙地从2开始而不是1.其他时候,它跟随前一个列表的编号,当我不总是想要那个时候发生。

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

如果我打开Word文档,右键单击列表并选择“重启1”选项(我没有英文Word,希望这是正确的翻译),它修复了我可能遇到的大部分问题,但我不知道如何使用Interop。我已经录制了宏,然后转换为c#以了解Word如何创建一些函数,但是当我开始录制宏时鼠标被锁定。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

鼠标已锁定,但您可以使用键盘上的right click mouse button获取上下文菜单,然后在录制宏时选择重启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)

我找到了执行“重启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”。