У меня есть dataTable, в котором более 100 000 записей. Я пытаюсь экспортировать эти данные в Excel, и я хочу, чтобы загрузка происходила автоматически, если количество записей превышает 100 КБ.
В методе действия контроллера:
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
}
Данные, входящие в аргумент вышеупомянутой функции, выглядят следующим образом:
Мне просто нужно было экспортировать эти данные превзойти и загрузить его автоматически. Возможно ли это? Или я должен изменить свой подход.
РЕДАКТИРОВАТЬ: @ pala sh:
Я должен делать что-то не так в части реализации. Вроде как кормление с ложечки. но вот как я реализовал ваш код после понимания логики c.:
$.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 звонок и выход. Я обнаружил, что аргументы назначения и загрузки пусты, где я go ошибся?
[ДАННЫЕ в формате Excel ] [2]