Je crée actuellement un fichier MailMerge et je souhaite afficher une liste de chaînes. Dans le passé, je l'ai utilisé une liste d'objets (par exemple Customer
) et a été en mesure d'avoir quelque chose comme ça dans la Parole-doc:MailMerge #foreach liste de chaînes utilisant Aspose.Words
{{ #foreach Customers }}
{{Name}}
{{Address}}
{{ /foreach Customers }}
Maintenant, cependant, j'ai une liste de strings
au lieu d'objets, et je veux simplement leur montrer:
{{ #foreach List }}
{{???}}
{{ /foreach List }}
Alors, ce qui est censé aller au ???
. Ou devrais-je changer le #foreach List
pour quelque chose comme un foreach dans .NET C#, c'est-à-dire {{ #foreach value in List }}
ou quelque chose de similaire?
Je n'ai pas été en mesure de trouver beaucoup de choses sur MailMerge en général pour être honnête, et rien à propos de foreach dans le MS Word-doc.
Si ce n'est pas possible, je suppose que je vais devoir mettre la chaîne dans une classe-conteneur? Comme:
public class StringContainer
{
public string String { get; set; }
}
et
{{ #foreach List }}
{{String}}
{{ /foreach List}}
EDIT:
Nous utilisons Aspose.Words
(.MailMerge
& .MailMerging
) pour cette conversion de nos données objet de données dans le MS Word doc. Voici le code pour la conversion:
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();
}
}
Et voici un exemple de la façon dont nous utilisons:
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));
}
}
Je n'ai jamais vu cette syntaxe auparavant. Est-ce une fonctionnalité intégrée ou un add-on? –
@lc. C'est la fonction 'MailMerge' de la bibliothèque' Aspose.Words' qui convertit les données. J'ai édité ma question pour montrer un exemple de la façon dont le document-doc est converti avec nos données. –