C# 在 Word 中添加 Quick Table (Building Block)

C# add Quick Table (Building Block) in Word

我在我的模板 dotx 中创建了一个 Quick Table 作为 table 模板。我想以编程方式创建一个 Quick Table。那可能吗?

目前我使用现有的 table 作为模板并将其属性复制到新的 table(参见代码)。

object oTemplate = "D:\Templates\tables.dotx";
Word._Document doc = word.Documents.Add(oTemplate, ref oMissing, ref oMissing, ref oMissing);

// Copy first table as template
Word.Table tableTemplate = doc.Tables[1];
Word.Range rangeCopy = tableTemplate.Range;
rangeCopy.Copy();


...


// Reuse table template for new tables

object oMissing = Missing.Value;
var newTable = doc.Tables.Add(range, 1, 1, ref oMissing, ref oMissing);
newTable.Range.Paste();

问题是dummy table没有被粘贴删除,而是向下移动了。

解决方案:

  1. 在模板文件中创建一个 Building Block(tables.dotx 在我的例子中)
  2. 加载 C# 中的构建块
  3. 插入范围

var template = (Word.Template)doc.get_AttachedTemplate();

Word.BuildingBlock objBB = template.BuildingBlockEntries.Item("MyCustomBlock");

objBB.Insert(range, true);

Insert > Table > Drop Down > Quick Table 列表中的 "Quick Tables" 是积木。它们也可以在表格库的 Insert > Text > Quick Parts > Building Block Organizer 中找到。这意味着这些 table 存储在用户配置文件的 Building Blocks 模板中,应该是标准安装的一部分。

插入 built-in(作为 Office 的一部分安装)Building Block 的基本 (VBA) 代码是:

    Application.Templates( _
    "C:\Users\[user name]\AppData\Roaming\Microsoft\Document Building Blocks33\Built-In Building Blocks.dotx" _
    ).BuildingBlockEntries("Calendar 2").Insert Where:=Selection.Range, _
    RichText:=True

对于 C#

Word.Template objTmpl = wdApp.Templates[@"C:\Users\[user name]\AppData\Roaming\Microsoft\Document Building Blocks33\Built-In Building Blocks.dotx"];
Word.BuildingBlock objBB = objTmpl.BuildingBlockEntries.Item("Calendar 2");
objBB.Insert(rng, true);

如果不确定此模板是否已安装,或安装到特定文件路径,则更确定的方法是将 table 另存为模板中的 Building Block 作为一部分分发VSTO 解决方案。这只是 selecting table 然后使用 Insert > Text > Quick Parts > Save selection to Quick Part Gallery 的问题。在对话框中确保 select 来自 Save in 列表的模板,因为默认值很可能是带有构建块的安装模板。

要在创建文档的模板中插入 Building Block ("attached template"):

Word.Template objTmpl = (Word.Template)doc.get_AttachedTemplate();