AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.09.2013, 01:56   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Thumbs down Open XML SDK генерит файлы, которые не открываются после пересохранения в Excel 2010
Коллега тут столкнулся вот с какой проблемой:
  • в 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, тем не менее, если у кого еще вылезет - хотя бы будет известно, куда копать.
За это сообщение автора поблагодарили: sukhanchik (10), Logger (10), Krasher (1), MikeR (5), handy-comp (1).
Старый 27.09.2013, 10:19   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А можно как-то повлиять на Open XML SDK чтобы он сразу не генерил такого содержимого ?
Старый 27.09.2013, 10:30   #3  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Версия Open XML SDK 2.5 ?

Так как расширение формата файла Office 2013 расширяет члены элемента <extLst> , которые не имеют все элементы члена, классов Open XML SDK 2.0, связанных с пустым <extLst> (например DocumentFormat.OpenXml.Spreadsheet.PivotFilter:ExtensionList) обновляются новые варианты классов ExtensionListПакет SDK Open XML версии 2.5 (например DocumentFormat.OpenXml.Spreadsheet.PivotFilter:PivotFilterExtensionList). Новый класс ExtensionList , включая новые Off Open XML дочерний элемент заменяются следующие пустой ExtensionList в каждом классе.

Вот тут прочел:
http://msdn.microsoft.com/ru-ru/libr...ffice.15).aspx
Старый 27.09.2013, 10:50   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Версия Open XML SDK 2.0.5022. Эту статью про версию 2.5 я тоже видел, но суть ее в том, что версия 2.0 генерит в большинстве своем пустые <extLst>, а 2.5 - уже непустые с новыми фишками Office 2013, однако, от этого не легче: даже пустой <extLst> пересохраняется в Office 2010 криво, из-за чего Excel-файл потом не открывается.
Старый 27.09.2013, 11:26   #5  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Версия Open XML SDK 2.0.5022. Эту статью про версию 2.5 я тоже видел, но суть ее в том, что версия 2.0 генерит в большинстве своем пустые <extLst>, а 2.5 - уже непустые с новыми фишками Office 2013, однако, от этого не легче: даже пустой <extLst> пересохраняется в Office 2010 криво, из-за чего Excel-файл потом не открывается.
Действительно, совсем забавно выходит
Старый 18.07.2014, 14:18   #6  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Добавлю свои 5 копеек.
Мы с коллегой столкнулись с похожей проблемой.
Исходная ситуация:
  • AX2012R2 CU6
  • MS Office 2010
  • Шаблон отчета, в котором в заголовке вставлено изображение (прямо в файл шаблона). Структура xml в шаблоне корректная, ссылка на картинку и сама картинка запакованы в файл.
Проблема:
Отчет создается с помощью класса XmlExcelReport_Invoice4Paym_RU. При построении отчета используется механизм вставки разрывов страниц. В случае добавления хотя бы одного pageBreak выводится сообщение:
Цитата:
Метод "add" в COM-объекте класса "Workbooks" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Add method of Workbooks class failed.
Невозможно создать рабочую книгу Microsoft Office Excel.
Сначала показалось что это проблема с версией MS Office, про которую писал gl00mie в сообщении выше. Попробовали переустановить на 2013-ый - не помогло.
При более детальном изучении оказалось, что если pageBreak не вставляется (т.е. отчет помещается на 1 страницу) - все работает отлично!

Решение:
Если кто-то столкнется - с такой же ошибкой и шаблоном отчета с картинкой - просто удалите её и попробуйте перезапустить ваш отчет

Вывод картинки через openXML в имеющихся обертках OXML в стандарте не реализован (видимо для стандартных отчетов не понадобился).
Если все же необходимо выводить картинку в отчет - я нашел 2 пути:

1. В классе XmlExcelReport_RU в методе run() можно перехватить COM объект Excel и вывести картинку через COM: Image & Excel или Быстрый способ вывода данных в Excel с картинками
2. Можно доработать семейство OXML, добавив обработку картинок. Я этим путем не пошел т.к. он показался довольно трудоемким. Но при реализации можно опираться на статью MSDN insert-images-into-specific-excel-cells-using-openxml

Последний раз редактировалось kornix; 18.07.2014 в 14:22.
За это сообщение автора поблагодарили: leva (2), gl00mie (3), S.Kuskov (3).
Теги
open xml, xmlexcelreport

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вывод значимых знаков после точки в Excel. Ax 3, SP3 sobik DAX: Программирование 2 27.02.2012 12:53
axsdkupdates: MS Dynamics AX 2009 SDK Updated – Mar 2010 Blog bot DAX Blogs 0 22.04.2011 17:11
Формулы в Excel 2010 akvi DAX: Функционал 14 26.08.2010 23:49
PatrickChua: XML serialization Blog bot DAX Blogs 0 04.05.2009 14:05
Файлы XML, CSV, HTML в кодировке Unicode EVGL DAX: База знаний и проекты 3 16.01.2009 14:23

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:28.