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

});

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
5 135
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Ах, недостающее звено. Большое спасибо!! Я действительно ценю это .. Я немного застрял на этом.

FullStackOfPancakes 08.12.2018 07:18

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

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
"

Другие вопросы по теме