Поделиться через


Практическое руководство. Кэширование данных в документе, защищенном паролем

Обновлен: Июль 2008

Применение

Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям Microsoft Office.

Тип проекта

  • Проекты уровня документа

Версия Microsoft Office

  • Выпуск системы Microsoft Office 2007

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

В проектах уровня документа для Word 2007 и Excel 2007 при добавлении данных в кэш данных для документа или книги, защищенных паролем, изменения кэшированных данных не сохраняются.

Начиная с Visual Studio 2008 с пакетом обновления 1 (SP1), можно сохранять изменения в кэшированных данных путем переопределения в проекте двух методов.

Кэширование в документах Word

Кэширование данных в документах Word, защищенных паролем

  1. В классе ThisDocument пометьте открытое поле или свойство, которое будет кэшироваться. Дополнительные сведения см. в разделе Кэширование данных.

  2. Переопределите метод Document.UnprotectDocument в классе ThisDocument и удалите защиту из документа.

    При сохранении документа среда времени выполнения Visual Studio Tools for Office вызывает этот метод, чтобы предоставить возможность снять защиту с документа. Это позволяет сохранить изменения кэшированных данных.

  3. Переопределите метод Document.ProtectDocument в классе ThisDocument и восстановите защиту документа.

    После сохранении документа среда времени выполнения 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. Переопределите метод Workbook.UnprotectDocument в классе ThisWorkbook и удалите защиту книги.

    При сохранении книги среда времени выполнения Visual Studio Tools for Office вызывает этот метод, чтобы предоставить возможность снять защиту книги. Это позволяет сохранить изменения кэшированных данных. 

  3. Переопределите метод Workbook.ProtectDocument в классе ThisWorkbook и восстановите защиту документа.

    После сохранении книги среда времени выполнения Visual Studio Tools for Office вызывает этот метод, чтобы предоставить возможность восстановить защиту книги.

Пример

В следующем примере кода показывается, как кэшировать данные в книге Excel, защищенной паролем. Прежде чем код удалит защиту в методе Workbook.UnprotectDocument он сохраняет текущие значения ProtectStructure и ProtectWindows, позволяя повторно применить этот тип значения в методе 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.

См. также

Задачи

Практическое руководство. Кэширование данных для автономного использования или для использования на сервере

Практическое руководство. Программное кэширование источника данных в документе MS Office.

Основные понятия

Кэширование данных

Журнал изменений

Дата

Журнал

Причина

Июль 2008

Новый раздел.

Изменение функции SP1.