如何在不使用第三方控件的情况下使用mvc将数据导出到Excel

时间:2010-09-29 12:02:38

标签: asp.net-mvc

我想在asp.net中以.xls和.xlsx格式将数据导出为ex​​cel MVC不使用任何第三方控件。

我尝试使用以下代码,但它不支持.xlsx格式。

Response.AddHeader("Content-Disposition", "attachment; 
filename=test.xlsx");
Response.ContentType = "application/ms-excel";
Response.Write(sw.ToString());
Response.End();

请给我解决方案。

3 个答案:

答案 0 :(得分:2)

对于你的台词也许这项工作,但我不确定你想做什么。

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("Content-Disposition", "attachment; filename=test.xlsx")
Response.Write(sw.ToString())
Response.End()

答案 1 :(得分:1)

您应该使用Open XML SDK 2.0来完成该任务,因为它是Microsoft支持的创建Office文档的方式。

另一种hacky方式是创建局部视图并将html导出到Excel。这将给出数据的只读视图,因为它不是正确的excel格式,但是当你不想花时间编写Open XML时就可以工作。

.xlsx的正确MIMEConentType为"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",而.xls为"application/vnd.ms-excel"

答案 2 :(得分:1)

除了@amurra描述的Open XML SDK 2.0之外,您还可以尝试OpenExcel。这是一个很棒的图书馆,速度很快。

一个快速而又脏的选项是将所有数据放在一个表中,并将该表只写入您正在尝试的标题的响应流,例如:

Response.AddHeader("Content-Disposition", "attachment; filename=test.xlsx"); 
Response.ContentType = "application/ms-excel"; 
 //NOW WRITE TABLE
Response.Write("<table><tr><td>SrNo</td></tr><tr><td>1</td></tr></table>"); 
Response.End();

我没有使用过这个hack,但已经看到它在某些应用程序中使用过。打开时,Excel会向用户发出警告,指出数据不是excel格式,而是成功打开它。