2013-09-10 52 views
15

私はファンシーEPPlusライブラリを使用してExcelファイルを作成し、ダウンロードしてユーザーに出力します。次の方法では、コードを最小限にするためにいくつかのテストデータを使用していますが、後でデータベースに接続するために使用しているコードを追加します。今すぐすべてのファイルをダウンロードできますが、ファイルを開くときに、Excelが有効なファイルではないと壊れている可能性があります。私がファイルを見に行くと、それは0KB大きいと言います。だから私の質問は、どこが間違っているのか?私はそれがMemoryStreamと仮定しています。前にストリームで多くの作業をしていないので、私はここで何を使うべきか正確にはわからない。どんな助けもありがとう!ASP.NET MVC EPPlus Excelファイルをダウンロード

[Authorize] 
public ActionResult Download_PERS936AB() 
{ 
    ExcelPackage pck = new ExcelPackage(); 
    var ws = pck.Workbook.Worksheets.Add("Sample1"); 

    ws.Cells["A1"].Value = "Sample 1"; 
    ws.Cells["A1"].Style.Font.Bold = true; 
    var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect); 
    shape.SetPosition(50, 200); 
    shape.SetSize(200, 100); 
    shape.Text = "Sample 1 text text text"; 

    var memorystream = new MemoryStream(); 
    pck.SaveAs(memorystream); 
    return new FileStreamResult(memorystream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "PERS936AB.xlsx" }; 
} 

答えて

35

ここで私が使用しているものだ - 私は今、数ヶ月のためにこれを使用してきたし、問題がなかった:

public ActionResult ChargeSummaryData(ChargeSummaryRptParams rptParams) 
    { 
     var fileDownloadName = "sample.xlsx"; 
     var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 

     var package = CreatePivotTable(rptParams); 

     var fileStream = new MemoryStream(); 
     package.SaveAs(fileStream); 
     fileStream.Position = 0; 

     var fsr = new FileStreamResult(fileStream, contentType); 
     fsr.FileDownloadName = fileDownloadName; 

     return fsr; 
    } 

私は右のバット気づいたことの一つは、あなたということですファイルストリームの位置を0にリセットしないでください。

+0

ポジションを入れて本当にうまくいきました。ありがとう! – Chiggins

関連する問題