キャッシュされたデータ
(Microsoft Office Word または Microsoft Office Excel を起動せず) オフラインでデータにアクセスできるように、ドキュメント レベルのカスタマイズのデータ オブジェクトをキャッシュできます。オブジェクトをキャッシュするには、オブジェクトのデータ型が特定の要件を満たす必要があります。String、DataSet、および DataTable など、.NET Framework の一般的なデータ型の多くは、以下に示す要件を満たしています。
対象: このトピックの情報は、Excel 2013 と Excel 2010、および Word 2013 と Word 2010 のドキュメント レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
データ キャッシュにオブジェクトを追加するには 2 つの方法があります。
ソリューションのビルド時にデータ キャッシュにオブジェクトを追加するには、オブジェクトの宣言に CachedAttribute 属性を適用します。詳細については、「方法 : オフラインで使用するデータまたはサーバー上で使用するデータをキャッシュする」を参照してください。
実行時にプログラムでデータ キャッシュにオブジェクトを追加するには、ホスト項目の StartCaching メソッド (ThisDocument クラスや ThisWorkbook クラスなど) を使用します。詳細については、「方法 : Office ドキュメント内のデータ ソースをプログラムでキャッシュする」を参照してください。
データ キャッシュにオブジェクトを追加すると、Word や Excel を起動せずに、キャッシュされたデータにアクセスしたり、キャッシュされたデータを変更したりできます。詳細については、「サーバー上のドキュメント内のデータへのアクセス」を参照してください。
キャッシュできるデータ オブジェクトの要件
ソリューションのデータ オブジェクトをキャッシュするには、オブジェクトが以下の要件を満たす必要があります。
ThisDocument クラスや ThisWorkbook クラスなど、ホスト項目の読み書き可能なパブリック フィールドまたはプロパティであること。
インデクサーまたはその他のパラメーター化されたプロパティではないこと。
さらに、データ オブジェクトは XmlSerializer クラスによってシリアル化できる必要があります。これは、オブジェクトの型が次の特性を備えている必要があることを意味します。
パブリック型であること。
パラメーターを使用しないパブリック コンストラクターがあること。
追加のセキュリティ特権を必要とするコードを実行しないこと。
読み書き可能なパブリック プロパティのみを公開していること (それ以外のプロパティは無視されます)。
多次元配列を公開していないこと (入れ子になった配列は可)。
プロパティおよびフィールドからインターフェイスを返さないこと。
コレクションの場合、IDictionary を実装しないこと。
データ オブジェクトをキャッシュするとき、Visual Studio Tools for Office Runtime は、ドキュメントのカスタム XML 部分に格納されている XML 文字列にオブジェクトをシリアル化します。詳細については、「カスタム XML 部分の概要」を参照してください。
キャッシュされたデータのサイズ制限
ドキュメントのデータ キャッシュに追加できるデータの合計量と、データ キャッシュ内の個別のオブジェクトのサイズには、いくつかの制限があります。これらの制限を超えた場合、データ キャッシュにデータが保存されたときにアプリケーションが予期せずに終了することがあります。
これらの制限を回避するには、以下のガイドラインに従います。
データ キャッシュに 10 MB を超える大きさのオブジェクトを追加しない。
単一ドキュメントのデータ キャッシュに合計量が 100 MB を超えるデータを追加しない。
これらは概算値です。正確な制限値は、使用可能な RAM や実行プロセス数などのいくつかの要因によって決まります。
キャッシュされたオブジェクトの動作の制御
キャッシュされたオブジェクトの動作をより詳細に制御するには、キャッシュされたオブジェクトの型に ICachedType インターフェイスを実装します。たとえば、このインターフェイスを実装して、オブジェクト変更時のユーザーへの通知を制御できます。ICachedType を実装する方法を示すコード例については、「Office 開発のサンプルとチュートリアル」の Excel のダイナミック コントロールのサンプルおよび Word のダイナミック コントロールのサンプルの ControlCollection クラスを参照してください。
パスワードで保護されたドキュメント内のキャッシュされたデータに加えられた変更の永続化
パスワードで保護されたドキュメントにデータ オブジェクトをキャッシュした場合、キャッシュされたデータへの変更は保存されません。2 つのメソッドをオーバーライドすることによって、キャッシュされたデータへの変更を保存できます。ドキュメントを保存するときにこれらのメソッドをオーバーライドして一時的に保護を解除し、保存操作が完了した後に保護を再適用します。
詳細については、「方法 : パスワードで保護されたドキュメント内のデータをキャッシュする」を参照してください。
データ キャッシュに Null 値を追加するときのデータ損失の回避
データ キャッシュにオブジェクトを追加するとき、キャッシュされたすべてのオブジェクトは、ドキュメントを保存して閉じる前に null 以外の値に初期化される必要があります。ドキュメントを保存して閉じるとき、キャッシュされたいずれかのオブジェクトに null 値が設定されていると、Visual Studio Tools for Office Runtime はデータ キャッシュから、キャッシュされたすべてのオブジェクトを自動的に削除します。
デザイン時に CachedAttribute 属性を使用して、null 値を設定したオブジェクトをデータ キャッシュに追加した場合は、ServerDocument クラスを使用して、キャッシュされたデータ オブジェクトを初期化してからドキュメントを開くことができます。この手法は、エンド ユーザーがドキュメントを開く前に、Word や Excel がインストールされていないサーバー上でキャッシュされたデータを初期化する場合に便利です。詳細については、「サーバー上のドキュメント内のデータへのアクセス」を参照してください。
参照
処理手順
方法 : オフラインで使用するデータまたはサーバー上で使用するデータをキャッシュする
方法 : Office ドキュメント内のデータ ソースをプログラムでキャッシュする