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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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