在使用openXML生成word文档时,试图合并表格单元格。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在使用openXML生成word文档时,试图合并表格单元格。相关的知识,希望对你有一定的参考价值。

我试图用下面的代码生成一个word文档,并创建如图所示的表格,将第四列的单元格合并成表格。

不知何故,当我合并单元格时,有一个额外的空间被添加,如图所示。

var rowHeaderLabels = new List<string>  "Space", "Lighting Density" ;                       
var columnHeaderLabels = new List<string>  "Occupants per 1000sf", "Sensible BTUH", "Latent BTUH" ;
var assumedLoadsTable = RenderTableWithMergedHeader(rowHeaderLabels, "Equipment Density", "Occupant", columnHeaderLabels, assumedHeatingAndCoolingData);

这是代码 RenderTableWithMergedHeader 办法

 private static Table RenderTableWithMergedHeader(List<string> rowsHeaderLabel,string lastColumnName,string mergedColumnLabel, List<string> columnsHeaderLabel, List<List<string>> contentData)
    
        var table = new Table();
        var tableProperties = RenderTableProperties();
        table.AppendChild(tableProperties);

        TableRow tableHeaderRowA = new TableRow();
        TableRow tableHeaderRowB = new TableRow();

        foreach (var colName in rowsHeaderLabel)
        
            tableHeaderRowA.Append(RenderTableHeaderCell(colName));
        
        table.Append(tableHeaderRowA);
        // problem is here with tableHeaderRowA
        tableHeaderRowA.Append(RenderTableHeaderCell(lastColumnName, 1, MergedCellValues.Restart));
        tableHeaderRowB.Append(RenderTableHeaderCell(null, 3, MergedCellValues.Continue));

        tableHeaderRowA.Append(RenderTableHeaderCell(mergedColumnLabel,columnsHeaderLabel.Count));
        foreach (var colName in columnsHeaderLabel)
        
            tableHeaderRowB.Append(RenderTableHeaderCell(colName));
        
        table.Append(tableHeaderRowB);
        // Content binding code
        return table;
    

这就是 RenderTableHeaderCell 办法

    public static TableCell RenderTableHeaderCell(string columnName, int horizontalSpan = 1, MergedCellValues? verticalMerge = null)
    
        TableCell tableCell = new TableCell();
        TableCellVerticalAlignment tableCellVerticalAlignment = new TableCellVerticalAlignment()  Val = TableVerticalAlignmentValues.Center ;
        Paragraph paragraph = new Paragraph();
        TableCellProperties tableCellProperties = RenderTablecellProperties();
        tableCellProperties.Append(tableCellVerticalAlignment);
        if (horizontalSpan != 1)
        
            tableCellProperties.Append(new GridSpan()  Val = horizontalSpan );
        
        if (verticalMerge != null)
        
            VerticalMerge vm = new VerticalMerge()  Val = verticalMerge ;
            tableCellProperties.Append(vm);
        
        var paragraphproperties = RenderParagraphJustification();
        paragraph.Append(paragraphProperties);
        Run newChild = RenderRun(columnName);
        paragraph.AppendChild(newChild);
        tableCell.Append(tableCellProperties);
        tableCell.Append(paragraph);

        return tableCell;
    

这将生成如下图所示的表格。

enter image description here

我正在寻找的表看起来像在下面的图片。

enter image description here

我不知道我哪里做错了上面的代码,任何一个人请建议任何想法,如何删除的空间,显示在第一张图片。

非常感谢

答案

我已经解决了我的问题,通过修改下面的方法。

  private static Table RenderTableWithMergedHeader(List<string> rowsHeaderLabel, string mergedColumnName, List<string> columnsHeaderLabel, List<List<string>> contentData)
  
        var table = new Table();
        var tableProperties = RenderTableProperties();
        table.AppendChild(tableProperties);

        TableRow tableHeaderRowA = new TableRow();
        TableRow tableHeaderRowB = new TableRow();

        foreach (var colName in rowsHeaderLabel)
        
            tableHeaderRowA.Append(RenderTableHeaderCell(colName, 1, MergedCellValues.Restart));
            tableHeaderRowB.Append(RenderTableHeaderCell(null, 1, MergedCellValues.Continue));
        
        tableHeaderRowA.Append(RenderTableHeaderCell(mergedColumnName, columnsHeaderLabel.Count));

        foreach (var colName in columnsHeaderLabel)
        
            tableHeaderRowB.Append(RenderTableHeaderCell(colName));
        

        table.Append(tableHeaderRowA);
        table.Append(tableHeaderRowB);
        foreach (var rowData in contentData)
        
            var row = new TableRow();
            foreach (var cellData in rowData)
            
                row.Append(RenderContentCell(cellData));
            
            table.Append(row);
        

        return table;
  

以上是关于在使用openXML生成word文档时,试图合并表格单元格。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用openxml C#在word文档中添加形状?

OpenXML - 将书签应​​用于 Word 文档中的段落

使用 OpenXML SDK 2.0 将页眉和页脚添加到现有的空 word 文档

使用OpenXML操作Office文档

在Word2007中,如何通过Range.InsertXML方法将一个OpenXML插入到空白文档中?

Word/WPS 利用邮件合并批量生成文档