Как автоматически загрузить файл Excel, если число записей в DataTable превышает 1 la c запись при успешном вызове AJAX? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть 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 
}

Данные, входящие в аргумент вышеупомянутой функции, выглядят следующим образом:

data coming in argument of success function

Мне просто нужно было экспортировать эти данные превзойти и загрузить его автоматически. Возможно ли это? Или я должен изменить свой подход.

РЕДАКТИРОВАТЬ: @ 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]

1 Ответ

0 голосов
/ 24 февраля 2020

В методе 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')
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...