[PHP-users 12630] Spreadsheet_WriteExcel を使ったexcel出力でのセル内改行の方法?

Y.Watanabe php-users@php.gr.jp
Sun, 19 Jan 2003 21:59:09 +0900


わたなべです。

Linux環境のWEB/DBサーバにおいて、
PostgreSQLのデータをPHP経由でMs-Excel形式にしてダウンロードさせる
というアプリをつくるべく奮闘しておりますが、
細かいところで詰まっております。

どなたかお知恵ありませんか?

要は、セル内改行(Alt+Enterキーってやつ)が
うまくできないのです。
(なんでそんな凝ったことすんの?、というツッコミはさておき^^;)


Windwos環境ならCOM関数であっさりできそうですが、
UNIX環境でもphpでExcel出力できるものを探すのは苦労しました。

    Spreadsheet_WriteExcel
    http://phpclasses.psbweb.com/browse.html/package/767.html
という、結構イケてそうな(気がする)ライブラリを見つけたので、
それを使おうとしております。

下記が試したテストスクリプトです。
(上記のパッケージに入っていたテストスクリプトを参考につくった)

<?php
  //require_once('OLEwriter.php');
  //require_once('BIFFwriter.php');
  require_once('Worksheet.php');
  require_once('Workbook.php');

/**** 画面でやるときはこのコメントアウトははずす(CLIでやるときはいらないから)
  function HeaderingExcel($filename) {
      header("Content-type: application/vnd.ms-excel");
      header("Content-Disposition: attachment; filename=$filename" );
      header("Expires: 0");
      header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
      header("Pragma: public");
      }
  // HTTP headers
  HeaderingExcel('test.xls');
****/

  // Creating a workbook
  $workbook = new Workbook("-");
  $worksheet1 =& $workbook->add_worksheet('First One');
  $worksheet1->write_string(1, 1, "abc"); // B2のセルに"abc"という文字列が入る
  $worksheet1->write_string(2, 1, "d\nef"); // B3のセルに"d(セル内改行)ef"と
                                            //いう文字を入れたいが文字化けてしまう
  $workbook->close();
?>


上記のスクリプトをtest.phpとして保存し、

$ php test.php > test.xls 

としてできあがったファイルをEXCELで見ると、
B3のセルの改行文字が化けてしまいます。
(□みたいな文字に・・・)

「エクセルのセル内改行は、0x0aコードがうんぬん・・・」
という情報はgoogle検索のいろんな結果でみかけたのですが、
自分の上記のコードにどう反映させればよいのか
いまいちつかめませんでした。