保存IList <T>或IQueryable <T>到Excel – C#

我通过Linq生成一个报告到SQL,并显示在网站上。

我需要将报告保存在MS Excel(或.csv)中,并通过电子邮件发送给用户。

任何想法如何将其保存为Excel或.csv?

.NET 3.5 / C#

编辑:

Gridview黑客工作完美。 如果您在页面上使用AJAX,请确保将PostBaseTrigger添加到更新面板以导致完全POSTBACK,否则将无法正常工作。

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Button ID="Button1" runat="server" Text="Export Grid" onclick="Button1_Click" /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="Button1" /> </Triggers> </asp:UpdatePanel> 

我还发现了一个用.NET生成Excel XML工作簿的库 ,但是它并不像接受的解决scheme那么简单。

这GridView黑客是我find的最简单的解决scheme。

在Code Project上的LINQtoCSV上阅读这篇文章 。 然后在VS中打开源代码,在FieldMapper.cs中注释掉第201行,修复一个破坏列顺序的bug:

 //Array.Sort(m_IndexToInfo); 

重新编译,你很好走。

(我从文章的评论中发现)

然后使用:

 CsvFileDescription outputFileDescription = new CsvFileDescription { SeparatorChar = '\t', // tab delimited FirstLineHasColumnNames = false // no column names in first record }; CsvContext cc = new CsvContext(); cc.Write( YOUR_IQUERYABLE_RESULT_HERE, "filename.csv", outputFileDescription); 

我做了一个简化的IQueryable <T > .WriteToFile(path)扩展方法,但我没有在这台机器上。