Partager via


Comment : mettre en cache des données dans un document protégé par un mot de passe

Mise à jour : Juillet 2008

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés.

Type de projet

  • Projets au niveau du document

Version de Microsoft Office

  • Version 2007 de Microsoft Office System

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

Dans les projets au niveau du document pour Word 2007 et Excel 2007, si vous ajoutez des données au cache de données dans un document ou un classeur protégé par un mot de passe, les modifications apportées aux données en mémoire cache ne sont pas enregistrées.

À compter de Visual Studio 2008 Service Pack 1 (SP1), vous pouvez enregistrer les modifications apportées aux données en mémoire cache en substituant deux méthodes dans votre projet.

Mise en cache dans les documents Word

Pour mettre en cache des données dans un document Word protégé par un mot de passe

  1. Dans la classe ThisDocument, marquez un champ public ou une propriété à mettre en cache. Pour plus d'informations, consultez Mise en cache des données.

  2. Substituez la méthode Document.UnprotectDocument dans la classe ThisDocument et supprimez la protection du document.

    Lorsque le document est enregistré, le runtime Visual Studio Tools pour Office appelle cette méthode pour vous donner la possibilité d'ôter la protection du document. Cela permet l'enregistrement des modifications apportées aux données mises en cache.

  3. Substituez la méthode Document.ProtectDocument dans la classe ThisDocument et rétablissez la protection du document.

    Une fois le document enregistré, le runtime Visual Studio Tools pour Office appelle cette méthode pour vous donner la possibilité de rétablir la protection du document.

Exemple

L'exemple de code suivant montre comment mettre en cache des données dans un document Word protégé par un mot de passe. Avant que le code ne retire la protection dans la méthode Document.UnprotectDocument, il enregistre la valeur ProtectionType actuelle afin que le même type de protection puisse être rétabli dans la méthode 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);
}

Compilation du code

Ajoutez ce code à la classe ThisDocument de votre projet. Il suppose que le mot de passe est stocké dans un champ nommé securelyStoredPassword.

Mise en cache dans les classeurs Excel

Dans les projets Excel, cette procédure est nécessaire uniquement lorsque vous protégez le classeur entier avec un mot de passe en utilisant la méthode Workbook.Protect. Elle n'est pas nécessaire si vous protégez uniquement une feuille de calcul spécifique avec un mot de passe en utilisant la méthode Worksheet.Protect.

Pour mettre en cache des données dans un classeur Excel protégé par un mot de passe

  1. Dans la classe ThisWorkbook ou une des classes Sheetn, marquez un champ public ou une propriété à mettre en cache. Pour plus d'informations, consultez Mise en cache des données.

  2. Substituez la méthode Workbook.UnprotectDocument dans la classe ThisWorkbook et supprimez la protection du classeur.

    Lorsque le classeur est enregistré, le runtime Visual Studio Tools pour Office appelle cette méthode pour vous donner la possibilité d'ôter la protection du classeur. Cela permet l'enregistrement des modifications apportées aux données mises en cache. 

  3. Substituez la méthode Workbook.ProtectDocument dans la classe ThisWorkbook et rétablissez la protection du document.

    Une fois le classeur enregistré, le runtime Visual Studio Tools pour Office appelle cette méthode pour vous donner la possibilité de rétablir la protection du classeur.

Exemple

L'exemple de code suivant montre comment mettre en cache des données dans un classeur Excel protégé par un mot de passe. Avant que le code ne supprime la protection dans la méthode Workbook.UnprotectDocument, il enregistre les valeurs ProtectStructure et ProtectWindows actuelles, afin que le même type de protection puisse être rétabli dans la méthode 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);
}

Compilation du code

Ajoutez ce code à la classe ThisWorkbook de votre projet. Il suppose que le mot de passe est stocké dans un champ nommé securelyStoredPassword.

Voir aussi

Tâches

Comment : mettre en cache des données pour une utilisation hors connexion ou sur un serveur

Comment : mettre en cache par programme une source de données dans un document Office

Concepts

Mise en cache des données

Historique des modifications

Date

Historique

Raison

Juillet 2008

Nouvelle rubrique

Modifications de fonctionnalités dans le SP1.