issue with my php code

zero942

New member
Hello everyone, I would like if you could help me with this code. I am using it in a web application, the problem persists in Excel formats

<?php
/**
* Created by PhpStorm.
* User: usuario1
* Date: 16/04/2018
* Time: 01:49 PM
*/
namespace RTR\ExcelExport;
/** dependencias
*
*Importación de clases necesarias
*/
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\RegistersEventListeners;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
use RTR\modelos\TDiasVisita;
use RTR\modelos\TPersona;
/**
* Clase ClienteDiasFormato
* Define un formato para exportar datos a un archivo Excel.
*/
class ClienteDiasFormato implements FromCollection, WithEvents, WithTitle, WithHeadings
{
use Exportable, RegistersEventListeners;
// Variable estática para almacenar el identificador del fabricante
static $fabricante = '';
/**
* Constructor de la clase
* @param string $fab Identificador del fabricante (opcional)
*/
public function __construct($fab = '')
{
self::$fabricante = $fab; // Asigna el identificador del fabricante a la variable estática
}
public function collection()
{
return collect([]); // Retorna una colección vacía, ya que los datos se cargan en otro momento.
}
/** Define el título de la hoja en el archivo Excel */
public function title(): string
{
return 'DiasDisponibles'; // Título de la hoja
}
/** Define los encabezados de las columnas en el archivo Excel. */
public function headings(): array
{
return [
'idPersona', // Encabezado de la primera columna
'iddias_visita' // Encabezado de la segunda columna
];
}
/** * Evento ejecutado después de que se genera la hoja de Excel.
* Aplica estilos, formatos y validaciones. */
public static function afterSheet(AfterSheet $event)
{
// Estilos para las celdas con fondo amarillo y texto centrado
$fondo = [
'font' => [
'bold' => true,
],
'alignment' => [
'horizontal' => 'center',
],
'fill' => [
'fillType' => 'solid',
'startColor' => [
'argb' => 'FFFFFF00', // Color amarillo
],
],
];

// Estilos de bordes finos para las celdas
$bordes = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
]
],
];
// Aplica un autofiltro a las columnas de la hoja
$event->sheet->setAutoFilter(
$event->sheet->calculateWorksheetDimension()
);
// Ajusta automáticamente el ancho de las columnas A y B
$event->sheet->getColumnDimension('A')->setAutoSize(true);
$event->sheet->getColumnDimension('B')->setAutoSize(true);
// Obtiene el fabricante actual basado en el usuario autenticado
$fabricante = TPersona::withoutGlobalScopes()->where('idOperador',Auth::user()->idOperador)->find(self::$fabricante);
// Obtiene los datos de las personas asociadas al fabricante
$personas = TPersona::withoutGlobalScopes()
->where('idOperador',$fabricante->idOperador)
->where('idFabricante',$fabricante->idPersona)
->where('idgrupo_persona','CLI')
->get(['idPersona','nombre_completo_razon_social'])->toArray();
// Obtiene los días disponibles asociados al fabricante
$diasDisponible = TDiasVisita::withoutGlobalScopes()
->where('idOperador',$fabricante->idOperador)
->where('idFabricante',$fabricante->idPersona)
->where('idestatus',1)
->get(['iddias_visita','descripcion_dias_visita'])->toArray();
// Inserta los datos de personas en la hoja, a partir de la celda D3
$event->sheet->fromArray(
$personas,
NULL,
'D3'
);
// Configura encabezados y estilos para las columnas de clientes
$event->sheet->mergeCells('D1:E1'); // Fusiona las celdas D1 y E1
$event->sheet->setCellValue('D1', 'Clientes'); // Encabezado de la tabla
$event->sheet->setCellValue('D2', 'ID'); // Encabezado columna D
$event->sheet->setCellValue('E2', 'NOMBRE'); // Encabezado columna E
$event->sheet->getColumnDimension('D')->setAutoSize(true);
$event->sheet->getColumnDimension('E')->setAutoSize(true);
// Inserta los datos de días disponibles en la hoja, a partir de la celda G3
$event->sheet->fromArray(
$diasDisponible,
NULL,
'G3'
);
// Configura encabezados y estilos para las columnas de días disponibles
$event->sheet->mergeCells('G1:H1'); // Fusiona las celdas G1 y H1
$event->sheet->setCellValue('G1', 'Dias disponibles'); // Encabezado de la tabla
$event->sheet->setCellValue('G2', 'ID'); // Encabezado columna G
$event->sheet->setCellValue('H2', 'Dia'); // Encabezado columna H
$event->sheet->getColumnDimension('G')->setAutoSize(true);
$event->sheet->getColumnDimension('H')->setAutoSize(true);
// Aplica bordes a las filas de personas
$length = count($personas);
$event->sheet->getStyle('D1:E'.($length+2))->applyFromArray($bordes);
// Configura validaciones de datos para la columna A
$event->sheet->setDataValidation(
'A:A',
(new DataValidation())
->setType(DataValidation::TYPE_LIST)
->setShowDropDown(true)
->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP )
->setShowErrorMessage(true)
->setFormula1("DiasDisponibles!$"."D"."$3:D$".($length+2))
);
// Aplica bordes a las filas de días disponibles
$length = count($diasDisponible);
$event->sheet->getStyle('G1:H'.($length+2))->applyFromArray($bordes);
// Configura validaciones de datos para la columna B
$event->sheet->setDataValidation(
'B:B',
(new DataValidation())
->setType(DataValidation::TYPE_LIST)
->setShowDropDown(true)
->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP )
->setShowErrorMessage(true)
->setFormula1("DiasDisponibles!$"."G"."$3:G$".($length+2))
);
// Aplica estilos de fondo y bordes a los encabezados
$event->sheet->getStyle('D1:E1')->applyFromArray($fondo);
$event->sheet->getStyle('G1:H1')->applyFromArray($fondo);
$event->sheet->getStyle('A1:B1')->applyFromArray($fondo);
$event->sheet->getStyle('A1:B1')->applyFromArray($bordes);
}
}

and it generates the following error
{,…}exception: "Symfony\\Component\\Debug\\Exception\\FatalThrowableError"file: "C:\\Users\\CB-03\\Documents\\siif\\siif-web\\vendor\\maatwebsite\\excel\\src\\Sheet.php"line: 464message: "Type error: Argument 1 passed to Maatwebsite\\Excel\\Sheet::fromArray() must be an instance of Maatwebsite\\Excel\\Concerns\\FromArray, array given, called in C:\\Users\\CB-03\\Documents\\siif\\siif-web\\app\\ExcelExport\\ClienteDiasFormato.php on line 121"trace: [,…]
 
You need to ensure that your export class implements the FromArray interface provided by the Maatwebsite Excel package.
 
Back
Top