4

PHPExcel プログラムを作成した後、最後のステップはワークシートを保存することです。これを行うには、Excel 2007 でファイルを生成するようにこれらのルールを適用します。

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="workbook1.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

Excel2007 ファイルを取得する代わりに、任意の種類のブラウザーでの出力は次のようになります。

07:31:12 新しい PHPExcel オブジェクトを作成します 07:31:12 プロパティを設定します 07:31:12 データを追加します 07:31:12 シートの名前を変更します 07:31:12 Excel2007 形式に書き込みます PKæ;È< —![[Content_Types] .xml”MNã0…÷=…å-Jܲ@%í‚Â*Q`ìIcÕ±-{úw{&I ˆE j7±"û½oüg÷œ%”NKë”ü‰Ï¦£by‰]*y„Hª† F¦Üp4SùØH¤ß¸Aªµ\¸ï„òÁa†ŸŽXñJD£-dÄÙHì .....

色々なブラウザで試してみましたが同じ結果です。一方、以下の行でファイルを保存すると、正常に動作します。

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('/usr/local/myWorkbooks/workbook1.xlsx');  

ブラウザで機能しない理由はありますか? よろしくお願いいたします。

4

2 に答える 2

0

出力を php://output にストリーミングする場合は、その出力ストリームに他のものをエコーし​​てはなりません。あなたは明らかに行をエコーし​​ています:

07:31:12 Create new PHPExcel object 
07:31:12 Set properties 
07:31:12 Add some data 
07:31:12 Rename sheet 
07:31:12 Write to Excel2007 format 

Excelファイル自体の前に出力する

それらのエコー行を削除します

これは標準的な PHP の動作であり、ここで過去に何千回も回答されている質問です: echoes go to php://output.... 「ヘッダーは既に送信されました」というエラーも表示されないことに驚いています。同じように

于 2012-10-05T06:27:04.943 に答える
0

ob_end_clean()保存する前に、出力バッファを消去し、使用してバッファリングをオフにする必要があります。代わりにこれを行います:

    $objWriter =  PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="workbook1.xlsx"');
    header('Cache-Control: max-age=0');

    ob_end_clean();
    $objWriter->save('php://output');
    exit;
于 2018-08-18T15:47:53.287 に答える