多くの検索要素を含む検索を行った後、検索結果に印刷ボタンがあり、最初にレコードを見つけてからExcelに印刷するために、他の多くのデータを含む検索フォームをもう一度送信する必要があります。このために、フォームの送信に Ajax を使用し、laravel Excel で記述しましたが、現在では動作せずxlsx
、問題がありxls
ます。ファイルをダウンロードする.xls
と内容はこんな感じ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
です。以下は私のコードです:
<script>
function generateReport(printType,printRange) {
$.ajaxSetup({
header:$('meta[name="_token"]').attr('content')
})
var url = '/auditLog/search/printReport';
var params = $('#auditSearchForm').serialize()+'&printType=' + printType + '&printRange=' + printRange;
$.ajax({
type: "POST",
url: url,
data: params,
success: function (response, status, xhr) {
// check for a filename
var filename = "";
var disposition = xhr.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, '');
}
var type = xhr.getResponseHeader('Content-Type');
var blob = new Blob([response], { type: type });
if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed."
window.navigator.msSaveBlob(blob, filename);
} else {
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
if (filename) {
// use HTML5 a[download] attribute to specify filename
var a = document.createElement("a");
// safari doesn't support this yet
if (typeof a.download === 'undefined') {
window.location = downloadUrl;
} else {
a.href = downloadUrl;
a.download = filename;
document.body.appendChild(a);
a.click();
}
} else {
window.location = downloadUrl;
}
setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
}
}
});
}
</script>
そして私のコントローラー
public function generateReport()
{
$result = $this->searchRequest->getDetails();
//dd($result);
//$user = Auth::user();
Excel::create('foo', function($file) {
$file->sheet('bar', function($sheet) {
$sheet->setTitle('Hi');
});
})->download('xls');
}
助けてくれてありがとう。