简体   繁体   中英

trying to merge table cells while generating a word document using openXML

I am trying to generate a word document with the table created like as mentioned in image with the below code that will merge cells from fourth column to make table.

Somehow there is an extra space is being added when i merged the cells like as shown in image.

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);

and this is code for RenderTableWithMergedHeader method

 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;
    }

and this is code for RenderTableHeaderCell method

    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;
    }

and this is generating the table like in the image below

在此处输入图像描述

and i am looking for the table looks like in the below image

在此处输入图像描述

I am not sure where i am doing wrong with the above code, Could any one please suggest any ideas on how to remove that space that was showing in first image.

many thanks in advance

I have resolved my problem by modifying the below method

  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;
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM