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

Posted

技术标签:

【中文标题】MailMerge #foreach 使用 Aspose.Words 的字符串列表【英文标题】:MailMerge #foreach list of strings using Aspose.Words 【发布时间】:2016-01-30 22:03:14 【问题描述】:

我目前正在制作一个 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-doc 中也没有找到关于 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));
    

【问题讨论】:

我以前从未见过这种语法。这是内置功能还是附加组件? @lc。这是 Aspose.Words 库的 MailMerge 功能,用于转换数据。我已经编辑了我的问题,以展示如何使用我们的数据转换 word-doc 的示例。 【参考方案1】:

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

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

标签正文必须满足以下要求:

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

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

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

>

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

>

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

请阅读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 合作,担任开发人员传道者。

【讨论】:

以上是关于MailMerge #foreach 使用 Aspose.Words 的字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Vb.net 在 Openoffice 中进行 Mailmerge

如何在 ASP.NET C# 中使用 foreach 获取 CheckBoxList 中选定项目的值?

使用asp.net mvc将html foreach循环数据转换为webgrid

Asp.Net 中有没有办法与运行 Parallel.Foreach 的后台线程进行通信

在输出前拼合邮件合并的文档

从 foreach 循环 ASP.NET Core 5.0 返回一个变量