Убедитесь, что в Excel есть пароль, и запретите подсказку C # - PullRequest
1 голос
/ 12 апреля 2019

Я посмотрел в Интернете и на этом сайте, как проверить, есть ли у файла пароль. Проблема заключается в том, как запретить Excel запрашивать правильный пароль. Я вижу, что есть HasPassword, но мне кажется, что свойство можно использовать только тогда, когда лист открыт.

try {
oWrkBk = oApp.Workbooks.Open(sFile, Password: "");
}
catch { /* has password */

Но проблема в том, что Excel открывает окно приглашения, которое мне не нужно. Если я не могу открыть его, я пропущу его и закрою окно Excel.

1 Ответ

0 голосов
/ 12 апреля 2019

Если OleDb не может быть и речи, вы сможете использовать это, чтобы определить, есть ли у файла пароль на основе, если выброшено исключение.

Пример кода для отображения:

//using System.Data.OleDb;
private static void OpenMyExcel()
{
    string filePath = "C:\\users\\me\\Desktop\\Book1.xlsx";
    OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0\"");

    try
    {
        connection.Open();
        //Do stuff
    }
    catch(Exception e)
    {
        //has a password
    }
}

Что можно изменить на простой метод проверки (извините за любительский код):

//using System.Data.OleDb;
private static bool HaveAPass(string filePath)
{
    OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0\"");

    try
    {
        connection.Open();
        connection.Close(); //if it reaches this point, there is no password
        return false;
    }
    catch(Exception e)
    {
        //has a password
        return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...