Asp.net mvc 3 使用razor将视图导出到excel而不丢失样式
我有一个razor视图,我想将其导出到excel 在我看来,我是在用这一行来做这件事:Asp.net mvc 3 使用razor将视图导出到excel而不丢失样式,asp.net-mvc-3,excel,razor,Asp.net Mvc 3,Excel,Razor,我有一个razor视图,我想将其导出到excel 在我看来,我是在用这一行来做这件事: Response.AddHeader("Content-Type", "application/vnd.ms-excel"); 当我注释这行时,我可以看到具有我想要的样式的视图。当我取消对它的注释并请求它时,浏览器会要求我像应该的那样下载Excel文件。但问题是,当我打开文件时,我得到了这个错误 Missing file c:\scrips\excel.css 这是我用来显示页面的css 那么,如
Response.AddHeader("Content-Type", "application/vnd.ms-excel");
当我注释这行时,我可以看到具有我想要的样式的视图。当我取消对它的注释并请求它时,浏览器会要求我像应该的那样下载Excel文件。但问题是,当我打开文件时,我得到了这个错误
Missing file c:\scrips\excel.css
这是我用来显示页面的css
那么,如何使文件与其布局一起保存?您可能需要创建一个单独的“导出”视图。这意味着,它有自己的控制器
操作
,以及视图
本身。视图需要与您希望生成的Excel文件的外观相同。它必须是独立的。没有布局,并且有一个样式标签,其中包含css(没有样式/脚本/等的链接)
下面是一个简单的例子:
假设您有一个名为“Home”的控制器
操作内部家庭控制器
:
public ActionResult Export()
{
Response.AddHeader("Content-Type", "application/vnd.ms-excel");
return View();
}
查看(Home\Export.cshtml):
@{
布局=”;
}
正文{字体系列:Tahoma;}
h2{颜色:红色}
表{边框:1px纯黑色;边框间距:0}
td{颜色:绿色;字体大小:.8em;填充:5px}
.标题{背景:#ccc}
试验
名称
年龄
测试1
15
测试2
16
加载此页面后,它将弹出一个下载框,并以适当的样式在excel中打开。您的控制器应该有一个实际服务于excel文件的操作,而不是包含excel文件的网页。控制器操作应该类似于
public ActionResult Export()
{
byte[] doc = GetExcelFileSomehow();
var file = File(doc, "application/vnd.ms-excel");
file.FileDownloadName = "MyFile.xlsx";
return file;
}
你要么需要提供一个实际的Excel文件,要么只是发送一个HTML表格,然后在HTML中包含样式,而不是链接它们。但在我看来,我正在从控制器收集数据并对它们进行统计。我可以对Excel文件做同样的操作吗?@the_ruby_racer是的,使用一些像EPPlus这样的库来动态创建Excel文件。
public ActionResult Export()
{
byte[] doc = GetExcelFileSomehow();
var file = File(doc, "application/vnd.ms-excel");
file.FileDownloadName = "MyFile.xlsx";
return file;
}