|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.08.2011, 11:26 | #1 |
Регистрация: 29.08.2011
Сообщений: 4
|
Как определить, есть ли пароль не книге (excel) не открывая ее?
Товарищи, буду признателен за помощь.
Есть код (VBA), который обрабатывает почтовый ящик и проверяет вложения на excel и сортирует их по ранее заданным шаблонам. В каждом типе шаблонов есть определенный скрытый лист и в первой ячейке указан его тип. В день порядка 1500 писем(1500 файлов ексель). При проверке писем, я не открываю excel, а беру значение из скрытого листа с помощью функциии : Function getvalue(file_path As String, sht_name As String, cell_RC As String) As String Dim file_path As String Dim file_name As String file_dir = Left(x, InStrRev(file_path , "\", -1)) file_name = Right(file_path , Len(file_path ) - InStrRev(file_path, "\", -1)) getvalue = ExecuteExcel4Macro("'" & file_dir & "[" & file_name & "]" & sht_name & "'!" & cell_RC) End Function Этот способ очень эффективный по сравнению с открытием книги (Set awb = Workbooks.Open(FileName:=file_path , UpdateLinks:=0, ReadOnly:=False, Password:="", WriteResPassword:=True, ignoreReadOnlyRecommended:=True, CorruptLoad:=xlRepairFile)) Но столкнулся с проблемой, что если книга с паролем, то всплывает окно с просьбой вести пароль и процедура стоппорится. Никакие displayalersts=false не помагают. Единственный вариант, который приходит на ум через OLEDB вытаскивать структуру файла, и если выдает ошибку "не удалось дешифровать файл, то игнорировать его: Код:
|
29.08.2011, 11:52 | #2 |
Старожил
Регистрация: 15.05.2008
Сообщений: 2,058
|
как вариант
Как определить существует или нет пароль на открытие книги ? Ответ : Код:
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499 |
29.08.2011, 23:25 | #3 |
Регистрация: 29.08.2011
Сообщений: 4
|
Виктор,
Как ты предлагаешь обратиться к книге "ActiveWorkbook", если мне нельзя ее открывать? |
29.08.2011, 23:43 | #4 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Можно пытаться открыть книгу, указав пароль пустую строку, и тут же закрыть ее. Если книга запаролена, возникнет ошибка:
Код:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
29.08.2011, 23:44 | #5 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
А почему нельзя открывать файлы?
Они огромные? Обычно цикл "открытие-закрытие без сохранения" занимает меньше секунды (обычно 0,2-0,4 сек.) Итого, файлы обработаются за несколько минут. Или в вашем случае это слишком долго? PS: Ваша идея с ADODB.Connection мне очень понравилась. Я бы остановился именно на таком способе, оформив код в виде функции. (других способов пока на ум не приходит) PPS: Пробовали GetObject вместо Workbooks.Open? Вдруг ошибка не выскочит... (не проверял) |
30.08.2011, 01:15 | #6 |
Форумчанин
Регистрация: 07.03.2010
Сообщений: 796
|
Я бы просто поставил в цикле обработки файлов
on error resume next и err.clear и данные получал через ADO
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
|
30.08.2011, 11:19 | #7 |
Регистрация: 29.08.2011
Сообщений: 4
|
2Казанский,
Машина на которой находится обработчик не очень мощная. И открытие/закрытие для некоторых файлов достигает до 20 секунд. В свое очередь ADODB тратит не выгрузку не более секунды. Поэтому пришлось отказаться от метода открытия с пустым паролем, т.к. все незапароленные файлы открываются,а их большинство. (Set awb = Workbooks.Open(FileName:=file_path , UpdateLinks:=0, ReadOnly:=False, Password:="", WriteResPassword:=True, ignoreReadOnlyRecommended:=True, CorruptLoad:=xlRepairFile)) 2EducatedFool GetObject не помогает 2R Dmitry Предлагаешь вообще отказаться от ExecuteExcel4Macro и использовать ADO с указанием диапазона для выгрузки из ячейки? Идея хорошая... протестирую, что будет быстрее. |
30.08.2011, 12:01 | #8 |
Форумчанин
Регистрация: 07.03.2010
Сообщений: 796
|
Код:
посмотри, может используешь функцию Тынц
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
|
30.08.2011, 13:51 | #9 |
Регистрация: 29.08.2011
Сообщений: 4
|
Доработал механизм по совету R Dmitry.
Если функция возвращает ="ERR_OPEN" , то пытаюсь открыть книгу через workbook.open password:="" Работает быстро. Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как программно снять пароль с книги Excel | nFalcon | Microsoft Office Excel | 19 | 20.06.2013 00:21 |
Как в excel определить есть ли такое значение в таблице | KAIst | Microsoft Office Excel | 9 | 09.09.2010 13:27 |
Как определить есть ли в едит курсор | Яр|/||< (^_^) | Общие вопросы Delphi | 4 | 21.02.2010 15:26 |
как при импорте из Excel в delphi узнать сколько заполненных строк в книге Excel?чтобы организовать цикл | betirsolt | БД в Delphi | 1 | 17.01.2010 18:51 |
Как обратиться к ячейке файла Excel не открывая его | Alexandro | Microsoft Office Excel | 3 | 28.05.2008 12:02 |