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

3
我正在使用Linq to SQL生成报告并在网站中显示它。
我需要将报告保存为MS Excel(或.csv文件)并通过电子邮件发送给用户。
有什么关于如何将其保存为Excel或.csv格式的想法吗?
使用.NET 3.5 / C#进行操作。
这个GridView hack非常有效。如果页面上使用了AJAX,请确保向您的Update Panel添加一个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工作簿的库,网址是http://www.carlosag.net/Tools/ExcelXmlWriter/,但它不像被接受的解决方案那么简单。

更多细节会很有帮助。您遇到了具体的问题吗?您收到了什么错误? - Andy
2个回答

5

请前往Code Project上关于LINQtoCSV的文章。然后在VS中打开源代码,并注释掉FieldMapper.cs文件中的第201行,以修复混乱列排序的错误。

//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)扩展方法,但是这台机器上没有它。


2

1
那种方式对于小结果集非常有效,但对于更大的结果集,LINQtoCSV绝对是更好的解决方案。 - kwcto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接