Funktionsbaustein ALSM EXCEL TO INTERNAL TABLE

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Mit diesem Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE kann direkt der Inhalt einer Excel-Datei in eine interne Tabelle in einem Programm gelesen werden. Der Baustein arbeitet mit OLE.

Muster

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  EXPORTING
    FILENAME                      =
    I_BEGIN_COL                   =
    I_BEGIN_ROW                   =
    I_END_COL                     =
    I_END_ROW                     =
  TABLES
    INTERN                        =
" EXCEPTIONS
"   INCONSISTENT_PARAMETERS       = 1
"   UPLOAD_OLE                    = 2
"   OTHERS                        = 3
          .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

Excel-Quelle

ALSM EXCEL TO INTERNAL TABLEv1.jpg

Funktionsbausteinaufruf

ALSM EXCEL TO INTERNAL TABLEv2.jpg

Ergebnislliste Funktionsbaustein

ALSM EXCEL TO INTERNAL TABLEv3.jpg


ALSM EXCEL TO INTERNAL TABLEv4.jpg

Coding bei einem Beispiel

 DATA: lt_file_table    TYPE filetable,
       lv_rc            TYPE i,
       lv_file          TYPE string.
       lv_filename      TYPE rlgrap-filename.
       lt_intern        TYPE STANDARD TABLE OF alsmex_tabline,
       ls_intern        TYPE alsmex_tabline
       lt_intern_zeilen TYPE STANDARD TABLE OF alsmex_tabline,
       ls_intern_zeilen TYPE alsmex_tabline,
 
 "Open-Dialog (F4)
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title      = 'Datei auswählen'
      file_filter       = 'Excel (ab MS-Office 2007) (*.xlsx)|*.xlsx|Excel (vor MS-Office 2007) (*.xls)|*.xls'
      initial_directory = 'C:\TEMP'
      multiselection    = ' '
    CHANGING
      file_table        = lt_file_table
      rc                = lv_rc
    EXCEPTIONS
      OTHERS            = 3.
 
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.

      READ TABLE  lt_file_table INTO lv_file INDEX 1.
      lv_filename = lv_file.
    ENDIF.

  IF NOT lv_filename IS INITIAL.

   "Upload der Excel-Datei
    CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
     EXPORTING
        filename                = lv_filename
        i_begin_col             = 1
        i_begin_row             = 1
        i_end_col               = 30
        i_end_row               = 56000
      TABLES
        intern                  = lt_intern
      EXCEPTIONS
        inconsistent_parameters = 1
        upload_ole              = 2
        OTHERS                  = 3.
 
    IF sy-subrc <> 0.
    ENDIF.

    SORT lt_intern BY row  "Zeile
                      col. "spalte.

    lt_intern_zeilen = lt_intern.
    DELETE ADJACENT DUPLICATES FROM lt_intern_zeilen COMPARING row.

   "Schleife über alle Zeilen
   LOOP AT lt_intern_zeilen INTO ls_intern_zeilen.

     "Innerere Schleife über alle Spalten einer Zeile
     LOOP AT lt_intern INTO ls_intern WHERE row = ls_intern_zeilen-row.
       "Zuweisung der Excel-Werte an eine interne Struktur
     ENDLOOP.

   ENDLOOP.

Einschränkungen und Empfehlungen

  • Aus dem SAP-Hinweis 933420 ergibt sich eine Beschränkung der Verwendung des Funktionsbausteins auf 9999 Zeilen und auf 50 Zeichen pro Feld.
  • Es wird empfohlen
  1. Kopieren Sie sich den Baustein in den Kundennamensraum.
  2. Verwenden Sie als Bezugstyp für den Tabellenparameter INTERN eine eigene Struktur, die die gleichen Komponenten wie die Originalstruktur ALSMEX_TABLINE besitzt. Durch Verwendung geeigneter Komponententypen können Sie die Einschränkungen auf 50 Zeichen pro Zelle behoben werden, in dem man z. B. in der typisierenden Struktur eine Länge von 1024 Zeichen vorgibt.

OSS-Hinweis

Literatur