最近我发现自己需要将一个大的C#DataTable粘贴到Excel中,并且很高兴能够遇到SimpleOOXML(https://simpleooxml.codeplex.com)扩展的WorksheetWriter.PasteDataTable()函数,它正是这样做的。
不幸的是,它并没有自动将粘贴的DataTable转换为具有自动列宽和过滤功能的“格式为表”,正如人们所预料的那样,而是只允许我指定单独的样式(例如边框,背景颜色等)
如果有人知道如何使用SimpleOOXML(我在他们的讨论论坛中找不到相关内容)会很有意思,但如果不可能,我想知道是否可以使用传统的OpenXML来完成?< / p>
修改
为了澄清,我检查了OpenXML的MSDN文档,但找不到执行以下操作的方法:
以编程方式使用OpenXML格式化特定范围(G7:I9)作为表格,使用“表格样式灯9”样式,并保留现有标题。
答案 0 :(得分:4)
在表格中创建包含简单数据的虚拟Excel文件:
在open xml productivity tool中打开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;
}
然后在主要呼叫:
TableDefinitionPart tableDefinitionPart1 = worksheetPart1.AddNewPart<TableDefinitionPart>("rId1");
GenerateTableDefinitionPart1Content(tableDefinitionPart1);
要为表选择正确的样式,请更改TableStyleInfo Name属性:
TableStyleInfo tableStyleInfo1 = new TableStyleInfo(){ Name = "TableStyleLight17", ShowFirstColumn = false, ShowLastColumn = false, ShowRowStripes = true, ShowColumnStripes = false };