Установить значение ячейки столбца как формулу в динамическом диапазоне Maatwebsite/Excel 2.1.0

Я в тупике и надеюсь, что у кого-то есть ответ или он может указать мне правильное направление!

Использование: Laravel 5.7 | Maatwebsite / Excel 2.1.0

Что я пытаюсь сделать:

Я хочу вставить базовую формулу в столбец через динамическое число строк при экспорте. Я знаю, что могу использовать

$sheet->setCellValue('H2','=SUM(G2*F2)');

установить конкретное значение ячейки. Я предполагаю, что ответ лежит где-то здесь

$sheet->cells('H2:H'.$numRows, function($cells) {

    // manipulate the range of cells

});

но мы все знаем, что происходит, когда вы что-то предполагаете. У кого-нибудь есть понимание этого вообще? Заранее спасибо!

1 ответ

Решение

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

$sheet->cells('H2:H'.$numRows, function($cells) {

     foreach($cells as $cell) {
         $cell->setValue('=SUM(G2*F2)');
     }

});

Или, если у вас есть настраиваемая формула для некоторых ячеек в диапазоне, основанная на документации для PhpSpreadSheet, которую использует Maatwebsite, вы можете увидеть, как установить диапазон ячеек здесь из массива.

Так что для вашего случая вы можете построить 1-й массив и разместить его в виде столбцов следующим образом:

$rowArray = [];
for($i = 0; $i <= $numOfRows; $i++) {
    $rowArray[] = '=SUM(G2*F2)'; // customize the formula if needed for specific row
}

$columnArray = array_chunk($rowArray, 1);
$sheet->fromArray(
        $columnArray,   // The data to set
        NULL,           // Array values with this value will not be set
        'H2'            // Top left coordinate of the worksheet range where
                        // we want to set these values (default is A1)
);

Это может вам помочь

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;


Class ExportData implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents

public function registerEvents(): array
{
    return [
        AfterSheet::class => function(AfterSheet $event) {
            $event->sheet->setCellValue('E'. ($event->sheet->getHighestRow()+1), '=SUM(E2:E'.$event->sheet->getHighestRow().')');
        }
    ];
}

...
"Your code to export"
...

"Note:
  1.in my case the data I want to get the SUM is in "E" Column you can change it as you want

  2.You only need to implement "WithEvents" and  use "AfterSheet" other things that I implemented is for other purposes
"
Другие вопросы по тегам