• ベストアンサー

PHPSpreadsheet のエラーについて

お世話になります。 PHPspreadsheet を使っていて次のようなエラーメッセージが出てきました。 Fatal error: Cannot use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Xlsx because the name is already in use in C:\xampp\htdocs\NewBOM\displayBOMlist.php on line 225 エラーの該当箇所displayBOMlist.php on line 225 というのは次の物です。 222 require "vendor/autoload.php"; 223 use PhpOffice\PhpSpreadsheet\Spreadsheet; 224 use PhpOffice\PhpSpreadsheet\Reader\Xlsx; 225 use PhpOffice\PhpSpreadsheet\Writer\Xlsx; この行の最期を Xlsx からXls にするとエラーは出ません。 今まではこんなことをせずともちゃんと働いていたのですが、他のプログラムでも use PhpOffice\PhpSpreadsheet\Writer\Xlsx; の記述を使ってから出るようになりました。 しかしこの「他のプログラム」は同時に走ってはいませんので、それが問題とは思いませんが、なぜこのようなことが起こるかについて、どなたかヒントをいただけると有り難いです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

useで as を省略すると、一番右にある非修飾名が使われます。 どういうことかわかりやすく as で明記すると、 use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Xlsx; use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Xlsx; となるため、Writerの方のXlsxが『the name is already in use その名前は既に使われている』エラーになった訳です。 解決方法としてちょうどいいサンプルがこちらにあります。 https://qiita.com/yowayowa_engineer/items/81655fd85bb0c759a709 >use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader; >use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Writer; 読込用'Xlsx'と書込用'Xlsx'のエイリアスを別名にしてきちんと区別できるようにしてあります。 使用する際は、new Xlsx ではなく、new Reader といったようにします。 あとは use を使わないで、 $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx; とする方法もあります。

papashiroSooke
質問者

お礼

お礼が遅れたことをお詫びいたします。 目から鱗の落ちるようなご回答、勉強になりました。自分はまだ名前空間には慣れてないので、これを機に勉強を続けたいと思います。

Powered by GRATICA

その他の回答 (1)

  • t_hirai
  • ベストアンサー率28% (222/788)
回答No.1

chatgptとかに確認してみてはどうでしょうか。

papashiroSooke
質問者

お礼

早速のご回答に感謝いたします。 Edge の Co-pilot に聞いてみます。

Powered by GRATICA

関連するQ&A