2009-12-22 5 views

Répondre

2

Vérifiez la propriété HasPassword.

+2

Je vois que vous avez maintenant marqué ceci comme votre réponse, shahjapan, mais sachez que cela vérifie uniquement la protection du classeur, pas la protection de la feuille de calcul. Voir ma réponse ci-dessous pour plus de détails. –

11

Vous pouvez vérifier si un classeur est protégé par mot de passe via la propriété Workbook.HasPassword. Vous pouvez définir le mot de passe de classeur via la méthode Workbook.SaveAs:

Excel.Workbook myWorkbook = ...; 

if (!myWorkbook.HasPassword) 
{ 
    excelWorkbook.Application.DisplayAlerts = false; 

    excelWorkbook.SaveAs(
     excelWorkbook.Name, 
     Type.Missing, 
     "My Password", 
     Type.Missing, 
     Type.Missing, 
     Type.Missing, 
     Type.Missing, 
     Type.Missing); 
} 

Une feuille de calcul peut avoir son contenu des cellules protégées, les objets de dessin protégés, et/ou les scénarios protégés. Ils peuvent être vérifiés via les propriétés Worksheet.ProtectContents, Worksheet.ProtectDrawingObjects et Worsksheet.ProtectScenarios, respectivement. Je ne connais aucun moyen de tester si la feuille de calcul est protégée avec un mot de passe, sinon d'essayer d'appeler Worksheet.Unprotect, en passant une chaîne vide pour le mot de passe, puis de voir si la feuille de calcul a été correctement protégée:

bool wasPasswordProtected; 

try 
{ 
    myWorksheet.Unprotect(string.Empty); 

    // Unprotect suceeded: 
    wasPasswordProtected = false; 
} 
catch 
{ 
    // Unprotect failed: 
    wasPasswordProtected = true; 
} 

Vous pouvez définir le paramètre de protection pour la feuille de calcul via la méthode Worksheet.Protect. L'exemple suivant protégera la feuille de calcul si l'un des trois éléments de protection n'est pas défini. Il définit également un mot de passe et transmet l'argument 'UserInterfaceOnly' à 'true', ce qui signifie que seul l'utilisateur est empêché de modifier la feuille de calcul, alors que les codes tels que VBA, VB.NET ou C# feuille de travail. Définir 'UserInterfaceOnly' sur 'false' verrouillerait toutes les modifications, qu'elles soient faites par l'utilisateur ou via le code.

if(!myWorksheet.ProtectContents || 
    !myWorksheet.ProtectDrawinngObjects || 
    !myWorsksheet.ProtectScenarios) 
{ 
    string myPassword = "..."; 

    bool protectContents = true; 
    bool protectDrawingObjects = true; 
    bool protectScenarios = true; 

    bool userInterfaceOnly = true; 

    myWorksheet.Protect(
     myPassword, 
     protectDrawingObjects, 
     protectContents, 
     protectScenarios, 
     userInterfaceOnly,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing,  
     Type.Missing); 

Notez que « UserInterfaceOnly » ne persiste pas lorsque le classeur est enregistré et revient à « faux » automatiquement lorsque le classeur est fermé. Si vous souhaitez également qu'il soit "true" dans toutes les sessions futures, le paramètre "UserInterfaceOnly" doit être réappliqué en appelant la méthode "Worksheet.Protect" chaque fois que le classeur est ouvert. Cela peut être fait en vous abonnant à l'événement Workbook.Open.

Vous pouvez également lire les fichiers d'aide concernant la méthode Worksheet.Protect afin de pouvoir comprendre les paramètres facultatifs, en accordant une attention particulière au paramètre 'UserInterfaceOnly'.

+0

Mike, avez-vous des idées sur le traitement d'une feuille protégée par un mot de passe vide? –

Questions connexes