Larabel에서 Excel로 Excel을 내보낼 때 어떻게 열 헤더를 포함할 수 있습니까?
제품 정보와 함께 Larabel Excel 파일을 사용하여 Excel을 다운로드 할 수 있도록 하고 있습니다.현재 웹 루트는 다음과 같습니다.
Route::get('/excel/release', 'ExcelController@create')->name('Create Excel');
현재 내보내기 기능은 다음과 같습니다.
class ProductExport implements FromQuery
{
use Exportable;
public function __construct(int $id)
{
$this->id = $id;
}
public function query()
{
return ProductList::query()->where('id', $this->id);
}
}
현재 컨트롤러는 다음과 같습니다.
public function create(Request $request) {
# Only alowed tables
$alias = [
'product_list' => ProductExport::class
];
# Ensure request has properties
if(!$request->has('alias') || !$request->has('id'))
return Redirect::back()->withErrors(['Please fill in the required fields.'])->withInput();
# Ensure they can use this
if(!in_array($request->alias, array_keys($alias)))
return Redirect::back()->withErrors(['Alias ' . $request->alias . ' is not supported'])->withInput();
# Download
return (new ProductExport((int) $request->id))->download('iezon_solutions_' . $request->alias . '_' . $request->id . '.xlsx');
}
로 향할 때https://example.com/excel/release?alias=product_list&id=1
정상적으로 실행되고 Excel 파일이 반환됩니다.그러나 행에 대한 열 머리글은 없습니다.데이터는 다음과 같이 표시됩니다.
1 150 1 3 2019-01-16 16:37:25 2019-01-16 16:37:25 10
단, 여기에는 ID, 비용 등의 열 헤더가 포함되어 있어야 합니다.이 출력에 열 헤더를 포함하려면 어떻게 해야 합니까?
설명서에 따르면 클래스를 변경하여WithHeadings
인터페이스를 정의하고 나서headings
컬럼 헤더의 배열을 반환하는 함수:
<?php
namespace App;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
class ProductExport implements FromQuery, WithHeadings
{
use Exportable;
public function __construct(int $id)
{
$this->id = $id;
}
public function query()
{
return ProductList::query()->where('id', $this->id);
}
public function headings(): array
{
return ["your", "headings", "here"];
}
}
이것은, 모든 export 타입에 대응합니다(FromQuery
,FromCollection
등)
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use DB;
class LocationTypeExport implements FromCollection,WithHeadings
{
public function collection()
{
$type = DB::table('location_type')->select('id','name')->get();
return $type ;
}
public function headings(): array
{
return [
'id',
'name',
];
}
}
이것과 조합할 수 있습니다.array_keys
컬럼 헤더를 동적으로 가져옵니다.
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class ProductExport implements FromQuery, WithHeadings
{
use Exportable;
public function __construct(int $id)
{
$this->id = $id;
}
public function query()
{
return ProductList::query()->where('id', $this->id);
}
public function headings(): array
{
return array_keys($this->query()->first()->toArray());
}
}
컬렉션과 함께 사용하는 경우 다음과 같이 수행할 수 있습니다.
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class ProductExport implements FromCollection, WithHeadings
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
// for selecting specific fields
//return ProductList::select('id', 'product_name', 'product_price')->get();
// for selecting all fields
return ProductList::all();
}
public function headings(): array
{
return $this->collection()->first()->keys()->toArray();
}
}
<?php
namespace App\Exports;
use App\Models\UserDetails;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
class CustomerExport implements FromCollection, WithHeadings
{
public function collection()
{
return UserDetails::whereNull('business_name')
->select('first_name','last_name','mobile_number','dob','gender')
->get();
}
public function headings() :array
{
return ["First Name", "Last Name", "Mobile","DOB", "Gender"];
}
}
<?php
namespace App\Exports;
use App\Models\StudentRegister;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class StudentExport implements FromCollection, WithHeadings
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return StudentRegister::select('name','fname','mname','gender','language','address')->get();
}
public function headings(): array
{
//Put Here Header Name That you want in your excel sheet
return [
'Name',
'Father Name',
'Mother Name',
'Gender',
'Opted Language',
'Corresponding Address'
];
}
}
컬렉션에서 내보내는 중인데 열 이름에서 제목을 자동으로 생성하려고 했습니다.다음 코드가 작동했습니다!
public function headings(): array
{
return array_keys($this->collection()->first()->toArray());
}
열 이름을 수동으로 쓰려면 열 이름이 포함된 배열이 반환됩니다.또한 WithHeadings Interface를 사용해 보는 것도 잊지 마십시오.
@Ric의 코멘트 감사합니다.
이 코드를 사용할 수 있습니다.
use App\Newsletter;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class NewsletterExport implements FromCollection, WithHeadings
{
public function headings(): array
{
return [
'Subscriber Id',
'Name',
'Email',
'Created_at',
];
}
public function collection()
{
return Newsletter::where('isSubscribed', true)->get(['id','name','email','created_at']);
}
}
언급URL : https://stackoverflow.com/questions/54245622/how-can-you-include-column-headers-when-exporting-eloquent-to-excel-in-laravel
'IT' 카테고리의 다른 글
웨서버 구성 설정을 사용하여 IIS 7에서 개별 파일의 캐시를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.23 |
---|---|
python으로 목록을 채우는 내장 기능 (0) | 2023.04.23 |
T-SQL을 사용하여 두 정수 값을 나누어 부동 결과를 얻는 방법은 무엇입니까? (0) | 2023.04.23 |
코코아 앱에서 터미널 명령 실행 (0) | 2023.04.23 |
뷰가 숨겨져 있을 때 자동 레이아웃을 사용하여 다른 뷰를 이동하는 방법은 무엇입니까? (0) | 2023.04.23 |