将LINQ对象列表导出到Excel文件

从Web应用程序中,是否有一种简单的方法将LINQ对象列表导出到Excel文件中? 有没有好的图书馆可以做到这一点?

因此,在指定Excel中,您正在提交一个行/列范例(而不是xml)。 所以你必须指定属性如何映射到列。

除此之外,您还可以使用Ole DB提供程序写入Excel文件。 循环你的对象,使用一个stringbuilder为每个对象生成一个INSERT语句,然后在你的工作表上执行这个语句。 就像蛋糕一样容易

这是Excel导出我基于上面的VBvideo的链接结束了。 它接受任何对象列表(它不包括entity framework对象上的导航属性和集合),并将它们导出到Excel。 它在约4秒内输出约35Klogging。

public void ExportToExcel<T>(List<T> list) { int columnCount = 0; DateTime StartTime = DateTime.Now; StringBuilder rowData = new StringBuilder(); PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); rowData.Append("<Row ss:StyleID=\"s62\">"); foreach (PropertyInfo p in properties) { if (p.PropertyType.Name != "EntityCollection`1" && p.PropertyType.Name != "EntityReference`1" && p.PropertyType.Name != p.Name) { columnCount++; rowData.Append("<Cell><Data ss:Type=\"String\">" + p.Name + "</Data></Cell>"); } else break; } rowData.Append("</Row>"); foreach (T item in list) { rowData.Append("<Row>"); for (int x = 0; x < columnCount; x++) //each (PropertyInfo p in properties) { object o = properties[x].GetValue(item, null); string value = o == null ? "" : o.ToString(); rowData.Append("<Cell><Data ss:Type=\"String\">" + value + "</Data></Cell>"); } rowData.Append("</Row>"); } var sheet = @"<?xml version=""1.0""?> <?mso-application progid=""Excel.Sheet""?> <Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"" xmlns:o=""urn:schemas-microsoft-com:office:office"" xmlns:x=""urn:schemas-microsoft-com:office:excel"" xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"" xmlns:html=""http://www.w3.org/TR/REC-html40""> <DocumentProperties xmlns=""urn:schemas-microsoft-com:office:office""> <Author>MSADMIN</Author> <LastAuthor>MSADMIN</LastAuthor> <Created>2011-07-12T23:40:11Z</Created> <Company>Microsoft</Company> <Version>12.00</Version> </DocumentProperties> <ExcelWorkbook xmlns=""urn:schemas-microsoft-com:office:excel""> <WindowHeight>6600</WindowHeight> <WindowWidth>12255</WindowWidth> <WindowTopX>0</WindowTopX> <WindowTopY>60</WindowTopY> <ProtectStructure>False</ProtectStructure> <ProtectWindows>False</ProtectWindows> </ExcelWorkbook> <Styles> <Style ss:ID=""Default"" ss:Name=""Normal""> <Alignment ss:Vertical=""Bottom""/> <Borders/> <Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""/> <Interior/> <NumberFormat/> <Protection/> </Style> <Style ss:ID=""s62""> <Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000"" ss:Bold=""1""/> </Style> </Styles> <Worksheet ss:Name=""Sheet1""> <Table ss:ExpandedColumnCount=""" + (properties.Count() + 1) + @""" ss:ExpandedRowCount=""" + (list.Count() + 1) + @""" x:FullColumns=""1"" x:FullRows=""1"" ss:DefaultRowHeight=""15""> " + rowData.ToString() +@" </Table> <WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel""> <PageSetup> <Header x:Margin=""0.3""/> <Footer x:Margin=""0.3""/> <PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/> </PageSetup> <Print> <ValidPrinterInfo/> <HorizontalResolution>300</HorizontalResolution> <VerticalResolution>300</VerticalResolution> </Print> <Selected/> <Panes> <Pane> <Number>3</Number> <ActiveCol>2</ActiveCol> </Pane> </Panes> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name=""Sheet2""> <Table ss:ExpandedColumnCount=""1"" ss:ExpandedRowCount=""1"" x:FullColumns=""1"" x:FullRows=""1"" ss:DefaultRowHeight=""15""> </Table> <WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel""> <PageSetup> <Header x:Margin=""0.3""/> <Footer x:Margin=""0.3""/> <PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/> </PageSetup> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name=""Sheet3""> <Table ss:ExpandedColumnCount=""1"" ss:ExpandedRowCount=""1"" x:FullColumns=""1"" x:FullRows=""1"" ss:DefaultRowHeight=""15""> </Table> <WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel""> <PageSetup> <Header x:Margin=""0.3""/> <Footer x:Margin=""0.3""/> <PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/> </PageSetup> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> </Workbook>"; System.Diagnostics.Debug.Print(StartTime.ToString() + " - " + DateTime.Now); System.Diagnostics.Debug.Print((DateTime.Now - StartTime).ToString()); string attachment = "attachment; filename=Report.xml"; HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.AddHeader("content-disposition", attachment); HttpContext.Current.Response.Write(sheet); HttpContext.Current.Response.ContentType = "application/ms-excel"; HttpContext.Current.Response.End(); } 

查看从ASP.Net链接的VB团队的video,Beth Massi实际上做了一个非常相似的演示,可以做你想做的事情:

http://www.asp.net/linq/videos/how-do-i-create-excel-spreadsheets-using-linq-to-xml

你可能会发现在同一系列中的其他人有用,他们在这里约4/5:

http://www.asp.net/web-forms/data

还有一个名为Linq-To-Excel的项目在这里 – http://code.google.com/p/linqtoexcel/

或者你可以使用OpenXML库来做这样的事情,这里是一个这样的例子 – http://msdn.microsoft.com/en-us/library/bb508943(v=office.12).aspx

Excel也可以直接打开XML文件,所以您可以使用XML序列化或其他方法创buildXML输出,然后在Excel中打开它。