我有一个剃刀视图,我想导出到excel。
我在我看来使用这一行来做到这一点:
Response.AddHeader("Content-Type", "application/vnd.ms-excel");
当我评论这一行时,我可以看到具有我想要的风格的视图。当我取消注释并要求它时,浏览器会要求我按照它应该下载Excel文件。但问题是当我打开文件时,我收到此错误
Missing file c:\scrips\excel.css
这是我用来显示页面的CSS。
那么如何使文件以其布局保存?
答案 0 :(得分:16)
您可能需要创建单独的“导出”视图。这意味着,它自己的控制器Action
和View
本身。视图需要与生成的Excel文件的外观相同。它必须是独立的。没有布局,以及保存css的样式标记(没有样式/脚本/等的链接)。
这是一个简单的例子:
假设您有一个名为“Home”的Controller
。
HomeController
内的行动:
public ActionResult Export()
{
Response.AddHeader("Content-Type", "application/vnd.ms-excel");
return View();
}
查看(Home \ Export.cshtml):
@{
Layout = "";
}
<style type="text/css">
body {font-family: Tahoma;}
h2 {color:red}
table {border:1px solid black; border-spacing:0}
td {color:green; font-size:.8em; padding:5px}
.heading {background:#ccc}
</style>
<h2>Test</h2>
<table>
<tr class="heading">
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td>Test1</td>
<td>15</td>
</tr>
<tr>
<td>Test2</td>
<td>16</td>
</tr>
</table>
加载此页面后,会弹出一个下载框,并在excel中以适当的样式打开。
答案 1 :(得分:1)
您的控制器应该有一个实际上为Excel文件提供服务的操作,而不是包含Excel文件的网页。控制器动作应该是类似的。
public ActionResult Export()
{
byte[] doc = GetExcelFileSomehow();
var file = File(doc, "application/vnd.ms-excel");
file.FileDownloadName = "MyFile.xlsx";
return file;
}