Laravel Excel Maatwebsite — функция суммирования не работает

#php #laravel #maatwebsite-excel

#php #laravel #maatwebsite-excel

Вопрос:

Я использую Maatwebsite 3.1 с Laravel 5.8.
Я создаю электронную таблицу со столбцами цен, которые я хотел бы суммировать. Для этого у меня есть следующий код:

 <?php

namespace AppExports;

use MaatwebsiteExcelConcernsFromCollection;
use PhpOfficePhpSpreadsheetWorksheetWorksheet;
use MaatwebsiteExcelConcernsWithStyles;

use IlluminateSupportCollection;

class MenuExport implements FromCollection, WithStyles
{
    private $data;

    function __construct($data) {
        $this->data = $data;
    }

    public function styles(Worksheet $sheet)
    {
        $numOfRows = count($this->data);
        $totalRow = $numOfRows   1;

        // Add cell with SUM formula to last row
        $sheet->setCellValue("B{$totalRow}", "=SUM(B1:B{$numOfRows})");
    }

    public function collection()
    {
        // Add new row with Total cell
        $extendedArr = [
            $this->data,
            ['Total:']
        ];
        
        return new Collection($extendedArr);
    }
}
 

Сгенерированный excel фактически имеет функцию SUM, но показывает 0.
Например, я вызываю экспортера со следующими данными:

 $data = [
    ['Coffee', 1.8],
    ['Cake', 3.6],
    ['Toast', 2.5]
];
        
return Excel::download(new MenuExport($data), "menu.xlsx");
 

Это результат:
введите описание изображения здесь

Если я вырезаю содержимое ячейки функции, а затем вставляю его — я получаю желаемый результат:
введите описание изображения здесь

Есть идеи, что не так?

Ответ №1:

На самом деле это было проще, чем я думал.
Все, что мне нужно было сделать, это добавить WithPreCalculateFormulas :

 :
use MaatwebsiteExcelConcernsWithPreCalculateFormulas;

class MenuExport implements FromCollection, WithStyles, WithPreCalculateFormulas
{
 

Из документации:

MaatwebsiteExcelConcernsWithPreCalculateFormulas
Заставляет PhpSpreadsheet пересчитывать все формулы в рабочей книге при сохранении, чтобы предварительно рассчитанные значения были немедленно доступны в MS Excel или другом средстве просмотра электронных таблиц Office при открытии файла.