使用ASP.Net MVC Web Api将JSON数据导出到Excel工作表
Export JSON data to Excel sheet using ASP.Net MVC Web Api
我有一个使用Durandal、ASP.net MVC Web API、Breeze和淘汰js构建的单页应用程序(SPA)。
我需要将列表导出到Excel工作表,单击html页面上的按钮即可将其下载到下载文件夹。
虽然我已经成功地将JSON数据转换为javascript的csv格式(在客户端),但如果数据量很大(3000+行,或者可能在12000行左右),这将花费太多时间。
我在从通过Breeze.js.进行的Web API调用中将excel文件作为响应类型发送时遇到问题
有没有一种方法可以做到这一点,它应该有点快,因为移动设备上可能也需要它?
编辑
下面是我写的代码-
用于绑定的JavaScript代码-
function exportListToExcel() {
DataContext.exportListToExcel().then(function (data) {
//Do some stuff.
});
}
在微风中实现的数据上下文文件中,代码返回promise-
function exportListToExcel() {
function querySucceeded() {
//return data;
}
return util.sendRequest(config.baseApiPath + 'breeze/MyController/ExportListToExcel')
.then(querySucceeded)
.fail(queryFailed);
}
下面的代码是发送到Web API的请求。我不知道它应该是HttpPost还是其他什么。
[HttpPost]
public HttpResponseMessage ExportListToExcel()
{
return ExportListToExcel();
}
下面是后端代码-
public static HttpResponseMessage ExportListToExcel()
{
//Method which returns table data. This is working fine though.
object listObject = GetListData();
Table listData = (Table)listObject;
string attachment = "attachment; filename=Report.xlsx";
HttpResponseMessage File = new HttpResponseMessage(HttpStatusCode.OK);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.AddHeader("content-disposition", attachment);
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
StringBuilder str = new StringBuilder();
str.Append("<table border=`" + "1px" + "`b>");
str.Append("<tr>");
foreach (DataColumn dc in listData.Columns)
{
str.Append("<td><b><font face=Arial Narrow size=3>" + dc.ColumnName + "</font></b></td>");
}
str.Append("</tr>");
foreach (DataRow dr in listData.Rows)
{
str.Append("<tr>");
for (int i = 0; i < listData.Columns.Count; i++)
{
str.Append("<td><font face=Arial Narrow size=" + "14px" + ">" + dr[i].ToString() + "</font></td>");
}
str.Append("</tr>");
}
str.Append("</table>");
byte[] temp = System.Text.Encoding.UTF8.GetBytes(str.ToString());
//To write the table to the File content.
File.Content = new StringContent(temp.ToString());
return File;
}
但是,这不起作用,并且在数据上下文文件中执行queryFailed()方法。
我不知道我哪里出了问题,也不知道我在这里错过了什么。此外,让我知道如何处理promise返回的文件/数据也会有很大帮助。
我的直觉是BreezeJS对于这个特定的工作来说是错误的工具。。。作为BreezeJS的合著者,我这样说。
问题始于范式。我很难将电子表格行视为业务对象通常意义上的"实体"。对我来说,它们更像是简单的数据。
在这个例子中,我们离实体思维很远。您似乎正在准备一大块HTML以便在客户端上显示。这里面没有什么"实体"。
我不反对你的意图。但我认为您应该像对待任何其他原始资源(例如,图像)一样对待它,并使用任何可用的组件通过简单的AJAX获取它。
您可能正在构建一个既有原始数据(或HTML)又有实体模型的混合应用程序。Breeze是一个很好的应用工具,只要你应用得当。您的Breeze应用程序已经委托给一个低级别的AJAX组件(例如,jQuery.ajax
或Angular的$http
),您应该能够在代码库中找到该组件,并将其直接用于此特定的csv任务。
- CefSharp ChromiumWebBrowser javascript excel导出无法工作
- Angularjs导出到excel不在IE中工作
- 如何使用javascript将Excel工作簿保存到当前用户桌面
- 使用ASP.Net MVC Web Api将JSON数据导出到Excel工作表
- PHP表单输出保存在jquery的Excel工作表中
- Excel Web Services 电子邮件 JavaScript 工作表
- 如何使用 JavaScript 或 jQuery 导出 HTML 表并追加为现有 Excel 中的工作表
- Excel公式到Javascript,工作但不一致
- Excel 工作表使用 URL 进行修改
- 如何从HTML中获取表格并用Python创建Excel工作表
- 使用javascript导出时excel工作表中的上标
- 调用ASP中控制器的ActionMethod.. NET MVC从Javascript,结果在Excel工作表保存
- 打开密码保护Excel工作簿与JavaScript
- 如何从Java Script生成Excel工作表
- 显示excel工作表中的表格
- 脚本存储HTML表格到excel工作表自动每天在一个特定的时间
- 如何将JSP页面的一部分导出到excel工作表
- 使用样式表在代码点火器中生成Excel工作表
- 使用 Javascript 在 SharePoint 上打开嵌入式 Excel 工作簿
- 如何在javascript方法中传递参数以下载Excel工作表