Office のサーバーサイド オートメーションについて

文書翻訳 文書翻訳
文書番号: 257757 - 対象製品
この記事は、以前は次の ID で公開されていました: JP257757
中小企業のお客様は、中小企業向けサポート サイトで問題解決や学習に関する他のリソースを参照できます。
すべて展開する | すべて折りたたむ

目次

概要

開発者は、Microsoft Office のオートメーションを使用して、Office 製品に組み込まれている機能を使用したカスタム ソリューションを構築できます。このようなプログラムの開発は、クライアント システム上では比較的簡単ですが、Microsoft Active Server Pages (ASP)、ASP.NET、DCOM、Windows NT サービスなど、サーバーサイドのコードからオートメーションを実行する場合はさまざまな課題が生じる可能性があります。

この資料では、開発者が直面する問題について説明します。また、パフォーマンスを向上できるオートメーションの代替策についても説明します。ただし、ここで示す設定方法の例はあくまでも参考のためのものです。マイクロソフトは、Office のサーバーサイド オートメーションの推奨もサポートも行っていません。

注: この資料では、Microsoft 2007 Office system ドライバーおよび 2010 Access データベース エンジンは、Microsoft Office コンポーネントと見なされます。ユーザーがログオンしている対話型のステーション以外の Windows ワークステーションからコードが実行されているのであれば、Windows ワークステーション上で実行されるコードに対しても "サーバーサイド" という用語を使用します。たとえば、SYSTEM アカウントの下、タスク スケジューラによって起動されるコードは、"サーバーサイド" ASP または DCOM コードと同じ環境で実行されるため、この資料で説明している多くの同じ問題が発生する可能性があります。Windows ワークステーションおよび COM の詳細については、「詳細」および「関連情報」を参照してください。

詳細

現在のすべてのバージョンの Microsoft Office は、クライアント ワークステーション上でエンドユーザー製品として実行するように設計、テスト、および設定されています。これらの製品は、対話型デスクトップおよびユーザー プロファイルを想定しており、無人実行されるように設計されたサーバーサイド コンポーネントの必要性を満たすための再入可能性やセキュリティのレベルは提供されません。

マイクロソフトは、現在のところ、無人の非対話型クライアント アプリケーションまたはコンポーネント (ASP、ASP.NET、DCOM、および NT サービスを含む) からの Microsoft Office アプリケーションのオートメーションに関して、推奨もサポートも行っていません。それは、このような環境で Office を実行した場合、Office で不安定な動作やデッドロックが発生する可能性があるためです。

サーバーサイド コンテキストで実行するソリューションを構築する場合、安全に無人実行できるコンポーネントを使用する必要があり、少なくとも、コードの一部をクライアントサイドで実行できる代替策を探す必要があります。サーバーサイド ソリューションで Office アプリケーションを使用すると、正常な実行のために必要な機能の多くが失われ、ソリューション全体の安定性を損なう危険性があります。

Office のオートメーションをサーバーサイドで使用する際の問題

