Стандартная выгрузка ALV в Excel которую можно вызвать из Popup меню пункт "Электронная таблица", перед выгрузкой спрашивает имя файла для сохранения Excel файла
что на мой взгляд очень не удобно т.к. в большинстве случаев мне файл не нужен
Было немного свободного времени и я решил покопаться в этой проблеме, получилось следующее:
в функциональном модуле xml_export_dialog в начале вставил implicit enhancement
Code:
FUNCTION xml_export_dialog.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Функц. модуль XML_EXPORT_DIALOG, Начало A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZXML_EXPORT_DIALOG. "active version
data: ok type c.
if I_DEFAULT_EXTENSION = 'XLSX' or I_DEFAULT_EXTENSION = 'XLS'.
PERFORM excel_open IN PROGRAM YDK_EXCELOPEN USING I_XML I_DEFAULT_EXTENSION ok.
check ok is INITIAL.
endif.
ENDENHANCEMENT.
обработку вынес в отдельную программу (может ещё где пригодится):
Code:
REPORT ydk_excelopen.
FORM excel_open USING xstr_data extension ok.
DATA: filename TYPE string.
DATA: length TYPE i.
DATA: itdata TYPE xml_rawdata.
CHECK extension = 'XLSX' OR extension = 'XLS'.
PERFORM get_temp_filename USING filename extension.
CHECK NOT filename IS INITIAL.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = xstr_data
IMPORTING
output_length = length
TABLES
binary_tab = itdata.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
bin_filesize = length
filetype = 'BIN'
filename = filename
CHANGING
data_tab = itdata
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc = 0.
PERFORM excel_run USING filename.
ok = 'X'.
ENDFORM.
FORM get_temp_filename USING rfilename extension.
DATA: temdir TYPE string.
DATA: len TYPE i.
DATA: rc TYPE i.
DATA: ok TYPE c.
DATA: num(2) TYPE n.
CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
CHANGING
sapworkdir = temdir
EXCEPTIONS
get_sapworkdir_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
DO 15 TIMES.
num = sy-index.
CONCATENATE temdir '\tmp_excel_' num '.' extension INTO rfilename.
CALL METHOD cl_gui_frontend_services=>file_delete
EXPORTING
filename = rfilename
CHANGING
rc = rc
EXCEPTIONS
file_delete_failed = 1
cntl_error = 2
error_no_gui = 3
file_not_found = 4
access_denied = 5
unknown_error = 6
not_supported_by_gui = 7
wrong_parameter = 8
OTHERS = 9.
CHECK sy-subrc = 0 OR sy-subrc = 4.
ok = 'X'.
EXIT.
ENDDO.
IF ok IS INITIAL.
CLEAR: rfilename.
ENDIF.
ENDFORM. "prepare_filename
FORM excel_run USING filename.
DATA: lh_appl TYPE ole2_object.
DATA: lh_books TYPE ole2_object.
DATA: lh_book TYPE ole2_object.
DATA: ok TYPE c.
DO 1 TIMES.
CREATE OBJECT lh_appl 'EXCEL.APPLICATION'.
CHECK sy-subrc = 0.
SET PROPERTY OF lh_appl 'DisplayAlerts' = 0.
CHECK sy-subrc = 0.
CALL METHOD OF lh_appl 'WORKBOOKS' = lh_books.
CHECK sy-subrc = 0.
CALL METHOD OF lh_books 'ADD' " такой способ позволяет открыть книгу как новый файл, при закрытии Excel предложит сохранить...
EXPORTING
#1 = filename.
CALL METHOD OF lh_appl 'ACTIVEWORKBOOK' = lh_book.
CHECK sy-subrc = 0.
SET PROPERTY OF lh_book 'Saved' = 0.
PERFORM excel_open_exit IN PROGRAM zbc_excel_open_exit USING lh_appl lh_books lh_book IF FOUND. " сделал Exit для себя чтоб можно было украсть Excel если надо будет
SET PROPERTY OF lh_appl 'DisplayAlerts' = 1.
SET PROPERTY OF lh_appl 'VISIBLE' = 1.
ok = 'X'.
ENDDO.
IF ok IS INITIAL.
IF NOT lh_appl IS INITIAL.
CALL METHOD OF lh_appl 'QUIT'.
ENDIF.
ENDIF.
ENDFORM. "xml_run