PHP:COMモジュール
PHPの標準で、MS-Wordを直接扱えるCOMモジュールが提供されている。COMというのはOLE2の基盤技術のことで、アプリケーションから別のアプリケーションを呼び出して使うためのプロトコル(?)らしい。余り詳しくはないので、間違っているかも。
ともあれ、COMモジュールを使うには、
・OSがWindowsで、
・MS-Wordがインストールされている、
のが条件。
PHP:COMモジュール自体もウィンドウズ版でのみ提供されている。
自分の環境は、
Windows7(64bit)、MSOffice2003、XAMPP、という条件で動いた。
php.ini設定
php.iniの設定で、COMを使えるように変更する必要がある。ここの実行時設定にあるディレクティブを、
デフォルトのままコメントを削除したら動いた。
dcomcnfgの設定
スターとメニューの「プログラムとファイルの検索」にdcomcnfgと入力して、dcomcnfg.exeを実行。
すると、こんなウィンドウが開きました。
後は…書くのが面倒なので、こちらの素晴らしいページを参考に作業を進める。
つまり、
1)コンポーネントサービス > コンピューター > マイ コンピューター
のプロパティを表示
2)プロパティタブの「COMセキュリティ」を選択
3)起動とアクティブ化のアクセス許可の既定値の編集
4)IUSR_を追加する
追加ボタン > 詳細設定ボタン > 検索ボタン > IUSRを選択してOK連打
といった感じで動きました。
Bookmarkとの連携
ワードをテンプレートの用に使うことが出来ます。そのときに利用するのが「ブックマーク」という機能。
HTMLのフォーム要素のような存在です。
ブックマークにも名前があるので、名前を使って要素を指定し、要素の値を読み込んだり書き込むことがPHPから出来ます。
便利そうですよね。
サンプルコード
こんなので動きます。$word = new COM( "Word.Application", NULL, CP_UTF8 ) or die( 'no word!?' ); $word->Visible = 0; $word->Documents->Open( 'word.doc' ); // show all bookmarks $num_bookmarks = $word->ActiveDocument->Bookmarks->Count; for( $i = 1; $i <= $num_bookmarks; $i ++ ) { try { $mark = $word->ActiveDocument->Bookmarks($i)->Name; $wdMark = $word->ActiveDocument->Bookmarks( $mark ); $range = $wdMark->Range; $range->Text = "#{$i}:$mark"; } catch( Exception $e ) {} } $word->Documents[1]->SaveAs( 'word_new.doc' );
結構、問題が・・・
実際に動かすと分かりますが、
すべてのブックマークを読み込めませんでした。
また日本語を書き込むと後ろにゴミのようなものが・・・!
そこそこ動きますが、仕事に必要な精度は出せませんでした。
すべてのブックマークを読み込めませんでした。
また日本語を書き込むと後ろにゴミのようなものが・・・!
そこそこ動きますが、仕事に必要な精度は出せませんでした。
0 件のコメント:
コメントを投稿