Office をサーバーサイド ソリューションで使用する開発者は、環境によっては Office が予想外の動作をする、主に 5 つの領域があることを認識しておく必要があります。コードを正常に実行するには、これらの問題を解決し、その影響を最小限に抑える必要があります。アプリケーションの構築にあたってはこれらの問題を慎重に検討します。これらの問題をすべて解決する方法はありません。設計が異なる場合は、要素の優先順位付けを変える必要があります。
  • ユーザー ID: Office アプリケーションは、オートメーションから起動された場合でも、実行時にはユーザー ID を使用します。アプリケーションでは、アプリケーションを起動したユーザーのユーザー レジストリ ハイブの設定に基づいて、ツール バー、メニュー、オプション、プリンター、およびアドインの初期化が行われます。多くのサービスは、ユーザー プロファイルがないアカウント (SYSTEM アカウント、IWAM_[servername] アカウントなど) で実行されます。そのため、起動時に Office が適切な初期化に失敗する場合があります。この場合、Office は CreateObject 関数または CoCreateInstance 関数のエラーを返します。Office アプリケーションを起動できた場合でも、ユーザー プロファイルがなければ、その他の関数が適切に動作しないこともあります。
  • デスクトップでの対話的処理: Office アプリケーションは、対話型デスクトップで実行されることが想定されており、場合によっては、何らかのオートメーション機能を適切に実行するために、表示が必要になることがあります。Office アプリケーションは、予期しないエラーが発生した場合、または機能の実行に必要なパラメーターが未指定になっている場合には、ユーザーに操作内容を確認するモーダル ダイアログ ボックスが表示されるように設計されています。非対話型デスクトップでのモーダル ダイアログ ボックスは閉じることができません。したがって、そのスレッドが応答しないままになります (ハングします)。コードを工夫することで、このような状態に陥る可能性を低減することはできますが、完全に防止することはできません。このことだけを取り上げても、サーバーサイド環境からの Office アプリケーションの実行は危険であり、このような実行はサポートされません。
  • 再入可能性とスケーラビリティ: サーバーサイド コンポーネントでは、複数のクライアントに対してスループットが高くオーバーヘッドが最小な、高い再入可能性を持つ、マルチスレッド COM コンポーネントを使用する必要があります。Office アプリケーションは、ほとんどすべての点でサーバーサイド コンポーネントと対照的です。Office アプリケーションは、リソースを多用する各種機能を単一のクライアントに提供するように設計された、再入不可能な、STA ベースのオートメーション サーバーです。サーバーサイド ソリューションとしてのスケーラビリティはほとんど提供されず、メモリなど重要な要素に対する制限は固定されており、環境設定を使用して制限を変更することはできません。さらに重要なことに、Office アプリケーションは、グローバル リソース (メモリ マップ ファイル、グローバル アドインまたはテンプレート、共有オートメーション サーバーなど) を使用します。これにより、同時実行可能なインスタンス数が制限されることがあり、マルチクライアント環境に設定されている場合には競合が発生する可能性があります。Office アプリケーションの複数のインスタンスを同時に実行する開発者は、Office アプリケーションへのアクセスの "プール" またはシリアル化を検討して、デッドロックまたはデータ破損の可能性を回避する必要があります。
  • 障害許容力と安定性: Office 2000、Office XP、Office 2003、および Office 2007 では、Microsoft Windows インストーラー (MSI) テクノロジを使用して、エンド ユーザーがより簡単にインストールおよび自己修復できるようにしています。MSI には "初めて実行するときにインストール" という概念が導入されています。これにより、システム、または多くの場合は特定のユーザーが、実行時に動的に機能をインストールしたり構成したりすることができます。このため、サーバーサイド環境では、パフォーマンスが低下し、インストールの確認または適切なインストール ディスクの提示を求めるダイアログ ボックスが表示されることが多くなります。エンドユーザー製品としての Office の障害許容力を増すためにこのような設計になっていますが、Office に MSI 機能が実装されていると、サーバーサイド環境では逆に生産性が低下します。さらに、Office はサーバーサイドでの使用に合わせて設計またはテストされていないため、一般にその安定性は保証できません。Office をネットワーク サーバー上のサービス コンポーネントとして使用した場合、そのコンピューターの安定性を損ない、その結果、ネットワーク全体の安定性を損なう場合があります。
  • サーバーサイドのセキュリティ: Office アプリケーションでは、サーバーサイドでの使用が想定されていないため、分散コンポーネントが直面するセキュリティ問題に関しては考慮されていません。Office では、着信要求の認証を行わないため、マクロが誤って実行されたり、マクロを実行する可能性のある別のサーバーがサーバーサイド コードから起動されたりすることを防止できません。匿名 Web からサーバーにアップロードされたファイルを開かないようにしてください。最後に設定されたセキュリティ設定に基づいて、サーバーはすべての権限を持つ Administrator または System のコンテキストでマクロを実行し、ネットワークを危険にさらす可能性があります。また、Office では、処理効率の向上のために、クライアントの認証情報をキャッシュできるクライアントサイド コンポーネント (Simple MAPI、WinInet、MSDAIPP など) を多用します。Office がサーバーサイドでオートメーションによって呼び出されている場合、1 つのインスタンスで複数のクライアントにサービスを提供することがあり、認証情報はそのセッション用にキャッシュされているため、あるクライアントが別のクライアントの認証情報を使用できます。そのため、別のユーザーになりすますことによって、許可されていないアクセス権限を取得される可能性があります。
