繁体   English   中英

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

[英]MailMerge #foreach list of strings using Aspose.Words

我目前正在制作一个MailMerge文件,并想显示一个字符串列表。 过去,我使用了对象列表(例如Customer ),并且能够在Word文档中使用类似的内容:

{{ #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));
    }
}

我建议您使用Aspose.Words LINQ报告引擎来满足您的要求。

LINQ Reporting Engine的典型模板由通用文档内容和描述模板结构和数据绑定的标签组成。 您可以仅使用运行文本来形成这些标签,这些文本可以占据多个段落以提高描述性。

标签主体必须满足以下要求:

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

标签主体通常包含以下元素:

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

<< tag_name [表达式] –switch1 –switch2 ... >>

特殊标签可以包含其他元素。 一些标签需要封闭的对应标签。 结束标记的名称之前带有“ /”字符。 该标签的名称必须与相应的开始标签的名称匹配。

<< / tag_name >>

注–标签正文元素区分大小写。

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

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合作,担任Developer推广员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM