2017-02-09 106 views
0

最近我发现自己需要将一个大型C#数据表粘贴到Excel中,并且很高兴看到SimpleOOXML(https://simpleooxml.codeplex.com)扩展的WorksheetWriter.PasteDataTable()函数,它正是如此。使用OpenXML格式化Excel 2013范围

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

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

编辑

为了澄清,我检查的OpenXML的MSDN文档,但无法找到一个方法来做到以下几点:

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

Excel Format As Table

Keep existing Headers

+0

是的,它可能是,给它一个与去:HTTPS ://msdn.microsoft.com/en-us/library/office/bb448854.aspx –

+0

也http://stackoverflow.com/help/mcve –

+0

@杰克米勒感谢您的答复,我更新了描述,你可以请给它看看? – Themos

回答

1

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

enter image description here

打开Excel文件在open xml productivity tool表明,表部分需求待创建:

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