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

更新: 2008 年 7 月

适用于

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 文档级项目

Microsoft Office 版本

  • 2007 Microsoft Office system

有关更多信息,请参见按应用程序和项目类型提供的功能

在 Word 2007 和 Excel 2007 的文档级项目中,如果在受密码保护的文档或工作簿中向数据缓存添加数据,将不保存对缓存数据所做的更改。

从 Visual Studio 2008 Service Pack 1 (SP1) 开始,您可以通过在项目中重写两个方法来保存对缓存数据所做的更改。

在 Word 文档中执行缓存

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

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

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

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

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

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

示例

下面的代码示例演示如何在受密码保护的 Word 文档中缓存数据。代码在 Document.UnprotectDocument 方法中取消保护之前,将保存当前的 ProtectionType 值,以便可以在 Document.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);
}

编译代码

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

在 Excel 工作簿中执行缓存

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

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

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

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

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

  3. 在 ThisWorkbook 类中重写 Workbook.ProtectDocument 方法,对工作簿重新应用保护。

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

示例

下面的代码示例演示如何在受密码保护的 Excel 工作簿中缓存数据。代码在 Workbook.UnprotectDocument 方法中取消保护之前,将保存当前的 ProtectStructureProtectWindows 值,以便可以在 Workbook.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);
}

编译代码

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

请参见

任务

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

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

概念

缓存数据

修订记录

日期

修订历史记录

原因

2008 年 7 月

新增主题。

SP1 功能更改。