所以我在我的应用程序上有这个页面,用户可以下载渲染视图的“硬拷贝”,它代表技能及其对项目中角色的要求,显示任何人对角色的所述技能的实现
我有使用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 :(得分:1)
如果您使用DocumentFormat.OpenXml之类的内容,则可以在内存流中创建Excel文件,然后使用FileStreamResult返回流:
var theStreamContainingSpreadsheet = CreateSpreadsheet();
theStreamContainingSpreadsheet.Position = 0;
return new FileStreamResult(theStreamContainingSpreadsheet, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{FileDownloadName = "Export.xlsx"};