Установить значение ячейки столбца как формулу в динамическом диапазоне 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
"