Но все по порядку. Вчера обратился ко мне коллега с просьбой помочь заполнить некую форму в MS Excel. Форму ему прислали сверху, поэтому часть ячеек предварительно была защищена от изменения паролем дабы исполнитель не делал лишних ошибок. Но автор формы тоже был не промах и не проверив внешние связи выслал форму как есть. Это привело к неожиданному результату – часть формул приняло вид типа «=СУММ(D10;'C:\Documents and Settings\Pupkin\Local Settings\Temporary Internet Files\Content.IE7\DFGRETGFG\[Tabla.1.xls]1 rozd'!$E$7:$E$9)»
Очевидно что править такую радость нет возможности ибо лист защищен и эта формула тоже.
Что же делать?
Самый старый способ – это копирование всего листа на новое место и там правка и формул и форматирования. Но форматирование делать долго, да и теряется защита листа. Вдруг автору документа не понравится?)
Оказывается с появлением MS Excel 2007 существует более изящный способ. Так как теперича файл XLSX имеет формат ZIP-архива, то его можно разложить на составляющие xml–файлы и rels-отношения.
Поступаем так:
• открываем XLSX-файл через Winrar. Можете переименовать XLSX в ZIP для удобства.
• по пути ".../xl/worksheets/sheetN.xml", где N- номер листа, т.е. 1,2,3... выбираем Лист, защищённый паролем (поочерёдно следующую процедуру провести для всех запароленных листов).
• вытаскиваем файл "sheetN.xml" из контейнера XLSX в любую временную папку и открываем текстовым редактором (Notepad++).
• поиском по тексту ищем слово "password". Редактор находит XML-контейнер, например