Как добавить новую строку в PhpSpreadSheet? - PullRequest
2 голосов
/ 10 июня 2019

Я пытаюсь добавить новую строку в PhpSpreadsheet, но возникает эта ошибка:

(1/1) FatalThrowableError
Type error: Argument 1 passed to Maatwebsite\Excel\Sheet::fromArray() must be an instance of Maatwebsite\Excel\Concerns\FromArray, array given, called in /home/bruno/Documentos/Sistemas/atualizacao_sistema/ambev_heva/app/Exports/EventExport.php on line 270

Код строки:

$item_values = [
'ITEM1','ITEM2','ITEM3','ITEM4'
];
$sheet->fromArray([$item_values],NULL,'A'.$lineStart);

Изменить: я забыл сказать, что я использую Maatwebsite \ Excel

код:

class EventExport implements FromView, WithEvents
{....

    public function registerEvents(): array
    {

        $event = $this->getEvent();

        // TODO: Implement registerEvents() method.
        return [

            AfterSheet::class => function(AfterSheet $afterEvent) use ($event){

                /** @var Sheet $sheet */
                $sheet = $afterEvent->sheet;
                .....
                $sheet->fromArray([$item_values],NULL,'A35');


                //Aplicar mudanças
                $afterEvent->sheet = $sheet;
            }
        ];
    }

1 Ответ

0 голосов
/ 10 июня 2019

Если вы не будете использовать массив, вы можете установить ячейки вручную:

$reader =  \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
$spreadsheet = $reader->load('<Path>'); // add here the Path to the Excel to read
$sheet = $spreadsheet->getActiveSheet(); 
$rows = 8;     // row count
$colums = 8;   // column count
$valuearray = array(array());// Add here the Values
$counti=1;
while ($rows >= $counti) {
    $countj=0;
    while ($colums>= $countj) {

        $col=chr(65+$countj); //calc Column number
        $sheet->setCellValue($col.rows , $valuearray[i][j]); //Write cells
        $spreadsheet->getActiveSheet()->getStyle($col.$rows)->getAlignment()->setWrapText(true); //set wrap for newlines in cells
        $countj++;
    }
    $counti++;  
}

Если вы вставите строку, используйте

$sheet->insertNewRowBefore($row, 1);
...