* alternative Funktionsbausteine: * ALSM_EXCEL_TO_INTERNAL_TABLE -> nur Zellen mit 32 Zeichen Länge * KCD_EXCEL_OLE_TO_INT_CONVERT -> nur Zellen mit 50 Zeichen Länge * UPLOAD_XLS_FILE_2_ITAB * FILE_READ_AND_CONVERT_SAP_DATA * IMPORT_FROM_SPREADSHEET TYPES: BEGIN OF ty_data, name TYPE char255, gewicht TYPE f, END OF ty_data. DATA: it_raw TYPE truxs_t_text_data. PARAMETERS: p_file TYPE file_table-filename OBLIGATORY. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. DATA: lv_rc TYPE i. DATA: it_files TYPE filetable. DATA: lv_action TYPE i. * File-Tabelle leeren, da hier noch alte Einträge von vorherigen Aufrufen drin stehen können CLEAR it_files. * FileOpen-Dialog aufrufen TRY. cl_gui_frontend_services=>file_open_dialog( EXPORTING file_filter = |TXT (*.txt)\|*.txt\|XLS (*.xls)\|*.xls\|XLSX (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }| CHANGING file_table = it_files rc = lv_rc user_action = lv_action ). IF lv_action = cl_gui_frontend_services=>action_ok. * wenn Datei ausgewählt wurde IF lines( it_files ) > 0. * ersten Tabelleneintrag lesen p_file = it_files[ 1 ]-filename. ENDIF. ENDIF. CATCH cx_root INTO DATA(e_text). MESSAGE e_text->get_text( ) TYPE 'I'. ENDTRY. START-OF-SELECTION. DATA: it_datatab TYPE STANDARD TABLE OF ty_data. * Import von Excel-Daten in interne Tabelle über die Ole-Schnittstelle * Format der Tabelle ist in ty_data definiert * Unterstützte Dateiformate: *.csv (*.txt), *.xls, *.xlsx * Das Format der Fließkommazahlen bei CSV muß dem Gebietsschema * von Excel entsprechen: 1,23 (Dezimalseparator = ',') CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING i_field_seperator = ';' " Trennzeichen für CSV-Datei i_line_header = abap_true " Überschrift in der Tabelle i_tab_raw_data = it_raw i_filename = CONV rlgrap-filename( p_file ) " i_filename -> nur 128 Zeichen für Dateinamenlänge erlaubt TABLES i_tab_converted_data = it_datatab EXCEPTIONS conversion_failed = 1 OTHERS = 2. IF sy-subrc = 0. LOOP AT it_datatab ASSIGNING FIELD-SYMBOL(<fs_line>). WRITE: / <fs_line>-name, <fs_line>-gewicht. ENDLOOP. ELSE. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
Weiterführende Infos: Link