テンプレートとして使用するために既存のファイルを編集しようとしています。 このバージョンでは、この関数は簡単に使用できるように開発されていません。 しかし、プラグイン内の関数を使用してfunction resisterEvents()
遊んでいるかどうかを知りたいのですが、自分でそれを行うことができます。
既存のファイルをダウンロードしてシートを選択する必要がありました。 しかし、それを編集しないでください。
これは私のコードです:
/**
* <strong i="16">@return</strong> array
*/
public function registerEvents(): array
{
return [
BeforeWriting::class => function(BeforeWriting $event) {
$event->writer->reopen(storage_path('app/public/files/mytemplate.xlsx'),Excel::XLSX);
$event->writer->getSheetByIndex(0);
return $event->getWriter()->getSheetByIndex(0);
}
];
}
いくつかの提案?
どうもありがとう
function resisterEvents()
内のこのコードを使用して値に情報を追加しようとしましたが、機能しません。
AfterSheet::class => function(AfterSheet $event) {
$event->sheet->setCellValue('G2', 'Hello world');
}
また、 function query()
介してデータを追加します
最後に、これはバージョン3.1.0で機能しました。 実際のバージョン3.1.10では、 reopen
関数が変更されているため、これは機能しません。 新しい更新と既存のファイルの編集の改善を待っています。
->reopen()
は内部メソッドであるため、注意して使用する必要があります。 new LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'))
を渡して再度開くことで、おそらく回避できます。
既存のファイル(テンプレート)の編集はロードマップ(バージョン3.3)にありますが、特定のリリース日はありません。
優先的に必要な場合は、コマーシャルサポートセクション( https://laravel-excel.com/commercial-support)をご覧ください。
この迅速な回答をありがとう。
私はこのようにしようとします。
これは現時点では優先事項ではありませんが、マクロと動的テーブルを使用して既存のExcelにデータを追加し、データを追加してExcelの数式を再計算する必要があるため、テストしています。 複雑なExcelでこれを行うのは簡単ではないことを知っているので、私はこれらすべてを試しています。
何か良いものを見つけたら報告します
更新の場合は、できるだけ早くコメントしてください
こんにちは、@ MarFelix。 同じ問題に直面していましたが、現在使用している回避策があります。 これはあなたを助けるかもしれません。
エクスポートがどのように行われるかを理解するために、Mattwebsiteコードを深く掘り下げました。 したがって、ファイルのダウンロードに使用される次の手順を覚えておいてください。
Excel
あなたの合格クラスExport
クラスを(この例では、使用しているdownload
法)Excel
クラスは、使用するWriter
を識別し、このWriter
export
メソッドを呼び出します。Writer
Export
Writer
開き(そしてBeforeExport
イベントを呼び出し)、新しいシートにデータを入力してから、独自のwrite
メソッドを呼び出します。write
メソッド( Writer
クラス)はBeforeWriting
イベントを呼び出し、XLSX以外のタイプのファイルに書き込みますそのため、 BeforeWriting
は機能しません。また、 BeforeExport
で使用すると機能しますが、新しいシートになります。
回避策として、エクスポートデータ(私の場合はFromCollection)を取得するためのフラグをメソッドに追加します。 このようにすると、ステップ2では処理されません。次に、 BeforeWriting
フラグをマークし、必要なシートを取得して、その上でexport
メソッドを呼び出します。
それがコードです:
public function collection()
{
if ($this->calledByEvent) { // flag
return $this->myCollectionToExport;
}
return collect([]);
}
public function registerEvents(): array
{
return [
BeforeWriting::class => function(BeforeWriting $event) {
$templateFile = new LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'));
$event->writer->reopen($templateFile, Excel::XLSX);
$event->writer->getSheetByIndex(0);
$this->calledByEvent = true; // set the flag
$event->writer->getSheetByIndex(0)->export($event->getConcernable()); // call the export on the first sheet
return $event->getWriter()->getSheetByIndex(0);
},
];
}
上を見てくださいdownload
とwrite
の方法Maatwebsite\Excel\Writer
、それは非常に有用となります。
この情報と手順を使用すると、より複雑な回避策を作成することができます。
最も参考になるコメント
->reopen()
は内部メソッドであるため、注意して使用する必要があります。new LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'))
を渡して再度開くことで、おそらく回避できます。既存のファイル(テンプレート)の編集はロードマップ(バージョン3.3)にありますが、特定のリリース日はありません。
優先的に必要な場合は、コマーシャルサポートセクション( https://laravel-excel.com/commercial-support)をご覧ください。