1

在从一些 XML 获取信息后,我有一个带有一些书签和样式的 Word 2010 模板,我必须使用它们来生成 Word 文档,并且我正在使用 c# 和 Interop(8.3 版)。模板给了我,我根本无法更改,因为它遵循公司的文档规则。

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

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

如果我打开 Word 文档,右键单击列表并选择“在 1 处重新启动”选项(我没有英文 Word,希望这是正确的翻译),它解决了我可能遇到的大部分问题,但我不知道如何从 Interop 使用它。我已经录制了宏,然后翻译成c#知道Word是怎么做一些功能的,但是当我开始录制宏时鼠标被锁定。有任何想法吗?

4

2 回答 2

2

鼠标已锁定,但您可以使用键盘上的鼠标右键来获取上下文菜单,然后在录制宏时选择 Restart at 1。

我最终使用 C# 互操作完成了这个:

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);
        }
    }
}
于 2012-12-21T10:11:03.267 回答
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”。

于 2013-01-08T17:06:34.580 回答