Обнаружить файл слова, защищенный паролем

Я использую библиотеку «netoffice» для извлечения текста из текстовых файлов. Это должен быть автоматизированный процесс.

Однако, когда файл Word защищен паролем, отображаются окна предупреждений, поэтому пользователю необходимо ввести пароль. Поскольку это автоматизированный процесс, пользователь не вводит пароль, и на этом программа останавливается.

Как я могу определить, защищен ли файл слова паролем с помощью «netoffice», и если это невозможно, как я могу отключить отображение окон предупреждений?

Я попытался установить для DisplayAlerts значение WdAlertLevel.wdAlertsNone, но это не работает.


person Programmer    schedule 07.10.2014    source источник


Ответы (1)


Следующий фрагмент кода поможет вам пропустить файлы, защищенные паролем:

        int iFilesWithPassword = 0;
        Factory.Initialize();
        Application wordApplication = new NetOffice.WordApi.Application();

        try
        {
            // Attempt to open existing document. If document is not password protected then 
            // passwordDocument parameter is simply ignored. If document is password protected
            // then an error is thrown and caught by the catch clause the follows, unless 
            // password is equal to "#$nonsense@!"!                              
            Document newDocument = wordApplication.Documents.Open(@"C:\Users\Giorgos\Desktop\myNextFile.doc",
                                                                  confirmConversions: false,
                                                                  addToRecentFiles: false,
                                                                  readOnly: false,
                                                                  passwordDocument: "#$nonsense@!");



            // read text of document
            string text = newDocument.Content.Text;
        }
        catch(Exception e)
        {
            Exception inner = e.InnerException;

            if (inner != null && inner.InnerException != null)
            {
                inner = inner.InnerException;
                string sErrorMessage = inner.Message;

                if (sErrorMessage.Contains("The password is incorrect."))
                {
                    iFilesWithPassword++;
                }
            }

        }
        finally
        {
            // close word and dispose reference 
            wordApplication.Quit();
            wordApplication.Dispose();
        }
person Giorgos Betsos    schedule 07.10.2014
comment
Я сделал консольное приложение в VS2012, используя .NET Framework 4.0 вместе с NetOffice.dll, v1.6. Если я пропущу аргумент passwordDocument, я также получу диалоговое окно с запросом пароля. Если я добавлю аргумент passwordDocument, диалоговое окно не будет отображаться, и будет выдано исключение. - person Giorgos Betsos; 07.10.2014
comment
Не уверен, что комментарий программиста нужно удалить, учитывая принятый статус ответа на этот ответ, но я могу подтвердить, что версия VBS этого скрипт работает так, как предлагает giorgos-betsos. - person user66001; 08.03.2017