我有一个Word 2010模板,其中包含一些书签和样式,在从某些XML获取信息后,我必须使用它来生成Word文档,而我正在使用c#和Interop(版本8.3)。模板是给我的,我根本不能改变它,因为它遵循公司的文档规则。
有时候,当我使用模板的自定义编号列表样式时,编号会弹出,莫名其妙地从2开始而不是1.其他时候,它跟随前一个列表的编号,当我不总是想要那个时候发生。
如果我可以修改模板中的现有样式,或者从我的程序中应用ContinuePreviousList: false
自定义样式,那么修复这些案例会很容易,但生成的Word文档必须具有样式他们强迫我使用。
如果我打开Word文档,右键单击列表并选择“重启1”选项(我没有英文Word,希望这是正确的翻译),它修复了我可能遇到的大部分问题,但我不知道如何使用Interop。我已经录制了宏,然后转换为c#以了解Word如何创建一些函数,但是当我开始录制宏时鼠标被锁定。有什么想法吗?
答案 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”。