2013-07-09 48 views
0

因此,我在我的應用程序中有一個頁面,用戶可以下載呈現視圖的「硬拷貝」,它表示技能及其對角色的要求在一個項目中,顯示任何人在角色上完成上述技能。生成一個Excel文件,然後從ASP.NET MVC應用程序中的瀏覽器下載

我有一個csv文件的功能,因爲我可以使用StringBuilder創建逗號分隔文件。

但是,在接近Excel的方法之前,我想要一些光格式,我意識到我不能以同樣的方式實現。

我以前使用Interop來生成Excel文件,但是如何才能創建一個可以在生成後下載的文件?

這裏是工作的代碼生成並返回一個CSV文件:

public ActionResult DownloadSQEPToCSV(int projectID) 
{ 
    //source my data 

    StringBuilder sBuilder = new StringBuilder(); 

    sBuilder.Append("SQEPMatrix, For Project," + data.First().Project.ContractNumber); 

    foreach (var role in data) 
    { 
     sBuilder.Append("\r\nRole:," + role.First().Title.Name); 
     sBuilder.Append("\r\nSkill,Requirement"); 
     foreach (var person in role.Distinct(uCom)) 
     { 
      sBuilder.Append("," + person.User.UserDetail.Name); 
     } 
     foreach (var skill in role.Distinct(uCom)) 
     { 
      //More stuff to generate what I want 
     } 
     sBuilder.Append("\r\n"); 
    } 

    //Attach file to the header 
    Response.Clear(); 
    Response.AddHeader("Content-Disposition", "attachment;filename=SQEPMatrix for " + data.First().Project.ContractNumber + ".csv"); 
    Response.ContentType = "text/csv"; 
    Response.Write(sBuilder); 
    Response.End(); 

    return SetTitleAndID("SQEP","dl_sqep_csv"); 
} 

此代碼是由下面的腳本調用:

function download(id) { 
    window.location.href = '../../Project/DownloadSQEPExcel?projectID=' + id; 
} 

所以我的問題是我怎麼能生成一個Excel電子表格,並以類似於我如何返回我的.csv文件的方式返回生成的文件?

+0

你必須產生Excel的第一個文件,就保存它本地驅動器,然後將其作爲'FileResult'提供。 http://stackoverflow.com/a/1187270/1324019 – Mansfield

回答

1

如果你使用類似DocumentFormat.OpenXml您可以在內存流創建Excel文件,然後使用FileStreamResult返回流:

var theStreamContainingSpreadsheet = CreateSpreadsheet(); 
theStreamContainingSpreadsheet.Position = 0; 
return new FileStreamResult(theStreamContainingSpreadsheet, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 
        {FileDownloadName = "Export.xlsx"}; 
+0

我可以推薦在C#中使用xls文件generartion的精美庫:http://npoi.codeplex.com/ –

相關問題