2015-10-30 29 views
2

我目前正在創建一個MailMerge文件並且想要顯示一個字符串列表。在過去,我已經使用對象(例如Customer)的列表,並能夠在文字,文檔是這樣的:MailMerge #foreach使用Aspose.Words的字符串列表

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

我從來沒有見過這種語法。這是內置功能還是附加功能? –

+0

@lc。它是轉換數據的'Aspose.Words'庫的'MailMerge'功能。我編輯了我的問題,以顯示word-doc如何與我們的數據一起轉換的示例。 –

回答

0

我建議你請使用Aspose.Words LINQ Reporting Engine達到您的要求。

LINQ Reporting Engine的典型模板由描述模板結構和數據綁定的常見文檔內容和標籤組成。您可以使用僅佔用多個段落的運行文本形成這些標籤,以便更具描述性。

甲標籤體必須滿足下列要求:

  • 甲標籤體必須通過「< <」和「>>」字符序列包圍。
  • 標籤主體必須只包含文本節點。
  • 標記正文不能位於標記文檔節點內,如 StructuredDocumentTag,CustomXmlMarkup或SmartTag。

的標籤體通常由以下元素組成:

  • 的標籤名
  • 由括號包圍的表達
  • 一組用於標籤可用的開關,其中的每一個之前通過 了「 - 」字符

< < tag_name [expression] -switch1 -switch2 ... >>

特定標籤可以有其他元素。一些標籤需要關閉對應物。結束標籤的名稱前面有「/」字符。該標籤的名稱必須與相應的開始標籤的名稱匹配。

< </TAG_NAME >>

注 - 標籤body元素是區分大小寫的。

請閱讀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作爲Developer evangelist。