Практическое руководство. Кэширование данных в документе, защищенном паролем
Обновлен: Июль 2008
Применение |
---|
Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
В проектах уровня документа для Word 2007 и Excel 2007 при добавлении данных в кэш данных для документа или книги, защищенных паролем, изменения кэшированных данных не сохраняются.
Начиная с Visual Studio 2008 с пакетом обновления 1 (SP1), можно сохранять изменения в кэшированных данных путем переопределения в проекте двух методов.
Кэширование в документах Word
Кэширование данных в документах Word, защищенных паролем
В классе ThisDocument пометьте открытое поле или свойство, которое будет кэшироваться. Дополнительные сведения см. в разделе Кэширование данных.
Переопределите метод Document.UnprotectDocument в классе ThisDocument и удалите защиту из документа.
При сохранении документа среда времени выполнения Visual Studio Tools for Office вызывает этот метод, чтобы предоставить возможность снять защиту с документа. Это позволяет сохранить изменения кэшированных данных.
Переопределите метод 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, защищенном паролем
В классе ThisWorkbook или одном из классов Sheetn пометьте открытое поле или свойство, которое будет кэшироваться. Дополнительные сведения см. в разделе Кэширование данных.
Переопределите метод Workbook.UnprotectDocument в классе ThisWorkbook и удалите защиту книги.
При сохранении книги среда времени выполнения Visual Studio Tools for Office вызывает этот метод, чтобы предоставить возможность снять защиту книги. Это позволяет сохранить изменения кэшированных данных.
Переопределите метод 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. |