FromQuery λ©μλμμ νμΌ λ€μ΄λ‘λ.... νμΌ λ€μ΄λ‘λ, XLSX νμΌμ μ΄ λ Officeμμ μ€λ₯ λ©μμ§ μμ :
"Excelμμ νμΌμ μ΄ μ μμ΅λλ€.
μ¬κΈ° λ΄ λ°©λ²μ΄ μμ΅λλ€
namespace Modules\Profile\Exports;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
use Modules\Profile\Entities\Profile;
class ProfileExport implements FromQuery
{
use Exportable;
public function __construct($range)
{
$this->start = $range['start'];
$this->end = $range['end'];
}
public function query()
{
return Profile::query()->where('created_at', '>=', $this->start . ' 00:00:00')
->where('created_at', '<=', $this->end . ' 23:59:59')
->whereHas('user.roles', function($query){
$query->where('id', 2);
});
}
}
컨νΈλ‘€λ¬μμ μ΄λ κ² λΆλ¬μ
//$request->start = '2018-01-01';
//$request->end = '2018-05-01';
$range = ['start'=>$request->start, 'end'=>$request->end];
return (new ProfileExport($range))->download($request->start . '-' . $request->end .'-pet-parent-signups.xlsx');
μμλλ λμ:
λ°μ΄ν°μ ν¨κ» λ€μ΄λ‘λν νμΌ
μ€μ νλ:
νμΌμ΄ λ€μ΄λ‘λλμ§λ§ Excelμμ νμΌμ μ¬λ λμ μ€λ₯κ° λ°μν©λλ€.
μ λ³μΌλ‘ 쿼리λ₯Ό ν μ€νΈνμΌλ©° λ°μ΄ν°κ° ν¬ν¨λ 컬λ μ μ λ°νν©λλ€.
(https://user-images.githubusercontent.com/18451450/40511758-f61e6570-5f5d-11e8-9f37-0b594f60be59.png)
λν 미리 κ°μ¬λ립λλ€ :)
νΉν μ΄ λνΌλ₯Ό μμ±νλ λ° μκ°μ ν μ νμ¬ μμνλ €λ©΄
PhpSpreadsheetμμ μ¬μ ν λμΌν λ¬Έμ μΈμ§ νμ€νμ§ μμ§λ§ PHPExcelμλ <?php
μ΄λ¦° νκ·Έ μμ 곡백( )μ΄ μλ λ° λ¬Έμ κ° μμ΅λλ€. κ³Όκ±°μ μ΄ μ€λ₯λ₯Ό μΌμΌν€λ λ° μ¬μ©λμμ΅λλ€.
nano λλ vimμΌλ‘ μ€λ₯ νμΌμ μ΄ μ μμ΅λλ€.
PK μμ κ³΅λ°±μ΄ λ³΄μ΄λ©΄ λ€μκ³Ό κ°μ΄ οΌ
μ½λλ 곡κΈμ
체μμ μ€λ₯κ° λ°μνμ μ μμ΅λλ€. λμΌν λ¬Έμ κ° λ°μνμ¬ κ³΅κΈμ
체 ν΄λ μ κ±°λ₯Ό μ²λ¦¬νμ΅λλ€. μ μλν©λλ€ λ²€λλ₯Ό λ€μ μ€μΉν ν
μ¬λ¬λΆ, 리λν΄μ£Όμ μ κ°μ¬ν©λλ€.
νμΌ μμ λΆλΆμ μΆκ° μ€ λ°κΏμ΄λ λκ°κ° μλ€λ κ²μ΄ μ³λ€κ³ μκ°ν©λλ€. μμ§ μΆμ νμ§ μμμ§λ§ CSVλ‘ μ ννλ©΄ νμΌμ μ΄ μ μκ³ λ°μ΄ν°λ μμ§λ§ 첫 λ²μ§Έ νμ λΉμ΄ μμ΅λλ€....
μ’ λ μ΄ν΄λ³΄κ³ λμ λ³΄κ³ κ° λμμ΅λλ€. μ€ λ°κΏμΌλ‘ μμνλ νμΌμ μ°Ύμ λ€μ
λλ μ΄κ²μ λ«κ³ λ¬Έμ μ λν λ λμ μ€λͺ κ³Ό ν¨κ» μ κ²μ μ΄ κ²μ λλ€. λΉ νμ μΆμ²λ₯Ό μ°Ύμ μ μμ΅λλ€
λλ κ°μ λ¬Έμ λ₯Ό λ§λ¬λ€. λ΄κ° κ³ μ³€λ€
$filename = 'meal_list_'.date('YmdHis').'.xlsx';
Excel::store(new MealExport($request), $filename, 'public');
return redirect( Storage::url("storage/{$filename}" ));
}
μλ νμΈμ μ¬λ¬λΆ,
μ΄ μλνμ§ μλ λ€μ΄λ‘λ κΈ°λ₯μ μ΄ν΄νλ λ° ν루λ₯Ό 보λ λλ€. PHPSpreadSheetλ PHP λ²νΌλ₯Ό μ¬μ©νλ κ² κ°μ΅λλ€. PHP ꡬμ±μ λ°λΌ μΌλΆ κ²½κ³ λλ μ€λ₯κ° μΆλ ₯μ λ°©ν΄ν μ μμ΅λλ€.
μ¬μ©:
// in controller
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
λλ₯Ό μν΄ ν΄κ²°ν©λλ€.
μ΄μ©λ©΄ κ·Έκ²μ μ΄λ€ μ¬λλ€μκ² λμμ΄ λ κ²μ
λλ€.
μ΄ λ©μ§ λΌμ΄λΈλ¬λ¦¬μ κ°μ¬λ립λλ€.
μλ νμΈμ μ¬λ¬λΆ,
μ΄ μλνμ§ μλ λ€μ΄λ‘λ κΈ°λ₯μ μ΄ν΄νλ λ° ν루λ₯Ό 보λ λλ€. PHPSpreadSheetλ PHP λ²νΌλ₯Ό μ¬μ©νλ κ² κ°μ΅λλ€. PHP ꡬμ±μ λ°λΌ μΌλΆ κ²½κ³ λλ μ€λ₯κ° μΆλ ₯μ λ°©ν΄ν μ μμ΅λλ€.
μ¬μ©:
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
λλ₯Ό μν΄ ν΄κ²°ν©λλ€.
μ΄μ©λ©΄ κ·Έκ²μ μ΄λ€ μ¬λλ€μκ² λμμ΄ λ κ²μ λλ€.μ΄ λ©μ§ λΌμ΄λΈλ¬λ¦¬μ κ°μ¬λ립λλ€.
μλ²½ν λ΅λ³ κ°μ¬ν©λλ€
μλ νμΈμ μ¬λ¬λΆ,
μ΄ μ루μ :
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
μλνκ³ μμλ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. κ·Έλ¬λ μ¬μ ν Xlsx/Xlsλ₯Ό μ¬μ©νμ¬ λ΄λ³΄λ΄λ λ° λ¬Έμ κ° μμ΅λλ€.
λ€μ΄λ‘λν νμΌμ λ€μκ³Ό κ°μ΅λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μ λν μμ΄λμ΄κ° μμ΅λκΉ?
κ³ λ§μ !
μλ νμΈμ μ¬λ¬λΆ,
μ΄ μλνμ§ μλ λ€μ΄λ‘λ κΈ°λ₯μ μ΄ν΄νλ λ° ν루λ₯Ό 보λ λλ€. PHPSpreadSheetλ PHP λ²νΌλ₯Ό μ¬μ©νλ κ² κ°μ΅λλ€. PHP ꡬμ±μ λ°λΌ μΌλΆ κ²½κ³ λλ μ€λ₯κ° μΆλ ₯μ λ°©ν΄ν μ μμ΅λλ€.
μ¬μ©:
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
λλ₯Ό μν΄ ν΄κ²°ν©λλ€.
μ΄μ©λ©΄ κ·Έκ²μ μ΄λ€ μ¬λλ€μκ² λμμ΄ λ κ²μ λλ€.μ΄ λ©μ§ λΌμ΄λΈλ¬λ¦¬μ κ°μ¬λ립λλ€.
Love You man.. λ΄ λ¨Έλ¦¬λ₯Ό ꡬν΄μ€¬μ΄...
PhpSpreadsheetμμ μ¬μ ν λμΌν λ¬Έμ μΈμ§ νμ€νμ§ μμ§λ§ PHPExcelμλ
<?php
μ΄λ¦° νκ·Έ μμ 곡백()μ΄ μλ λ° λ¬Έμ κ° μμ΅λλ€. κ³Όκ±°μ μ΄ μ€λ₯λ₯Ό μΌμΌν€λ λ° μ¬μ©λμμ΅λλ€.
μλ
νμΈμ @patrickbrowers
κ·νμ μ견μ κ°μ¬λ립λλ€.
λλ₯Ό μν΄ ν΄κ²°ν©λλ€.
ajaxλ₯Ό μ¬μ©νμ¬ λ€μ΄λ‘λνλ κ²½μ°,
κ·νμ ajax μμ²μ responseType: 'blob'
λ₯Ό μΆκ°νμμμ€(μ λ axiosλ₯Ό μ¬μ©νκ³ μμ΅λλ€).
λ΄ μμ μ½λ:
axios.post('/path/to/export', data, {
responseType: 'blob',
})
.then(response => {
const filename = 'file.xlsx';
let blob = new Blob([response.data], {
type: 'application/octet-stream',
});
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 {
let blobURL = window.URL.createObjectURL(blob);
let tempLink = document.createElement('a');
tempLink.style.display = 'none';
tempLink.href = blobURL;
tempLink.download = filename;
tempLink.click();
window.URL.revokeObjectURL(blobURL);
}
})
responseType: 'blob'
κ° μμΌλ©΄ λ€μ΄λ‘λν νμΌμ μ΄ μ μμ΅λλ€.
ajaxλ₯Ό μ¬μ©νμ¬ λ€μ΄λ‘λνλ κ²½μ°,
κ·νμ ajax μμ²μresponseType: 'blob'
λ₯Ό μΆκ°νμμμ€(μ λ axiosλ₯Ό μ¬μ©νκ³ μμ΅λλ€).λ΄ μμ μ½λ:
axios.post('/path/to/export', data, { responseType: 'blob', }) .then(response => { const filename = 'file.xlsx'; let blob = new Blob([response.data], { type: 'application/octet-stream', }); 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 { let blobURL = window.URL.createObjectURL(blob); let tempLink = document.createElement('a'); tempLink.style.display = 'none'; tempLink.href = blobURL; tempLink.download = filename; tempLink.click(); window.URL.revokeObjectURL(blobURL); } })
responseType: 'blob'
κ° μμΌλ©΄ λ€μ΄λ‘λν νμΌμ μ΄ μ μμ΅λλ€.
κ°μ¬ν©λλ€!! λ΄ μλͺ μ ꡬνμμμ€. λ΄ λ³΄λΈ νμΌμ μμμν¨ PHP μ½λ μ€μ κ³μλ³΄κ³ μμ΅λλ€. κ²°κ³Όλ axiosμ λλ€
μλ νμΈμ μ¬λ¬λΆ,
μ΄ μλνμ§ μλ λ€μ΄λ‘λ κΈ°λ₯μ μ΄ν΄νλ λ° ν루λ₯Ό 보λ λλ€. PHPSpreadSheetλ PHP λ²νΌλ₯Ό μ¬μ©νλ κ² κ°μ΅λλ€. PHP ꡬμ±μ λ°λΌ μΌλΆ κ²½κ³ λλ μ€λ₯κ° μΆλ ₯μ λ°©ν΄ν μ μμ΅λλ€.
μ¬μ©:
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
λλ₯Ό μν΄ ν΄κ²°ν©λλ€.
μ΄μ©λ©΄ κ·Έκ²μ μ΄λ€ μ¬λλ€μκ² λμμ΄ λ κ²μ λλ€.μ΄ λ©μ§ λΌμ΄λΈλ¬λ¦¬μ κ°μ¬λ립λλ€.
@Leenzuur κ°μ¬ @Leenzuur λ°©μμΌλ‘ μμ ν μ μλ λ°©λ²μ΄ μλμ§ κΆκΈν©λλ€. 10κ° λͺ¨λΈμ λν΄ 10κ°μ λ΄λ³΄λ΄κΈ° ν΄λμ€κ° μλ κ²½μ° λ€μ΄λ‘λν λ 10κ° μμΉλ₯Ό μΆκ°ν΄μΌ ν©λλ€.
μ΄ λ¬Έμ λ μμΆμ μλ¬΄λ° λ³ν μμ΄ μ€λ λμκ² λ°μνκΈ° μμνμ΅λλ€. @leenzuur μ½λ μνμ μ¬μ©νμ¬ λͺ μκ°μ μ°κ΅¬ λμ μμ νμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μλ νμΈμ μ¬λ¬λΆ,
μ΄ μλνμ§ μλ λ€μ΄λ‘λ κΈ°λ₯μ μ΄ν΄νλ λ° ν루λ₯Ό 보λ λλ€. PHPSpreadSheetλ PHP λ²νΌλ₯Ό μ¬μ©νλ κ² κ°μ΅λλ€. PHP ꡬμ±μ λ°λΌ μΌλΆ κ²½κ³ λλ μ€λ₯κ° μΆλ ₯μ λ°©ν΄ν μ μμ΅λλ€.
μ¬μ©:
λλ₯Ό μν΄ ν΄κ²°ν©λλ€.
μ΄μ©λ©΄ κ·Έκ²μ μ΄λ€ μ¬λλ€μκ² λμμ΄ λ κ²μ λλ€.
μ΄ λ©μ§ λΌμ΄λΈλ¬λ¦¬μ κ°μ¬λ립λλ€.