快取資料

了解如何在文件層級自訂中快取資料物件,以便可以離線存取資料,或不需要開啟 Microsoft Office Word 或 Microsoft Office Excel。 若要快取物件,物件必須具有符合特定要求的資料類型。 .NET Framework 中的許多常見資料類型都符合這些要求,包括 StringDataSetDataTable

適用對象:本主題資訊適用於 Excel 及 Word 的文件層級專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

有兩種方式可將物件新增至資料快取:

要快取的資料物件需求

若要快取方案中的資料物件,物件必須符合下列要求:

  • 是主項目的讀取/寫入公用欄位或屬性,例如 ThisDocumentThisWorkbook 類別。

  • 不是索引器或其他參數化屬性。

    此外,資料物件必須由 XmlSerializer 類別序列化,這表示物件的類型必須具有下列特性:

  • 是公用類型。

  • 具有不含參數的公用建構函式。

  • 不執行需要額外安全性權限的程式碼。

  • 只公開讀取/寫入公用屬性 (將會忽略其他屬性)。

  • 不公開多維陣列 (接受巢狀陣列)。

  • 不從屬性和欄位傳回介面。

  • 如果是集合,則不實作 IDictionary

    快取資料物件時,Visual Studio Tools for Office 執行階段會將物件序列化為儲存在文件中自訂 XML 部分的 XML 字串。 如需詳細資訊,請參閱自訂 XML 組件概述

快取的資料大小限制

可以新增到文件中資料快取的資料總量以及資料快取中任何個別物件的大小都存在一些限制。 如果您超過這些限制,當資料儲存至資料快取時,應用程式可能會意外關閉。

若要避免這些限制,請遵循下列指導方針:

  • 請勿將任何大於 10 MB 的物件新增至資料快取。

  • 請勿在單一文件中的資料快取中新增超過 100 MB 的總資料。

    這些是近似值。 確切的限制取決於幾個因素,包括可用 RAM 和執行中的進程數。

控制快取物件的行為

為了更能控制快取物件的行為,您可以在快取物件的類型上實作 ICachedType 介面。 例如,如果您想要控制使用者在物件變更時收到通知的方式,您可以實作這個介面。 如需示範如何實作 ICachedType 的程式碼範例,請參閱 Office 程式開發範例和逐步解說 中 Excel 動態控制項範例和 Word 動態控制項範例的 ControlCollection 類別。

在受密碼保護的文件中保留對快取資料的更改

如果您在以密碼保護的文件中快取資料物件,則不會儲存快取資料的變更。 您可以覆寫兩種方法來儲存快取資料的變更。 覆寫這些方法,以在儲存文件時暫時取消保護,然後在儲存作業完成後重新套用保護。

如需詳細資訊,請參閱如何:快取受密碼保護文件中的資料

將 Null 值新增至資料快取時防止資料遺失

當您將物件新增至資料快取時,所有快取的物件都必須初始化為非 Null 值,才能儲存並關閉文件。 如果儲存和關閉文件時,任何快取的物件有 Null 值,Visual Studio Tools for Office 執行階段會自動從資料快取中移除所有快取的物件。

如果在設計階段使用 CachedAttribute 屬性將具有 Null 值的物件新增至資料快取,則可以在開啟文件之前使用 ServerDocument 類別初始化快取的資料物件。 如果您想要在終端使用者開啟文件之前,初始化在未安裝 Word 或 Excel 的伺服器內快取資料,這非常有用。 如需詳細資訊,請參閱存取伺服器文件中的資料