技術的な問題の他にも、ライセンスの問題も考慮する必要があります。現在のライセンス ガイドラインでは、クライアントサイドに Office のライセンスを受けたコピーがない場合は、Office アプリケーションを使用してクライアント要求に対するサービスを提供することは許可されません。サーバーサイド オートメーションを使用して、ライセンスを受けていないワークステーションに Office 機能を提供することは、使用許諾契約書 (EULA) には含まれていません。

このような問題以外にも、オートメーションによってサーバーサイドで Office を呼び出したときに、次のいずれかのエラーが共通して発生することがあります。
  • CreateObject 関数および CoCreateInstance 関数が次のいずれかの実行時エラー メッセージを返し、オートメーションに対して起動できません。

    メッセージ 1
    実行時エラー '429': ActiveX コンポーネントはオブジェクトを作成できません。
    メッセージ 2
    実行時エラー '70': 書き込みできません。
    メッセージ 3
    CO_E_SERVER_EXEC_FAILURE (0x80080005): サーバーの実行に失敗しました
    メッセージ 4
    E_ACCESSDENIED (0x80070005): アクセスは拒否されました
  • Office ドキュメントを開くときに、以下のいずれかのエラー メッセージが表示されます。

    メッセージ 1
    実行時エラー '5981' (0x800A175D): マクロの記憶領域を開くことができません。
    メッセージ 2
    実行時エラー '1004': ~' メソッドは失敗しました: '~' オブジェクト
  • CreateObject 関数および CoCreateInstance 関数が応答を停止して終了しないか、復帰に時間がかかります。サーバーによっては、作成は即座に行われたにもかかわらず、Windows イベント ログに、アプリケーションが停止したことを示す 1004 エラーが表示される場合もあります。
  • ある種の関数は、ユーザー警告、またはユーザーの注意を必要とするその他のダイアログ ボックスにより、突然失敗したり、無限に応答を停止したりします。
  • 複数の要求を実行した場合、または負荷テストを実施した場合、Office アプリケーションの作成時または終了時にコードが失敗、応答を停止、またはクラッシュします。この問題が発生すると、メモリ内でプロセスが実行したままの状態になるか、オートメーションで呼び出されたアプリケーションのインスタンスがすべて、その問題の発生ポイントから失敗します。
ここに示す以外にも、その他の問題が発生したりメッセージが表示されたりすることもありますが、これらの問題は通常、この資料で前に示した 5 つの主要な問題の結果として生じるものです。

サーバーサイド オートメーションの代替策

マイクロソフトは、サーバーサイド ソリューション開発の必要がある開発者には、Office のオートメーションの代替策を探すことを強くお勧めします。Office の設計には制約があるため、Office の設定に変更を加えてもすべての問題を解決するには不十分です。マイクロソフトは、サーバーサイドに Office をインストールする必要がなく、オートメーションより効率よく迅速に共通のほとんどのタスクを実行できるいくつかの代替策を強くお勧めします。Office をサーバーサイド コンポーネントとしてプロジェクトに含める前に、代替策について検討してください。

ほとんどのサーバーサイド オートメーションのタスクには、ドキュメントの作成または編集が含まれます。Office 2007 では、開発者がサーバー サイドでファイル コンテンツを作成、編集、読み込み、および変換できる新しい Open XML ファイル形式がサポートされています。これらのファイル形式は、Microsoft .NET 3.x Framework で System.IO.Package.IO 名前空間を使用して、Office クライアント アプリケーション自体を使用せずに Office ファイルを編集します。これが、サービスから Office ファイルへの変更を処理するための推奨されるサポートされた方式です。

