Simple transformation создание EXCEL

Одина из самых популярных разработок ZWWW не может(по крайней мере те версии, которые я видел) формировать документы при фоновой работе приложения. Второй недостаток это скорость обработки. Эти проблемы можно решить используя ABAP2XLSX или XLSX Workbench, но порой их может не быть на проекте. В таком случае для формирования документа EXCEL можно воспользоваться трансформациями.

  1. Создадим документ EXCEL с необходимым форматированием

2. Сохраним его как таблицу xml 2003.

Если открыть документ в текстовом редакторе можно увидеть его структуру(Полный код XML далее)

Тег <DocumentProperties> содержит свойства документа. Информация об авторе и времени создания, в общем случае нам это не интересно. Но, возможно, вам потребуется вывести туда, например, создателя документа. 

Тег <Styles> содержит набор стилей для всего документа. Если нам необходимо доработать существующий документ. Мы можем в другом документе создать страницу с необходимыми стилями. Типа такой:

Сохранить ее как XML и скопировать нужный стиль в существующий докyмент. Только надо смотреть, чтобы коды отличались. Объединение ячеек просто стилем делать нельзя. Надо немного изменять в части со структурой документа.

Далее идут блоки листа, содержащие в себе структуру. Можно создавать новые листы, менять свойства ячеек, добавлять информацию.

Эта информация пригодится, например, если вы будете форматировать готовую трансформацию. Т.к. в дальнейшем документ будет приведен в не перевариваемый для EXCEL вид. И Редактирование будет именно в структуре XML, а не визуальное. Вообще, подобный способ мне нравится меньше, чем формирование через ABAP2XLSX, где можно сохранить шаблон в нормальном для редактирования виде.

3. Создадим тип данных для передачи в трансформацию. Входных параметров может быть много, но мне удобнее подавать все в одной структуре.

4. Теперь перейдем в транзакцию STRANS и создадим простую трансформацию

Если зайти в трансформацию, то увидим следующий код:

Для того, чтобы работать с объектами словаря, надо прописать в тег transformation следующий атрибут:

Между тегами <tt:template> -вставляем весь ранее сохраненный xml документ.

Далее надо добавить данные из внутренней структуры в документ
Прописываем входные параметры: <tt:root name="MAINDATA" type="ddic:ZZZ_S_TEST_XLS"/>. В нашем случае это одна структура с вложенными таблицами

Теперь мы можем обращаться к этой структуре в теле трансформации.

Для вставки единичного значения используем тег  <tt:value

Для вставки табличного значения необходимо использовать <tt:loop

Если наша трансформация предполагает добавление строк, необходимо удалить это свойство листа. Или менять его самостоятельно

Если в получившемся документе будет ошибка, увидим такое окошко при открытии

Можно посмотреть более подробную информацию об ошибке по ссылке

Линий тег, который фиксирует строку, и при добавлении строк выше получается коллизия. Удалим его


В результате получаем такой XML

 

Код для запуска  трансформации. Обратите внимание, что имя источника данных должно совпадать с тем, которое мы прописали для него в трансформации в теге root

Результат вызова программы:

 

 

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

Ваш адрес email не будет опубликован.