gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:09 27 4
gpt4 key购买 nike

我目前正在制作一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com