Open XML ファイル形式は公開標準です。仕様のコピーを入手するには、以下の Web サイトを参照してください。
http://www.ecma-international.org/publications/standards/Ecma-376.htm
マイクロソフトは、.NET 3.x Framework から Open XML ファイル形式を操作するための SDK を提供しています。SDK の詳細、および SDK を使用して Open XML ファイルを作成または編集する方法の詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。
Open XML SDK ドキュメント
http://msdn.microsoft.com/ja-jp/library/bb226703.aspx
[方法] Office Open XML 形式のドキュメントを操作する
http://msdn.microsoft.com/ja-jp/library/aa982683.aspx
Open XML オブジェクト モデルを使用して Word 2007 ファイルを操作する (パート 1/3)
http://msdn.microsoft.com/ja-jp/library/bb656295.aspx
Open XML オブジェクト モデルを使用して Word 2007 ファイルを操作する (パート 2/3)
http://msdn.microsoft.com/ja-jp/library/bb739835.aspx
Open XML オブジェクト モデルを使用して Word 2007 ファイルを操作する (パート 3/3)
http://msdn.microsoft.com/ja-jp/library/bb727374.aspx
Open XML オブジェクト モデルを使用して Excel 2007 ファイルおよび PowerPoint 2007 ファイルを操作する (パート 1/2)
http://msdn.microsoft.com/ja-jp/library/bb739834.aspx
Open XML オブジェクト モデルを使用して Excel 2007 ファイルおよび PowerPoint 2007 ファイルを操作する (パート 2/2)
http://msdn.microsoft.com/ja-jp/library/bb727373.aspx
Open XML オブジェクト モデルを使用してサーバー側ドキュメント生成ソリューションを構築する (パート 1/2)
http://msdn.microsoft.com/ja-jp/library/bb735940.aspx
Open XML オブジェクト モデルを使用してサーバー側ドキュメント生成ソリューションを構築する (パート 2/2)
http://msdn.microsoft.com/ja-jp/library/bb735939.aspx
例として .NET 3.0 Framework から Open XML を使用する方法の詳細については、以下のサポート技術情報番号をクリックしてください。
932921 .NET Framework 3.0 のコンポーネントを使用して Office Word 2007 文書および Office Excel 2007 ブックを作成してクライアント コンピューターにストリーム出力する方法
931866 .NET Framework 3.0 から Office XML ファイル形式およびパッケージング コンポーネントを使用して簡単な Excel 2007 ブックまたは Word 2007 文書を作成する方法
以前のバージョンの Office (Office 2000、Office XP、および Office 2003 など) を実行しているユーザーは、マイクロソフト Web サイトから無料の互換機能パックをインストールすると、Open XML ファイルを表示および編集することができます。互換機能パックをダウンロードしてインストールするには、次のマイクロソフト Web サイトを参照してください。
Word/Excel/PowerPoint 2007 ファイル形式用 Microsoft Office 互換機能パック
http://office.microsoft.com/ja-jp/products/HA101686761041.aspx
ASP または ASP.NET から Open XML ファイルをストリーム出力する場合は、ストリーム出力するコンテンツ用の適切な MIME (Multipurpose Internet Mail Extension) の種類を用意する必要があります。Office 2007 ファイル用の MIME の種類の一覧については、次の Web サイトを参照してください。
http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/05/08/office-2007-open-xml-mime-types.aspx
Office 2007 よりも前のクライアントのみを対象としていて、ソリューションで Open XML を使用する必要がない場合、HTML、XML、RTF など、その他の非バイナリ Office ファイル形式を使用することができます。続いて、結果のテキストが Office で表示されるように、MIME の種類を使用することでこれらのファイルをクライアントにストリーム出力することができます。サーバー上で ASP を使用することにより、ドキュメントを編集したり保存したりするだけでなく、サーバーに返すこともできます。

これらのトピック、および実装方法の例の詳細については、以下のサポート技術情報番号をクリックしてください。
270906 ASP を使用して RTF (Rich Text Format) ドキュメントを生成し、Microsoft Word にストリーム出力する方法
198703 クライアント側 VBScript から Excel を自動化する方法
199841 MIME の種類を使用して IE 内に Excel で ASP の結果を表示する方法
260239 ASP (Active Server Pages) ページで Excel ファイルの作成時にセルのデータの書式を設定する方法
278973 ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)
286023 VB ActiveX コンポーネントを使用して Internet Explorer から Word オートメーションを使用する方法
288130 ASP を使用してクライアント側で表示する XML スプレッドシートを作成する方法
業務上、サーバーサイドで Office 97、Office 2000、Office XP、および Office 2003 のバイナリ ファイル形式を作成する必要がある場合は、サードパーティ ベンダーが提供する役立つコンポーネントがあります。マイクロソフトはこのようなコンポーネントを提供しないため、自分でソリューションを構築するか、サードパーティ ベンダーからソリューションを購入する必要があります。数多くのさまざまなサードパーティ製品が利用できます。すべてのソリューションを調べて、業務に最も合致するベンダーを探すことをお勧めします。Office 97、Office 2000、Office XP、および Office 2003 のバイナリ ファイル形式を直接編集する独自のソリューションを構築する必要がある場合は、Microsoft Open Specification Promise (OSP) の条項の下で無料であるファイル形式の仕様を入手できます。ユーザーが作成するドキュメントまたは製品に対するテクニカル サポートは提供されませんが、ドキュメントの利用は可能です。詳細については、以下の Web サイトを参照してください。
http://www.microsoft.com/interop/docs/officebinaryformats.mspx
サーバーサイド ソリューションでは、ファイルをアップロードすることをユーザーに許可し、Web などのメディアで表示するためにサーバーでファイルを作成することが必要な場合があります。現時点でマイクロソフトはこのような機能を提供するための作業を行っています。また Microsoft Excel Services でこの機能の初期バージョンを提供しています。

