使用OpenXML将Excel 2013范围格式化为表格

The*_*mos 1 c# excel openxml

最近,我发现自己需要将大型C#DataTable粘贴到Excel中,并且很高兴遇到SimpleOOXML(https://simpleooxml.codeplex.com)扩展的WorksheetWriter.PasteDataTable()函数,它确实做到了这一点。

不幸的是,它并没有像人们期望的那样自动将粘贴的DataTable转换为具有自动列宽和过滤功能的“表格格式”,而是只允许我指定单独的样式(例如边框,背景颜色等)。

如果有人知道如何使用SimpleOOXML(我在他们的论坛中找不到相关的东西),那将是惊人的,但是如果这不可能,我想知道是否可以使用传统的OpenXML来完成?

编辑

为了澄清起见,我检查了OpenXML的MSDN文档,但找不到执行以下操作的方法:

以编程方式使用OpenXML使用样式“ Table Style Light 9”将特定范围(G7:I9)格式化为表格,并保留现有的标题。

Excel表格格式

保留现有标题

小智 5

使用表中的简单数据创建一个虚拟Excel文件:

在此处输入图片说明

打开的xml生产率工具打开 Excel文件显示需要创建表部件:

 private void GenerateTableDefinitionPart1Content(TableDefinitionPart tableDefinitionPart1)
    {
        Table table1 = new Table(){ Id = (UInt32Value)1U, Name = "Table1", DisplayName = "Table1", Reference = "A1:D2", TotalsRowShown = false };
        AutoFilter autoFilter1 = new AutoFilter(){ Reference = "A1:D2" };

        TableColumns tableColumns1 = new TableColumns(){ Count = (UInt32Value)4U };
        TableColumn tableColumn1 = new TableColumn(){ Id = (UInt32Value)1U, Name = "1" };
        TableColumn tableColumn2 = new TableColumn(){ Id = (UInt32Value)2U, Name = "2" };
        TableColumn tableColumn3 = new TableColumn(){ Id = (UInt32Value)3U, Name = "3" };
        TableColumn tableColumn4 = new TableColumn(){ Id = (UInt32Value)4U, Name = "4" };

        tableColumns1.Append(tableColumn1);
        tableColumns1.Append(tableColumn2);
        tableColumns1.Append(tableColumn3);
        tableColumns1.Append(tableColumn4);
        TableStyleInfo tableStyleInfo1 = new TableStyleInfo(){ Name = "TableStyleLight17", ShowFirstColumn = false, ShowLastColumn = false, ShowRowStripes = true, ShowColumnStripes = false };

        table1.Append(autoFilter1);
        table1.Append(tableColumns1);
        table1.Append(tableStyleInfo1);

        tableDefinitionPart1.Table = table1;
    }
Run Code Online (Sandbox Code Playgroud)

然后在main中调用:

            TableDefinitionPart tableDefinitionPart1 =    worksheetPart1.AddNewPart<TableDefinitionPart>("rId1");
            GenerateTableDefinitionPart1Content(tableDefinitionPart1);
Run Code Online (Sandbox Code Playgroud)

要为您的表选择正确的样式,请更改TableStyleInfo Name属性:

TableStyleInfo tableStyleInfo1 = new TableStyleInfo(){ Name = "TableStyleLight17", ShowFirstColumn = false, ShowLastColumn = false, ShowRowStripes = true, ShowColumnStripes = false };
Run Code Online (Sandbox Code Playgroud)