Страницы: 1 2 След.
RSS
Восстановление поврежденного файла (макрос)
 
Уважаемые форумчане!

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

Ошибка возникает такая: В книге "приказ" обнаружено содержимое, которое не удалось прочитать. Попробовать восстановить содержимое книги? Если Вы доверяете этому источнику книги, нажмите кнопку "Да".

Таких приказов безграничное множество, можно как-то скопом их восстановить с помощью макроса?
Изменено: Элли93 - 20.11.2016 10:28:11
 
А откуда уверенность, что электронная подпись повредила? И где файл?
There is no knowledge that is not power
 
SuperCat, потому что, когда я жму "да" в ответ на сообщение и затем сохраняю файл, макрос начинает работать с этим файлом.
 
Вот файл подобный
 
Нет, я не про это. Почему считаете, что причина в электронной подписи? Я сейчас открыл файл. Да, тоже вышло сообщение. А что именно оттуда пропало? Лист "приказ" на месте.
There is no knowledge that is not power
 
SuperCat, У меня есть макрос, который собирает из таких приказов данные в одну табельную книгу.
Данные из файлов с таким повреждением этот макрос не может собрать,  начинает ругаться.
А вручную все приказы открывать и пересохранять очень много времени отнимает.
 
Элли93, попробуйте при открытии (Workbooks.Open) использовать параметр CorruptLoad со значением xlRepairFile.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
При восстановлении в файл "sheet5.xml" добавляется <sheetPr codeName="Лист5"/>
Удалите из рыбы "Лист1", и, возможно, будет вам щастье.
 
Просмотрел восстановленный файл (внутренности). Изменений документа нет. Слетел стиль ячеек "Финансовый".
There is no knowledge that is not power
 
Цитата
RAN написал: При восстановлении в файл "sheet5.xml" добавляется codeName
Он во все листы добавился. Не вижу повода для беспокойства.
There is no knowledge that is not power
 
JayBhagavan и RAN.
Я только книжку приобрела по макросам, так что пока не очень понимаю Ваши советы)))
Мне еще посоветовали вставить строку : Workbooks.Open sFileName, False, , , , , , , , , False, , False, , xlExtractData..
Только я не знаю куда это вставить ..

Прикреплю табельную книгу с макросом, который не хочет работать с такими приказами.
 
SuperCat, странно, неподписанные ЭЦП аналогичные приказы  работают в макросе ((( а  подписанные не хотят
Изменено: Элли93 - 20.11.2016 12:45:09
 
Какие новости?
There is no knowledge that is not power
 
Начальник ждет макрос, я не могу сообразить как его доработать((вот все новости
 
Элли93, Вашего макроса не видать...

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, SuperCat вот макрос ниже))
 
Элли93, попробуйте заменить:
Код
Workbooks.Open (sFileName)
на:
Код
Workbooks.Open sFileName, False, True, , , , , , , , , , , , xlRepairFile

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, что-то не работает..
А в одном месте надо заменять?
 
Да, не помогает. Помогает, если вручную зайти в файл как архив и удалить из него styles.xml (с другими не экспериментировал).  Но как это автоматизировать - не знаю. Архиваторы (рар, 7з) через командную строку у меня не захотели удалять из архива файлы ссылаясь на то, что файл повреждён. Хотя гуёвая версия упомянутых архиваторов удаляет из архива указанный файл.
Элли93, ждите более продвинутых помогающих. Моих познаний не хватает чтобы помочь Вам составить рабочий код.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Элли93, у меня открывает так, как писал JayBhagavan:
Код
        If sFileName <> ThisWorkbook.Name Then
            Workbooks.Open (sFileName), CorruptLoad:=xlRepairFile
            Set sh2 = Workbooks(sFileName).Sheets(2)
при xlExtractData окрывает, но портится форматирование ячеек. Дальше не разбирался.
p.s. excel 2016
 
JayBhagavan, Если дело в styles.xml, то могу быстро набросать .NET программу
There is no knowledge that is not power
 
ОФФ

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, Код простой и незамысловатый :)
Код
private void button1_Click(object sender, EventArgs e)
{

   var dialog = new FolderBrowserDialog();
   if (dialog.ShowDialog() == DialogResult.Cancel) return;

   foreach(var file_path in Directory.EnumerateFiles(dialog.SelectedPath))
   {
            
      using (var zip = ZipFile.Open(file_path, ZipArchiveMode.Update))
      {
         var styles_entry = zip.Entries.Where(entry => entry.FullName == "xl/styles.xml").First();
         styles_entry.Delete();
      }
   }

   MessageBox.Show("Готово!");
}
There is no knowledge that is not power
 
Мужчины, спасибо за то что помогаете!

SuperCat, а подскажите, пожалуйста, куда вставить этот код? в конец своего макроса?
Изменено: Элли93 - 22.11.2016 08:34:24
 
SuperCat предлагает .NET решение по автоматическому удалению styles.xml из Ваших Excel файлов, что по наблюдениям JayBhagavan устраняет ошибку при открытии. Вы не сможете вставить его в свой макрос, но можете попробовать использовать скомпилированный .exe прикрепленный к этому сообщению. Важно: Экспериментируйте на копии(ях) файлов !!!
Однако, у меня все равно остается ошибка после ручного или автоматического, методом SuperCat, удаления styles.xml.
 
VSerg, здравствуйте!
А это какая-то программка во вложении?
Ее запустить вместе с макросом?
 
Элли93, здравствуйте. Да, можно назвать это отдельной минипрограммой. Запускается сама по себе. Создайте копии (не портите основные) Ваших проблемных Excel файлов в отдельной папке, запустите exe из сообщения #25 и при нажатии в ней Button1, укажите Вашу папку с копиями для обработки. После завершения попробуйте открыть любой Excel файл и проверить, если ошибка все еще присутствует.
 
VSerg, после использования Вашей программки вышло сообщение "готово", но сообщение с ошибкой  осталось при открытии приказов. :(
 
Быть может, проблема с форматом "Финансовый"? Что если попробовать его удалить (в XML)?
There is no knowledge that is not power
 
Цитата
Элли93 написал:
сообщение с ошибкой  осталось при открытии приказов.
Как я и говорил выше, удаление styles.xml в моих экспериментах не решило проблемы.

Добавлено:
SuperCat Вы правы, если удалить элемент <cellStyle name="Финансовый" xfId="5" builtinId="3"/> из xml файла, Excel перестает выдавать сообщение об ошибке.
Изменено: VSerg - 22.11.2016 11:01:02
Страницы: 1 2 След.
Наверх