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

4

最近我需要将一个大型的C# DataTable粘贴到Excel中,很高兴发现SimpleOOXML (https://simpleooxml.codeplex.com) 扩展的WorksheetWriter.PasteDataTable()函数可以完美地实现。

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

如果有人知道如何使用SimpleOOXML实现这一点,那就太棒了(我在他们的讨论论坛中找不到相关信息),但是如果不可能,我想知道是否可以使用传统的OpenXML来实现?

编辑

为了澄清,我查看了OpenXML的MSDN文档,但找不到以下操作的方法:

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

Excel Format As Table

Keep existing Headers


@JackMiller 谢谢您的回复,我已经更新了描述,您可以看一下吗? - Themos
你是否使用了Open XML生产力工具打开了文件?并勾选了反射代码选项? - Jack Miller
1个回答

7
创建一个带有简单数据表格的虚拟Excel文件:

enter image description here

打开open xml productivity tool中的Excel文件,显示需要创建一个Table部分:

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

然后在主函数中调用:
            TableDefinitionPart tableDefinitionPart1 =    worksheetPart1.AddNewPart<TableDefinitionPart>("rId1");
            GenerateTableDefinitionPart1Content(tableDefinitionPart1);

为了选择适合你的表格样式,请更改TableStyleInfo Name属性:
TableStyleInfo tableStyleInfo1 = new TableStyleInfo(){ Name = "TableStyleLight17", ShowFirstColumn = false, ShowLastColumn = false, ShowRowStripes = true, ShowColumnStripes = false };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接