• 締切済み

PHPExcelバッファへの書き込みについて

初めてPHPExcelを利用してExcel出力を行ってみましたが $writer->save('php://output'); で保存せずブラウザ経由で直接出力させようとすると 出力されたExcelな中身がおかしくなります。 文字化けされた内容で出力処理を記載したスクリプトファイルの中身が 表示されたような感じです。 事前にheaderでファイル名も指定していますが指定したファイル名ではなく、 スクリプトを実行しているPHPファイルの名前のxlsになります。 原因等わかる方いたら教えて下さい。 ちなみに以下の出力では正常にファイルが出力されました。 $writer->save('test.xls'); 【環境】 PHPExcel 1.7.6 PHP 5.3.8

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

PHPExcelではありませんが、サーバにExcelが インストールされているならOLEを使う方法が あります。 //Excelをインスタンス化する $app = new COM("Excel.Application"); //警告を出さない $app->DisplayAlerts = false; //Workbooksコレクションを取得する $wbs = $app->Workbooks; //Workbookオブジェクトを追加する $wkb = $wbs->Add(); //WorkSheetsコレクションを取得する $wss = $wkb->WorkSheets; //1番目のWorkSheetオブジェクトを取得する $wks = $wss->_Default(1); //シート名を日本語にする $n = mb_convert_encoding("名前","SJIS","UTF-8"); $wks->Name = $n; //セル(Range)オブジェクトを取得する $rng = $wks->Cells(1,1); //セルに日本語を記入する $n = mb_convert_encoding("内容","SJIS","UTF-8"); $rng->Value = $n; //Workbookを名前を付けて保存する $wkb->SaveAs("D:\\~"); //Excelを終了する $app.Quit(); その他の操作はVBAによるマクロと同じです。 滅多に使わないプロパティの一部に日本語を使うと オカシクなるものがありますが、よく使うものは 日本語対応はできています。 Excelのバージョンが上がっても、マクロの変更が なければ修正無しで使えます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>おそらくシート名の文字コードがおかしいのかと思い、シート名をSJISにしてみましたが 解決できておりません。 まずシート名を半角英数にしてみてエラーがでるかどうか確認 エラーがでないなら、シート名のSJISがうまくいっていない エラーが出るならべつの理由

morimori7
質問者

補足

ご回答有難うございます。 >まずシート名を半角英数にしてみてエラーがでるかどうか確認 >エラーがでないなら、シート名のSJISがうまくいっていない >エラーが出るならべつの理由 シート名を半角にしたところ、 出力されたExcelは文字化けされた内容(エラーメッセージ)が表示されてしまいました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

PHPソースの文字コードがSJIS以外では? 私はDUALモデルをインスタンス化、つまり OLEオートメーションでやっていますが、 PHPはEUC-JPなので、漢字はSJISにして プロパティやメソッドに渡しています。

morimori7
質問者

補足

ご回答有難うございます。 おっしゃる通りPHPソースはUTF-8になります。 とりあえずファイル名をSJISにして再度出力してみたところExcelの ファイル名は指定通り出力されましたが今度は出力されたExcelに以下のような 内容が表示されていましました。 おそらくシート名の文字コードがおかしいのかと思い、シート名をSJISにしてみましたが 解決できておりません。 <br /> <b>Fatal error</b>: Uncaught exception 'Exception' with message 'Invalid character found in sheet title' in D:\php5\PHPExcel\Classes\PHPExcel\Worksheet.php:401 Stack trace: #0 D:\php5\PHPExcel\Classes\PHPExcel\Worksheet.php(657): PHPExcel_Worksheet::_checkSheetTitle('?V?[?g') #1 D:\Apache\Apache2.2\htdocs\test.php(119): PHPExcel_Worksheet-&gt;setTitle('?V?[?g') #2 {main}thrown in <b>D:\php5\PHPExcel\Classes\PHPExcel\Worksheet.php</b> on line <b>401</b><br />

関連するQ&A

専門家に質問してみよう