如何:在受密码保护的文档中缓存数据

如果向受密码保护的文档或工作簿中的数据缓存添加数据,则不自动保存对缓存数据所做的更改。您可以通过在项目中重写两个相应的方法来保存对缓存数据所做的更改。

**适用于:**本主题中的信息适用于以下应用程序的文档级项目:Excel 2013 和 Excel 2010;Word 2013 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

在 Word 文档中执行缓存

在受密码保护的 Word 文档中缓存数据

  1. 在 ThisDocument 类中,标记要缓存的公共字段或属性。有关更多信息,请参见缓存数据

  2. 在 ThisDocument 类中重写 DocumentBase.UnprotectDocument 方法,取消对文档的保护。

    保存文档时,Visual Studio Tools for Office Runtime会调用此方法,以便为您提供取消文档保护的机会。这使您可以保存对缓存数据所做的更改。

  3. 重写 ThisDocument 类中的 DocumentBase.ProtectDocument 方法,并对文档重新应用保护。

    保存文档后,Visual Studio Tools for Office Runtime会调用此方法,以便为您提供对文档重新应用保护的机会。

Cc668203.collapse_all(zh-cn,VS.110).gif示例

下面的代码示例演示如何在受密码保护的 Word 文档中缓存数据。代码在 DocumentBase.UnprotectDocument 方法中取消保护之前,将保存当前的 ProtectionType 值,以便可以在 DocumentBase.ProtectDocument 方法中重新应用相同类型的保护。

<CachedAttribute()> _
Public CachedString As String = "This string is cached in the document."

Private protectionTypeValue As Word.WdProtectionType

Protected Overrides Sub UnprotectDocument()
    If Me.ProtectionType <> Word.WdProtectionType.wdNoProtection Then
        protectionTypeValue = Me.ProtectionType
        Me.Unprotect(securelyStoredPassword)
    End If
End Sub

Protected Overrides Sub ProtectDocument()
    Me.Protect(protectionTypeValue, password:=securelyStoredPassword)
End Sub
[CachedAttribute]
public string CachedString = "This string is cached in the document.";

private Word.WdProtectionType protectionTypeValue;

protected override void UnprotectDocument()
{
    if (this.ProtectionType != Word.WdProtectionType.wdNoProtection)
    {
        protectionTypeValue = this.ProtectionType;
        this.Unprotect(ref securelyStoredPassword);
    }
}

protected override void ProtectDocument()
{
    this.Protect(protectionTypeValue, ref missing,
        ref securelyStoredPassword, ref missing, ref missing);
}

Cc668203.collapse_all(zh-cn,VS.110).gif编译代码

将此代码添加到项目的 ThisDocument 类中。此代码假定密码存储在一个名为 securelyStoredPassword 的字段中。

在 Excel 工作簿中执行缓存

在 Excel 项目中,仅当通过 Workbook.Protect 方法使用密码保护整个工作簿后,才需要执行此过程。如果通过 Worksheet.Protect 方法使用密码来保护某个特定的工作簿,则不需要执行此过程。

在受密码保护的 Excel 工作簿中缓存数据

  1. 在 ThisWorkbook 类或某个 Sheetn 类中,标记要缓存的公共字段或属性。有关更多信息,请参见缓存数据

  2. 在 ThisWorkbook 类中重写 WorkbookBase.UnprotectDocument 方法,取消对工作簿的保护。

    保存工作簿时,Visual Studio Tools for Office Runtime会调用此方法,以便为您提供取消工作簿保护的机会。这使您可以保存对缓存数据所做的更改。

  3. 重写 ThisWorkbook 类中的 WorkbookBase.ProtectDocument 方法,并对文档重新应用保护。

    保存工作簿后,Visual Studio Tools for Office Runtime会调用此方法,以便为您提供对工作簿重新应用保护的机会。

Cc668203.collapse_all(zh-cn,VS.110).gif示例

下面的代码示例演示如何在受密码保护的 Excel 工作簿中缓存数据。代码在 WorkbookBase.UnprotectDocument 方法中取消保护之前,将保存当前的 ProtectStructureProtectWindows 值,以便可以在 WorkbookBase.ProtectDocument 方法中重新应用相同类型的保护。

<CachedAttribute()> _
Public CachedString As String = "This string is cached in the workbook."

Private protectStructureValue As Boolean
Private protectWindowsValue As Boolean

Protected Overrides Sub UnprotectDocument()
    protectStructureValue = Me.ProtectStructure
    protectWindowsValue = Me.ProtectWindows

    Me.Unprotect(securelyStoredPassword)
End Sub

Protected Overrides Sub ProtectDocument()
    Me.Protect(securelyStoredPassword, protectStructureValue, _
        protectWindowsValue)
End Sub
[CachedAttribute]
public string CachedString = "This string is cached in the workbook.";

private bool protectStructureValue;
private bool protectWindowsValue;

protected override void UnprotectDocument()
{
    protectStructureValue = this.ProtectStructure;
    protectWindowsValue = this.ProtectWindows;

    this.Unprotect(securelyStoredPassword);
}

protected override void ProtectDocument()
{
    this.Protect(securelyStoredPassword, protectStructureValue,
        protectWindowsValue);
}

Cc668203.collapse_all(zh-cn,VS.110).gif编译代码

将此代码添加到项目的 ThisWorkbook 类中。此代码假定密码存储在一个名为 securelyStoredPassword 的字段中。

请参见

任务

如何:缓存数据以便脱机使用或在服务器上使用

如何:以编程方式在 Office 文档中缓存数据源

概念

缓存数据