Laravel-excel: рдХреИрд╕реЗ рдХрд░реЗрдВ: рдХреЗрд╡рд▓ рдЕрдЬрд╛рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдПрд╕рд╡реА/рдПрдХреНрд╕рдПрд▓рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реЗрд╡ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдЬреБрд▓ре░ 2016  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Maatwebsite/Laravel-Excel

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ рд▓реЛрдЧ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рд╕реЗ рдлрд╛рдЗрд▓ рдкрд░реЛрд╕рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреБрдЫ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЯреНрд╡реАрд╡ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рд╕реЗ рд╕реАрдПрд╕рд╡реА рдФрд░ рдПрдХреНрд╕рдПрд▓рдПрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ xls рд╣реИ, рддреЛ рд╣реЗрд░рдлреЗрд░ рдЕрд▓рдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрджрд▓рд╛рд╡ рд╣реИред

рдбреЗрдЯрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рдХреНрдкрдЯреБ рдХреНрд╡реЗрд░реА рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдРрд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдкреАрдПрдЪрдкреА

if(!empty(Input::get('exportType'))) { //i use a custom get parameter here
            $dd = Excel::create('testFileName', function($excel) use ($data) {
                $excel->sheet('testSheetName', function($sheet) use ($data) {
                    $sheet->fromArray($data->get()->toArray());
                });
                $excel->setTitle($filename);
                $excel->setLastModifiedBy(Carbon::now()->toDayDateTimeString()); //updated has Carbon::now() only now throw exception on vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5.php l847 strlen()
            });

            //tweak for serving XLS file from ajax (or go trough download() Excel method for csv files)
            if(Input::get('exportType') == 'xls') {
                $dd = $dd->string();
                $response =  array(
                    'filename' => 'testFileName', //as we serve a custom response, HTTP header for filename is not setted by Excel. From the JS, you need to retrieve this value if type is XLS to set filename
                    'file' => "data:application/vnd.ms-excel;base64,".base64_encode($dd)
                );
                return response()->success($response); //do a json encode
            } else {
                //direct use of Excel download method for non-xls files - xls files need special JS treatment
                $dd->download(Input::get('exportType')); //not XLS, so CSV (didnt tried xlsx, pdf is blank but not sure it's related to this)
            }
            die; //prevent malformed binary data stream, not sure if needed
        }

рдЬреЗ рдПрд╕

$.ajax({
      cache: false,
      url: url, //GET route 
      responseType: 'ArrayBuffer', //not sure if needed
      data:  exportParam, //exportType parameter here
      success: function (data, textStatus, request) {

//you could need to decode json here, my app do it automaticly, use a try catch cause csv are not jsoned

        //already json decoded? custom return from controller so format is xls
        if(jQuery.isPlainObject(data)) {
          data = data.data; //because my return data have a 'data' parameter with the content
        }

        //V1 - http://stackoverflow.com/questions/35378081/laravel-excel-using-with-ajax-is-not-working-properly
        //+V3 - http://stackoverflow.com/questions/27701981/phpexcel-download-using-ajax-call
        var filename = "";
        var disposition = request.getResponseHeader('Content-Disposition');
        if (disposition && disposition.indexOf('attachment') !== -1) {
          var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
          var matches = filenameRegex.exec(disposition);
          if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
        }
        if(!jQuery.isPlainObject(data)) { //is CSV - we use blob
           var type = request.getResponseHeader('Content-Type');
           var blob = new Blob([data], { type: type ,endings:'native'});
           var URL = window.URL || window.webkitURL;
           var downloadUrl = URL.createObjectURL(blob);
        }
        var a = document.createElement("a");
        a.href = jQuery.isPlainObject(data) ? data.file : downloadUrl; 
        a.download = jQuery.isPlainObject(data) ? data.filename : filename;
        document.body.appendChild(a);
        a.click();
        a.remove();
      },
      error: function (ajaxContext) {
        toastr.error('Export error: '+ajaxContext.responseText);
      }
    });

рдкреАрдПрд╕: рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рдЕрдЬрд╛рдХреНрд╕ рд╕реЗ рдПрдХ xlsx рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реВрдВ:

рдкреАрдПрдЪрдкреА
$data рдПрдХ рд╡рд╛рдХреНрдкрдЯреБ рдХреНрд╡реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдРрд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

$myFile= Excel::create("filename", function($excel) use($data) {
   $excel->setTitle('title');
   $excel->sheet('sheet 1', function($sheet) use($data) {
     $sheet->fromArray($data, null, 'A1', true, true);
   });
});

$myFile = $myFile->string('xlsx'); //change xlsx for the format you want, default is xls
$response =  array(
   'name' => "filename", //no extention needed
   'file' => "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,".base64_encode($myFile) //mime type of used format
);
return response()->json($response);

рдЬреЗ рдПрд╕

