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

C# 将LINQ对象列表导出到Excel文件,c#,excel,webforms,export,C#,Excel,Webforms,Export,从web应用程序中,是否有简单的方法将LINQ对象列表导出到Excel文件?有没有好的图书馆可以做到这一点 因此,在指定Excel时,您将使用行/列范式(例如,与xml相反)。因此,您必须指定属性如何映射到列 除此之外,您还可以使用写入Excel文件。循环遍历对象,使用stringbuilder为每个对象生成INSERT语句,并对工作表执行该语句。简单极了。查看VB团队从ASP.Net链接的视频,Beth Massi实际上做了一个非常类似的演示,可以做你想要的: 您可能会发现同一系列中的其他内

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

因此,在指定Excel时,您将使用行/列范式(例如,与xml相反)。因此,您必须指定属性如何映射到列


除此之外,您还可以使用写入Excel文件。循环遍历对象,使用stringbuilder为每个对象生成INSERT语句,并对工作表执行该语句。简单极了。

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

您可能会发现同一系列中的其他内容很有用,它们在本页下方大约4/5处:

这里还有一个名为Linq To Excel的项目-

或者你可以使用OpenXML库来做这类事情,这里有一个这样的例子-


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

这是我根据上面VB视频的链接导出的Excel。它获取任何对象列表(不包括实体框架对象上的导航属性和集合)并将其导出到Excel。它在约4秒钟内导出约35K条记录

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();

    }
public void ExportToExcel(列表)
{
int columnCount=0;
DateTime StartTime=DateTime.Now;
StringBuilder rowData=新建StringBuilder();
PropertyInfo[]properties=typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
rowData.Append(“”);
foreach(PropertyInfo p in properties)
{
if(p.PropertyType.Name!=“EntityCollection`1”和&p.PropertyType.Name!=“EntityReference`1”和&p.PropertyType.Name!=p.Name)
{
columnCount++;
rowData.Append(“+p.Name+”);
}
其他的
打破
}
rowData.Append(“”);
foreach(列表中的T项)
{                
rowData.Append(“”);
for(int x=0;x
我想您可能需要使用ado.net,请查看一些类似的问题。干杯我希望我能加上你