可以在文档级自定义项中缓存数据对象,以便可以脱机访问数据,或者在不打开 Microsoft Office Word 或 Microsoft Office Excel 的情况下访问。 若要缓存对象,该对象必须具有满足特定要求的数据类型。 .NET Framework 中的许多常见数据类型都满足这些要求,包括String和DataSetDataTable。
适用于: 本主题中的信息适用于 Excel 和 Word 的文档级项目。 有关详细信息,请参阅 Office 应用程序和项目类型提供的功能。
可通过两种方法将对象添加到数据缓存:
若要在生成解决方案时向数据缓存添加对象,请将 CachedAttribute 该属性应用于对象声明。 有关详细信息,请参阅 如何:缓存数据以用于离线或在服务器上使用。
若要在运行时以编程方式向数据缓存添加对象,请使用
StartCaching宿主项的方法,例如ThisDocument或ThisWorkbook类。 有关详细信息,请参阅 如何:以编程方式缓存 Office 文档中的数据源。将对象添加到数据缓存后,无需启动 Word 或 Excel 即可访问和修改缓存的数据。 有关详细信息,请参阅 服务器上的文档中的访问数据。
要缓存的数据对象的要求
若要在解决方案中缓存数据对象,该对象必须满足以下要求:
是宿主项的读/写公共字段或属性,如
ThisDocument或ThisWorkbook类。不是索引器或其他参数化属性。
此外,数据对象必须由类序列化 XmlSerializer ,这意味着对象的类型必须具有以下特征:
为公共类型。
应有无参数的公共构造函数。
不执行需要其他安全权限的代码。
仅公开可读写的公共属性(将忽略其他类型的属性)。
不公开多维数组(接受嵌套数组)。
不要从属性和字段返回接口。
如果是集合,则不实现 IDictionary。
缓存数据对象时,Visual Studio Tools for Office 运行时将对象序列化为存储在文档中 自定义 XML 部件中的 XML 字符串。 有关详细信息,请参阅 自定义 XML 部件概述。
缓存的数据大小限制
可以向文档中的数据缓存添加的数据总量以及数据缓存中任何单个对象的大小有一些限制。 如果超出这些限制,当数据保存到数据缓存时,应用程序可能会意外关闭。
若要避免这些限制,请遵循以下准则:
不要将大于 10 MB 的任何对象添加到数据缓存中。
不要将超过 100 MB 的总数据添加到单个文档中的数据缓存中。
这些是近似值。 确切的限制取决于几个因素,包括可用的 RAM 和正在运行的进程数。
控制缓存对象的行为
若要更好地控制缓存对象的行为,可以在缓存对象的类型上实现 ICachedType 接口。 例如,如果要控制在对象更改时如何通知用户,则可以实现此接口。 有关演示如何实现 ICachedType的代码示例,请参阅 ControlCollectionOffice 开发示例和演练中的 Excel 动态控件示例和 Word 动态控件示例中的类。
在受密码保护的文档中保留对缓存数据的更改
如果在使用密码保护的文档中缓存数据对象,则不会保存对缓存数据的更改。 可以通过重写两种方法来保存对缓存数据的更改。 覆盖这些方法以在保存文档时暂时删除保护,然后在保存操作完成后重新应用保护。
有关详细信息,请参阅 如何:在受密码保护的文档中缓存数据。
在向数据缓存添加 null 值时防止数据丢失
向数据缓存添加对象时,在保存和关闭文档之前,必须将所有缓存的对象初始化为非 null 值。 如果保存和关闭文档时任何缓存对象具有 null 值,Visual Studio Tools for Office 运行时将自动从数据缓存中删除所有缓存对象。
如果在设计时使用属性向数据缓存添加CachedAttribute 值的对象,则可以使用ServerDocument类在打开文档之前初始化缓存的数据对象。 如果要在未安装 Word 或 Excel 的服务器上初始化缓存的数据,那么在最终用户打开文档之前,这非常有用。 有关详细信息,请参阅 服务器上的文档中的访问数据。