我想用laravel中 AJAX 方法下载一个excel文件。控制器功能:
$myFile = Excel::create($name, function ($excel) use ($export) {
$excel->sheet('Data', function ($sheet) use ($export) {
$sheet->fromArray($export);
$sheet->cells('A1:N1', function ($cells) {
$cells->setBackground('#dbdbdb');
$cells->setFontColor('#000000');
$cells->setFontWeight('bold');
$cells->setFont(array(
'family' => 'Calibri',
'size' => '9',
));
});
$sheet->setStyle(array(
'font' => array(
'name' => 'Calibri',
'size' => 9,
),
));
});
});
$myFile = $myFile->string('xlsx');
$response = array(
'name' => $name,
'file' => "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," . base64_encode($myFile),
);
return response()->json($response);
AJAX 函数:
$(document).on('click', '.ExportJobs', function() {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var ids = [];
$(".InvoiceCheckBox:checked").each(function(e) {
ids.push(this.value);
});
data = {
"ids": ids,
};
$.ajax({
method: "POST",
url: "/exportNew",
data: data,
success: function(response) {
var a = document.createElement("a");
a.href = response.file;
a.download = response.name;
document.body.appendChild(a);
a.click();
a.remove();
}
});
});
但是使用上面的控制器方法不会返回excel格式的文件,如果我将字符串值从xlsx
更改为csv
,那么csv
的文件将被下载。
我们如何使excel格式的文件下载?任何建议,请!
5条答案
按热度按时间rnmwe5a21#
我知道这是相当晚,但张贴为其他人谁与我一样的问题斗争
我还需要下载Excel从使用Maatwebsite Excel库使用 AJAX 后调用。
1.添加了一个按钮来激发 AJAX 调用下载excel文件
使用以下js代码发布 AJAX 请求
在routes/web.php文件中为我的控制器设置路由
这里我使用了maatwebsite/excel库,通过FromQuery方式生成excel文件,但由于库更新,**“maatwebsite/excel”中的Excel::create已被Excel::download取代:“^3.1”**我在我的案例中使用了download方法,这里是我的HelperClass,用于根据我的要求生成记录
PayrollHelper.php
终于在我的控制器里
创建excel文件后返回文件作为 AJAX 响应作为blob
就这些
nfs0ujit2#
只需查看xhrFields将responseType设置为
blob
,然后查看 AJAX 成功部分。希望大家都能找到解决办法:dm7nw8vv3#
虽然很晚了,但要帮助别人
你可以这样做
在 AJAX 中
控制器中
uurv41yg4#
如果你使用jquery:
//在控制器中:
// AJAX :
l3zydbqr5#