- ベストアンサー
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; の記述を使ってから出るようになりました。 しかしこの「他のプログラム」は同時に走ってはいませんので、それが問題とは思いませんが、なぜこのようなことが起こるかについて、どなたかヒントをいただけると有り難いです。 よろしくお願いいたします。
- みんなの回答 (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; とする方法もあります。
お礼