キーテイクアウト
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。のような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>"; </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></span> </li>"</span>; </span></span><span><span>} </span></span><span><span>echo ""; </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スクリプトの変更が必要です。
- コントロールとプレゼンテーションの分離に違反します。
- ドキュメントコンテンツ(アライメント、フォント、スタイルなど)にスタイルを適用する場合、コードの行が大幅に増加します。プログラム的に変化するスタイルは面倒すぎます。
もう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は、型と型切れの言語です。 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>"; </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></span> </li>"</span>; </span></span><span><span>} </span></span><span><span>echo ""; </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ドキュメントに画像を追加することは、簡単なプロセスです。 phpwordライブラリによって提供されるaddimage()関数を使用できます。この関数を使用すると、追加する画像ファイルへのパスを指定できます。また、幅、高さ、アラインメントなどの追加のパラメーターを指定して、ドキュメント内の画像の外観をカスタマイズすることもできます。 PHPスクリプトに必要なヘッダーを含めて、画像がWordドキュメントに正しく解釈および表示されるようにすることを忘れないでください。 PHPを使用してWordドキュメントでテーブルを作成します。 PHPWordライブラリは、ドキュメントにテーブルを作成するために使用できるAddTable()という関数を提供します。その後、addrow()およびaddcell()関数を使用して、テーブルに行と列を追加できます。また、テーブルとそのセルの幅、高さ、アライメントを指定して外観をカスタマイズすることもできます。 PHPWordライブラリでは、PHPを使用してWordドキュメントにテキストメッセージを送信することは簡単です。 AddText()関数を使用してドキュメントにテキストを追加でき、この関数の2番目のパラメーターとしてスタイル配列を指定できます。このスタイルアレイには、フォントサイズ、フォントの色、太字、斜体、下線などのプロパティが含まれます。また、AddTitleStyle()またはAddParagraphStyle()機能を使用してスタイルオブジェクトを作成して、テキストに適用することもできます。以上がPHPでMicrosoft Wordドキュメントの作成方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
