生成Excel文件,然后在ASP.NET MVC应用程序中从浏览器下载

本文关键字:应用程序 MVC 下载 浏览器 NET ASP 文件 Excel 然后 生成 | 更新日期: 2023-09-27 18:21:43

因此,我的应用程序上有这个页面,用户可以在其中下载一个渲染视图的"硬拷贝",该视图表示技能及其对项目中角色的要求,显示角色上任何人对所述技能的实现情况。

我有处理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文件的方式返回生成的文件

生成Excel文件,然后在ASP.NET MVC应用程序中从浏览器下载

如果您使用DocumentFormat.OpenXml之类的东西,您可以在内存流中创建Excel文件,然后使用FileStreamResult:返回流

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