Коллега тут столкнулся вот с какой проблемой:
- в AX 2012 есть отчет-наследник класса XMLExcelReport, генерящий Excel-файл с помощью Open XML SDK
- есть корпоративная сеть, где у всех стоит Office 2010 (14.7106.5001)
- сгенерированный отчет нормально открывается в Excel 2010, но...
- если затем файл либо просто сохранить, либо "сохранить как" в формате xlsx, то он перестает открываться: Excel ругается, что файл поврежден.
При этом:
- если сохранить файл, скажем, в формате xlsb, то он нормально открывается
- в Office 2013 таких проблем не возникает, но...
- переходить в данном конкретном примере на новую версию Office никто в ближайшее время не будет
В итоге получился отчет, который генерит файл, "бьющися" после первого же пересохранения в Excel 2010 и более не открывающийся.
При ближайшем рассмотрении обнаружилось вот что: в исходном сгенеренном файле, если его распаковать, workbook.xml выглядит в чуть сокращенном виде так:
PHP код:
<x:workbook xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheets>
<x:sheet name="Sheet2" sheetId="2" r:id="rId1" />
</x:sheets>
<x:extLst>
<x:ext xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}">
<x15:workbookPr chartTrackingRefBase="1" />
</x:ext>
</x:extLst>
</x:workbook>
А после пересохранения - уже вот так:
PHP код:
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheets>
<sheet name="Sheet2" sheetId="2" r:id="rId1"/>
</sheets>
<extLst>
<x:ext xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}">
<x15:workbookPr chartTrackingRefBase="1"/>
</x:ext>
</extLst>
</workbook>
Тут видно, что Excel выкинул упоминание о префиксе "x" и пространстве имен, которое им идентифицируется, - везде, кроме элемента extLst, и при повторном открытии файла Excel как раз и не понимает, к чему же теперь относится нигде не объявленный префикс "x". Если убрать этот префикс в workbook.xml и styles.xml, то файл начинает открываться нормально. Пока
из найденных в инете советов - только удалять напрочь этот extList...
Понятно, что проблема в Excel 2010, а не в Аксапте и не в Open XML SDK, тем не менее, если у кого еще вылезет - хотя бы будет известно, куда копать.