Невалидный XLSX при сохранении Табличного документа

Ошибка открытия XLSX файлов, созданных при сохранении Табличного документа. (Невалидный формат файла)

Обнаружил сегодня ошибку — Табличный документ при записи (интерактивно или программно) в формате XLSX на некоторых сочетаниях ОС+Платформы формирует невалидный файл, который не будет нормально открываться на старых версиях OpenOffice/LibreOffice (проверено на 3.4.0, которых достаточно много у клиентов), но самое главное — неверно показывается во почтовых вложениях на мобильных телефонах (Iphone) и в предпросмотрах вложений Gmail. Наверняка будут проблемы и в скриптах типа PHP-XLSX.

  Ошибка заключается в неправильном регистре наименования одного из xml файлов внутри xlsx. Файл должен называться "sharedStrings.xml", а 1С сохраняет его как "SharedStrings.xml", из-за чего становятся недоступными ссылки вида 
PartName="/xl/sharedStrings.xml" в файле [Content_Types].xml
Target="sharedStrings.xml"/> в файле workbook.xml.rels

  Соответственно воспроизвести ошибку просто  — Файл — Новый Табличный документ — Сохранить как — xlsx — полученный файл распаковать, зайти в подкаталог xl и сразу будет видно как сохранило — "sharedStrings.xml" или "SharedStrings.xml"

При этом ошибка воспроизводится не на всех платформах и версиях ОС, вот проверенные варианты:
Windows 10 Pro x64, 8.3.10.2505 x64 — ошибки нет, тот же компьютер после установки 8.3.10.2580 x86 — ошибки нет
Windows Server 2012 R2 Standard x64, 8.3.10.2561 x86  — ошибка есть
Windows Server 2008 R2 Enterprise x64, 8.3.10.2505 x86  — ошибка есть
Ubuntu 14.04.05 LTS x64, 8.3.9.1850 x64 — ошибка есть
Windows 7 Pro x86, 8.3.8.2088 x86 — ошибка есть

В v8@1c.ru отослал, но у меня там несколько раз отклоняли баг-репорты под предлогами неуказания рег. номеров и прочей не относящейся к багу информации, так что не факт что не получу ответ вида "Сообщение не принято к рассмотрению и ссылка на него в дальнейшем не возможна". Поэтому публикую тут чтобы по поиску люди могли найти проблему.

Примерный код исправления ошибки (ИмяФайла — полный путь к файлу XLSX): 

//ИмяФайла - полный путь к файлу XLSX

ИмяПапки = КаталогВременныхФайлов()+"zip"+Формат(ТекущаяДата(),"ДФ=yyyyMMdd_hhmm");
СоздатьКаталог(ИмяПапки);
Архив = Новый ЧтениеZipФайла(ИмяФайла);
Архив.ИзвлечьВсе(ИмяПапки);
Архив.Закрыть();

УдалитьФайлы(ИмяФайла);

//корректировка ошибки 1С SharedStrings.xml
ФОшибки = Новый Файл(ИмяПапки+"xlSharedStrings.xml");
Если ФОшибки.Существует() Тогда
ПереместитьФайл(ИмяПапки+"xlSharedStrings.xml",ИмяПапки+"xlsharedStrings.xml");
КонецЕсли;

Архив = Новый ЗаписьZipФайла(ИмяФайла);
Архив.Добавить(ИмяПапки+"*.*",РежимСохраненияПутейZIP.СохранятьОтносительныеПути,РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архив.Записать();

УдалитьФайлы(ИмяПапки);

P.S. Пришел ответ от 1С:

Данная проблема исправлена начиная с версии 8.3.10.1515, для режимов совместимости 8.3.10 и выше — имя xml-компонента общих строк формируется с маленькой буквы: sharedStrings.xml В режиме совместимости с 8.3.9 остается старое поведение — имя xml-компонента общих строк формируется с большой буквы: SharedStrings.xml

3 Comments

  1. МихаилМ

    проще поправить экзешник (dll)

    Reply
  2. Armando
    неуказания рег. номеров

    Что мешает указать рег номер?

    У меня для общения с v8 создан шаблон с кодом партнёра и рег номером.

    Reply
  3. saddy

    Ответ от разработчиков:

    Данная проблема исправлена начиная с версии 8.3.10.1515, для режимов совместимости 8.3.10 и выше — имя xml-компонента общих строк формируется с маленькой буквы: sharedStrings.xml В режиме совместимости с 8.3.9 остается старое поведение — имя xml-компонента общих строк формируется с большой буквы: SharedStrings.xml
    Reply

Leave a Comment

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