PHP4 の COM 関数 (Windows バージョン)
最近 Excel を mysql に変換することについて書いていて、phpx フォーラムを検索したところ、そのような記事はありませんでしたので、次のように再投稿しました。 (Windows 版)
はじめに
Win32 環境でプログラムを開発する場合、PHP4 に組み込まれている COM 関数は非常に魅力的ですが、関連する技術文書はまだ多くありません。この記事では、MS office 2000 Word、Excel、および Adobe Distiller をそれぞれ扱う、PHP での COM 関数の使用方法を 3 つの例を使用して説明します。
COM テクノロジは、数年前に Microsoft によって提案および開発されました。この記事で言及されている関連用語は、OLE、OLE オートメーション、ActiveX、COM です。これらの単語の意味は基本的に同じです。 > このように、これらはすべて、カプセル化されたコード (オブジェクト) を使用して、Windows アプリケーションの一部の機能を完了することを意味します。 PHP4 COM 関数は、オブジェクト インスタンスに接続し、そのメソッドと
プロパティを使用できます。
以下のサンプルソースコードを使用したい場合は、私の構成を参照してください。
Windows 98 - MS Office 2000
Apache 1.3.9 Windows
PHP4.02 Dev (08-20-00) CGI として実行 PHP4 の
COM タグ
次に、PHP4 の COM を使用してコンポーネントをインスタンス化しましょう。 new 演算子とオブジェクトの "OLE プログラム識別子" が必要です。
$instance = new COM ("$identifier") );
?>
COM は PHP4 の予約語であるため、このオブジェクトの識別子をコンストラクターに渡し、次のようにこのコンポーネントのインスタンスを取得します。 OOP クラスの性質上、そのメソッドとプロパティ
に簡単にアクセスできます。
例:
$instance->[オブジェクト]->[メソッド 1]->[メソッド 2]->..->[プロパティ];
?>
とても簡単です!
OOP 構造は PHP では機能しません (PHP の構文の問題により、属性の名前と値はドットや括弧などの不正な文字です)。そのため、PHP4 では 2 つの対応する関数が提供されています:
bool com_set(クラス com_object, string プロパティ名, string property_value);
mixed com_get(class com_object, string property_name);
最後に、PHP4 はリモート コンピューター上にオブジェクト インスタンスを作成できる DCOM テクノロジーもサポートしています。
$Instance = new COM(string "Component name", string "remote_server_address");
?>
注: これは DCOM 命令 Set を使用しています。 PHPを立ち上げます。将来的には、PHP 開発者は Unix での DCOM のサポートを提供する予定です。
識別子、メソッド、プロパティ
識別子は次のような文字列です:
MS Word: "Word.Application" または "Word.Application.9"
MS Excel: "Excel.Application" または "Excel.Sheet"
ADOBE Acrobat: "Exch.application" または "PdfDistiller.PdfDistiller"
最後の識別子については、それを指定したいので、正しいものを取得しますオブジェクトの識別名を付けるのは簡単な作業ではありません。 VBA ドキュメントにアクセスできない場合は、Windows 登録
テーブルを検索し、HKEY_CLASSES_ROOT でそれを探すと、いくつかのアプリケーションの名前を取得できます。マシン上で有効なオブジェクト ID は、CLSID サブフォルダーに配置されます。
アプリケーションは通常、その COM メソッドとプロパティを説明するドキュメントを提供します。 office2000 では、プログラムを実行し、VBA エディタを開いて、オブジェクト エディタを選択できます。アプリケーション
ライブラリにメソッド名または属性名を入力し、下のウィンドウでクラスまたはメンバー名を右クリックし、[ヘルプ] をクリックすると、クラスまたはメンバーの説明が表示されます。
MSDN を参照することもできます。 Excel の例は次のとおりです。 [url]http://msdn.microsoft.com/library/officedev/off2000/xltocobjectmodelapplication.htm[/url]
COM 関数を使用して MS Word を操作する
さて、最初の例から始めましょう:
#*************************** ** *****************************
# この例は Zend サイトからのもので、若干の変更が加えられています
# 開くWord インスタンスを作成し、新しいドキュメントを作成します。役に立たない test.doc
# 「This is a test2...」というテキスト行を入力します。
#*************** ***** ************************************
#オブジェクトをインスタンス化する
$word = new COM("word.application") または die("Word をインスタンス化できません");
#バージョンを取得して表示します
print "ロード済みWord、バージョン {$word->Version}
";
#バージョンを取得する別の方法
$testversion = com_get($word->application,version);
print "Com_get() を使用したバージョン: $testversion
";
#可視化します
$word->Visible = 1; 🎜> #新しい文書の作成
$word->Documents->Add();
#文字の書き込み
$word->Selection->TypeText (" これはテストです...");
#Save
$word->Documents[1]->SaveAs("役に立たないテスト.doc"); >
#Close
$word->Quit();
?>
このプログラムを読んで参照するのに必要な時間は数分だけです。 Word の OLE テクノロジのドキュメントを参照すると、独自のプログラムで必要なほぼすべての操作を学習できます。
PHP の COM 関数を使用した MS Excel
上記の Word の例と同様に、この例を学習する際には、Excel の Visual Basic エディターのオブジェクト ブラウザーのヘルプ ドキュメントを参照してください。
#ワークブックとそのシートを開きます。
#この例では、Excel インストールに付属の SOLVSAMP.XLS というスプレッドシートを使用します
$workbook = "C:Program FilesMicrosoft officeOfficeSamplesSOLVSAMP に接続していません");
#プログラム名とバージョンを取得します
print "アプリケーション名:{$ex->Application->value}
";
print "読み込まれたバージョン: {$ex->Application->version}
";
#使用できるようにワークブックを開いてください
$wkb = $ex->application-> Workbooks->Open($workbook) or Die ("Did not open");
#元のワークブックを保存し、ワークブックのコピーを作成します
$ex->Application->ActiveWorkbook ->SaveAs("Ourtest");
#$ex->Application->Visible = 1; #この文をコメント化して Excel を表示します
# 新しいセルの読み取りと書き込み
# このセル E11 を読み取ることができます (第 4 四半期の広告)
$sheets = $wkb->Worksheets($sheet); # シートを選択します
$sheets ->activate; #アクティブ化します
$cell = $sheets->Cells(11,5) ; #セル(行列番号)を選択します
$cell->activate; #セルをアクティブ化します
print "Old Value" = {$cell->value}
"; #セルの値を出力します:10000
$cell->value = 15000; #15000 に変更します
print "新しい値 = {$ cell->value}
";#新しい値を出力=15000
#最後に、新しい値でセルを再計算します
$sheets->Calculate ;
#必須の場合計算したい場合、手動はオプションです
#効果の合計値が表示されます (セル E13)
$cell = $sheets->Cells(13,5) #セルを選択します (行 列) number)
$number = Number_format($cell->value);
print "新しい合計コスト =$$number - 以前は $47,732 でした。
";
#計算式によると、広告は会社の経費に影響します。ここでは $57,809 が表示されます。
#Excel の組み込み関数を使用します。
# PMT(パーセント/12 か月、支払い回数、ローン金額)
$pay = $ex->application->pmt(0.08/12,10,10000);
$pay = sprintf("%.2f",$pay);
print "$10,000 ローンの月々の支払い @8 % 利息 /10 か月: $ $pay
";
#毎月の支払い = $ -1,037.03 を出力する必要があります
#オプション、保存
$ex-> ;Application-> ;ActiveWorkbook->SaveAs("Ourtest");
#閉じる、質問なし
$ex->application->ActiveWorkbook->Close("False"); );
?>
この例では、PHP が Excel で動作できるようにします。もちろん、独自に作成した OOP クラスにもアクセスできます。 Excel にアクセスするのと同じくらい簡単です。
PHP COM を使用して Adobe Distiller にアクセスします。
この最後の例は MS プログラムではありません。プログラムに PostScript ファイルがある場合は、これを書き換え (蒸留) します。 PDF ドキュメント。Adobe には、インスタンスを生成できる Distiller と呼ばれる
プログラムがあります。コードは次のとおりです。
$pdf = new COM("pdfdistiller.pdfdistiller.1");
?> 注意すべき点が 1 つあります。 Distiller のドキュメントに指定されている OLE 識別子「pdfdistiller」が無効です。
ファイルを抽出する最も基本的な方法は次のとおりです。
$pdf->FileToPdf ($psfile, strOutputPDF '', strJobOptions ""); ?>
この $psfile はこの PostScript のファイル名、strOutputPDF は出力ファイル PDF のファイル名です。 StrJobOptions は Distiller のパラメータ ファイル名です。最後の 2 つのパラメータ
はオプションであり、デフォルトでは同じ名前になります。 この PS ファイル名と PDF ファイル名は、このデフォルトの Joboptions ファイルを使用します。例:
$pdf->FileToPdf ($psfile, "", "");
#Here $psfile は Myfile.ps であり、Myfile.pdf ファイルを返します。
?>
Distiller で使用できるメソッドとプロパティは他にもあります。ご興味がございましたら、Adobe の技術ドキュメントをご参照ください。
中止/考えられる問題
コード内で問題が発生した場合は、インスタンスを作成しても正常に閉じていない可能性があります。さらに悪いことに、アプリケーションがこのインスタンスによって保持される可能性があり、その結果、アプリケーション リストにアプリケーションのコピーが複数存在し、エラー結果を修正したとしてもアプリケーションに支障をきたすことになります。解決策は、バグを修正した後、すぐにバグを解決することです。
再び実行を開始する前に、タスクを使用して終了します。同じ理由で、コードの最後でもプログラムを終了し、適切なタイミングでインスタンスを削除する必要があります。
com_get と com_set で例外を処理するためのヒントがいくつかあります。例:
$Version = Com_get($instance->Application,"Version");
は Word では機能しますが、Excel ではエラーが発生します。
PHP4 ではインスタンス化できないオブジェクトがいくつかあります。これは、このプログラムにはカスタム インターフェイスが必要ですが、PHP4 はそれをサポートしていないためです。
なぜそれを使用するのでしょうか?
これら 3 つの例が、PHP の COM を使用して PHP スクリプトで Windows 4 プログラムにアクセスできるようにするためのヒントになれば幸いです。このコードは ASP よりも単純で、他の
PHP の強力なデータベース サポート機能を統合できます。 Microsoft は、COM (Combine COM with
Microsoft Transaction Server MTS)、ADO、OLE DB、OWC、Windows DNA など、さまざまな名前と構造の下で、この COM テクノロジをさまざまな側面で大々的にマーケティングしています。 PHP と Apache を組み合わせることで、オープンソース ソリューションが提供されます。