c# - 导出到 Excel 不起作用

标签 c# asp.net asp.net-mvc angularjs excel

使用 AngularJS 和 ASP.NET MVC 导出可下载的 Excel 内容时遇到一些问题。我的最终结果是没有任何反应。

示例 ASP.NET Controller 方法:

[HttpPost]
public ActionResult ExportToExcel(Model form)
{
    var gv = new GridView();
    gv.DataSource = _service.getSomeStuff(form);
    gv.DataBind();
    Response.ClearContent();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment; filename=Stuff.xls");
    Response.ContentType = "application/ms-excel";
    Response.Charset = "";
    var sw = new StringWriter();
    var htw = new HtmlTextWriter(sw);
    gv.RenderControl(htw);
    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();

    byte[] temp = System.Text.Encoding.UTF8.GetBytes(sw.ToString());
    return File(temp, "application/ms-excel");
}

Angular Controller 方法:-> 通过 ng-click 处理程序触发

function exportToExcel() {
    $http.post('/Controller/ExportToExcel/', vm.Model)
           .success(function (data) {
           })
           .error(function (data) {
                alerts.error(data);
            });
}

查看:

<a href="" ng-click="vm.exportToExcel()">click me</a>

对我可能做错了什么有什么建议吗?

最佳答案

我做过这样的事情,不需要 AJAX 或任何 JS。只需调整 Razor 代码即可。

其次,我个人的建议是根本不要转换为 Excel 文件。原因是,用户需要在其本地计算机上安装 Office。这也意味着,如果您将项目上传到网站,服务器机器将需要安装 Office 才能生成您的 excel 文件。

话虽这么说,但我建议只使用 CSV 文件。如果用户安装了 Office,他们将能够像使用任何电子表格一样使用 Excel 查看文件。

下面是一些代码,可以使用 StringBuilderReflection 从您的 dbcontext 中的 dbset 创建一个名为 Export.csv 的 CSV。

public ActionResult Export()
    {
        StringBuilder str = new StringBuilder();
        var tmp = db.Users.FirstOrDefault();     
        Type comp = tmp.GetType();                // get type
        foreach (PropertyInfo prop in comp.GetProperties())
        {
            str.Append(prop.Name + ",");          //set column names
        }
        str.Replace(",", "\n", str.Length - 1, 1);
        foreach (object item in db.Users)
        {
            foreach (PropertyInfo prop in item.GetType().GetProperties())
            {
                try
                {
                    string a = prop.GetValue(item, null).ToString();
                    str.Append(a + ",");
                }
                catch (NullReferenceException)
                {
                    str.Append("null" + ",");           //for nulls, append string with "null"
                }
            }
            str.Replace(",", "\n", str.Length - 1, 1);
        }
        string csv = str.ToString();
        return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "Export.csv");
    }

然后,您可以通过 View 中的链接访问下载文件,如下所示:

<a href="@Url.Action("Export", "Controller")">click me</a>

希望这对您有所帮助。

关于c# - 导出到 Excel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615202/

相关文章:

c# - .NET MAUI Android 中的通知图标

c# - 在 asp.net mvc 中一次更新多条记录

c# - 使用相同的事件处理程序处理多个事件

c# - 如何使用 Ajax 在 Asp.net Core MVC 中刷新数据而不重新加载页面?

c# - Jquery Append 和 @Html.EditorFor

c# - FileResult + redirectToAction出现错误

html - 布局菜单项,改变选中页面的样式 'Item'

asp.net - 如何阻止asp.net上传已发布的文件

asp.net - 在 ASP.NET 中填充文本框而不重新加载页面?

javascript - 如何忽略在 MVC View 中检测到的自引用循环?