Пример изображения и диаграммы в Excel отчете MS Dynamics AX 2012, на основе библиотек Open XML SDK.

Вставка изображения.

Исходный код на C# был сгенерирован программой OpenXMLSDKToolV25 с https://www.microsoft.com/en-US/download/details.aspx?id=30425 из файлов Excel созданных вручную.

В коде x++ были оставлены только обязательные элементы ImagePart, без которых при открытии вновь созданного отчета выходит ошибка Method ‘add’ in COM object of class ‘Workbooks’ returned error code 0x800A03EC (<unknown>) which means: Add method of Workbooks class failed. / Метод «add» в COM-объекте класса «Workbooks» возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Метод Add из класса Workbooks завершен неверно. Cannot create Microsoft Office Excel workbook. / Невозможно создать рабочую книгу Microsoft Office Excel.

Был создан для примера класс наследник XMLExcelReport_Standard_RU для вывода отчетов в Excel.

Для того чтобы вставить изображение нужен объект DrawingsPart, который отвечает за упаковку раздела /xl/drawings, а также worksheetDrawing и drawing. Данные объекты в SpreadsheetDocument должны быть одни. Ниже пример добавления этих объектов в шаблон отчета

А imagePart создается для каждого изображения отдельный, поэтому его создание было вынесено в отдельный метод, который вызывается из перекрытого метода fillBody[1].

После чего нужно вызвать worksheetDrawing.Save(drawingsPart).

Если необходимо вставлять в файл Excel с картинкой или диаграммой (т.е. имеется /xl/drawings) разрывы страниц, то нужно в класс OXMLWorksheet_RU добавить код, который вставляет в worksheet rowBreaks перед drawing[2].

Код метода OXMLExp::getFirstChildType

Метод OXMLExp::insert

Диаграмма Excel.

Для вставки диаграммы в стандартные шаблоны Excel, которые используются классами наследниками XMLExcelReport_RU, также необходимо создавать /xl/charts/styles и /xl/charts/colors, для создания которых в Open XML SDK нет классов, что видно в автоматически генерируемом коде утилитой OpenXMLSDKToolV25. Раздел формируется данными в виде строки. (ниже приведен код добавления xl/charts/colors)

Поэтому для использования диаграммы было принято решение создавать диаграмму в шаблоне, а потом в коде менять только диапазон данных и подписей. Т.к. диаграмма уже будет в шаблоне, то создавать новые drawingsPart и worksheetDrawing не нужно.

Метод изменения диапазонов диаграммы. Метод рассчитан для вызова один раз, например в методе createReport, также можно динамически рассчитывать внутри класса наследника XMLExcelReport_RU количество вставляемых записей и передавать их методу, и использовать вместо макроса #Rows.

Метод OXMLExp::getSetEnumChildType

Источники

  1. How to insert an image in Excel Open XML
  2. Excel Open XML RowBreaks and Footer Images — XML file positioning

Comments

So empty here ... leave a comment!

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

Sidebar



X
!!!
X

Ищешь разработчика?