$.ajax({
      cache: false,
      url: url, //GET route 
      data:  params, //your parameters data here
      success: function (response, textStatus, request) {
        var a = document.createElement("a");
        a.href = response.file; 
        a.download = response.name;
        document.body.appendChild(a);
        a.click();
        a.remove();
      },
      error: function (ajaxContext) {
        toastr.error('Export error: '+ajaxContext.responseText);
      }
    });

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдпрд╣ рд╕реАрдПрд╕рд╡реА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдПрд▓рдПрд╕ рдирд╣реАрдВ,

рдореБрдЭреЗ рдЕрдЬрд╛рдХреНрд╕ рд╕реЗ рдПрдХ xlsx рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реВрдВ:

рдкреАрдПрдЪрдкреА
$data рдПрдХ рд╡рд╛рдХреНрдкрдЯреБ рдХреНрд╡реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдРрд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

$myFile= Excel::create("filename", function($excel) use($data) {
   $excel->setTitle('title');
   $excel->sheet('sheet 1', function($sheet) use($data) {
     $sheet->fromArray($data, null, 'A1', true, true);
   });
});

$myFile = $myFile->string('xlsx'); //change xlsx for the format you want, default is xls
$response =  array(
   'name' => "filename", //no extention needed
   'file' => "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,".base64_encode($myFile) //mime type of used format
);
return response()->json($response);

рдЬреЗ рдПрд╕

$.ajax({
      cache: false,
      url: url, //GET route 
      data:  params, //your parameters data here
      success: function (response, textStatus, request) {
        var a = document.createElement("a");
        a.href = response.file; 
        a.download = response.name;
        document.body.appendChild(a);
        a.click();
        a.remove();
      },
      error: function (ajaxContext) {
        toastr.error('Export error: '+ajaxContext.responseText);
      }
    });

рдзрдиреНрдпрд╡рд╛рдж!!

рдореБрдЭреЗ "рдХреНрд▓рд╛рд╕ 'рдПрдХреНрд╕реЗрд▓' рдирд╣реАрдВ рдорд┐рд▓рд╛" рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@randomhoodie рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рд╕реЗ рдЖрдк рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЖрдП?

@eldyvoon рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд╣рд╛, "рдореИрдВрдиреЗ рдореВрд▓ рдЙрддреНрддрд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛", рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП рдерд╛ рдЙрд╕реЗ рд╣рдЯрд╛ рджреЗрдВ, рдЗрд╕реЗ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛рдПрдВ, рдФрд░ рдбрдХрдбрдХрдЧреЛ (рдЦреЛрдЬ рдЗрдВрдЬрди) рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдордПрд╕ рдСрдлрд┐рд╕ xlsx рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рдерд╛ рдЬрдм рддрдХ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рддрдм рддрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рдпрд╛ рдерд╛, рдФрд░ рдЬрдм рд╕реЗ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдЧрд╛ред

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рди рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рди рд╣реА рдЕрдЬрд╛рдХреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рд╕реАрдПрд╕рд╡реА/рдПрдХреНрд╕рдПрд▓рдПрд╕/рдПрдХреНрд╕рдПрд▓рдПрд╕рдПрдХреНрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╡рд╛рд▓рд╛ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рд╣реИ рдФрд░ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдкреЗрдЬ рдмрд┐рд▓реНрдХреБрд▓ рд░реАрдлреНрд░реЗрд╢ рд╣реЛред рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рдХрд┐рдпрд╛ рд╡рд╣ рдПрдХ рд▓рд┐рдВрдХ рдХреЛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реМрдЯрд╛рддрд╛ рдерд╛ ...

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ getSpreadsheet() {
$ рдЖрдЗрдЯрдо = рдЖрдЗрдЯрдо :: рд╕рднреА ();
рдПрдХреНрд╕реЗрд▓ :: рдмрдирд╛рдПрдВ ('рдЖрдЗрдЯрдо', рдлрд╝рдВрдХреНрд╢рди ($ рдПрдХреНрд╕реЗрд▓) рдЙрдкрдпреЛрдЧ ($ рдЖрдЗрдЯрдо) {
$excel->sheet('ExportFile', function($sheet) use($items) {
$ рд╢реАрдЯ-> рдРрд░реЗ рд╕реЗ ($ рдЖрдЗрдЯрдо);
});
}) -> рдирд┐рд░реНрдпрд╛рдд ('рдПрдХреНрд╕рдПрд▓рдПрд╕');
}

рдЕрджреНрднреБрдд!!!!

рдзрдиреНрдпрд╡рд╛рдж @randomhoodie!

3.x рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЗ PHP рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдЧрд╛рдЗрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛:

        $myFile = Excel::raw(new YOUR_Export_Class, \Maatwebsite\Excel\Excel::XLSX);

        $response =  array(
           'name' => "filename", //no extention needed
           'file' => "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,".base64_encode($myFile) //mime type of used format
        );

        return response()->json($response);

рдзрдиреНрдпрд╡рд╛рдж @kynetiv , рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 3.x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ: filename.xlsx

