Корректируем метаданные Excel листов Smart View Oracle

Добрый день. Буквально на прошлой неделе у меня случился казус на работе. Админы поменяли названия форм в АСБУ Oracle Hyperion. Необходимость такого действа была надуманной и даже смешной, чего нельзя сказать о последствиях. Пользователи столкнулись с предсказуемой проблемой – невозможностью обновить выгруженные через Smartview листы excel, о чем свидетельствовало всплывающее сообщение «Недопустимая форма …». Практически сразу у меня появилась идея залезть во внутренности .xlsx файла (ведь это обычный архив, в основном с набором xml файлов) и поменять метаданные листов, осталось понять, как это реализовать. Пару минут гугления и результат не заставил себя ждать. Рассказываю по пунктам.

    1. Берем не работающий файл .xlsx и меняем его расширение в .zip или .rar (современные архиваторы всеядны, у меня был Winrar).
    2. Внутри архива будет следующая структура папок Идем в папу xl => worksheets в которой будут находится файлы sheet1.xml, sheet2.xml и т.д. Эти файлы содержат данные и параметры наших листов excel книги, они-то нам и нужны.
    3. Если открыть лист в блокноте (я советую notepad++), который подключен к базе данных Oracle через smartviw (допустим это будет sheet1.xml), то в конце xml разметки можно встретить такой код: 

      В вашем случае набор параметров может отличаться. Из контекста видно, что имя формы FormName связано с id переменной rId5. В папке с листами находится еще одна папка с наименованием _rels. Зайдя в нее можно увидеть перечень файлов с листами, но уже с разрешением .rels (видимо от relation – связь), т.е. sheet1.rels, sheet2.rels и т.д. Внутри по сути та же разметка в стандарте xml:

      Здесь нас интересует Id c именем rId5. Видно, что он ссылается на некий файл customProperty5.bin.
    4. Возвращаемся в папку xl. В ней как раз и лежит искомый файл customProperty5.bin (а так же куча других файлов .bin с метаданными листов), открыв который мы увидим наименование формы на которую ссылается лист smartview.
    5. Меняем наименование на необходимое, сохраняем файл, выходим из архива, и переименовываем его обратно в .xlsx формат. Теперь листы Smart View будут обновляться.

Маленькая подсказка, если менять наименование формы необходимо в более чем одном листе, проще воспользоваться массовой заменой текста в файле. Вытаскиваете из архива все файлы customPropertyXXX.bin Открываете Notepad++, как говориться – куда без него.  Открываете меню поиск => найти в файлах, в открывшемся окошке выбираете папку с файлами .bin заполняете поля «найти», «заменить на» и жмете кнопку «заменить в файлах». Закидываете все это дело обратно в архив, и переименовываете его из .zip в .xlsx Кстати, если вы столкнулись со старым расширением Excel фала .xls (двоичный формат) — попробуйте зайти в него и через меню «сохранить как» присвойте новый формат  .xlsx За сим все, всем удачных правок.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *