PHP4 の COM 関数 (Windows バージョン)
最近 Excel を mysql に変換することについて書いていて、phpx フォーラムを検索したところ、そのような投稿はありませんでしたので、次のように再投稿しました:
PHP4 (Windows バージョン)
はじめに
組み込み PHP4 の COM 関数は、win32 環境でプログラムを開発するのに非常に魅力的ですが、関連する技術文書はまだ多くありません。この記事では、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 開発 (08-20-00) PHP4 で CGI
COM タグとして実行
それでは、始めましょう。PHP4 の COM を使用してコンポーネントをインスタンス化します、 new 演算子とオブジェクトの「OLE プログラム識別子」が必要です:
$instance = new COM("$identifier");
COM は PHP4 の予約語であるため、次のようになります。このオブジェクトの識別子をコンストラクターに渡すと、このコンポーネントのインスタンスを取得できるようになり、OOP クラスの性質に従って、そのメソッドとプロパティに簡単にアクセスできるようになります。
例:
$instance->[オブジェクト]->[メソッド1]->[メソッド2]->..->[プロパティ];
それはとても簡単です!
OOP 構造は PHP では機能しません (PHP 構文の問題により、属性の名前と値はドットや括弧などの不正な文字です)。そのため、PHP4 では 2 つの対応する関数が提供されています:
bool com_set ( class com_object, string property name, string property_value);
mixed com_get(class com_object, string property_name);
最後に、PHP4 はリモート コンピューター上にオブジェクト インスタンスを作成できる DCOM テクノロジーもサポートしています。
$Instance = new COM(string "Component name", string "remote_server_address");
?> 注: これは、PHP をセットアップするために DCOM 命令を使用しています。将来的には、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
# 「これは test2 ...」というテキストを 1 行入力します
#********************************** ************** *************
#オブジェクトをインスタンス化する
$word = new COM("word.application") or 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( "Useless test.doc");
#Close
$word->Quit();
ほんの少しだけ必要ですこのプログラムを読み、Word の OLE 技術文書を参照するのに数分もあれば、独自のプログラムで使用する必要のあるほぼすべての操作を学習できます。
MS Excel は PHP の COM 関数を使用しています
上記の Word の例と同様に、この例を学習する際には Excel の Visual Basic エディターでオブジェクト ブラウザーのヘルプ ドキュメントを参照する必要があります。
#ワークブックとそのシートを開きます。
#この例では、Excel インストールに付属のスプレッドシートを使用します。SOLVSAMP. Tour";
#コンポーネント オブジェクトをインスタンス化します
$ex = new COM("Excel.sheet") or Die ("接続できませんでした");
#プログラム名とバージョンを取得します
print "アプリケーション名:{ $ex->Application->value}
" ;
print "ロードされたバージョン: {$ex-> Application->version}
";
#使用できるようにワークブックを開いてください
$wkb = $ex->application->Workbooks->Open($workbook) or Die ("開かなかった");
#元のワークブックを事前に保存し、ワークブックのコピーを作成します
$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_format($cell->value);
print "新しい合計コスト =$$ 数値 - 以前は $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
";オプション、save
$ex->Application->ActiveWorkbook->SaveAs("Ourtest" ; Excel は連携して動作します。もちろん、利用できるオブジェクトはさらに多く、自作の OOP ラッパー クラスへのアクセスは、エクセル。
PHP COM を使用して Adobe Distiller にアクセスします
この最後の例は MS プログラムではありません。プログラムに PostScript ファイルがある場合は、それを PDF ドキュメントに書き換える (蒸留する) ことに興味があるでしょう。Adobe には 1 つの
プログラムがあります。 Distiller と呼ばれるインスタンスを生成できます。コードは次のとおりです:
$pdf = new COM("pdfdistiller.pdfdistiller.1");
?>
注意すべき点は、OLE 識別名「pdfdistiller」が Distiller のドキュメントに記載されていることです。それは無効です。
ファイルを抽出する最も基本的な方法は次のとおりです:
$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 を組み合わせることで、オープンソース ソリューションが提供されます。