我有一个用于每个页面的特定模板。它实际上是两列表,其中有1列和1行。为什么整个事情都不是一张桌子,我不知道,但是我坚持使用它。看起来如下。同样,每个单元格实际上都是其自己的表。因此页面上有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();
答案 0 :(得分:0)
构件块提供了一种方便的方法来存储和重复使用Word文档中的“样板”。内容可以是“纯文本”,也可以包括格式以及Word支持的所有内容。与尝试使用代码重新创建内容或从外部文件导入内容相比,这通常更容易,更快捷。
构件块存储在模板(dotx或dotm)中。模板可以附加到文档(通常是从该模板创建文档时),也可以是“全局”的,例如Normal.dotm。
在这种情况下,Building Block存储在附加的模板中,并且可用于通过该模板创建的任何文档(但不适用于其他文档)。
构建基块可以组织为“类型”和“类别”,这意味着模板“容器”中可以有多个具有相同名称的构建基块。如果是这种情况,在寻址时必须指定Building Block的类型,类别和名称。如果名称在模板中是唯一的,则仅需要名称。
以下代码片段显示了两种可能性。在文档对象的末尾,将两个Building Block依次插入。
使用Insert
方法插入Building Block。
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);