Я работаю над процессом, который берет данные от клиентов и анализирует их в нашем продукте. В этом случае файл xlsx. К сожалению, у нашего продукта возникли проблемы с его чтением, поскольку он был закодирован для чтения файлов xlsx, созданных в Excel для Mac вместо Excel для Windows, и наши клиенты используют Windows.
Я все еще копаюсь в этом, но, насколько я могу судить, различия касаются типов MIME и организации данных XML, заархивированных в файл xlsx:
Вот снимок экрана двух файлов с одинаковыми данными, один из которых сохранен локально на Mac, а другой - с компьютера с Windows.
Вот результаты file
команды:
user@MBP:~/Desktop/win_vs_mac$ file *
mac_origin.xlsx: Microsoft Excel 2007+
win_origin.xlsx: Zip archive data, at least v2.0 to extract
user@MBP:~/Desktop/win_vs_mac$ file -I *
mac_origin.xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=binary
win_origin.xlsx: application/zip; charset=binary
И вот что они дают вам, когда вы разархивируете их (эти результаты согласуются в нескольких попытках)
user@MBP:~/Desktop/win_vs_mac$ unzip mac_origin.xlsx
Archive: mac_origin.xlsx
inflating: [Content_Types].xml
inflating: _rels/.rels
inflating: xl/_rels/workbook.xml.rels
inflating: xl/workbook.xml
inflating: xl/sharedStrings.xml
inflating: xl/theme/theme1.xml
inflating: xl/styles.xml
inflating: xl/worksheets/sheet1.xml
inflating: docProps/core.xml
inflating: docProps/app.xml
user@MBP:~/Desktop/win_vs_mac$ unzip win_origin.xlsx
Archive: win_origin.xlsx
warning: win_origin.xlsx appears to use backslashes as path separators
inflating: _rels/.rels
inflating: [Content_Types].xml
inflating: xl/workbook.xml
inflating: xl/sharedStrings.xml
inflating: xl/styles.xml
inflating: xl/worksheets/sheet0.xml
inflating: xl/_rels/workbook.xml.rels
После тонны поисков в Google эта тема заставляет меня поверить, что порядок добавления файлов также может иметь значение.
У меня вопрос, есть ли способ программно преобразовать файл Excel на основе Win в файл Excel на основе Mac, не открывая файл и не сохраняя его вручную? Идеально в Терминале? Я не могу найти какие-либо существующие инструменты. Как посредник типа sysadmin/ops, я не в состоянии попросить клиента сгенерировать их в macOS, и я не в состоянии попросить Dev перестроить ту часть продукта, которая их читает. Мне нужно автоматизировать это, или это сведет меня с ума.
Спасибо за любую помощь, которую вы можете оказать.