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

时间:2009-03-12 22:23:12

标签: c# excel .net-3.5

我正在通过Linq to SQL生成报告并在网站上显示。

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

有关如何将其另存为Excel或.csv的任何想法?

.NET 3.5 / C#

编辑:

Gridview hack完美无缺。如果您在页面上使用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>

我还找到了Library to Generate Excel XML Workbooks in .NET,但它并不像公认的解决方案那么简单。

2 个答案:

答案 0 :(得分:5)

转到this article on LINQtoCSV on Code Project。然后打开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&gt; .WriteToFile(路径)扩展方法,但我没有在这台机器上。

答案 1 :(得分:2)

gridview hack是我找到的最简单的解决方案。