Я здесь в тупике и надеюсь, что у кого-то есть ответ или он может указать мне правильное направление!
Использование: 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
});
но все мы знаем, что происходит, когда вы что-то предполагаете. Кто-нибудь вообще имеет представление об этом? Заранее спасибо!






Вы можете перебирать каждую ячейку в найденном диапазоне и устанавливать для нее значение формулы, которая вам нужна.
$sheet->cells('H2:H'.$numRows, function($cells) {
foreach($cells as $cell) {
$cell->setValue('=SUM(G2*F2)');
}
});
Или, если у вас есть настраиваемая формула для некоторых ячеек в диапазоне на основе документации для PhpSpreadSheet, который использует Maatwebsite, вы можете увидеть, как установить диапазон ячеек здесь из массива.
Итак, для вашего случая вы можете создать одномерный массив и разместить его в виде столбцов следующим образом:
$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
"
Ах, недостающее звено. Большое спасибо!! Я действительно ценю это .. Я немного застрял на этом.