C#-MicrosoftWord自动化-使用相同的模板创建新页面

C#-MicrosoftWord自动化-使用相同的模板创建新页面,c#,ms-word,C#,Ms Word,我有一个特定的模板,我可以用于每个页面。它本质上是两列表,一列一行。为什么整件事不是一张桌子我不知道,但我被它卡住了。它看起来如下所示。同样,每个单元格实际上都是它自己的表。因此,页面上有40个表格。这些将用作活页夹中的标签。请注意,左侧的表格与右侧的表格相同。这是因为它们可以折叠并作为一个整体使用 我需要的是复制到一个新的页面,并重新开始每一次一页填写和计数超过20 我的代码如下: Word.Application app = new Word.Application();

我有一个特定的模板,我可以用于每个页面。它本质上是两列表,一列一行。为什么整件事不是一张桌子我不知道,但我被它卡住了。它看起来如下所示。同样,每个单元格实际上都是它自己的表。因此,页面上有40个表格。这些将用作活页夹中的标签。请注意,左侧的表格与右侧的表格相同。这是因为它们可以折叠并作为一个整体使用

我需要的是复制到一个新的页面,并重新开始每一次一页填写和计数超过20

我的代码如下:

Word.Application app = new Word.Application();
        var doc = app.Documents.Add(@"C:\.....LabelTemplate.dotx");
        object missing = System.Type.Missing;
        object pageBreak = Word.WdBreakType.wdPageBreak;
        Word.Selection selection = app.Selection;

        string path = Path.Combine(destination, "labels.docx");
        int page = 1;
        foreach (var batch in batches)
        {

            for (int i = 1; i <= batch.Count(); i++)
            {

                Word.Table table = doc.Tables[i];

                table.Range.Font.Size = 7;
                table.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                table.Range.Font.Bold = 1;

                int x = i - 1;
                string text = batch[x].WellName + "\v" + batch[x].Field + "\v" + batch[x].Reservior;
                //int cellNum = i + 1;
                table.Cell(1, 1).Range.Text = text;

                Word.Table table2 = doc.Tables[i + 20];

                table2.Range.Font.Size = 7;
                table2.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                table2.Range.Font.Bold = 1;

                table2.Cell(1, 1).Range.Text = text;

                if (i % 20 == 0)
                {
                    selection.EndKey(Word.WdUnits.wdStory, Word.WdMovementType.wdMove);
                    selection.InsertBreak(ref pageBreak);

                }

            }
            page++;

        }

        doc.SaveAs(path);
        doc.Close();
        app.Quit();
Word.Application=new Word.Application();
var doc=app.Documents.Add(@“C:\..…LabelTemplate.dotx”);
缺少对象=System.Type.missing;
object pageBreak=Word.WdBreakType.wdPageBreak;
Word.Selection=app.Selection;
string path=path.Combine(目标,“labels.docx”);
int page=1;
foreach(批量var)
{

for(int i=1;i构建块提供了一种在Word文档中存储和重用“锅炉板”的方便方法。内容可以是“纯文本”,也可以包含格式和Word支持的所有内容。这通常比尝试使用代码重新创建内容或从外部文件导入内容更简单、更快

构建块存储在模板(dotx或dotm)中。模板可以附加到文档(通常在从该模板创建文档时),也可以是“全局”的,如Normal.dotm

在这种情况下,构建块存储在附加的模板中,可用于从该模板创建的任何文档(但不适用于其他文档)

构建块可以分为“类型”和“类别”,这意味着在一个模板“容器”中可以有多个具有相同名称的构建块。如果是这种情况,则在寻址时需要指定构建块类型、类别和名称。如果名称在模板中是唯一的,则只需要名称

下面的代码段显示了这两种可能性。两个构建块依次插入到文档对象的末尾

使用
Insert
方法插入构造块

Word.Range rng = doc.Content;
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
Word.Template objTmpl = (Word.Template) doc.get_AttachedTemplate(); // NormalTemplate
Word.BuildingBlock objBB = objTmpl.BuildingBlockEntries.Item("TestCCwithActiveX");
objBB.Insert(rng, true);
rng = doc.Content;
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
Word.BuildingBlock objBB2 = objTmpl.BuildingBlockTypes.Item(Word.WdBuildingBlockTypes.wdTypeAutoText).Categories.Item("Test").BuildingBlocks.Item("test heading");
objBB2.Insert(rng, true);

选择整体并将其保存为模板中的**构建块”条目。(以用户身份执行此操作)。然后您可以根据需要插入构建块条目。您已经添加了构建块。您是否有如何通过代码访问此项的示例?