[PHP-users 9632] EXCELへの出力

斎藤 php-users@php.gr.jp
Thu, 29 Aug 2002 21:10:40 +0900


はじめまして、齋藤です。

COM関数を使用して、サーバ側でEXCELファイルを作成したいのですが、
サーバ側でEXCELファイルを作成しようとすると途中で失敗し、
EXCELのプロセスも残ったままになってしまいます。

この時、ブラウザには下記のエラーメッセージが表示されます。

Fatal error: Maximum execution time of 30 seconds exceeded in c:\home\saitou\excel.php on line 25

PHPでCOMの使い方が悪いのでしょうか。
それとも、何か設定が必要なのでしょうか。

【スクリプト】は、
test.php(長いので関係ないと思われるところは削りました)
<?
 require("excel.php"); 
 $excel_handle = new excel;
 $excel_handle->tsuika();

 ・・・・・・・

 $excel_handle->write(1, 1, "会員No");
 $excel_handle->write(1, 2, "会員名");

 ・・・・・・・

 while(odbc_fetch_row($MyResult))
 {
  ・・・・・・・・・・

  $excel_handle->write(1, $cnt*2+3, $A);
  $excel_handle->write(1, $cnt*2+4, $A);

  ・・・・・・・・・・
 }

 ・・・・・・・・・

 $excel_handle->write(1, $cnt*2+3, "残数");
 $excel_handle->write(1, $cnt*2+4, "残数");

 ・・・・・・・・・

 $excel_handle->write(2, 1, "会員No");
 $excel_handle->write(2, 2, "会員名");

 ・・・・・・・・・

 while($cnt2 >= 0)
 {
  ・・・・・・・・・

  $excel_handle->write(2, $cnt2*2+3, "誕生日");
  $excel_handle->write(2, $cnt2*2+4, "セレクト");

  ・・・・・・・・・
 }

 ・・・・・・・・・

 while(odbc_fetch_row($MyResult))
 {
  ・・・・・・・

  $excel_handle->write($cnt2, 1, $No);
  $excel_handle->write($cnt2, 2, $Name);

  ・・・・・・・

  for( $i = 0; $i < $cnt; $i++ ) {
   ・・・・・・・・

   $excel_handle->write($cnt2, $i*2+3, $Cake1[$Year[$i]]);
   $excel_handle->write($cnt2, $i*2+4, $Cake2[$Year[$i]]);
  }

  ・・・・・・・・
 }
 $excel_handle->save("C:\\home\\saitou\\Cake1.xls");
 $excel_handle->close();
 unset($excel_handle);
?>

excel.php
<?
class excel {
 var $excel;
 var $wkb;
 var $sheets;

 function excel() {
  $this->excel = new COM("excel.application") or die("コンポーネントEXCELの呼び出しに失敗しました");
 }

 //新規作成
 function tsuika() {
  $this->wkb = $this->excel->application->workbooks->add();
  $this->sheets = $this->wkb->Worksheets("sheet1");
  $this->excel->application->DisplayAlerts ="False";
  $this->excel->application->Visible = true;
 }

 //書き込み
 function write($row,$col,$res) {
  $this->sheets->activate;
  $dainyuu = $this->sheets->cells($row,$col);
  $dainyuu->activate;
  $dainyuu->value = $res;
 }

 //保存
 function save($hozon) { 
  $this->wkb->Saved = true;
  $this->wkb->SaveAs($hozon);
 }

 //クローズ
 function close() {
  $this->wkb->close();
  $this->excel->Quit();
  unset($this->excel);
 }

}
?>

【動作環境】は、
Windows2000 Pro sp2
Apache 1.3.26
PHP 4.1.2(CGIで動作)
IE  6.0

よろしくお願いします。