Laravel с Maatwebsite

Я хочу изменить название заголовка столбца. Как дела?

Это код в контроллере:

public function  excelterima($nm_perusahaan){
    if($user = Auth::user()->admin == 2){
        $users = Mstbeasiswa::select('NO_ANGGOTA', 'NM_ANGGOTA', 'GOLONGAN', 'NPK', 'CABANG', 'NM_ANAK', 'NM_SKL', 'id')
                 ->where('flag_terima', '1')
                 ->where('NM_PERUSAHAAN', $nm_perusahaan)
                 ->orderBy('id', 'asc')
                 ->get()->toArray();

        //work on the export
        Excel::create($nm_perusahaan, function($excel) use ($users){
            $excel->sheet('sheet 1', function($sheet) use ($users)
            {
                $sheet->fromArray($users);
                ob_end_clean();
            });
        })->download('xlsx');
        return redirect('/beasiswaditerima');   
    }else{
      return redirect('/home');   
    }
}

выходной ток:

текущий выход

1 ответ

Решение

По умолчанию fromArray() метод LaravelExcelWorksheet instance автоматически сгенерирует заголовок для вас на основе заданных ключей массива. Для того, чтобы отключить эту автогенерацию, необходимо пройти false к пятому параметру ($headingGeneration). Вот fromArray() Подпись метода для вашей справки:

public function fromArray($source = null, $nullValue = null, $startCell = 'A1', $strictNullComparison = false, $headingGeneration = true)

Вы можете использовать row() способ добавить пользовательский заголовок. Используя ваш пример кода, теперь код должен выглядеть так:

$users = Mstbeasiswa::select('NO_ANGGOTA', 'NM_ANGGOTA', 'GOLONGAN', 'NPK', 'CABANG', 'NM_ANAK', 'NM_SKL', 'id')
    ->where('flag_terima', '1')
    ->where('NM_PERUSAHAAN', $nm_perusahaan)
    ->orderBy('id', 'asc')
    ->get()
    ->toArray();

Excel::create($nm_perusahaan, function ($excel) use ($users) {
    $excel->sheet('sheet 1', function ($sheet) use ($users) {
        // Set your custom header.
        $sheet->row(1, ['COL1', 'COL2', 'COL3', 'COL4', 'COL5', 'COL6', 'COL7', 'COL8']);

        // Set the data starting from cell A2 without heading auto-generation.
        $sheet->fromArray($users, null, 'A2', false, false);
    });
})->download('xlsx');

Или вы можете просто сохранить fromArray() вызов метода, но позже замените автоматически сгенерированный заголовок row() метод вроде так:

$excel->sheet('sheet 1', function ($sheet) use ($users) {
    $sheet->fromArray($users);

    // Replace the header, but this should come after fromArray().
    $sheet->row(1, ['COL1', 'COL2', 'COL3', 'COL4', 'COL5', 'COL6', 'COL7', 'COL8']);
});

Надеюсь, это поможет!

Другие вопросы по тегам