#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 при открытии файла.