【问题标题】:Format Excel 2013 Range as Table using OpenXML使用 OpenXML 将 Excel 2013 范围格式化为表格
【发布时间】:2017-02-09 08:54:03
【问题描述】:

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

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

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

编辑

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

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

【问题讨论】:

  • @JackMiller 感谢您的回复,我更新了描述,您可以看看吗?
  • 您是否使用 open xml 生产力工具打开了文件?并检查了反射代码选项?

标签: c# excel openxml


【解决方案1】:

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

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

然后在main中调用:

            TableDefinitionPart tableDefinitionPart1 =    worksheetPart1.AddNewPart<TableDefinitionPart>("rId1");
            GenerateTableDefinitionPart1Content(tableDefinitionPart1);

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

TableStyleInfo tableStyleInfo1 = new TableStyleInfo(){ Name = "TableStyleLight17", ShowFirstColumn = false, ShowLastColumn = false, ShowRowStripes = true, ShowColumnStripes = false };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多