Это функция:
namespace App\Exports\Reports;
use App\Exports\Sheets\Reports\SheetOne;
use App\Exports\Sheets\Reports\SheetTwo;
use App\Exports\Sheets\Reports\SheetThree;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class ExcelReport implements WithMultipleSheets {
public function sheets(): array {
return [
new SheetOne($this->sheetOneData),
new SheetTwo($this->sheetTwoData),
new SheetThree($this->sheetThreeData)
];
}
}
< /code>
Проблема заключается в "Листе 2": < /p>
Код: Выделить всё
namespace App\Exports\Sheets\Reports;
use App\Models\SheetTwoData;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\FromCollection;
class SheetTwo implements FromCollection, WithHeadings, WithMapping, WithTitle {
protected Collection $sheetTwoData;
private int $maxIndex;
public function __construct(Collection $sheetTwoData) {
$this->sheetTwoData = $sheetTwoData;
$this->maxIndex = 2 + $sheetTwoData->count() - 1;
}
public function collection(): collection {
$calcOne = "SheetTwo!D2:D{$this->maxIndex}";
$calcTwo = "SheetTwo!G2:G{$this->maxIndex}";
return $this->sheetTwoData->push([
'',
'Totals',
"=SUBTOTAL(109, C2:C{$this->maxIndex})",
"=SUM(IF({$calcOne}\"\",1/COUNTIF({$calcOne},{$calcOne}),0))",
"=SUM(IF({$calcTwo}\"\",1/COUNTIF({$calcTwo},{$calcTwo}),0))",
''
]);
}
public function headings(): array {
return [
'Column A',
'Column B',
'Column C',
'Column D',
'Column E',
'Column F',
'Column G'
];
}
public function map($row): array {
if ($row instanceof SheetTwoData) {
return $row->toArray();
}
return $row;
}
public function title(): string {
return 'SheetTwo';
}
Код: Выделить всё
if ($request->method() == 'POST') {
return Excel::download(new ExcelReport([
'sheetOneData' => SheetOneData::all(),
'sheetTwoData' => SheetTwoData::all(),
'sheetThreeData' => SheetThreeData::all()
]), 'excel-report.xlsx');
}
Код: Выделить всё
array:6 [▼
0 => ""
1 => "Totals"
2 => "=SUBTOTAL(109, C2:C50)"
3 => "=SUM(IF(SheetTwo!D2:D50"",1/COUNTIF(SheetTwo!D2:D50,SheetTwo!D2:D50),0))"
4 => "=SUM(IF(SheetTwo!G2:G50"",1/COUNTIF(SheetTwo!G2:G50,SheetTwo!G2:G50),0))"
5 => ""
]
Код: Выделить всё
=SUM(IF(@SheetTwo!D2:D50"",1/COUNTIF(SheetTwo!D2:D50,@SheetTwo!D2:D50),0))
< /code>
($calcTwoКто -нибудь видел эту проблему раньше? Google не является полезным, так как поиск @ или «at symbol» очень неоднозначно, а помощь Excel смешно плохая. Спасибо!
sidenote: Если я вручную удаляю этот @ символ из сгенерированного файла XLSX, то формулы работают, как и предполагалось. Весь смысл этого файла XLSX заключается в том, что я могу сгенерировать его и отправлять по электронной почте, поэтому в настоящее время я могу изменить его перед отправкой, но он может быть полностью автоматизирован в будущем.
Подробнее здесь: https://stackoverflow.com/questions/759 ... ng-formula
Мобильная версия