从数据库导出到 Excel MVC



我是 mvc 和 c# 的新手,我一直在努力从 db 导出到 Excel。在视图中,我有一个表和一个按钮导出,它从主控制器调用函数:

<button type="submit" id="export" onclick="Export()">Export to Excel</button>
<script>
function Export() {
$.ajax({
type: "GET",
url: "/Home/ExportToExcel",
success: function(data) { },
error: function() {
ErrorMessage("Error occurred");
}
});
}
</script>

这是家庭控制器的功能:

public void ExportToExcel()
{
var y = (from w in db.OrderProducts
group w by w.IdOrder into TotaledOrder
select new OrderP
{
IdOrder = TotaledOrder.Key,
price = TotaledOrder.Sum(s => s.price)
}).ToList();
var result = (from o in db.Orders
join h in db.Clients on o.IdClient equals h.IdClient
select new OrderRep
{
IDOrder = o.IdOrder,
Data = o.Date,
Sum = 0,
Name = h.name,
Adress = h.adresa
}).ToList();
foreach (var order in result)
{
order.Sum = y.Where(q => q.IdOrder == order.IDOrder).Sum(q => q.price);
}
string filename = "Orders.xls";
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = result;
dgGrid.DataBind();
dgGrid.RenderControl(hw);
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
Response.Write(tw.ToString());
Response.End();
}

我没有错误,但是当我单击按钮时,未创建Excel文件。如果您能指出我正确的方向,我将不胜感激。

您无法通过 AJAX 下载文件 - 接收的数据最终位于页面内的 JavaScript 变量中,而不是用户磁盘上的文件中。

您需要使用常规的 HTTP 请求。在新窗口中打开的超链接将完成这项工作(而不是您的按钮(:

<a href="@Url.Action("ExportToExcel", "Home")" target="_blank">Export to Excel</a>

:注:还值得指出的是,您的操作方法实际上创建一个 HTML 字符串,然后以".xls"扩展名将其发送以供下载,以给人的印象是它是一个 Excel 文件,而事实并非如此。Excel当然可以打开和读取HTML文档,但它不是真正的Excel文件,您无法用本机Excel文件完成所有可以完成的事情。您的数据可能会在 Web 浏览器中显示得同样好。

最新更新