• 締切済み

PHPのCOMを使ってプログラミングの勉強をしています。

PHPのCOMを使ってプログラミングの勉強をしています。 Wordの新規文章を作成して保存するという簡単なコードを他のHPからコピペしてきて実行したのですが、FatalErrorがでてしまいます。何か環境に問題があるのでしょうか? とても簡単なコードが動かないので困っています。 回答いただけたらうれしいです。 コード: <?php $word = new COM("word.application"); //To see the version of Microsoft Word, just use $word->Version echo "I'm using MS Word {$word->Version}"; //It's better to keep Word invisible $word->Visible = 0; //Creating new document $word->Documents->Add(); //Setting 2 inches margin on the both sides $word->Selection->PageSetup->LeftMargin = '2"'; $word->Selection->PageSetup->RightMargin = '2"'; //Setup the font $word->Selection->Font->Name = 'Verdana'; $word->Selection->Font->Size = 8; //Write some text $word->Selection->TypeText("Hello, universe!"); //Save the document as DOC file $word->Documents[1]->SaveAs("a.doc"); //And of course, quit Word $word->quit(); $word->Release(); $word = null; //Give the user a download link echo '<a href="a.doc">Download file as .doc</a>'; ?> 環境: PHP Ver5.3 Word 2007 エラー: Fatal error: Call to undefined method variant::SaveAs() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\oreilly\sample_word_01.php on line 18

みんなの回答

noname#243182
noname#243182
回答No.2

エラーメッセージは未定義のメソッドを呼び出したことによるものですから、該当オブジェクトのクラスが期待するメソッドを持っているはずであるならば、これはオブジェクトの取得に失敗している可能性が非常に高いと考えられます。 アローでつないでいっぺんに処理してしまわず、ドキュメントオブジェクトを正常に取得できているかどうか、確認するコードを挟んでみてはいかがでしょうか。 ドキュメントを追加するメソッドに与える引数によっては、保存のメソッドを持たないオブジェクトが生成されるとか、そんなお作法があるとするなら、これはもう PHP 云々の話ではありませんので、あっちの資料を読み漁るしかないですね。 Microsoft Word 2003 ではマイドキュメントに a.doc が生成されましたよ。

noname#243182
noname#243182
回答No.1

最も簡単な例は、マニュアルの該当項をご覧ください。 各コンポーネントが持つプロパティ、メソッドの確認には、オブジェクトブラウザを使うのが便利です。 MS Office 2003 をフルインストールした場合、以下の手順で利用できます。 MS Word -> VB Editor (Alt + F11) -> オブジェクトブラウザ(F2) 似たような手順で MS Word 2007 についても、メソッドの有無を確認できるはずです。お試しください。

参考URL:
http://jp.php.net/manual/ja/class.com.php
MilkFamily
質問者

お礼

早速の回答、ありがとうございます。 ただ、オブジェクトブラウザで確認しましたが、 DocumentクラスにSaveAsメソッドはあると確認できました。 Documents[1]でDocumentオブジェクトを取得できていると思いますので、 やはりエラーの原因がわかりませんでした。 他に原因がありそうでしたら、教えていただければありがたいです。

関連するQ&A