Laravel Excel - формула добавление дополнительного @ символа, разбивая формулуPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel Excel - формула добавление дополнительного @ символа, разбивая формулу

Сообщение Anonymous »

Я работаю над методом экспорта в Ларавеле, чтобы генерировать файл XLSX с включенными формулами. Все работает, но при экспорте формула получает дополнительный символ @, добавленный в пару мест, который затем разбивает формулу ... значение ячейки отображается как #value .
Это функция:
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';
}
Это затем подключается к форме Post через кнопку, которая при нажатии потокочит сгенерированный XLSX в виде загрузки через Chrome (или любой другой браузер):

Код: Выделить всё

if ($request->method() == 'POST') {
return Excel::download(new ExcelReport([
'sheetOneData' => SheetOneData::all(),
'sheetTwoData' => SheetTwoData::all(),
'sheetThreeData' => SheetThreeData::all()
]), 'excel-report.xlsx');
}
Все работает просто хорошо, и файл загружается, но строки $ calcone и $ calctwo корректируются. Если я добавлю dd ($ row); перед возвратом $ row; (обработчик, который отображает строку с этими формулами), я вижу это:

Код: Выделить всё

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 => ""
]
Однако в файле xlsx эти формулы рендеринг как:

Код: Выделить всё

=SUM(IF(@SheetTwo!D2:D50"",1/COUNTIF(SheetTwo!D2:D50,@SheetTwo!D2:D50),0))
< /code>
($calcTwo
, нацеливание G2: G50 также нарушается таким же образом).
Кто -нибудь видел эту проблему раньше? Google не является полезным, так как поиск @ или «at symbol» очень неоднозначно, а помощь Excel смешно плохая. Спасибо!
sidenote: Если я вручную удаляю этот @ символ из сгенерированного файла XLSX, то формулы работают, как и предполагалось. Весь смысл этого файла XLSX заключается в том, что я могу сгенерировать его и отправлять по электронной почте, поэтому в настоящее время я могу изменить его перед отправкой, но он может быть полностью автоматизирован в будущем.

Подробнее здесь: https://stackoverflow.com/questions/759 ... ng-formula
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»