首页 > 解决方案 > 使用 C# 创建 OpenXML 表

问题描述

我在我的 excel 文件中制作实际表格时遇到问题。该文件已创建并且所有数据都在那里,但是当我打开文件时,表定义不存在。我正在使用这种方法尝试将数据范围转换为表格。

    private static Table CreateTable(string tableRange, IEnumerable<string> headers)
    {
        var table = new Table {
            Id = 1,
            Name = "Table 1",
            DisplayName = "Table 1",
            Reference = tableRange,
            TotalsRowShown = false,
            HeaderRowFormatId = 0
        };
        table.AddNamespaceDeclaration("x", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");

        UInt32Value i = 1;

        var columns = new TableColumns();
        foreach (var header in headers) {
            columns.Append(new TableColumn {
                Id = i++,
                Name = header
            });
        }

        var style = new TableStyleInfo {
            Name = "TableStyleMedium2",
            ShowFirstColumn = false,
            ShowLastColumn = false,
            ShowRowStripes = true,
            ShowColumnStripes = false
        };

        table.Append(new AutoFilter { Reference = tableRange });
        table.Append(columns);
        table.Append(style);

        return table;
    }

tableRange变量是一个简单的 Excel 范围字符串,例如“A1:D27”。我正在尝试将其添加到工作表中,如下所示:

var tableDefinitionPart = worksheetPart.AddNewPart<TableDefinitionPart>();
tableDefinitionPart.Table = CreateTable(tableRange, headers);

打开文件时我没有收到任何错误。

如果我使用 XML Productivity 工具打开文件并单击工作表中的“x:table (Table)”部分,我会看到:

<x:table xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" id="1" name="Table 1" displayName="Table 1" ref="A1:Z2" totalsRowShown="0" headerRowDxfId="0">
  <x:autoFilter ref="A1:Z2" />
  <x:tableColumns>
    <x:tableColumn id="1" name="Lab Name" />
    ....
    <x:tableColumn id="26" name="Description" />
  </x:tableColumns>
  <x:tableStyleInfo name="TableStyleMedium2" showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0" />
</x:table>

所以看起来我正在将一些东西正确地放入文件中。就 Excel 而言,它不是一个实际的“表格”。

标签: openxmlopenxml-sdkopenxml-table

解决方案


推荐阅读