[ASP.NET] CSV ファイルをダウンロードさせる。

ASP.NET で CSV ファイルを作成してダウンロードさせるメモ。
// 適当な CSV フォーマット
var csvContents = new List() { "名前,ポイント" };
csvContents.Add("\"Noah\",\"4,090\"");
csvContents.Add("\"Liam\",\"90\"");
csvContents.Add("\"Sophia\",\"4,011\"");
csvContents.Add("\"Emma\",\"9,801\"");
var outputPath = @"d:\CsvSample.csv";

// ファイルがなくても OK
File.Delete(outputPath);
using (var writer = new StreamWriter(outputPath, true, Encoding.Default))
{
    // TODO: 例外処理を書く
    writer.WriteLine(string.Join("\r\n", csvContents));
}

// ダウンロード
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=CsvSample.csv");
Response.Flush();
Response.WriteFile(outputPath);
Response.End();
VB.NET の場合は以下のとおり。
'適当な CSV フォーマット
Dim csvContents = New List(Of String)(New String() {"名前,ポイント"})
csvContents.Add("""Noah"",""4,090""")
csvContents.Add("""Liam"",""90""")
csvContents.Add("""Sophia"",""4,011""")
csvContents.Add("""Emma"",""9,801""")

Dim outputPath = "d:\\CsvSample.csv"
' ファイルがなくても OK
File.Delete(outputPath)

Using writer As New StreamWriter(outputPath, False, Encoding.Default)
    writer.WriteLine(String.Join(Environment.NewLine, csvContents))
End Using

' ダウンロード
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=CsvSampleVb.csv")
Response.Flush()
Response.WriteFile(outputPath)
Response.End()
出力された CSV ファイルを Excel で開いた場合。

このブログの人気の投稿

コピーした行の挿入が表示されない時はフィルタされていないかチェック

Excel で入力した文字に勝手に取り消し線が入る