рдпрджрд┐ рдЖрдк рдЕрднреА рднреА 2020 рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓рд╛рд░рд╡реЗрд▓ рдПрдХреНрд╕реЗрд▓ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 3.x рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рд╣реИ

  1. рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рднреЗрдЬреЗрдВ рдЬреЛ рд▓рд╛рд░рд╡реЗрд▓ рдПрдХреНрд╕реЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ
  2. Laravel рдПрдХреНрд╕реЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдмреНрд▓реЗрдб рд╡реНрдпреВ рдореЗрдВ рднреЗрдЬрдиреЗ рджреЗрдВ
  3. рдмреНрд▓реЗрдб рд╡реНрдпреВ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ
  4. рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
    рддреЛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд▓реЗрдб рд╡реНрдпреВ рдХреЛ рдПрдХреНрд╕реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
    рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред

рдЙрджрд╛рд╣рд░рдг:

 $exports = new ReportsExporter($data, $columns);
  Excel::store($exports , 'filename.xlsx', 'custom_disk_location');

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреЛ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ

'custom_disk_location' => [
            'driver' => 'local',
            'root' => public_path('files'),
        ],
...

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓ рд╕реНрдЯреЛрд░реЗрдЬ/рдРрдк рдореЗрдВ рд╕реЗрд╡ рдирд╣реАрдВ рд╣реИ
рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ/рдлрд╝рд╛рдЗрд▓ рдкрде рдореЗрдВ рд╕рд╣реЗрдЬ рд▓реЗрдЧрд╛

рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╡рд╛рдкрд╕, рдЗрд╕ рддрд░рд╣ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

function download(filename, path) {
        let element = document.createElement('a');
        element.setAttribute('href', path);
        element.setAttribute('download', filename);

        element.style.display = 'none';
        document.body.appendChild(element);

        element.click();

        document.body.removeChild(element);
    }

рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рдкрде рдкрд╛рд╕ рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
рдбрд╛рдЙрдирд▓реЛрдб ("filename.xlsx", location.origin+"files/filename.xlsx");

рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рдмрд╛рдж рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╣рдЯрд╛ рджреЗрдВ
рдЕрдирд▓рд┐рдВрдХ ("рдлрд╝рд╛рдЗрд▓реЗрдВ / рдлрд╝рд╛рдЗрд▓ рдирд╛рдоред xlsx");

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЛ рднреА рдЕрдЬрд╛рдХреНрд╕ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рд░реНрд╡рд╛-рдПрдХреНрд╕реЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИ рдФрд░
рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдВ рдФрд░ рд╕рд╛рде рд╣реА рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдо рджреЗрдВред

рдореБрдЭреЗ рдЕрдЬрд╛рдХреНрд╕ рд╕реЗ рдПрдХ xlsx рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реВрдВ:

рдкреАрдПрдЪрдкреА
$data рдПрдХ рд╡рд╛рдХреНрдкрдЯреБ рдХреНрд╡реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдРрд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

$myFile= Excel::create("filename", function($excel) use($data) {
   $excel->setTitle('title');
   $excel->sheet('sheet 1', function($sheet) use($data) {
     $sheet->fromArray($data, null, 'A1', true, true);
   });
});

$myFile = $myFile->string('xlsx'); //change xlsx for the format you want, default is xls
$response =  array(
   'name' => "filename", //no extention needed
   'file' => "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,".base64_encode($myFile) //mime type of used format
);
return response()->json($response);

рдЬреЗ рдПрд╕

$.ajax({
      cache: false,
      url: url, //GET route 
      data:  params, //your parameters data here
      success: function (response, textStatus, request) {
        var a = document.createElement("a");
        a.href = response.file; 
        a.download = response.name;
        document.body.appendChild(a);
        a.click();
        a.remove();
      },
      error: function (ajaxContext) {
        toastr.error('Export error: '+ajaxContext.responseText);
      }
    });

рдореБрдЭреЗ рдЕрдЬрд╛рдХреНрд╕ рд╕реЗ рдПрдХ xlsx рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реВрдВ:

рдкреАрдПрдЪрдкреА
$data рдПрдХ рд╡рд╛рдХреНрдкрдЯреБ рдХреНрд╡реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдРрд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

$myFile= Excel::create("filename", function($excel) use($data) {
   $excel->setTitle('title');
   $excel->sheet('sheet 1', function($sheet) use($data) {
     $sheet->fromArray($data, null, 'A1', true, true);
   });
});

$myFile = $myFile->string('xlsx'); //change xlsx for the format you want, default is xls
$response =  array(
   'name' => "filename", //no extention needed
   'file' => "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,".base64_encode($myFile) //mime type of used format
);
return response()->json($response);

рдЬреЗ рдПрд╕

$.ajax({
      cache: false,
      url: url, //GET route 
      data:  params, //your parameters data here
      success: function (response, textStatus, request) {
        var a = document.createElement("a");
        a.href = response.file; 
        a.download = response.name;
        document.body.appendChild(a);
        a.click();
        a.remove();
      },
      error: function (ajaxContext) {
        toastr.error('Export error: '+ajaxContext.responseText);
      }
    });

рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dr3ads picture dr3ads  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

matthewslouismarie picture matthewslouismarie  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kurianic picture kurianic  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rossjcooper picture rossjcooper  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lucatamtam picture lucatamtam  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