es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al exportar archivo de Excel en Laravel utilizando Maatwebsite\Excel

Tengo un error al exportar a un archivo de Excel en Laravel. ¿Qué estoy haciendo mal?

Mensaje de error: “El método Illuminate\View\View::mergeCells no existe”.

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;

class TimekeepingExport implements FromView
{
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * @return \Illuminate\Support\Collection
     */
    public function view(): View
    {
        return view('backend.timekeeping.export-temp', [
            'items' => $this->data['items'],
            'detail' => $this->data['detail'],
            'getDays' => $this->data['getDays'],
            'getDates' => $this->data['getDates'],
            'total_day_request' => $this->data['total_day_request']
        ])->mergeCells('A1:E1');
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error es causado por llamar al método mergeCells en una instancia de la clase Illuminate\View\View. Este método no existe en esa clase, por lo que causa el error.

    Para solucionar el problema, deberías llamar al método mergeCells en una instancia de la clase Maatwebsite\Excel\Sheet en su lugar. Puedes hacer esto modificando tu código de la siguiente manera:

    namespace App\Exports;
    
    use Maatwebsite\Excel\Concerns\FromCollection;
    use Illuminate\Contracts\View\View;
    use Maatwebsite\Excel\Concerns\FromView;
    use Maatwebsite\Excel\Sheet;
    
    class TimekeepingExport implements FromView
    {
        public function __construct($data)
        {
            $this->data = $data;
        }
    
        /**
         * @return \Illuminate\Support\Collection|View
         */
        public function view(): View
        {
            return view('backend.timekeeping.export-temp', [
                'items' => $this->data['items'],
                'detail' => $this->data['detail'],
                'getDays' => $this->data['getDays'],
                'getDates' => $this->data['getDates'],
                'total_day_request' => $this->data['total_day_request'],
            ])->with('mergeCells', 'A1:E1');
        }
    
        /**
         * @param \Maatwebsite\Excel\Sheet $sheet
         * @return array
         */
        public function registerEvents(): array
        {
            return [
                AfterSheet::class => function (AfterSheet $event) {
                    $event->sheet->mergeCells($event->sheet->getDelegate()->calculateWorksheetDimension());
                }
            ];
        }
    }
    

    Ten en cuenta que hemos agregado un método registerEvents, que se encargará de la fusión de las celdas. El ->with('mergeCells', 'A1:E1') pasa los argumentos necesarios al método registerEvents().

Comments are closed.