• 締切済み

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

  • PHPのDOMでXML読み込もうとしているのですが...

    PHPのDOMでXML読み込もうとしているのですが、getElementsByTagNameがうまくいきません。 PHPのバージョンは5です。 コードは以下のとうりです。 $document = new DomDocument('1.0'); $document -> Load('test.xml'); $items = $document -> getElementsByTagName('item'); if(!is_null( $items)){ echo count($items); echo "ok"; } XMLにitemノードは3つあるので、 echo count($items); で 3が返ってくると思うのですが、1しか返ってきません。 $items -> value でも何も表示されません。 でも cho "ok"; の ok は表示されます。 すみません。どなたかどこが間違っているのか教えていただけると助かります。

    • ベストアンサー
    • PHP
  • ワードプレスでショートコード内にphp

    ワードプレスのショートコード内で書きphpを書いたところ 動作しないようでした。 <a href="http://●●●=<?php echo get_the_title();?>"> ショートコード内では echoなどは使えないでしょうか? 表示はそのまま[ショートコード名]で記事内に貼っています。

    • 締切済み
    • PHP
  • phpのパス指定

    初めてphpを触っています。 いくつかの処理を外部ファイルにしたいのですが パスの指定が悪いのか、同じ階層に置いたり、いろいろ試してもfatal error ばかりです。 どこが悪いのか、教えていただけないでしょうか? サンプルとして、moto.phpのなかのincludeフォルダー内の外部ファイル:func.phpを実行することとします。 moto.php <?php require "./include/func.php"); $a = 2; $b = 1; $c = $a - $b * $a; echo return_word($a); echo "<br>"; //改行 echo return_word($b); echo "<br>"; //改行 echo return_word($c); ?> func.php <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> コマンドラインから php moto.php を実行すると <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> Fatal error: Call to undefined function return_word() in C:\xxxxxx\php\moto.php on line 9 となってしまいます。 外部ファイルは見えているようなのに、どうして関数がundefined になってしまうのでしょうか? phpの基本的なことなのかもしれませんが よろしくアドバイスお願いできればと思います。

    • ベストアンサー
    • PHP
  • phpのエラー(T_LNUMBER)について

    Parse error: syntax error, unexpected T_LNUMBER, expecting ',' or ';' in /..../..../result.php on line 202 というエラーが出ます。 このエラーはresult.phpファイルの202行目に「,」もしくは「;」が足りないよという意味を示していると思うのですが、どう足りないのかというところでひっかかっています。 改行してみたりして行数を確認してみると、特定のコードの箇所に対するエラーでした。 以下が該当する202行目のコードです。 if ($p > 1) { echo "<font size=¥"1¥"><a href=¥"$_SERVER[PHP_SELF]?p=$prev1¥"><</a></font>"; } 上記コードのecho "~~~~~の行が202行目です。 これはどこが間違っているのでしょうか? もしくはそもそも違う部分で間違っている可能性があるということなのでしょうか。。。 アドバイスをいただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • AccessVBAからWordのマクロを実行するには

    [環境]Access2000,Word2000 AccessVBAでWordのオブジェクトをつくりファイルを開くところまでは たどり着いたのですが、開いたWordファイルにあるマクロを実行させる ことが出来ずに困っています。 WordオブジェクトのApplicationとDocumentsオブジェクトの関係も把握 しきれていないため、おかしなソースになっているかも知れません。 よろしくお願いします。 sub DoMacro() Dim oWrd as Word.Application Dim oDoc as Word.Document Set oWrd = New Word.Application With oWrd Set oDoc = oWrd.Documents.Open("c:\test.doc") .Visible = True .Application.Run ("Macro1") oDoc.SaveAs "c:\newTest.doc" .Quit End With End Sub

  • PHPでFopenモードを「a」で開きたいのですが、

    PHPでFopenモードを「a」で開きたいのですが、 パーミッションを「777」でしか受け付けてくれません。 コードは、 $fp = @fopen("test.txt","a") or die("Error"); echo "ok"; fclose($fp); です。 サーバーはxreaでPHPのバージョンは5です。

    • 締切済み
    • PHP
  • VBSでWordの文字色変え

    VBSなのですが Wordファイルをドラッグしたら <と>で囲まれた文字の色を変更して保存する というものを考えております が <============= 部分でコンパイルエラー(ステーメントがありません) が発生します 初心者でさっぱりわからないのですが どなたかお助けを! よろしくお願いいたします 以下ソース Dim objWord Dim f Dim m If WScript.Arguments.Count<1 Then m="Hello!" MsgBox m WScript.Quit End If Set objWord=CreateObject("Word.Application") objWord.Visible=True For Each f In WScript.Arguments objWord.Documents.Open f objWord.Selection.Find.ClearFormatting objWord.Selection.Find.Replacement.ClearFormatting objWord.Selection.Find.Replacement.Font.Color = wdColorRed With objWord.Selection.Find .Text = "\<[!\>]@\>" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With objWord.Selection.Find.Execute Replace:=wdReplaceAll '<======================= objWord.ActiveDocument.SaveAs f&".doc" objWord.ActiveDocument.Close Next objWord.Quit WScript.Quit

  • 【PHP】正規表現でHTMLを置換したいのですが・・・

    HTMLのソースを、正規表現で置換をしてから画面に出力したいのですが、どのような正規表現を記述すればいいのか分からず困っています。。。。 下記(befor)の4つのリンクのうち、ファイルの拡張子が、pdf、doc、xlsのファイルだけ「download.php」というPHPのプログラムを通してからダウンロードさせるために、文字列を(after)の様に置換をしたいのですが、なかなかうまくいきません。。。 どなたか、ご指導のほど宜しくお願いいたします。 (befor) $html = '<a href="/files/aaaa.pdf">あ</a><br>' . '<a href="/files/cccc.html">い</a><br>' . '<a href="/files/dddd.doc">う</a><br>' . '<a href="/files/eeee.xls">え</a><br>' ; (after) $html = '<a href=download.php?url=/files/aaaa.pdf>あ</a><br>' . '<a href="/files/cccc.html">い</a><br>' . '<a href=download.php?url=/files/dddd.doc>う</a><br>' . '<a href=download.php?url=/files/eeee.xls>え</a><br>' ;

    • ベストアンサー
    • PHP
  • php修正について

    下記のPHPを書いています。 表示したときに_(/)されて文字と日付が出ないといけないのですが? 正しい表示は 強豪ぞろいの天皇賞ー武は1枠で波乱倍増??? (10/27)です。 Mysqlはデータは入っています。 教えてください。 <?php do { ?> <BLINK><IMG src="list.gif" width="13" height="13" border="0"></BLINK><FONT color="#cc00cc"><a href="blog_02.php?id=<?php echo $row_rs_blog_02['id']; ?>"><?php echo mb_substr($row_rs_blog_02['title'],0,30); ?> <?php if (mb_strlen($row_rs_blog['title']) >= '30') { echo('…'); } ?> </a><?php echo "("; echo substr($row_rs_blog_02['date'], 4,2); echo "/"; echo substr($row_rs_blog_02['date'], 6,2); echo ")"; ?></FONT><br> <br> <?php } while ($row_rs_blog_02 = mysql_fetch_assoc($rs_blog)); ?>

    • ベストアンサー
    • PHP
  • EXCEL/VBA:WORDファイルの上書き保存を確認する方法

    以下のvbaを実行すると、次のように動作します。   test1.xlsを開いて、Atest1.xlsの名前で保存するときに、既にファイルが存在する場合、excelでは上書き保存するか聞いてきます。  しかし、test1.docを開いて、Atest1.docの名前で保存するときは、いきなり上書き保存されます。 wordの場合も上書き保存するか聞くようにするには、どうしたら良いか教えてください。 Workbooks.OpenText Filename:="test1.xls" ActiveWorkbook.SaveAs Filename:="Atest1.xls" ActiveWindow.Close Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordRange As Word.Range Set wordApp = New Word.Application wordApp.Visible = True Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\test1.doc") Set wordRange = wordDoc.Content wordDoc.SaveAs Filename:="Atest1.doc" wordDoc.Close wordApp.Quit

このQ&Aのポイント
  • 洗濯機で泥付きの仕事着を洗った場合、泥はどこへいくのか気になります。
  • 私服の華麗な服とは別々に洗っているのに、私服にも泥がつくことはあるのでしょうか。
  • 洗濯機の仕組みを理解して、泥がつく可能性を知りたいです。
回答を見る

専門家に質問してみよう