Excel Services は、Microsoft Office SharePoint Server 2007 に搭載されている新しいサーバー テクノロジで、Office SharePoint Server 2007 での Excel ブックの読み込み、計算、および表示を可能にします。Excel Services の詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。
Excel Services の概要
http://msdn.microsoft.com/ja-jp/library/ms546696.aspx
[ウォークスルー] Excel Web Services を使用してカスタム アプリケーションを開発する
http://msdn2.microsoft.com/ja-jp/library/ms519100.aspx
Excel Services と Office Open XML 形式を使用して業務アプリケーションを作成する
http://msdn.microsoft.com/ja-jp/library/cc540662.aspx
Word Automation Services は、SharePoint Server 2010 の新しいサービス アプリケーションです。Word Automation Services は、文書を Microsoft Word クライアントでサポートされている形式に自動的にサーバーサイドで変換します。

Word Automation Services の概要
http://msdn.microsoft.com/ja-jp/library/ee558830.aspx
Word Automation Services の概要
http://blogs.msdn.com/b/microsoft_office_word/archive/2009/10/26/introducing-word-automation-services.aspx
この資料のうち、どの方法が必要性を満たし、ソリューション展開に最善なものであるかを評価する必要があります。この資料で説明した内容によって、すべてのクライアントのあらゆる問題が解決されるかどうかは保証されません。ソリューションを十分にテストしてから展開してください。
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。

プロパティ

文書番号: 257757 - 最終更新日: 2013年7月2日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • Microsoft Access 2010
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 2010
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Outlook 2010
  • Microsoft Office Outlook 2007
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft Outlook 97 Standard Edition
  • Microsoft PowerPoint 2010
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Word 2010
  • Microsoft Office Word 2007
  • Microsoft Word 2002
  • Microsoft Word 2000
  • Microsoft Word 97 Standard Edition
  • Microsoft Project Professional 2010
  • Microsoft Project Standard 2010
  • Microsoft Office Project Standard 2007
  • Microsoft Office Project Professional 2007
  • Microsoft Office Project Standard 2003
  • Microsoft Office Project Professional 2003
  • Microsoft Project Standard Version 2002
  • Microsoft Project 2000 Standard Edition
  • Microsoft Project 98 Standard Edition
  • Microsoft Visio Standard 2010
  • Microsoft Visio Professional 2010
  • Microsoft Office Visio Standard 2007
  • Microsoft Office Visio Professional 2007
  • Microsoft Office Visio Professional 2003
  • Microsoft Visio Standard Version 2002
  • Microsoft Visio Professional Version 2002
  • Microsoft MapPoint 2009 North America
  • Microsoft MapPoint 2006 Standard Edition
  • Microsoft MapPoint 2004 Standard Edition
  • Microsoft MapPoint 2002 Standard Edition
  • Microsoft MapPoint 2001 Standard Edition
  • Microsoft MapPoint 2000 Standard Edition
  • Microsoft OneNote 2010
  • Microsoft Office OneNote 2003
  • Microsoft Office OneNote 2007
  • Microsoft InfoPath 2010
  • Microsoft Office InfoPath 2007
  • Microsoft Office InfoPath 2003
  • Microsoft Office Word 2003
  • Microsoft Office Excel 2003
  • Microsoft Access 2013
  • Microsoft Excel 2013
  • Microsoft InfoPath 2013
  • Microsoft MapPoint 2013
  • Microsoft MapPoint Europe 2013
  • Microsoft Outlook 2013
  • Microsoft PowerPoint 2013
  • Microsoft Visio Professional 2013
  • Microsoft Visio Standard 2013
  • Microsoft Word 2013
キーワード:?
kbqfe kbautomation kbprogramming kbservice KB257757
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com