Каким образом можно обеспечить пропуск запаролленного файла при пакетной обработке скриптом.
Сразу оговорка, что это PowerPoint, но смысл от этого не меняется. Идет обработка очень весомой файловой структуры (более 7миллионов файлов и 7к презентаций, с утра обработано и продолжаеттся тестовый прогоне). В них надо заменить при наличии несколько слов, по этому каждый файл открывается [vba]
Код
Set objPresentation = Application.Presentations.Open(FilePath, msoFalse, msoFalse, msoFalse)
[/vba] . но если он запаролен, то приложение ждет ввода пароля или отмены. Если отмену нажать, то ошибка обработатеся, пишется в лог, но надо нажать , а значит смотреть глазами, что при таком объеме затруднительно.
Может у кого есть мысли на этот счет?
Всем доброго пятничного вечера.
Каким образом можно обеспечить пропуск запаролленного файла при пакетной обработке скриптом.
Сразу оговорка, что это PowerPoint, но смысл от этого не меняется. Идет обработка очень весомой файловой структуры (более 7миллионов файлов и 7к презентаций, с утра обработано и продолжаеттся тестовый прогоне). В них надо заменить при наличии несколько слов, по этому каждый файл открывается [vba]
Код
Set objPresentation = Application.Presentations.Open(FilePath, msoFalse, msoFalse, msoFalse)
[/vba] . но если он запаролен, то приложение ждет ввода пароля или отмены. Если отмену нажать, то ошибка обработатеся, пишется в лог, но надо нажать , а значит смотреть глазами, что при таком объеме затруднительно.
Прежде всего с прошедшим. Всего, всего и формучан послушных. :-)
Пробовал, PowerPoint (https://msdn.microsoft.com/en-us/library/office/ff746171(v=office.15).aspx ) к несчасть. а не Excel и не Word.В той ветке тишина стоит по этому сюда написал. Если на планете не будут возражать и тут не против, я на эту тему ссылку сделаю там в новой теме, если сдешние обитатели , которые впрочем пересекаются, не смогут дать совета до понедельника. ок?
Pelena,
Прежде всего с прошедшим. Всего, всего и формучан послушных. :-)
Пробовал, PowerPoint (https://msdn.microsoft.com/en-us/library/office/ff746171(v=office.15).aspx ) к несчасть. а не Excel и не Word.В той ветке тишина стоит по этому сюда написал. Если на планете не будут возражать и тут не против, я на эту тему ссылку сделаю там в новой теме, если сдешние обитатели , которые впрочем пересекаются, не смогут дать совета до понедельника. ок?bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Доброе время суток. Для презентаций существуют два вида паролей (рассматривается стандартный новый формат pptx). 1. Пароль для открытия файла. При этом файл шифруется и начало файла не соответствует признаку zip-архива. Проверить можно такой простой функцией[vba]
Код
Public Function isCrypted(ByVal FileName As String) As Boolean Dim fNum As Integer, byteArr(1 To 13) As Byte fNum = FreeFile Open FileName For Binary Access Read As #fNum Get #fNum, , byteArr Close #fNum If byteArr(1) = 80 And byteArr(2) = 75 And byteArr(13) = 33 Then isCrypted = False Else isCrypted = True End If End Function
[/vba] 2. Пароль для разрешения записи. Тут формат zip-архив, При этом в файле ppt\presentation.xml есть узел <p:modifyVerifier>. Можно сменив предварительно расширение файла на zip, используя Shell.Application скопировать файл, и проверить есть ли такой node, используя метод selectSingleNode объекта Msxml2.DOMDocument.6.0 Если нет, то нет пароля на запись, если есть - установлен. Главное не забыть вернуть расширение назад В общем требуется двухстадийная проверка файла. По идее, не должно быть долго. Успехов.
Доброе время суток. Для презентаций существуют два вида паролей (рассматривается стандартный новый формат pptx). 1. Пароль для открытия файла. При этом файл шифруется и начало файла не соответствует признаку zip-архива. Проверить можно такой простой функцией[vba]
Код
Public Function isCrypted(ByVal FileName As String) As Boolean Dim fNum As Integer, byteArr(1 To 13) As Byte fNum = FreeFile Open FileName For Binary Access Read As #fNum Get #fNum, , byteArr Close #fNum If byteArr(1) = 80 And byteArr(2) = 75 And byteArr(13) = 33 Then isCrypted = False Else isCrypted = True End If End Function
[/vba] 2. Пароль для разрешения записи. Тут формат zip-архив, При этом в файле ppt\presentation.xml есть узел <p:modifyVerifier>. Можно сменив предварительно расширение файла на zip, используя Shell.Application скопировать файл, и проверить есть ли такой node, используя метод selectSingleNode объекта Msxml2.DOMDocument.6.0 Если нет, то нет пароля на запись, если есть - установлен. Главное не забыть вернуть расширение назад В общем требуется двухстадийная проверка файла. По идее, не должно быть долго. Успехов.anvg
Сообщение отредактировал anvg - Пятница, 10.02.2017, 23:04
Приогромнейшее спасибо. 1 - уже проверил , вставил и все работает, а 2 - видимо еще один прогон сделаю, нечего серверам "простаивать". Если всплывет, то буду думать в зависимости от количества таких файлов. В этом варианте и так добавились проверки на длинну пути ( некоторые под 260 были), а мы запустили по полному пути к шаре, а не как у пользователей мапированный диск. Поверку на пароль вот добавил.
Еще раз спасибо. По хорошему завидую таким обширным знаниям.
Андрей,
Приогромнейшее спасибо. 1 - уже проверил , вставил и все работает, а 2 - видимо еще один прогон сделаю, нечего серверам "простаивать". Если всплывет, то буду думать в зависимости от количества таких файлов. В этом варианте и так добавились проверки на длинну пути ( некоторые под 260 были), а мы запустили по полному пути к шаре, а не как у пользователей мапированный диск. Поверку на пароль вот добавил.
Еще раз спасибо. По хорошему завидую таким обширным знаниям. bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Тут дело скорее не в знаниях. Просто провёл исследование - учили же на инженера, а первая задача инженера исследование и анализ... Знаний то тут - что у всех типовых файлов начало имеет сигнатуру, остальное опыт.
Тут дело скорее не в знаниях. Просто провёл исследование - учили же на инженера, а первая задача инженера исследование и анализ... Знаний то тут - что у всех типовых файлов начало имеет сигнатуру, остальное опыт.anvg
Я говорю не о бесполезных энцеклопедических знаниях, а именно о знаниях которые позволяют оценить, исследовать и собрать "пазл" в конечный ответ.[/offtop]
[offtop]Андрей, не скромничайте.
Я говорю не о бесполезных энцеклопедических знаниях, а именно о знаниях которые позволяют оценить, исследовать и собрать "пазл" в конечный ответ.[/offtop]bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Public Function isCrypted(ByVal FileName As String) As Boolean Dim fNum As Integer, byteArr(1 To 49) As Byte fNum = FreeFile Open FileName For Binary Access Read As #fNum Get #fNum, , byteArr Close #fNum
' pptx ' 1-80 ,2-75, 13-33 - The file SHOULD NOT be an encrypted document. ' 1-208 ,2-207, 13-0 - The file MUST be an encrypted document. ' ppt ' 1-208 ,2-207, 13-0 , 45-12 , 49-181 - The file SHOULD NOT be an encrypted document. ' 1-208 ,2-207, 13-0 , 45-11 , 49-109 - The file MUST be an encrypted document.
If (byteArr(1) = 80 And byteArr(2) = 75 And byteArr(13) = 33) Or _ (byteArr(45) = 12 And byteArr(49) = 181) Then isCrypted = False Else isCrypted = True End If End Function
Public Function isCrypted(ByVal FileName As String) As Boolean Dim fNum As Integer, byteArr(1 To 49) As Byte fNum = FreeFile Open FileName For Binary Access Read As #fNum Get #fNum, , byteArr Close #fNum
' pptx ' 1-80 ,2-75, 13-33 - The file SHOULD NOT be an encrypted document. ' 1-208 ,2-207, 13-0 - The file MUST be an encrypted document. ' ppt ' 1-208 ,2-207, 13-0 , 45-12 , 49-181 - The file SHOULD NOT be an encrypted document. ' 1-208 ,2-207, 13-0 , 45-11 , 49-109 - The file MUST be an encrypted document.
If (byteArr(1) = 80 And byteArr(2) = 75 And byteArr(13) = 33) Or _ (byteArr(45) = 12 And byteArr(49) = 181) Then isCrypted = False Else isCrypted = True End If End Function
Спустя X дней, пробных запусков и устранения вылезающих проблем, вот такой финальный результат по одному , самому крупному из трех ресурсов И так как это не первый прогон, то изменений было больше, но я скорее о том, сколько пришлось прелопатить.
Андрей, еще раз спасибо. исходя из цифирок только автоматизация позволила выполнить задачу, а без совета №6 это не возможно.
Спустя X дней, пробных запусков и устранения вылезающих проблем, вот такой финальный результат по одному , самому крупному из трех ресурсов И так как это не первый прогон, то изменений было больше, но я скорее о том, сколько пришлось прелопатить.
Андрей, еще раз спасибо. исходя из цифирок только автоматизация позволила выполнить задачу, а без совета №6 это не возможно.bmv98rus