フォームに渡される値を取得するために使用される変数 $inputs を設定した後、printdate を保存するためのダミー値を作成する必要があります - この変数が必要な理由については後ほど説明します - ここで、次の 4 行が表示されます。コード:
PHP での COM 操作には、アセンブリ内のクラスのインスタンスを要求する必要があります。私たちの場合は、Word を使用して作業します。前のスクリーンショットに示されているコードを考慮すると、完全に署名された Word PIA を構築できます。
最悪の方法は、php ページ上のすべてをハードコーディングしてから、それらを word オブジェクトに追加することです。次の理由により、この方法は使用しないことを強くお勧めします:
1 コードは柔軟ではないため、PHP コンテンツを変更するにはスクリプトの再修正が必要になります。
もう 1 つの方法は、「検索置換」を使用することです。 PHP に組み込まれているこの機能は非常に強力です。 Word 文書を作成し、置換する必要があるプレースホルダーのコンテンツの周囲にセパレーターを配置します。たとえば、次の内容を含むドキュメントを作成します:
3 番目のオプションは私の推奨事項で、Word のプレミアム テーマです。プレースホルダーを表すためにフィールドを使用し、PHP コードでは、対応するフォーム値でフィールドを直接更新します。
この方法は柔軟かつ高速で、Word のベスト プラクティスに準拠しています。これにより、ファイルの全文検索も回避され、パフォーマンスの向上に役立ちます。このオプションには欠点もあることに注意してください。
Word 文書にフィールドを挿入する方法 (カスタマイズされたバージョンを表示するにはここをクリック) については、関連する Word ヘルプ トピックとマニュアルを参照してください。このデモでは、5 つの MERGEFIELD フィールドを含むドキュメントがあります。さらに、簡単にアクセスできるように、ドキュメントと PHP スクリプトを 1 つのディレクトリに配置しました。
printdate フィールドには、対応するフォーム フィールドがないことに注意してください。これが、偽の printdate を $inputs 配列のキーとして追加する理由です。このキーがなくてもスクリプトは実行できますが、インデックス printdate が $inputs 配列に存在しないことを示すプロンプトが表示されます。
コードをコピー
PrintOut メソッドにはいくつかのオプションのパラメーターがありますが、ここでは最も単純な形式を使用します。これにより、Windows マシンにリンクされているデフォルトのプリンタにコピーが印刷されます。
PrintPreviewを使用して印刷プレビューを行うことができます。もちろん、純粋に自動化されたシナリオでは、印刷に PrintOut を直接使用します。
印刷ジョブがバックグラウンドを完全に終了するまでに時間がかかるため、Word アプリケーションを終了する前に少し待つ必要もあります。遅延(3)がなければ、$w->Quit が即時に実行され、印刷ジョブは即時に終了します。
最後に、$w->Quit(false) を呼び出して、PHP スクリプト呼び出しを通じて Word アプリケーションを閉じることを選択します。ここで提供される唯一のパラメータは、終了する前に変更を保存するかどうかを示すことです。ドキュメントに変更を加えますが、他のユーザーの入力用にクリーンなテンプレートを用意したいため、変更は保存しません。
コーディングが完了したら、フォームページをロードし、コンテンツを入力してフォームを送信できます。以下のスクリーンショットは、Word ドキュメントの更新中の PHP スクリプトの出力を示しています。
コーディング速度を向上させ、PIA をより深く理解します
PHP は弱く型付けされた言語です。 COM オブジェクトはオブジェクト型です。 PHP コーディング プロセスでは、オブジェクト内でコードの自動提案と補完機能を使用できません。同様のことが Word アプリケーション、ドキュメント、さらにはフィールドにも当てはまります。どのような機能があるのか、どのようなメソッドがサポートされているのかはわかりません。
これにより、開発速度が大幅に低下します。開発を迅速化するために、まず、C# で開発した関数を PHP コーディングに移行することをお勧めします。ここからダウンロードできる「#develop」という無料の C# IDE をお勧めします。 #develop の方が小さく、シンプルで、応答性が高いため、私は VS よりもこのソフトウェアを好みます。
C# コードを PHP に移行することはまったく怖いことではありません。まずは C# コードをいくつか紹介します:
コードをコピーします コードは次のとおりです: Word.Application w=new Word.Application();
w.Visible=true;
文字列パス=Application.StartupPath+"\template.docx";
Word.Document d=w.Documents.Open(path) as Word.Document;
Word.Fields flds=d.Fields;
int len=flds.Count;
foreach (Word.Field f in flds)
{
f.Select();
int i=f.Index;
w.Selection.TypeText("...");
}
C# コードは、前に示した PHP コード ベースとまったく同じであることがわかります。 C# は厳密に型指定された言語であるため、いくつかの型変換ステートメントが見られ、変数に明示的に型を割り当てる必要があります。
コードタイプを使用すると、コードの自動プロンプト機能と自動コード補完機能を利用できるため、開発速度が大幅に向上します。
PHP 開発を迅速化できるもう 1 つの方法は、Word マクロを使用することです。まず繰り返す必要があるアクションを実行し、それからマクロを使用して記録します。マクロは実際には Visual Basic であり、非常に簡単に PHP に変換することもできます。
最も重要なことは、Office PIA の Microsoft の公式ドキュメント、特にドキュメント内の各 Office アプリケーションの名前空間が常に必要な最も重要なリファレンスになるということです。最もよく使用される 3 つのアプリケーションは次のとおりです:
- Excel 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel(v=office.15).aspx
- Word 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word(v=office.15).aspx
- PowerPoint2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint(v=office.15).aspx
結論
この記事では、PHP COM ライブラリと Microsoft Office Interop 機能を使用して Word ドキュメントを編集する方法を説明します。
WindowsとOfficeは私たちの日常生活で広く使われていると言えます。 Windows プラットフォームで PHP を開発するプログラマーにとって、Office、Windows、および PHP の能力を知り、理解できることは非常に必要です。
PHP の COM 拡張機能を使用すると、この組み合わせをマスターするための扉が開きます。
プログラミングのこの部分に興味がある場合は、コメントを残してください。このトピックについてさらに記事を書くことを検討します。このアプローチを使用して、より実際のアプリケーション開発が行われることを本当に楽しみにしています。