使用Aspose.Words的MailMerge #foreach字符串列表

时间:2015-10-30 13:02:33

标签: c# string ms-word mailmerge aspose.words

我正在制作一个MailMerge文件,并希望显示一个字符串列表。在过去,我使用了一个对象列表(例如Customer),并且能够在Word-doc中使用这样的内容:

{{ #foreach Customers }}
{{Name}}
{{Address}}
{{ /foreach Customers }}

现在,我有一个strings而不是对象的列表,我只想展示它们:

{{ #foreach List }}
{{???}}
{{ /foreach List }}

那么,???应该是什么。或者我应该将#foreach List更改为.NET C#中的foreach,即{{ #foreach value in List }}或类似内容?

一般来说,我没有找到很多关于MailMerge的信息,而且在MS Word文档中没有关于foreach的信息。

如果这不可能,我想我必须将字符串放在容器类中?像:

public class StringContainer
{
    public string String { get; set; }
}

{{ #foreach List }}
{{String}}
{{ /foreach List}}

编辑:

我们使用Aspose.Words.MailMerge& .MailMerging)进行从数据对象到MS Word文档中数据的转换。以下是转换的代码:

private static byte[] GenerateDocument(Stream template, DocumentDataSource dataSource, SaveOptions saveOptions, IFieldMergingCallback fieldMergingCallback = null)
{
    var doc = new Document(template);

    doc.MailMerge.FieldMergingCallback = fieldMergingCallback;
    doc.MailMerge.UseNonMergeFields = true;
    doc.MailMerge.CleanupOptions = MailMergeCleanupOptions.RemoveContainingFields |
                                   MailMergeCleanupOptions.RemoveUnusedFields |
                                   MailMergeCleanupOptions.RemoveUnusedRegions |
                                   MailMergeCleanupOptions.RemoveEmptyParagraphs;

    doc.MailMerge.Execute(dataSource);
    doc.MailMerge.ExecuteWithRegions((IMailMergeDataSourceRoot)dataSource);

    doc.UpdateFields();

    using (var ms = new MemoryStream())
    {
        doc.Save(ms, saveOptions);
        return ms.ToArray();
    }
}

以下是我们如何使用它的一个例子:

public byte[] CreateLetter(string filePath, string fileName, OurDataObject data)
{
    var path = Path.Combine(filePath, fileName);

    using (var fs = File.OpenRead(path))
    {
        var dataSource = new DocumentDataSource(data);
        return GenerateDocument(fs, dataSource, new OoxmlSaveOptions(SaveFormat.Docx));
    }
}

1 个答案:

答案 0 :(得分:0)

我建议您使用Aspose.Words LINQ Reporting Engine来达到您的要求。

LINQ报告引擎的典型模板由通用文档内容和描述模板结构和数据绑定的标记组成。您可以使用可以占用多个段落的运行文本来形成这些标记,使其更具描述性。

标签正文必须符合以下要求:

  • 标签正文必须用“<<<”和“>>”字符序列包围。
  • 标签正文必须只包含文本节点。
  • 标签主体不得位于标记文档节点内,例如 StructuredDocumentTag,CustomXmlMarkup或SmartTag。

标签正文通常由以下元素组成:

  • 标签名称
  • 括号括起来的表达式
  • 一组可用于标签的开关,每个开关都以 “ - ”字符

<强>&LT;&LT; tag_name [expression] -switch1 -switch2 ...&gt;&gt;

特定标签可以包含其他元素。某些标签需要关闭对应物。结束标记的名称前面有“/”字符。此标记的名称必须与相应的开始标记的名称匹配。

<强>&LT;&LT; / tag_name&gt;&gt;

注意 - 标记正文元素区分大小写。

请阅读this链接并查看以下代码示例。希望这对你有所帮助。

DocumentBuilder builder = new DocumentBuilder();
builder.Write("The items are: <<foreach [item in items]>><<[item]>>, <</foreach>>and others.");
Document doc = builder.Document;

ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, new string[] { "Item1", "Item2", "Item3" }, "items");

doc.Save(MyDir + "out.docx");

我与Aspose一起担任开发人员传播者。