Текущее время: Чт, апр 18 2024, 17:01

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Генерация простого DOCX средствами ABAP
СообщениеДобавлено: Пт, фев 15 2019, 11:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
Коллеги, привет.
Часто возникает необходимость нагенерить простых word документов, либо сделать документ в фоне.
Есть простой способ, это распаковать документ и через REPLACE заменить значения меток на свои.
Но WORD этому сопротивляется, иногда разбивая метку на несколько отдельных XML тегов.
Есть несколько способов решить эту проблему, но они на мой взгляд неудобные.

Решение оказалось совсем несложным.
Допустим наша метка зовется "CONTENT_ORG_NAME".
Надо заставить ABAP искать не "CONTENT_ORG_NAME", а каждый символ по отдельности и теги между ними (если они есть).
Для этого надо сделать из метки регулярное выражение.
У меня получилось что-то вроде такого:
C(<[^\>]+>)*O(<[^\>]+>)*N(<[^\>]+>)*T(<[^\>]+>)*E(<[^\>]+>)*N(<[^\>]+>)*T(<[^\>]+>)*_(<[^\>]+>)*O(<[^\>]+>)*R(<[^\>]+>)*G(<[^\>]+>)*_(<[^\>]+>)*N(<[^\>]+>)*A(<[^\>]+>)*M(<[^\>]+>)*E.

Метод:
Code:
  METHOD put_field.
    CONSTANTS: cv_tag TYPE string VALUE '(<[^\>]+>)*'.

    DATA: lv_lenth TYPE i.
    DATA: lv_index TYPE i.
    DATA: lv_pattern TYPE string.

    lv_lenth = strlen( iv_fname ) - 1.
    lv_pattern = iv_fname(1).
    DO lv_lenth TIMES.
      lv_index = lv_index + 1.
      lv_pattern = lv_pattern && cv_tag && iv_fname+lv_index(1).
    ENDDO.

    REPLACE ALL OCCURRENCES OF REGEX lv_pattern IN mv_xml
                            WITH iv_fvalue IGNORING CASE.

  ENDMETHOD.


Теперь правка документа с метками не доставит вам неприятностей.
Надеюсь был вам полезен.

_________________
Новый этап на проекте - устранение доработок :).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генерация простого DOCX средствами ABAP
СообщениеДобавлено: Ср, фев 20 2019, 08:51 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 14 2011, 07:26
Сообщения: 80
Откуда: Альфа Центавра
Пол: Мужской
Добрый день
да тогда желательно иметь довольно длинную метку из многоих символов (чтобы она не съела другого текста XML)
но имхо, если документ будет большой такое регулярное выражение будет немного лагать
возможно проще метку в самом XML исправить на "цельную" или воспользоваться буфером обмена в блокнот и скопировать обратно в ворд (чтобы убрать мусор между буквами)
обычно так делаю так
если что документация на библиотеку


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация простого DOCX средствами ABAP
СообщениеДобавлено: Ср, фев 20 2019, 09:31 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
Вы измените свое мнение, когда проверите в работе. :)

_________________
Новый этап на проекте - устранение доработок :).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генерация простого DOCX средствами ABAP
СообщениеДобавлено: Ср, фев 20 2019, 11:21 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 14 2011, 07:26
Сообщения: 80
Откуда: Альфа Центавра
Пол: Мужской
а пробелы и переносы строк работают? есть любители в notepad++ c XML бютифайером работать, и пробелы могут быть в аттрибутах тэгов
https://regexr.com/48nnm


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB