Eine XLS Datei ins SAP einlesen und anschliessend in eine Transparente Tabelle schreiben
- Transparente Tabelle erstellen (zxls)
- Zeile für die Transparente Tabelle deklarieren (gs_zxls)
- Struktur anlegen für die interne Tabelle und Zeile (gty_data)
- interne Tabelle und Zeile deklarieren (gs_data, gt_data)
- Typ und Variable truxs_t_text_data deklarieren für die Konvertierung.
- Dann baut man die Methode cl_gui_frontend_services => file_open_dialog ein, damit man im Selektionsbildschirm über einen Dialogbildschirm das File auswählen kann, welches man hochladen will.
- Dann kann man mit dem Funktionsbaustein TEXT_CONVERT_XLS_TO_SAP das File konvertieren und z.B. in die interne Tabelle gt_data schreiben.
- Struktur der internen Tabelle muss gleich sein wie der Aufbau des EXCELS
- Mit einem LOOP kann man jeden einzelnen Zeile einer internen Tabelle lesen und anschliessend innerhalb des LOOP's bearbeiten.
- Mit MOVE-CORRESPONDING kann man bei ungleicher Anordnung der Struktur der internen Tabelle und der Struktur der Transparenten Tabelle die richtigen Werte in die richtigen Felder schreiben.
- Anschliessend kann man mit MODIFY die Werte in eine Tabelle schreiben.
Bild zur Methode file_open_dialog
Demo Programm
REPORT z_xls_einlesen_in_itab.
"Transparente Tabelle
TABLES: zxls.
"Zeile der Tabelle
DATA: gs_zxls TYPE zxls.
"Aufbau eines Excel files mit Zwei Zeilen.
TYPES :
BEGIN OF gty_data,
name(40) TYPE c,
nummer(10) TYPE c,
END OF gty_data.
"Tabeldata
TYPES: truxs_t_text_data(4096) TYPE c OCCURS 0.
DATA: g_raw_data TYPE truxs_t_text_data,
gs_data TYPE gty_data,
gt_data TYPE TABLE OF gty_data.
"Hier kann man das XLS eingeben
PARAMETERS: pa_file TYPE rlgrap-filename DEFAULT 'C:\xXx\XLSEINSPIELEN.xls'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_file.
"XLS aufruf ermöglichen
PERFORM selectfile.
START-OF-SELECTION.
"XLS in ITAB gt_data laden (holt Daten aus Excel und füllt gt_data ab)
"XLS kann nur glesen werden wenn es nicht im Excel geöffnet ist
PERFORM uploadexcel.
"Daten in Transparente Tabelle schreiben.
PERFORM add_data.
*&---------------------------------------------------------------------*
*& Form ADD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM add_data .
LOOP AT gt_data INTO gs_data.
gs_data-nummer = gs_data-nummer + 1.
MOVE-CORRESPONDING gs_data TO gs_zxls.
MODIFY zxls FROM gs_zxls.
ENDLOOP.
ENDFORM. " ADD_DATA
*&---------------------------------------------------------------------*
*& Form SELECTFILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM selectfile .
DATA :
lv_subrc LIKE sy-subrc,
lt_it_tab TYPE filetable.
" Anzeeigen des File im Open Dialog control/screen
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Select Source Excel File'
default_filename = '*.xls'
multiselection = ' '
CHANGING
file_table = lt_it_tab
rc = lv_subrc.
" Schreibe den PFAD in die das Inputfeld
LOOP AT lt_it_tab INTO pa_file.
ENDLOOP.
ENDFORM. " SELECTFILE
*&---------------------------------------------------------------------*
*& Form UPLOADEXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM uploadexcel .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = 'X'
i_tab_raw_data = g_raw_data
i_filename = pa_file
TABLES
i_tab_converted_data = gt_data[] " Data
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
ENDFORM. " UPLOADEXCEL
" ADD_DATA