Текущее время: Вс, июл 20 2025, 00:42

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Выгрузка в файлы MS Excel в фоне
СообщениеДобавлено: Пт, ноя 08 2013, 13:56 
Ассистент
Ассистент

Зарегистрирован:
Чт, ноя 29 2007, 11:23
Сообщения: 29
Выношу на суд общественности свою разработку для работы с XLSX файлами.
Разработка нужна для вывода данных в некоторые шаблоны, которые определяются с помощью именованных диапазонов.
1. Берется файл шаблона, из репозитария, или переданного xstring, в нем определяются существующие строки, именованные диапазоны и листы.
2. Далее, по имени диапазона вставляются данные. Если это таблица, то все строки со всем содержимым на странице смещаются вниз на соответствующее количество строк.
3. Происходит копирование атрибутов стиля для новых строк и ячеек. Если именованный диапазон состоит из 1 строки, то форматирование этой строки будет продублировано для каждой строки таблицы. если же в диапазоне более 1 строки, то форматирование игнорируется. Если вставляется несколько столбцов и их количество больше, чем определено в шаблоне, то берется последняя из определенных в именованном диапазоне ячейка и от нее наследуются атрибуты стиля.
4. Если в шаблоне не определены строки, то создается соответствующий файл для добавления новых строк.
5. Результат - строка xstring, возвращаемая по методу GET_FILE.

На данный момент есть 1 ограничение: Объединенные ячейки, если они находятся ниже вставляемой таблицы, будут отработаны некорректно. Кроме того, есть ошибка при открытии полученного файла, офис почему-то ругается на файл, хотя если открыть файл архиватором, в нем открыть, например, файл листа, не редактировать его, а просто сохранить, то файл XLSX открывается уже на "ура" (я использовал редактор Altova XML Spy). Всем идеям, как это починить буду рад!

В качестве примера, приведу код для вывода таблицы в шаблон, который содержит, в том числе, картинку:

Code:
DATA: lr_xlsx TYPE REF TO zcl_bas_xlsx_utils,
      lt_data TYPE TABLE OF e070,
      lv_binlen TYPE i,
      lv_xstring TYPE xstring,
      lt_content TYPE sdokcntbins.

CREATE OBJECT lr_xlsx
  EXPORTING
    iv_template = 'ZBAS_SQ01_TO_XLSX_EXAMPLE'.
SELECT * FROM e070 INTO CORRESPONDING FIELDS OF TABLE lt_data.

lr_xlsx->put_table_into_name(
  iv_name    = 'DATA_TAB'
  it_table = lt_data ).

lv_xstring = lr_xlsx->get_file( ).
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer        = lv_xstring
  IMPORTING
    output_length = lv_binlen
  TABLES
    binary_tab    = lt_content.

CALL METHOD cl_gui_frontend_services=>gui_download
  EXPORTING
    bin_filesize = lv_binlen
    filename     = 'C:\Temp\Temp.xlsx'
    filetype     = 'BIN'
  CHANGING
    data_tab     = lt_content
  EXCEPTIONS
    OTHERS       = 24.


А вот ссылка на исходник.
В коде используется два словарных типа, которых в Вашей системе может не быть:
types mdp_tt_xml_docref type table of ref to IF_IXML_DOCUMENT.
types:
begin of ZBAS_ALSMEX_TABLINE,
row type KCD_EX_ROW_N,
col type KCD_EX_COL_N,
VALUE type STRING_UNICODE,
end of ZBAS_ALSMEX_TABLINE,
ZBAS_ALSMEX_TABLINE_T type table of ZBAS_ALSMEX_TABLINE.


Последний раз редактировалось Alexandear Пт, ноя 08 2013, 14:36, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка в файлы MS Excel в фоне
СообщениеДобавлено: Пт, ноя 08 2013, 14:18 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Одного не пойму, кому в эпоху XSLT нужны все эти решения? (их тут на форуме не одно и не два). Другими словами: cui prodest? Кроме самого автора потренироваться, ессно.

З.Ы.:
Чтобы не ругалось - не нужно подменять расширение.

З.З.Ы.:
Чтобы открывать программно без варнингов с корректным расширением .xml:

Code:
    cl_gui_frontend_services=>gui_download( EXPORTING  bin_filesize = l_size
                                                       filename     = l_filename
                                                       filetype     = 'BIN'
                                            CHANGING   data_tab     = lt_bintab
                                            EXCEPTIONS OTHERS      = 0           ).

    cl_gui_frontend_services=>execute( EXPORTING  parameter   = l_filename
                                                  application = 'EXCEL'
                                       EXCEPTIONS OTHERS    = 0            ).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка в файлы MS Excel в фоне
СообщениеДобавлено: Пт, ноя 08 2013, 14:35 
Ассистент
Ассистент

Зарегистрирован:
Чт, ноя 29 2007, 11:23
Сообщения: 29
Пономарев Артем написал:
Чтобы не ругалось - не нужно подменять расширение.

Я понимаю, что сразу понятно, о чем идет речь. Но дело в том, что я не подменяю расширение. В кратком описании я указал, что берется XLSX файл и он же возвращается. Поэтому расширение как было родное, так и осталось.

Теперь про тезис:
Пономарев Артем написал:
кому в эпоху XSLT нужны все эти решения?

Представим бизнес-сценарий: есть шаблон документа с логотипом компании (как Вы это сделаете через XSLT - отдельный вопрос), вдруг что-то в этом документе меняется, например, реквизиты компании. Для изменения документа нужен сразу абапер? Моя разработка позволяет обойти это "узкое место".

К тому же, например, есть SAP Query. Очень часто через них можно сделать практически все, что делается разработчиками в рамках отчетности. Соответственно, это решение позволяет сделать 1 оболочку и через настройки заполнять Excel документы. При этом, отчетность можно делать в фоне.

Собственно, PROFIT


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка в файлы MS Excel в фоне
СообщениеДобавлено: Пт, ноя 08 2013, 15:02 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Alexandear написал(а):
Я понимаю, что сразу понятно, о чем идет речь. ... В кратком описании я указал, что берется XLSX файл и он же возвращается.

Да, не обратил внимания. Офис обычно ругается осмысленно и пишет логи. По информации "ругается на файл" сложно что-то посоветовать :)

Alexandear написал(а):
К тому же, например, есть SAP Query. Очень часто через них можно сделать практически все, что делается разработчиками в рамках отчетности.

Не тот раздел форума :mrgreen:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка в файлы MS Excel в фоне
СообщениеДобавлено: Пт, ноя 08 2013, 15:20 
Ассистент
Ассистент

Зарегистрирован:
Чт, ноя 29 2007, 11:23
Сообщения: 29
Пономарев Артем написал:
Офис обычно ругается осмысленно и пишет логи.

Действительно, логи пишет. Но они содержат только информацию, что файл был восстановлен. При этом, самое странное, что если я открою один из xml файлов структуры, просто пересохраню его в Altova XML Spy (указываю на всякий случай, вдруг, кто гуру и знает, что эта прога может сделать тайно), не меняя ничего, то есть, индикатор изменения файла не меняется, итоговый документ воспринимается как родной.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка в файлы MS Excel в фоне
СообщениеДобавлено: Пт, ноя 08 2013, 15:43 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Alexandear, а можете файл, который открывается с ошибкой, выложить куда-нибудь. Так проще посмотреть будет.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка в файлы MS Excel в фоне
СообщениеДобавлено: Пт, ноя 08 2013, 16:07 
Ассистент
Ассистент

Зарегистрирован:
Чт, ноя 29 2007, 11:23
Сообщения: 29
Отправил в ЛС.


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

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


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

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


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

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