PHPExcelで生成されたExcelファイルが機能しません。 (ファイル形式または拡張子が無効です)
PHPExcelのサンプルコードはローカルPCで正常に実行され、ファイルはローカルにダウンロードされ、Excel2007で正常に開かれます。しかし、サーバーで同じコードを使用すると、Excelに無効なファイルが表示されます。このファイルを開いて修復すると、正常に開きます。
Open and Repairオプションは使用せず、Openオプションのみを使用します。
問題を見つけることができませんでしたか?助けてください。
$objPHPExcel->setActiveSheetIndex(0);
//for XLSX
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
投稿したファイルのPHPExcel出力の前にスペース文字が1つあります...スクリプトをチェックして、これがphp:// outputストリームのどこに送信されるかを確認してください。最初の<?php
開始タグの前にスペースがないことを確認してください。特に?> <?php
または同様の終了/開始タグに注意してください。また、スクリプトによってincluded
になる可能性のあるファイルも確認してください
プログラムの最後の行ob_end_clean();
の前に行$objWriter->save('php://output');
を追加します。
コードは次のようになります。//XLSXの場合
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
ob_end_clean();
$objWriter->save('php://output');
exit;
テキストエディタでファイルを開いて、ファイルにエコーされている偽の文字がないか確認します。もしあれば、おそらくどこで紹介されているのか理解できるでしょう。スペースや改行は明らかな原因です。
また、ファイルの<?php
タグの前、または?>
タグの後にスペースや改行がないことを確認してください。
xlsx
形式は実際にはxml
ファイルのzip形式のコレクションであるため、テキストエディタに(PK署名の横に)明らかなテキスト文字列が表示されない場合は、解凍してみてください。それは問題に他の手がかりを与えるかもしれません。
Windowsプラットフォームで実行している場合、このエラーを引き起こす可能性のあるZipArchive php_Zip.dll
リンクライブラリのバグのあるバージョンがいくつかあります。 ZipArchiveの代わりにPCLZipを使用できます。
IS application/vnd.ms-Excel
ではなく
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
XLSの例:
$objPHPExcel = new PHPExcel();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-Excel');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
XLSXの例:
$objPHPExcel = new PHPExcel();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.ms-Excel');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
Excelファイルを作成することは、任意のファイルにxlsxまたはxlsの拡張子を付けるだけの問題ではありません。
BIFF5またはBIFF8xlsファイルを作成できます(Excel post 95のすべてのバージョンがこれを読み取ります)。または、Excel 2003とExcel2007の両方(およびExcel 2010も)で開くことができるExcel 2003XML形式があります。
Excel 2007で行う詳細と例については、 PHPExcelの例 ページを参照してください。
もっとお手伝いできるかどうか教えてください。
同じ問題に直面し、目的のデータの先頭から来ていて、このエラーの原因となっている改行文字があることがわかりました。後で、終了タグのあるphpファイルがあることがわかりました
"?>"
通常、出力バッファにも移動するため、終了phpタグの使用は避けることをお勧めします。 ob_end_clean()を使用することも良いオプションです。
詳細については、こちらをご覧ください なぜ終了タグを省略するのですか?
問題を解決しました。コマンドを使用してZipをインストールしました
Sudo apt-get install php7.0-Zipそしてサーバーを再起動しますSudo service Apache2 restart私が使用したのはうまくいきます https://github.com/PHPOffice/PhpSpreadsheet