2012-12-02 17 views

答えて

114
using (ExcelPackage pck = new ExcelPackage(newFile)) 
{ 
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts"); 
    ws.Cells["A1"].LoadFromDataTable(dataTable, true); 
    pck.Save(); 
} 

これはあなたのためのトリックを行う必要があります。フィールドがintとして定義されている場合EPPlusは、列を数値または浮動小数点数に正しくキャストします。あなたの代わりにResponseのブラウザの使用HttpContext.Current.Responseにexcelsheetをダウンロードするためのブラウザの応答

Response.Clear(); 
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("Logs.xlsx", System.Text.Encoding.UTF8)); 

using (ExcelPackage pck = new ExcelPackage()) 
{ 
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Logs"); 
    ws.Cells["A1"].LoadFromDataTable(dt, true);     
    var ms = new System.IO.MemoryStream(); 
    pck.SaveAs(ms); 
    ms.WriteTo(Response.OutputStream);       
} 
+1

方法エクスポート中にdatatableのヘッダをフォーマットする –

+0

はい。これは正常に動作しています。しかし、データテーブルにlakhsの行が含まれている場合。これは動作していません。 – thevan

+1

その特定のケースの質問を開いてください。 – wegginho

10

とそうでない場合は、あなたが取得するResponse is not available in this context.はerror.Hereは私のコードです

public void ExporttoExcel(DataTable table, string filename) 
     { 
      HttpContext.Current.Response.Clear(); 
      HttpContext.Current.Response.ClearContent(); 
      HttpContext.Current.Response.ClearHeaders(); 
      HttpContext.Current.Response.Buffer = true; 
      HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; 
      HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=GridData.xlsx"); 


      using (ExcelPackage pack = new ExcelPackage()) 
      { 
       ExcelWorksheet ws = pack.Workbook.Worksheets.Add(filename); 
       ws.Cells["A1"].LoadFromDataTable(table, true); 
       var ms = new System.IO.MemoryStream(); 
       pack.SaveAs(ms); 
       ms.WriteTo(HttpContext.Current.Response.OutputStream); 
      } 

      HttpContext.Current.Response.Flush(); 
      HttpContext.Current.Response.End(); 

     } 
+0

スニペットありがとう! "Logs.xlsx"をurlencodeする必要はありません:) –

2

にダウンロードしたい場合は

+0

'System.Web.HttpContextBase'を取得している人には、 'Current'の定義が含まれていません:HttpContext.Currentへの参照を取得するには、置き換えが必要です HttpContext.Current System.Web.HttpContext.Current http://stackoverflow.com/questions/19431820/system-web-httpcontextbase-does-not-contain-a-definition-for-current-mvc-4-wi –