2009-03-12 11 views
3

私はLinq経由でSQLにレポートを生成し、Webサイトに表示しています。IList <T>またはIQueryable <T>をExcelに保存する - C#

レポートをMS Excel(または.csv)で保存し、ユーザーに電子メールで送信する必要があります。

Excelまたは.csvとして保存する方法に関するアイデアはありますか?

.NET 3.5/C#

EDIT:

Gridview hackは完璧に動作します。ページでAJAXを使用している場合は、PostBaseTriggerをUpdateパネルに追加してFULL 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も見つけましたが、それは受け入れられた解決策ほど簡単ではありません。

+0

詳細が参考になります。あなたは特定の問題を抱えていますか?どのようなエラーがありましたか? – Andy

答えて

2

このgridview hackは、私が見つけた最も簡単な解決策です。

+1

この方法は小さな結果セットでは効果的ですが、大きなものではLINQtoCSVが確実に優れたソリューションです。 – kwcto

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> .WriteToFile(パス)拡張メソッドを作ったが、私は持っていません。それはこのマシン上にある。

関連する問題