【发布时间】:2014-04-29 00:15:06
【问题描述】:
我是一位经验丰富的 C# 开发人员,他在项目的这个特定阶段吸了一口气,并开始着手生成文档(团队中没有人对此有任何特殊经验)。
到目前为止,对于 Word 输出,我一直在使用嵌入在文档中的内容控件和 DocumentFormat.OpenXml 包中的一些方法来创建我可以在代码中识别并动态替换为适当数据的字段。所以我加载了一个模板,并像这样遍历内容控件:
string template = serverRoot + @"Templates\MyTemplate.docx";
string path = serverRoot + @"DataOut\\" + clientName + "\\MyDocument.docx";
File.Copy(template, path, true);
using (WordprocessingDocument newDoc = WordprocessingDocument.Open(path, true))
{
MainDocumentPart mainPart = newDoc.MainDocumentPart;
var placeHolders = mainPart.Document.Body.Descendants<SdtElement>();
foreach (var sdtRun in placeHolders)
{
Console.WriteLine("Found Field: " + sdtRun.SdtProperties.GetFirstChild<Tag>().Val.Value);
switch (sdtRun.SdtProperties.GetFirstChild<Tag>().Val.Value)
{
//check the content control values and replace them
}
}
}
但是,我的下一个文档根据情况需要不定数量的重复元素。或者换一种说法,对于包中的每个文件,它都需要将这样的内容输出到文档中:
Filename: <insert filename>
Quantity: <insert quantity>
Date: <insert date>
但我们事先不知道会有多少文件。
AFAIK 我不能用标准的内容控件来做到这一点,至少在保留任何合理的格式的同时不能。
这里最好的方法是什么。我是否应该将整个文本生成为一个块,添加换行符等,并将其全部填充到一个内容控件中?即时创建新的内容控件(如果是,如何创建)?还是有更好的办法?
【问题讨论】:
-
为什么不根据需要添加内容控件?
标签: c# vba ms-word openxml docx