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没有被粘贴删除,而是向下移动了。
解决方案:
- 在模板文件中创建一个 Building Block(tables.dotx 在我的例子中)
- 加载 C# 中的构建块
- 插入范围
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();
我在我的模板 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没有被粘贴删除,而是向下移动了。
解决方案:
- 在模板文件中创建一个 Building Block(tables.dotx 在我的例子中)
- 加载 C# 中的构建块
- 插入范围
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();