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

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

Использование: 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

});

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

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

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

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
"
0 голосов
/ 07 декабря 2018

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

$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)
);
...