キャッシュ データ
ドキュメント レベルのカスタマイズでデータ オブジェクトをキャッシュすることで、データにオフラインで、または Microsoft Office Word や Microsoft Office Excel を開かずに、アクセスすることができます。 オブジェクトをキャッシュするには、オブジェクトのデータ型が特定の要件を満たしている必要があります。 String、DataSet、DataTable など、.NET Framework の多くの一般的なデータ型はその要件を満たします。
適用対象: このトピックの情報は、Excel および Word のドキュメント レベルのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。
データ キャッシュにオブジェクトを追加するには、2 つの方法があります。
ソリューションのビルド時にオブジェクトをデータ キャッシュに追加するには、CachedAttribute 属性をオブジェクト宣言に適用します。 詳細については、「方法: オフラインで使用するデータまたはサーバー上で使用するデータをキャッシュする」を参照してください。
実行時にプログラムでオブジェクトをデータ キャッシュに追加するには、
ThisDocument
やThisWorkbook
クラスなどのホスト項目のStartCaching
メソッドを使います。 詳細については、「方法: Office ドキュメント内のデータ ソースをプログラムでキャッシュする」を参照してください。オブジェクトをデータ キャッシュに追加した後は、Word または Excel を起動しなくても、キャッシュされているデータにアクセスして変更することができます。 詳細については、「サーバー上のドキュメントのデータにアクセスする」を参照してください。
データ オブジェクトをキャッシュするための要件
ソリューションでデータ オブジェクトをキャッシュするには、オブジェクトが次の要件を満たしている必要があります。
ThisDocument
やThisWorkbook
クラスなどのホスト項目の読み取り/書き込みパブリック フィールドまたはプロパティであること。インデクサーまたはその他のパラメーター化されたプロパティではないこと。
さらに、データ オブジェクトは 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 がインストールされていないサーバーでキャッシュされるデータを初期化する場合に便利です。 詳細については、「サーバー上のドキュメントのデータにアクセスする」を参照してください。