ホームページ > バックエンド開発 > PHPチュートリアル > PHPでMicrosoft Wordドキュメントの作成方法

PHPでMicrosoft Wordドキュメントの作成方法

Jennifer Aniston
リリース: 2025-02-20 09:58:10
オリジナル
646 人が閲覧しました

PHPでMicrosoft Wordドキュメントの作成方法

前の記事「PHPとWMI」で指摘したように、PHPを使用してWindowsを深く掘り下げていたように、私たちはPHP開発者がWindowsオペレーティングシステムに随時処理しなければならない世界に住んでいます。 WMI(Windows Management Interface)はそのような機会の1つであり、Microsoft Office Interopはさらに重要で、より頻繁に使用されるものです。 この記事では、WordとPHPの間に簡単な統合が表示されます。PHP(およびそのInterop拡張)を使用してHTML形式の入力に基づいてMicrosoft Wordドキュメントを生成します。

キーテイクアウト

PHP開発者は、PHPとそのInterop拡張を使用して、HTMLフォームの入力に基づいてMicrosoft Wordドキュメントを生成できます。

統合を成功させるには、Microsoft OfficeとInteropアプリケーション(PIA、プライマリインタートップアセンブリ)を開発するための図書館とともに、典型的なWAMP環境が必要です。

PHP拡張PHP_COM_DOTNET.DLLは、PHP.iniファイルで有効にする必要があり、プログラミングを進める前にサーバーを再起動しました。
    バックエンドのPHPファイルはコーディングプロセスの焦点であり、PHPでのcom操作では、「アセンブリ」内に「クラス」のインスタンス化が必要です。
  • コーディング速度とPIAの理解を改善するために、開発者は最初にC#で機能を開発し、次にコードをPHPに移動させることができます。 MicrosoftのOfficePiaに関する公式ドキュメントは貴重な参考資料です。
  • 準備
  • 最初に、Windows開発マシンに典型的なWAMP環境が設定されていることを確認してください。 Interopは純粋にWindows機能であるため、Windowsの下でApacheとPHPをホストする必要があります。この例では、Easyphp 14.1を使用しています。これは、インストールと構成が非常に簡単です。
  • 次に、Microsoft Officeをインストールする必要があります。そのバージョンはそれほど重要ではありません。私はOffice 2013 Proを使用していますが、2007年以降のオフィスバージョンは機能するはずです。
  • 次に、InteroPアプリケーション(PIA、プライマリインタープットアセンブリと呼ばれる)を開発するライブラリがインストールされていることを確認する必要があります。これを確認するために、Windows Explorerを開いてアセンブリに移動できます。

