Практическое руководство. Кэширование данных в документе, защищенном паролем
Если добавить данные в кэш данных в документе или книге, защищенной паролем, изменения, вносимые в кэшированные данные, не сохраняются автоматически.Можно сохранить изменения в кэшированные данные путем переопределения двух методов в проекте.
Применение. Сведения этого раздела применяются к проектам уровня документа для следующих приложений: Excel 2013 и Excel 2010; Word 2013 и Word 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.
Кэширование в документах Word
Кэширование данных в документах Word, защищенных паролем
В классе ThisDocument пометьте открытое поле или свойство, которое будет кэшироваться.Дополнительные сведения см. в разделе Кэширование данных.
Переопределите метод DocumentBase.UnprotectDocument в классе ThisDocument и удалите защиту из документа.
При сохранении документа среда времени Visual Studio Tools for Office (cреда выполнения) вызывает этот метод, чтобы предоставить возможность снять защиту с документа.Это позволяет сохранить изменения кэшированных данных.
Переопределите метод DocumentBase.ProtectDocument в классе ThisDocument и восстановите защиту документа.
После сохранении документа среда Visual Studio Tools for Office (cреда выполнения) вызывает этот метод, чтобы предоставить возможность восстановить защиту документа.
Пример
В следующем примере кода показывается, как кэшировать данные в документе 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);
}
Компиляция кода
Добавьте этот код, добавьте код в класс ThisDocument создаваемого проекта.В этом коде предполагается, что пароль хранится в поле с именем securelyStoredPassword.
Кэширование в книгах Excel
В проектах Excel эта процедура необходима, только когда разработчик защищает всю книгу паролем с помощью метода Workbook.Protect.Эта процедура не нужна, если разработчик защищает только конкретный лист с помощью метода Worksheet.Protect.
Кэширование данных в листе Excel, защищенном паролем
В классе ThisWorkbook или одном из классов Sheetn пометьте открытое поле или свойство, которое будет кэшироваться.Дополнительные сведения см. в разделе Кэширование данных.
Переопределите метод WorkbookBase.UnprotectDocument в классе ThisWorkbook и удалите защиту книги.
При сохранении книги среда Visual Studio Tools for Office (cреда выполнения) вызывает этот метод, чтобы предоставить возможность снять защиту книги.Это позволяет сохранить изменения кэшированных данных.
Переопределите метод WorkbookBase.ProtectDocument в классе ThisWorkbook и восстановите защиту документа.
После сохранении книги среда Visual Studio Tools for Office (cреда выполнения) вызывает этот метод, чтобы предоставить возможность восстановить защиту книги.
Пример
В следующем примере кода показывается, как кэшировать данные в книге Excel, защищенной паролем.Прежде чем код удалит защиту в методе WorkbookBase.UnprotectDocument он сохраняет текущие значения ProtectStructure и ProtectWindows, позволяя повторно применить этот тип значения в методе 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);
}
Компиляция кода
Добавьте этот код, добавьте код в класс ThisWorkbook создаваемого проекта.В этом коде предполагается, что пароль хранится в поле с именем securelyStoredPassword.
См. также
Задачи
Практическое руководство. Программное кэширование источника данных в документе MS Office.