キャッシュ データ

ドキュメント レベルのカスタマイズでデータ オブジェクトをキャッシュすることで、データにオフラインで、または Microsoft Office Word や Microsoft Office Excel を開かずに、アクセスすることができます。 オブジェクトをキャッシュするには、オブジェクトのデータ型が特定の要件を満たしている必要があります。 StringDataSetDataTable など、.NET Framework の多くの一般的なデータ型はその要件を満たします。

適用対象: このトピックの情報は、Excel および Word のドキュメント レベルのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

データ キャッシュにオブジェクトを追加するには、2 つの方法があります。

データ オブジェクトをキャッシュするための要件

ソリューションでデータ オブジェクトをキャッシュするには、オブジェクトが次の要件を満たしている必要があります。

  • ThisDocumentThisWorkbook クラスなどのホスト項目の読み取り/書き込みパブリック フィールドまたはプロパティであること。

  • インデクサーまたはその他のパラメーター化されたプロパティではないこと。

    さらに、データ オブジェクトは XmlSerializer クラスによってシリアル化可能である必要があります。つまり、オブジェクトの型には次の特性が必要です。

  • パブリック型であること。

  • パラメーターなしのパブリック コンストラクターがあること。

  • 追加のセキュリティ特権を必要とするコードを実行しないこと。

  • 読み取り/書き込みのパブリック プロパティのみを公開していること (他のプロパティは無視されます)。

  • 多次元配列を公開していないこと (入れ子になった配列は受け入れられます)。

  • プロパティやフィールドからインターフェイスを返さないこと。

  • コレクションの場合、IDictionary を実装していないこと。

    データ オブジェクトをキャッシュすると、Visual Studio Tools for Office ランタイムによって、ドキュメント内の "カスタム XML パーツ" に格納される XML 文字列に、オブジェクトがシリアル化されます。 詳細については、「カスタム XML パーツの概要」を参照してください。

キャッシュされるデータのサイズの制限

ドキュメント内のデータ キャッシュに追加できるデータの総量と、データ キャッシュ内の個々のオブジェクトのサイズには、いくつかの制限があります。 これらの制限を超えると、データがデータ キャッシュに保存されるときに、アプリケーションが予期せず終了する可能性があります。

これらの制限を回避するには、次のガイドラインに従ってください。

  • 10 MB を超えるオブジェクトを、データ キャッシュに追加しないでください。

  • 1 つのドキュメントのデータ キャッシュに、合計で 100 MB を超えるデータを追加しないでください。

    これらはおおよその値です。 正確な制限は、使用可能な RAM や実行中のプロセスの数など、いくつかの要因によって異なります。

キャッシュされたオブジェクトの動作を制御する

キャッシュされたオブジェクトの動作をより詳細に制御するには、キャッシュされるオブジェクトの型に ICachedType インターフェイスを実装できます。 たとえば、オブジェクトが変更されたときにユーザーに通知する方法を制御する場合は、このインターフェイスを実装できます。 ICachedType の実装方法を示すコードの例については、「Office 開発のサンプルとチュートリアル」の Excel ダイナミック コントロール サンプルと Word ダイナミック コントロール サンプルで ControlCollection クラスを参照してください。

パスワードで保護されたドキュメント内のキャッシュされたデータに変更を保持する

パスワードで保護されたドキュメント内のデータ オブジェクトをキャッシュする場合、キャッシュされたデータへの変更は保存されません。 2 つのメソッドをオーバーライドすることで、キャッシュされたデータへの変更を保存できます。 これらのメソッドをオーバーライドして、ドキュメントの保存時に保護を一時的に解除し、保存操作の完了後に保護を再適用します。

詳細については、「方法: パスワードで保護されたドキュメント内のデータをキャッシュする」を参照してください。

データ キャッシュに null 値を追加するときにデータが失われないようにする

オブジェクトをデータ キャッシュに追加するときは、ドキュメントを保存して閉じる前に、キャッシュされるすべてのオブジェクトを null 以外の値に初期化する必要があります。 ドキュメントが保存されて閉じられるときに、キャッシュされるいずれかのオブジェクトに null 値がある場合は、Visual Studio Tools for Office ランタイムによって、キャッシュされるすべてのオブジェクトがデータ キャッシュから自動的に削除されます。

デザイン時に CachedAttribute 属性を使用して、null 値が含まれるオブジェクトをデータ キャッシュに追加する場合は、ServerDocument クラスを使用して、ドキュメントが開かれる前にキャッシュされるデータ オブジェクトを初期化できます。 これは、ドキュメントがエンド ユーザーによって開かれる前に、Word または Excel がインストールされていないサーバーでキャッシュされるデータを初期化する場合に便利です。 詳細については、「サーバー上のドキュメントのデータにアクセスする」を参照してください。