jquery - 如果DataTable中的记录数超过AJAX成功调用的1条lac记录,如何自动下载excel文件?
问题描述
我有一个包含超过 100 000 条记录的数据表。我正在尝试在 excel 中导出该数据,如果记录数超过 100k,我希望自动下载。
在控制器动作方法中:
if (res.Count > 40000)
{
ExportDataToExcel(parameters);
}
然后我创建了一个函数:
public void ExportDataToExcel(some parameters)
{
DataTable tbl = new DataTable("SomeReport");
tbl = objCommon.GetGridDataTableFormat(some parameters);// this function is fetching me `datatable`
tbl.TableName = "Report";
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(tbl);
// wb.SaveAs("DiscountReport-" + DateTime.Now);
wb.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
wb.Style.Font.Bold = true;
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename= DiscountReport.xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
在此之后它返回 Ajax,成功:
success: function(data) {
something
}
上述函数参数部分的数据如下:
我只需要将这些数据导出到excel并自动下载。可以吗?或者我应该改变我的方法。
编辑:@palash:
我一定在实现部分做错了什么。有点像用勺子喂食的感觉。但这是我在理解逻辑后实现您的代码的方式。:
$.ajax({
url: '/Reports/_GetDiscountGrid',
data: {
State: stat,
Zone: zon,
Amrac: amr,
Store: store,
Hierarchy: hirarcy,
DiscountType: discountType,
Itemcategorycode: itemcatCode,
Itemcode: code,
Period: period,
OfferNo: offernumber
},
datatype: "html",
type:"GET",
success: function(data) {
$('#tbldiscountDIV').empty();
if (typeof (data) == "string") {
$('#tbldiscountDIV2').show();
DownLoadSheet(data, "DiscountReport.xlsx");
}
在此之后,我定义为:
function DownLoadSheet(data,fileName)
{
const a = document.createElement("a");
document.body.appendChild(a);
a.style="display:none";
return function (data,fileName)
{
const blob = new Blob([data], { type: "application/vnd.openxmlfomrats-officedocument.spreadsheetml.sheet" }),
url = window.URL.createObjectURL(blob);
a.href=url;
a.download=fileName;
a.click();
window.URL.revokeObjectURL(url);
}//return for function end
a.href = url;
var temp = blob;
}
在它返回 AJAX 调用并退出之后。我发现目标和下载参数是空的,我哪里出错了?
[excel格式的数据][2]
解决方案
在该success
方法中,实际上 xlsx 文件作为响应返回。你可以像这样下载它:
const DownloadSheet = (function() {
const a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function(data, fileName) {
const blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
$.ajax({
type: "GET",
url: url,
success: function(response) {
DownloadSheet(response, 'DiscountReport.xlsx')
}
});
推荐阅读
- javascript - 如何使用 puppeteer 在输入框中输入内容?
- sql - COUNT 函数:查询结果
- docker - 在 GitHub Actions 中声明 Docker 选项
- html - Thymeleaf 无法识别 º 字符
- pdf - 即时更改从 Google Drive 导出的 pdf 的元数据
- c++ - 是否可以定义一个 C++ 成员函数,其定义是文件本地的,因此允许多个版本共存
- c# - 为什么我需要在实体框架中将字节 [] 转换为 int[]?
- reactjs - React Promise 卡在 {Pending} Promise Status Fulfilled
- node.js - 使用 docker compose 将 nodejs 应用程序连接到 localstack s3
- regex - vscode 正则表达式获取带有以逗号分隔的重复字符串的行