web-dev-qa-db-ja.com

PHPExcelで生成されたExcelファイルが機能しません。 (ファイル形式または拡張子が無効です)

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;
7
sqlchild

投稿したファイルのPHPExcel出力の前にスペース文字が1つあります...スクリプトをチェックして、これがphp:// outputストリームのどこに送信されるかを確認してください。最初の<?php開始タグの前にスペースがないことを確認してください。特に?> <?phpまたは同様の終了/開始タグに注意してください。また、スクリプトによってincludedになる可能性のあるファイルも確認してください

18
Mark Baker

プログラムの最後の行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;
27
Govind

テキストエディタでファイルを開いて、ファイルにエコーされている偽の文字がないか確認します。もしあれば、おそらくどこで紹介されているのか理解できるでしょう。スペースや改行は明らかな原因です。

また、ファイルの<?phpタグの前、または?>タグの後にスペースや改行がないことを確認してください。

xlsx形式は実際にはxmlファイルのzip形式のコレクションであるため、テキストエディタに(PK署名の横に)明らかなテキスト文字列が表示されない場合は、解凍してみてください。それは問題に他の手がかりを与えるかもしれません。

Windowsプラットフォームで実行している場合、このエラーを引き起こす可能性のあるZipArchive php_Zip.dllリンクライブラリのバグのあるバージョンがいくつかあります。 ZipArchiveの代わりにPCLZipを使用できます。

5
Gordon Freeman

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');
4

Excelファイルを作成することは、任意のファイルにxlsxまたはxlsの拡張子を付けるだけの問題ではありません。

BIFF5またはBIFF8xlsファイルを作成できます(Excel post 95のすべてのバージョンがこれを読み取ります)。または、Excel 2003とExcel2007の両方(およびExcel 2010も)で開くことができるExcel 2003XML形式があります。

Excel 2007で行う詳細と例については、 PHPExcelの例 ページを参照してください。

もっとお手伝いできるかどうか教えてください。

1
liyakat

同じ問題に直面し、目的のデータの先頭から来ていて、このエラーの原因となっている改行文字があることがわかりました。後で、終了タグのあるphpファイルがあることがわかりました

"?>" 

通常、出力バッファにも移動するため、終了phpタグの使用は避けることをお勧めします。 ob_end_clean()を使用することも良いオプションです。

詳細については、こちらをご覧ください なぜ終了タグを省略するのですか?

0
vivek

問題を解決しました。コマンドを使用してZipをインストールしました

Sudo apt-get install php7.0-Zipそしてサーバーを再起動しますSudo service Apache2 restart私が使用したのはうまくいきます https://github.com/PHPOffice/PhpSpreadsheet

0