【问题标题】:Gembox document range inserting columns instead of rowsGembox 文档范围插入列而不是行
【发布时间】:2023-02-09 14:26:27
【问题描述】:

我通过使用 GemBox 文档将 .docx 文件与 .NET 对象合并来生成文档。我有一个特殊情况,我需要包含一个包含子对象集合详细信息的表格。但是,我不需要为每个对象插入一行,而是需要插入一列。因此,“标题”单元格将位于表格的最左侧一列,范围内的每个对象都将添加一列。

每个对象都有行的普通表很简单,只需在第一列中执行 { MERGEFIELD RangeStart:(array) } 并在最后一列中执行 { MERGEFIELD RangeEnd:(array) } 即可。有没有办法对列而不是行执行此操作?

【问题讨论】:

    标签: report mailmerge gembox-document


    【解决方案1】:

    目前,邮件合并过程中没有这样的功能,但是你可以做的是在整个表上进行合并范围,然后在执行邮件合并后将结果表合并为一个。

    例如,假设这是您的文档:

    我还将此表的标题属性设置为“详细信息”(表属性 -> 替代文本 -> 标题),以便我可以轻松选择它们。

    var document = DocumentModel.Load("template.docx");
    
    // Sample source.
    var source = new
    {
        Details = new[]
        {
            new { Detail1 = "First", Detail2 = "1", Detail3 = "11", Detail4 = "111" },
            new { Detail1 = "Second", Detail2 = "2", Detail3 = "22", Detail4 = "222" },
            new { Detail1 = "Third", Detail2 = "3", Detail3 = "33", Detail4 = "333" },
        }
    };
    
    document.MailMerge.Execute(source);
    
    // Retrieve tables with "Details" title.
    var detailsTables = document.GetChildElements(true, ElementType.Table)
        .Cast<Table>()
        .Where(t => t.Metadata.Title == "Details")
        .ToList();
    
    // Copy cells from other "Details" tables into the first "Details" table.
    var firstTable = detailsTables[0];
    for (int i = 1; i < detailsTables.Count; i++)
    {
        var otherTable = detailsTables[i];
    
        for (int r = 0; r < otherTable.Rows.Count; r++)
            firstTable.Rows[r].Cells.Add(
                otherTable.Rows[r].Cells[0].Clone(true));
    
        otherTable.Content.Delete();
    }
    
    document.Save("output.docx");
    

    结果是这样的:

    此外,您可以在合并范围周围使用书签,然后使用以下内容检索表,而不是使用 Title 属性来标识目标表:

    var detailsTables = bookmark.GetContent(true).GetChildElements(ElementType.Table)
        .Cast<Table>();
    

    最后,如果您需要标题列之类的东西,您可以将其作为单独的表格添加到合并范围之前。换句话说,是这样的:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多