簡體   English   中英

嘗試在使用 openXML 生成 word 文檔時合並表格單元格

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

我正在嘗試生成一個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;
    }

這正在生成如下圖所示的表格

在此處輸入圖像描述

我正在尋找如下圖所示的表格

在此處輸入圖像描述

我不確定上面的代碼在哪里做錯了,任何人都可以提出有關如何刪除第一張圖像中顯示的空間的任何想法。

提前謝謝了

我通過修改以下方法解決了我的問題

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM