как проверить Excel Workbook или лист защищен паролем или нет? - PullRequest
2 голосов
/ 22 декабря 2009

используя vsto, C # fx 3.5, Как проверить Excel Книга или лист защищены паролем или нет?

Ответы [ 2 ]

11 голосов
/ 22 декабря 2009

Вы можете проверить, защищена ли рабочая книга паролем, с помощью свойства Workbook.HasPassword . Пароль рабочей книги можно установить с помощью метода 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);
}

Рабочий лист может иметь защищенное содержимое ячейки, защищенные объекты чертежа и / или защищенные сценарии. Их можно проверить с помощью свойств Worksheet.ProtectContents , Worksheet.ProtectDrawingObjects и Worsksheet.ProtectScenarios соответственно. Я не знаю ни одного способа проверки, защищен ли рабочий лист паролем или нет, кроме попытки вызова Worksheet.Unprotect , передачи пустой строки для пароля и проверки, если рабочий лист был успешно незащищен:

bool wasPasswordProtected;

try
{
    myWorksheet.Unprotect(string.Empty);

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

Вы можете установить параметры защиты для рабочего листа с помощью метода Worksheet.Protect . Следующий пример защитит рабочий лист, если какой-либо из трех элементов защиты не установлен. Он также устанавливает пароль и передает аргумент «UserInterfaceOnly» как «true», что означает, что только пользователь заблокирован от редактирования листа, в то время как код, такой как VBA, VB.NET или C #, не будет предотвращен от манипулирования Рабочий лист. Установка «UserInterfaceOnly» в «false» блокирует все изменения, сделанные пользователем или с помощью кода.

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);

Обратите внимание, что UserInterfaceOnly НЕ сохраняется, когда рабочая книга сохраняется, и автоматически возвращается к значению false, когда рабочая книга закрыта. Если вы хотите, чтобы оно также было «истиной» во всех будущих сеансах, параметр «UserInterfaceOnly» необходимо повторно применить, вызывая метод «Worksheet.Protect» при каждом открытии книги. Это можно сделать, подписавшись на событие Workbook.Open .

Вы также можете прочитать файлы справки, относящиеся к методу Worksheet.Protect , чтобы вы могли понять дополнительные параметры, обращая особое внимание на параметр UserInterfaceOnly.

3 голосов
/ 22 декабря 2009

Проверьте свойство HasPassword .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...