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

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

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

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

但是现在,我有一个 strings 列表而不是 Objects,我只是想显示它们:

{{ #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 Reporting Engine达到您的要求。

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

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

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

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

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

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

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

<>

注意 – 标记主体元素区分大小写。

请阅读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 工作,担任开发人员布道师。

关于c# - MailMerge #foreach 使用 Aspose.Words 的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33436664/

相关文章:

c# - 如何使用 Mono 从 Linux 中的网络摄像头捕获?

java - 提取带标签的 PDF 中的阅读顺序序列

javascript - 从javascript中的变量中删除开始和结束逗号

ios - NSLocalizedString - 线程 1 : EXEC_BAD_ACCESS with String. localizedStringWithFormat

c# - Microsoft.Office.Interop 用于网站(文件转换)是否安全?

java - 在 Apache POI 中使用 WordToHtmlConverter 转换器

api - 使用Microsoft Office API在Word文档中将 "Shift-Enter"换行符替换为 "Enter"

c# - 找到 JArray 并添加 JObject

c# - 用于胖客户端的客户端缓存库/框架

python - 如何对列表中的多个字符串进行切片?