microsoft.office.interop.wordエントリ(スナップショットに下線が付けられています)が表示されます。これは、このデモで使用するPIAになります。 「アセンブリ名」、「バージョン」、「公開キートークン」に特に注意してください。これらはすぐに私たちのPHPスクリプトで使用されます。 このディレクトリでは、プログラミング(PHPだけでなく、VB.NET、C#など)に利用できる他のPIA(オフィスファミリー全体を含む)も見ることができます

PIASリストにMicrosoft.Office.Interopのパッケージ全体が含まれていない場合、オフィスを再インストールしてPIA機能を含めます。または、マイクロソフトからパッケージを手動でダウンロードしてインストールする必要があります。詳細な手順については、このMSDNページを参照してください。

注:Microsoft Office 2010 PIA Redistributableのみがダウンロードしてインストールできます。このパッケージのPIAバージョンは14.0.0です。バージョン15には、Office 2013のインストールが付属しています

最後に、PHP.iniファイルでPHP拡張PHP_COM_DOTNET.DLLを有効にしてサーバーを再起動する必要があります。

プログラミングに進むことができます。

htmlフォーム

このデモの焦点はバックエンド処理にあるので、単純なHTMLフォームを備えたシンプルなフロントエンドを作成します。これは以下の図のようになります。

「名前」のテキストフィールド、「性別」のラジオボタングループ、「年齢」の範囲コントロール、「メッセージ」のテキスト領域があります。そして最後に、もちろん、「送信」ボタン このファイルを仮想ホストのルートディレクトリの下のディレクトリに「index.html」として保存して、http:// test/test/interop。PHPでMicrosoft Wordドキュメントの作成方法のようなURIでアクセスできるように

バックエンド

バックエンドのPHPファイルは、私たちの議論の焦点です。最初にこのファイルのコードをリストし、次に段階的に説明します。

フォームから投稿された値を保持するために$ inputs変数を設定し、printdateのダミー値を作成した後、これが必要な理由について説明します。これらの4つの重要な行に出会います。

PHPでのcom操作には、「アセンブリ」内の「クラス」のインスタンス化が必要です。私たちの場合、私たちは言葉で動作することです。私たちが示した最初のスクリーンショットを振り返ると、PIAという言葉の完全な署名を構築することができます。

「名前」、「バージョン」、「公開キートークン」はすべて、「C:WindowsAssembly」を閲覧すると表示された情報から取得されます。
<span><span><?php
</span></span><span>
</span><span><span>$inputs = $_POST;
</span></span><span><span>$inputs['printdate']=''; 
</span></span><span><span>// A dummy value to avoid a PHP notice as we don't have "printdate" in the POST variables. 
</span></span><span>
</span><span><span>$assembly = 'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c';
</span></span><span><span>$class = 'Microsoft.Office.Interop.Word.ApplicationClass';
</span></span><span>
</span><span><span>$w = new DOTNET($assembly, $class);
</span></span><span><span>$w->visible = true;
</span></span><span>
</span><span><span>$fn = __DIR__ . '\template.docx';
</span></span><span>
</span><span><span>$d = $w->Documents->Open($fn);
</span></span><span>
</span><span><span>echo "Document opened.<br><hr>";
</span></span><span>
</span><span><span>$flds = $d->Fields;
</span></span><span><span>$count = $flds->Count;
</span></span><span><span>echo "There are <span><span>$count</span> fields in this document.<br>"</span>;
</span></span><span><span>echo "<ul>";
</span></span><span><span>$mapping = setupfields();
</span></span><span>
</span><span><span>foreach ($flds as $index => $f)
</span></span><span><span>{
</span></span><span>    <span>$f->Select();
</span></span><span>    <span>$key = $mapping[$index];
</span></span><span>    <span>$value = $inputs[$key];
</span></span><span>    <span>if ($key == 'gender')
</span></span><span>    <span>{
</span></span><span>        <span>if ($value == 'm')
</span></span><span>            <span>$value = 'Mr.';
</span></span><span>        <span>else
</span></span><span>            <span>$value = 'Ms.';
</span></span><span>    <span>}
</span></span><span>    
</span><span>    <span>if($key=='printdate')
</span></span><span>        <span>$value=  date ('Y-m-d H:i:s');
</span></span><span>
</span><span>    <span>$w->Selection->TypeText($value);
</span></span><span>    <span>echo "<li>Mappig field <span><span>$index</span>: <span>$key</span> with value <span>$value</span></li>"</span>;
</span></span><span><span>}
</span></span><span><span>echo "</ul>";
</span></span><span>
</span><span><span>echo "Mapping done!<br><hr>";
</span></span><span><span>echo "Printing. Please wait...<br>";
</span></span><span>
</span><span><span>$d->PrintOut();
</span></span><span><span>sleep(3);
</span></span><span><span>echo "Done!";
</span></span><span>
</span><span><span>$w->Quit(false);
</span></span><span><span>$w=null;
</span></span><span>
</span><span>
</span><span>
</span><span><span>function setupfields()
</span></span><span><span>{
</span></span><span>    <span>$mapping = array();
</span></span><span>    <span>$mapping[0] = 'gender';
</span></span><span>    <span>$mapping[1] = 'name';
</span></span><span>    <span>$mapping[2] = 'age';
</span></span><span>    <span>$mapping[3] = 'msg';
</span></span><span>    <span>$mapping[4] = 'printdate';
</span></span><span>    
</span><span>
</span><span>    <span>return $mapping;
</span></span><span><span>}</span></span>
ログイン後にコピー
ログイン後にコピー

「文化」は常に中立です。

<span>$assembly = 'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c';
</span><span>$class = 'Microsoft.Office.Interop.Word.ApplicationClass';
</span>
<span>$w = new DOTNET($assembly, $class);
</span><span>$w->visible = true;</span>
ログイン後にコピー

私たちが呼び出すクラスは、常にアセンブリの名前と「.ApplicationClass」です。

これら2つのパラメーターを設定すると、単語オブジェクトをインスタンス化できます。
  • このオブジェクトは、バックグラウンドにとどまることができます。または、目に見える属性をtrueに設定することで前景に持ち込むことができます。
  • 次に、処理するドキュメントを開き、「ドキュメント」インスタンスを$ d変数に割り当てます。 そのドキュメントでは、HTMLフォームからの入力に基づいてコンテンツを作成するために、いくつかのオプションがあります。
最も不利な方法は、PHPのすべてのコンテンツをハードコーディングして、Wordドキュメントに出力することです。次の理由により、私はこれを強く落胆させます
  1. 柔軟性はありません。出力の変更には、PHPスクリプトの変更が必要です。
  2. コントロールとプレゼンテーションの分離に違反します。
  3. ドキュメントコンテンツ(アライメント、フォント、スタイルなど)にスタイルを適用する場合、コードの行が大幅に増加します。プログラム的に変化するスタイルは面倒すぎます。

もう1つの方法は、「検索レプレース」を行うことです。 PHPには、これを行う上で強力な組み込み機能があります。交換する予定のプレースホルダーコンテンツの周りに特別なデリミターを置くWordドキュメントを作成できます。たとえば、次のようなものを含むドキュメントを作成できます。

{{name}}

そして、PHPでは、これをフォームの提出から取得した「名前」値に単純に置き換えることができます。

これは簡単で、最初のオプションのすべての欠点を回避します。適切な区切り文字を見つける必要があります。この場合、使用されるテンプレートがWordドキュメントになることを除いて、テンプレートレンダリングを行うようなものです。

3番目のオプションは私の推奨であり、Wordの高度なトピックです。フィールドを使用してプレースホルダーを表し、PHPコードでは、それぞれのフォーム値でフィールドを直接更新します。

このアプローチは柔軟で、速く、Wordのベストプラクティスに準拠しています。また、ドキュメントでの全文検索も回避され、パフォーマンスに役立ちます。このオプションにも欠点があることに注意してください。

Wordは、そのデビュー以来、フィールドの名前のインデックスをサポートしたことはありません。 Word Documentで作成したフィールドの名前を提供しましたが、各フィールドにアクセスするために番号のサブスクリプトを使用する必要があります。また、これは、フィールドインデックスとフォームフィールドの名前の間の手動マッピングを行うために専用の関数(Setupfields)を使用する必要がある理由を説明しています。

Wordドキュメントにフィールドを挿入する方法を学ぶには(既製バージョンについてはここをクリックしてください)、関連するWordヘルプトピックとマニュアルを参照してください。このデモには、5つのMergefieldフィールドを備えたドキュメントがあります。また、簡単にアクセスできるように、ドキュメントをPHPスクリプトと同じディレクトリに配置しました。

フィールドPrintDateには対応するフォームフィールドがありません。そのため、$入力配列にダミーprintdateキーを追加しました。これがなければ、スクリプトはまだ実行できますが、インデックスprintdateは$ inputsアレイに表示されていないということに気付くでしょう。

フォーム値でフィールドを更新した後、次のことを使用してドキュメントを印刷します。

印刷方式にはいくつかのオプションのパラメーターがあり、その最も単純なフォームを使用しています。これにより、Windowsマシンに接続されたデフォルトのプリンターに1つのコピーを印刷します。

ドキュメントを印刷する前に、printpreviewを使用して出力を見てみることもできます。純粋に自動化された環境では、もちろん代わりに印刷を使用します。

印刷ジョブには完全にスプールするために時間が必要なため、単語アプリケーションを終了する前に数秒待たなければなりません。遅滞なく(3)、$ w-> quitはすぐに実行され、印刷ジョブも殺されます。

最後に、$ w-> quit(false)を呼び出して、PHPスクリプトによって呼び出された単語アプリケーションを閉じます。ここで提供される唯一のパラメーターは、禁止する前に変更を保存するかどうかを指定することです。ドキュメントに変更を加えましたが、他のユーザーの入力用にクリーンなテンプレートを保持したいため、ドキュメントを保存したくありません。

コードを完了したら、フォームページをロードし、いくつかの値を入力して、フォームを送信できます。以下の画像は、PHPスクリプトの出力と更新されたWordドキュメントを示しています。

PHPでMicrosoft Wordドキュメントの作成方法
PHPでMicrosoft Wordドキュメントの作成方法

コーディング速度を改善し、pia

についてもっと理解します

PHPは、型と型切れの言語です。 comオブジェクトはタイプオブジェクトです。 PHPコーディング中に、単語アプリケーション、ドキュメント、フィールドなど、オブジェクトから意味のあるコード洞察を取得する方法はありません。それがどのようなプロパティを持っているのか、それがどのような方法をサポートするかはわかりません。

これにより、開発速度が大幅に低下します。より速くするために、最初にC#で関数を開発し、次にコードをPHPに移行することをお勧めします。私がお勧めする無料のC#IDEは「#Develop」と呼ばれ、ここからダウンロードできます。 #Developは小さく、よりクリーンで、より速いため、VSシリーズよりもこれを好みます。

C#コードのPHPへの移行はまったく怖くありません。 C#コードのいくつかの行をお見せしましょう:

<span><span><?php
</span></span><span>
</span><span><span>$inputs = $_POST;
</span></span><span><span>$inputs['printdate']=''; 
</span></span><span><span>// A dummy value to avoid a PHP notice as we don't have "printdate" in the POST variables. 
</span></span><span>
</span><span><span>$assembly = 'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c';
</span></span><span><span>$class = 'Microsoft.Office.Interop.Word.ApplicationClass';
</span></span><span>
</span><span><span>$w = new DOTNET($assembly, $class);
</span></span><span><span>$w->visible = true;
</span></span><span>
</span><span><span>$fn = __DIR__ . '\template.docx';
</span></span><span>
</span><span><span>$d = $w->Documents->Open($fn);
</span></span><span>
</span><span><span>echo "Document opened.<br><hr>";
</span></span><span>
</span><span><span>$flds = $d->Fields;
</span></span><span><span>$count = $flds->Count;
</span></span><span><span>echo "There are <span><span>$count</span> fields in this document.<br>"</span>;
</span></span><span><span>echo "<ul>";
</span></span><span><span>$mapping = setupfields();
</span></span><span>
</span><span><span>foreach ($flds as $index => $f)
</span></span><span><span>{
</span></span><span>    <span>$f->Select();
</span></span><span>    <span>$key = $mapping[$index];
</span></span><span>    <span>$value = $inputs[$key];
</span></span><span>    <span>if ($key == 'gender')
</span></span><span>    <span>{
</span></span><span>        <span>if ($value == 'm')
</span></span><span>            <span>$value = 'Mr.';
</span></span><span>        <span>else
</span></span><span>            <span>$value = 'Ms.';
</span></span><span>    <span>}
</span></span><span>    
</span><span>    <span>if($key=='printdate')
</span></span><span>        <span>$value=  date ('Y-m-d H:i:s');
</span></span><span>
</span><span>    <span>$w->Selection->TypeText($value);
</span></span><span>    <span>echo "<li>Mappig field <span><span>$index</span>: <span>$key</span> with value <span>$value</span></li>"</span>;
</span></span><span><span>}
</span></span><span><span>echo "</ul>";
</span></span><span>
</span><span><span>echo "Mapping done!<br><hr>";
</span></span><span><span>echo "Printing. Please wait...<br>";
</span></span><span>
</span><span><span>$d->PrintOut();
</span></span><span><span>sleep(3);
</span></span><span><span>echo "Done!";
</span></span><span>
</span><span><span>$w->Quit(false);
</span></span><span><span>$w=null;
</span></span><span>
</span><span>
</span><span>
</span><span><span>function setupfields()
</span></span><span><span>{
</span></span><span>    <span>$mapping = array();
</span></span><span>    <span>$mapping[0] = 'gender';
</span></span><span>    <span>$mapping[1] = 'name';
</span></span><span>    <span>$mapping[2] = 'age';
</span></span><span>    <span>$mapping[3] = 'msg';
</span></span><span>    <span>$mapping[4] = 'printdate';
</span></span><span>    
</span><span>
</span><span>    <span>return $mapping;
</span></span><span><span>}</span></span>
ログイン後にコピー
ログイン後にコピー
C#コードは、以前に示したPHPコードとほぼ同じであることがわかります。 C#が強く入力されるため、いくつかのタイプのキャストステートメントが表示され、変数にタイプを明示的に与える必要があります。

変数タイプが与えられた場合、コード洞察とコードの完了を楽しむことができ、開発速度がはるかに高速になります。

PHP開発をスピードアップする別の方法は、単語マクロをタップすることです。必要なアクションを実行し、マクロで記録します。マクロはVisual Basicにあり、PHPに簡単に変換できます。

最も重要なことは、MicrosoftのOffice PIA、特に各オフィスアプリケーションの名前空間ドキュメントに関する公式ドキュメントは、常に最も詳細な参照資料です。主に使用されている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
  • PowerPoint 2013:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint(v = office.15).aspx

結論

この記事では、PHP COMライブラリとMicrosoft Office Interop機能を使用してWordドキュメントを入力する方法を示しました。

窓とオフィスは、日常生活で広く使用されています。 PHP Windowsプログラマーにとって、オフィス/WindowsとPHPの両方のパワーに関する知識を持つことは、

に不可欠です。 PHPのCOM拡張機能を使用すると、この組み合わせをマスターするための扉が開かれています。

このプログラミングの分野に興味がある場合は、コメントを残してください。このトピックに関する記事をさらに作成することを検討してください。このアプローチを使用して、より多くの現実世界アプリケーションが開発されたことを楽しみにしています。

php

を使用してMicrosoft Wordドキュメントの作成に関するよくある質問(FAQ) phpを使用してWordドキュメントに画像を追加するにはどうすればよいですか?

​​

phpを使用してWordドキュメントに画像を追加することは、簡単なプロセスです。 phpwordライブラリによって提供されるaddimage()関数を使用できます。この関数を使用すると、追加する画像ファイルへのパスを指定できます。また、幅、高さ、アラインメントなどの追加のパラメーターを指定して、ドキュメント内の画像の外観をカスタマイズすることもできます。 PHPスクリプトに必要なヘッダーを含めて、画像がWordドキュメントに正しく解釈および表示されるようにすることを忘れないでください。 PHPを使用してWordドキュメントでテーブルを作成します。 PHPWordライブラリは、ドキュメントにテーブルを作成するために使用できるAddTable()という関数を提供します。その後、addrow()およびaddcell()関数を使用して、テーブルに行と列を追加できます。また、テーブルとそのセルの幅、高さ、アライメントを指定して外観をカスタマイズすることもできます。 PHPWordライブラリでは、PHPを使用してWordドキュメントにテキストメッセージを送信することは簡単です。 AddText()関数を使用してドキュメントにテキストを追加でき、この関数の2番目のパラメーターとしてスタイル配列を指定できます。このスタイルアレイには、フォントサイズ、フォントの色、太字、斜体、下線などのプロパティが含まれます。また、AddTitleStyle()またはAddParagraphStyle()機能を使用してスタイルオブジェクトを作成して、テキストに適用することもできます。 ​​はい、PHPを使用してHTMLをWordドキュメントに変換できます。 PHPWordライブラリには、HTMLコンテンツをドキュメントに追加するために使用できるAddhtml()という関数が提供されます。この関数は、HTMLコンテンツを解析し、単語ドキュメントに表示できる形式に変換します。ただし、すべてのHTMLタグがサポートされているわけではなく、いくつかの複雑なHTML構造が正しく変換されない可能性があることに注意してください。 PHPを使用してWordドキュメントを作成すると、PHPWordライブラリが提供するSave()関数を使用して特定の場所に保存できます。この関数は、ドキュメントをパラメーターとして保存する場所へのパスを取ります。指定された場所が存在しない場合、関数はそれを作成しようとします。関数が場所を作成したり、ドキュメントを保存できない場合、例外がスローされます。 PHPを使用したWord文書へのヘッダーとフッター。 PHPWordライブラリは、ドキュメントにヘッダーとフッターを追加するために使用できるAddHeader()およびAddFooter()と呼ばれる関数を提供します。その後、AddText()関数を使用して、ヘッダーとフッターにテキストを追加できます。質問3の説明と同じ方法を使用して、ヘッダーとフッターにスタイルを適用することもできます。 PHPWordライブラリによって提供されるAddPageBreak()関数を使用して、PHPを使用してWord文書に。この関数は、ドキュメントの現在の位置にページブレークを挿入し、後続のすべてのコンテンツが新しいページに表示されます。 、PHPを使用してテンプレートから単語ドキュメントを作成できます。 PHPWordライブラリは、Word Documentテンプレートのロードに使用できるLoadTemplate()という関数を提供します。次に、setValue()関数を使用して、テンプレート内のプレースホルダーテキストを独自のコンテンツに置き換えることができます。 PHPWordライブラリによって提供されたAddLink()関数を使用してPHPを使用してWord文書をドキュメントします。この関数は、ドキュメントの現在の位置にハイパーリンクを作成します。 HyperLinkのURLと、HyperLinkとして表示するテキストを指定できます。 PHPを使用したドキュメント。 PHPWordライブラリには、Listアイテムをドキュメントに追加するために使用できるAddListItem()という関数が提供されます。リスト項目のテキストとリスト内のアイテムの深さを指定できます。質問3の説明と同じ方法を使用して、リスト項目にスタイルを適用することもできます。

以上がPHPでMicrosoft Wordドキュメントの作成方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート