EXCEL2007、PHPのCOM呼び出し("excel.application")で、

excelファイル編集→pdfへのコンバート(ExportAsFixedFormat)をしています。

現サーバ:os:windows2003
新サーバ:os:windows vista

なぜか、現サーバでは動くソースが、新サーバでは動きません。
他に安価なツールも見当たらず(Convert XLS は約 6万円)、
どうにか解明したいのです。
ご存知のかたがいらっしゃいましたら、対策を教えて頂けませんか?

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/04/19 19:53:00
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Galapagos No.1

回答回数963ベストアンサー獲得回数89

ポイント50pt

PHPのバージョンや、どのようなエラー状況なのか分からないので、以下の点をご確認下さい。


  1. 新サーバにはExcel2007またはOffice2007をフルセットでインストールしていますか? たとえばVBAがインストールされていないということはありませんか?
  2. COM呼び出しには成功するのですか? たとえば、Excelブックを新規作成し、Worksheetに書き込むということをPHPスクリプトで実現できていますか?
id:yayoharu

どうもありがとうございます。

現サーバ:os:windows2003、PHP 5.2.9-2、

新サーバ:os:windows vista、PHP Version 5.3.0

です。

1.Alt + F11 キーを押すと、 Visual Basic Editor が開きます。入っているように思います。

2.新サーバの挙動として、呼び出しは成功しています。EXCELファイルの編集→EXCELファイルでの保存(SaveAs)は成功しています。

追記、新サーバで、手動でPDFファイルへの保存は可能です。(アドオンは入っている。)

2011/04/19 01:23:25
id:Galapagos No.2

回答回数963ベストアンサー獲得回数89

現サーバ:os:windows2003、PHP 5.2.9-2、

新サーバ:os:windows vista、PHP Version 5.3.0

PHP 5.2と5.3では仕様が大幅に変わっています。

COMクラスは同じなのですが、たとえばereg系関数やsplit系関数は廃止されています。

このあたりの影響がないかどうかご確認下さい。

詳細は「PHP 5.3の新機能と変更点」をご覧下さい。

id:yayoharu

Galapagosさん、どうもありがとうございます。

ereg系は使っていないので、おそらく違う問題と踏んでいるのですが…

2011/04/19 10:28:48
id:taknt No.3

回答回数13539ベストアンサー獲得回数1198

ポイント49pt

>variant->ExportAsFixedFormat(0,'C:\test.xls.pdf')

Vistaだと Cドライブのルートにファイルを作成できないかと思います。

Cドライブのルートに何かフォルダを作ってそこに保存させてやればいいのかと。

id:yayoharu

どうもありがとうございます。

サンプルの7行目を、

$path ="C:\\xampp\\test.xls";

に変えて試しました。

結果は、

SaveAs → 正常

ExportAsFixedFormat → Fatal error(内容はコメントに書いたものと同等。)

2011/04/19 11:09:24
  • id:taknt
    どこかアクセス禁止のところに 書き込みしてるんじゃないの?きっと。
  • id:taknt
    >2.新サーバの挙動として、呼び出しは成功しています。EXCELファイルの編集→EXCELファイルでの保存(SaveAs)は成功しています。

    まずは 何が 動かないのかを 示さないと 解決はしないだろう。


    OSの違いが原因なのか、PHPの違いが原因なのか はたまた 移行にあたってのただの設定ミスなのか、またこれらの複合的な要因によるものなのか・・・。

  • id:yayoharu
    takntさん
    コメありがとうございます。
    動かないのは
    ExportAsFixedFormat
    の行です。

    後手後手で申し訳ないです・・・サンプル挙げますね。
    <?php
    // EXCELのインスタンス作成
    $excel = new COM("excel.application") or die;
    $excel->DisplayAlerts = 0;
    // ファイルオープン & 書込み
    //ファイル新規作成
    $path ="C:\\test.xls";
    $book = $excel->Workbooks->Add();
    $sheet = $book->Sheets(1);
    $sheet->activate;
    foreach( range(1,10) as $i){
    $sheet->Cells($i,1)->Value = $i;
    }
    // $book->SaveAs($path);
    $book->ExportAsFixedFormat(0, $path.'.pdf');
    $book->Close();
    $excel->Quit();
    unset($excel);
    echo "end\n";
    ?>

    ↓下記エラーです。コメントアウト行を入れ替える(SaveAs を生かすと、正常に生成されます。)

    Fatal error:
    Uncaught exception 'com_exception' with message
    '<b>Source:</b> Unknown<br/><b>Description:</b>
    Unknown' in C:\**********.php:15 Stack trace:
    #0 C:\**********.php(15):
    variant->ExportAsFixedFormat(0,'C:\test.xls.pdf')
    #1 {main} thrown in C:\**********.php on line 15
  • id:Galapagos
    Excel2007またはOffice2007を再インストールしてみて下さい。
  • id:yayoharu
    ありがとうございます、やってみます!
  • id:yayoharu
    上司と行き違って、Excel2007の再インストールはできず、
    サーバを換えることになりました。
    モヤモヤが残りますが、また、OSを入れなおす話にもなりました。
    申し訳ないです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません