Die Klasse EDX_UTIL hat eine Methode CREATE_XLS_FROM_ITAB, mit der man die Inhalte einer internen Tabelle direkt in eine Excel-Arbeitsmappe schreiben kann. Dabei kann auch der Fieldcatalog manipuliert werden. Ebenfalls funktioniert die Generierung der Mappe als Hintergrundjob. Dafür ist es natürlich notwendig, die Tabelle per TRANSFER auf dem Server zu hinterlegen. Anbei ein Beispielcoding, in der die Tabelle T001 weggeschrieben wird.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
REPORT ztest. DATA: lt_xlstab TYPE STANDARD TABLE OF x255. DATA: lv_xstring TYPE xstring, lv_xlsx VALUE 'X', lv_binlength TYPE i. START-OF-SELECTION. * Datenholung SELECT * FROM t001 INTO TABLE @DATA(gt_t001). TRY. edx_util=>create_xls_from_itab( EXPORTING * it_fieldcat = " Feldkatalog für ListViewerControl * it_sort = " ALV-Contol: Tabelle der Sortierkriterien * it_filt = " ALV-Control: Tabelle der Filterbedingungen * is_layout = " ALV-Control: Layoutstruktur i_xlsx = lv_xlsx " allgemeines flag IMPORTING e_xstring = lv_xstring CHANGING ct_data = gt_t001 ). CATCH cx_edx_send_fault. ENDTRY. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xstring * APPEND_TO_TABLE = ' ' IMPORTING output_length = lv_binlength TABLES binary_tab = lt_xlstab. cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_binlength " Dateilänge bei Binärdateien filename = 'T002.xlsx' " Name der Datei filetype = 'BIN' " Dateityp (Ascii, Binär, ...) CHANGING data_tab = lt_xlstab " Übergabetabelle EXCEPTIONS file_write_error = 1 " Datei kann nicht geschrieben werden no_batch = 2 " Frontend-Funktion im Batch nicht ausführbar. gui_refuse_filetransfer = 3 " falsches Frontend invalid_type = 4 " Ungültiger Wert für Parameter FILETYPE no_authority = 5 " Keine Berechtigung für Download unknown_error = 6 " Unbekannter Fehler header_not_allowed = 7 " Header ist nicht zulässig. separator_not_allowed = 8 " Separator ist nicht zulässig. filesize_not_allowed = 9 " Angabe der Dateigröße nicht zulässig. header_too_long = 10 " Die Headerinformation ist zur Zeit auf maximal 1023 Bytes be dp_error_create = 11 " DataProvider kann nicht erzeugt werden dp_error_send = 12 " Fehler beim Senden der Daten durch DP dp_error_write = 13 " Fehler beim Schreiben der Daten durch DP unknown_dp_error = 14 " Fehler beim Aufruf des Dataprovider access_denied = 15 " Zugriff auf Datei nicht erlaubt. dp_out_of_memory = 16 " Nicht genug Speicher im Dataprovider disk_full = 17 " Speichermedium ist voll. dp_timeout = 18 " Timeout des Dataproviders file_not_found = 19 " Datei konnte nicht gefunden werden. dataprovider_exception = 20 " Allgemeiner Ausnahmefehler im Dataprovider control_flush_error = 21 " Fehler im Controlframework. not_supported_by_gui = 22 " Nicht unterstützt von GUI error_no_gui = 23 " GUI nicht verfügbar OTHERS = 24 ). |