Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие авар.doc
Скачиваний:
62
Добавлен:
02.09.2019
Размер:
2.34 Mб
Скачать

Загрузка данных из файлов Excel с помощью ole

Данные из файлов Excel можно загружать напрямую в SAP BI с помощью технологии OLE. Необходимо помнить, что OLE объекты – это библиотеки операционной системы Windows, поэтому на использование технологии есть следующие ограничения:

  • Операционная система Windows;

  • Необходимые библиотеки должны присутствовать в системе (т.е. должны быть установлены приложения, которые их предоставляют);

  • Проблематично запускать в фоновом режиме на сервере приложений.

Можно воспользоваться следующим примером, отредактировав его под свои нужды:

Загрузка сообщений (tcode se91) из файла Excel

REPORT  Z_S_LOAD_FORMULA. INCLUDE OLE2INCL. TABLES:   T100. TYPES:   TIR_LINE TYPE TABLE OF TLINE. DATA:       S TYPE STRING,       SS1 TYPE STRING,       SS2 TYPE STRING,       SS3 TYPE STRING,       SS4 TYPE STRING,       S3(3),       L TYPE I,       I TYPE I,       J TYPE I,       TT100 TYPE TABLE OF T100,       LT100 TYPE T100,       C(1),       CL TYPE /BIC/OISMSGCLS,       T_LINE LIKE T100,       TR_LINE LIKE TABLE OF T_LINE,       HEADER LIKE THEAD. DATA:       EXCEL TYPE OLE2_OBJECT,       WB TYPE OLE2_OBJECT,       SHEETS TYPE OLE2_OBJECT,       SHEET TYPE OLE2_OBJECT,       CELL TYPE OLE2_OBJECT. DATA:       IR_LINE TYPE TIR_LINE,       IS_LINE LIKE LINE OF IR_LINE,       SC TYPE I. DATA:       FILENAME TYPE C LENGTH 256,       LT_IT_TAB TYPE FILETABLE,       FNAME LIKE LINE OF LT_IT_TAB,       LV_SUBRC TYPE I,       USER_ACTION TYPE I.   CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG     EXPORTING       WINDOW_TITLE      = 'SELECT FILE'       DEFAULT_EXTENSION = 'XLS'       FILE_FILTER       = 'Таблица Excel (*.xls)|*.xls'       MULTISELECTION    = ' '     CHANGING       FILE_TABLE        = LT_IT_TAB       USER_ACTION       = USER_ACTION       RC                = LV_SUBRC.   IF USER_ACTION IS INITIAL.     READ TABLE LT_IT_TAB INTO FNAME INDEX 1.     FILENAME = FNAME.     CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.     SET PROPERTY OF EXCEL 'VISIBLE' = 'TRUE'.     CALL METHOD OF EXCEL 'WORKBOOKS' = WB.     CALL METHOD OF WB 'OPEN' EXPORTING #1 = FILENAME.     CALL METHOD OF EXCEL 'SHEETS' = SHEETS.     GET PROPERTY OF SHEETS 'COUNT' = SC.     I = 0.     DO SC TIMES.       I = I + 1.       CALL METHOD OF EXCEL 'WORKSHEETS' = SHEET         EXPORTING #1 = I.       CALL METHOD OF SHEET 'ACTIVATE'.       GET PROPERTY OF SHEET 'NAME' = S.       J = 2.       SS1 = 'X'.       WHILE SS1 NE ''.         PERFORM GETCELLVAL USING J 2 SHEET CHANGING SS1.         PERFORM GETCELLVAL USING J 3 SHEET CHANGING SS2.         PERFORM GETCELLVAL USING J 4 SHEET CHANGING SS3.         PERFORM GETCELLVAL USING J 1 SHEET CHANGING SS4.         L = SS2.         SS2 = L.         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'           EXPORTING             INPUT  = SS2           IMPORTING             OUTPUT = S3.         J = J + 1.         DELETE FROM T100 WHERE           ARBGB = SS1 AND           MSGNR = S3.         T_LINE-SPRSL = 'RU'.         T_LINE-ARBGB = SS1.         T_LINE-MSGNR = S3.         CONCATENATE SS4 SS1 S3 INTO SS4 SEPARATED BY '->'.         L = STRLEN( SS4 ).         IF L >= 60.           T_LINE-TEXT = SS4(60).         ELSE.           T_LINE-TEXT = SS4.         ENDIF.         INSERT T100 FROM T_LINE.         HEADER-TDOBJECT = 'DOKU'.         CONCATENATE SS1 S3 INTO HEADER-TDNAME.         HEADER-TDID = 'NA'.         HEADER-TDSPRAS = 'R'.         HEADER-TDFORM = 'S_DOCU_SHOW'.         HEADER-TDSTYLE = 'S_DOCUS1'.         HEADER-TDVERSION = '00001'.         HEADER-TDFUSER = SY-UNAME.         HEADER-TDFRELES = '700'.         HEADER-TDFDATE = SY-DATUM.         HEADER-TDFTIME = SY-UZEIT.         HEADER-TDLUSER = SY-UNAME.         HEADER-TDLRELES = '700'.         HEADER-TDLDATE = SY-DATUM.         HEADER-TDLTIME = SY-UZEIT.         HEADER-TDLINESIZE = '072'.         HEADER-TDTXTLINES = '00000'.         HEADER-TDTRANSTAT = '0'.         PERFORM FILLLINE2 USING SS3 CHANGING IR_LINE.         CALL FUNCTION 'DOCU_UPDATE'           EXPORTING *               ACTCLASS            = ' '             HEAD                = HEADER *               NO_MASTERLANG       = ' '             STATE               = 'R'             TYP                 = 'E'             VERSION             = '0001'           TABLES             LINE                = IR_LINE.       ENDWHILE.     ENDDO.     CALL METHOD OF EXCEL 'QUIT'.     LEAVE PROGRAM.   ENDIF. *&---------------------------------------------------------------------* *&      Form  FILLLINE2 *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->S          text *      -->IR_LINE    text *----------------------------------------------------------------------* FORM FILLLINE2 USING S TYPE STRING CHANGING IR_LINE TYPE TIR_LINE.   DATA:         X TYPE X LENGTH 2,         SL TYPE TABLE OF STRING,         SEP(1),         S1 TYPE STRING,         S2 TYPE STRING,         S3 TYPE STRING,         IR_LINE1 TYPE TIR_LINE.   FIELD-SYMBOLS:                  <FS1> TYPE X,                  <FS2> TYPE X.   CLEAR IR_LINE.   REFRESH IR_LINE.   X = 10.   ASSIGN X TO <FS1> CASTING.   ASSIGN SEP TO <FS2> CASTING.   <FS2> = <FS1>.   CLEAR SL.   REFRESH SL.   SPLIT S AT SEP INTO TABLE SL.   LOOP AT SL INTO S3.     PERFORM FILLLINE USING S3 CHANGING IR_LINE1.     APPEND LINES OF IR_LINE1 TO IR_LINE.   ENDLOOP. ENDFORM.                                                    "FILLLINE2 *&---------------------------------------------------------------------* *&      Form  FILLLINE *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->S          text *      -->IR_LINE    text *----------------------------------------------------------------------* FORM FILLLINE USING S TYPE STRING CHANGING IR_LINE TYPE TIR_LINE.   DATA:         S1 TYPE STRING,         S2 TYPE STRING,         L TYPE I,         I TYPE I,         IS_LINE LIKE LINE OF IR_LINE.   S1 = S.   L = STRLEN( S1 ).   CLEAR IR_LINE.   REFRESH IR_LINE.   I = 0.   WHILE L > 0.     IF L >= 72.       L = L - 72.       S2 = S1+0(72).       S1 = S1+72(L).       IF I = 0.         IS_LINE-TDFORMAT = '/'.       ELSE.         IS_LINE-TDFORMAT = ''.       ENDIF.       IS_LINE-TDLINE = S2.       APPEND IS_LINE TO IR_LINE.     ELSE.       L = 0.       S2 = S1.       S1 = ''.       IF I = 0.         IS_LINE-TDFORMAT = '/'.       ELSE.         IS_LINE-TDFORMAT = ''.       ENDIF.       IS_LINE-TDLINE = S2.       APPEND IS_LINE TO IR_LINE.     ENDIF.     I = I + 1.   ENDWHILE. ENDFORM.                    "FILLLINE *&---------------------------------------------------------------------* *&      Form  GETCELLNUM *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->I          text *      -->J          text *      -->CN         text *----------------------------------------------------------------------* FORM GETCELLNUM USING I TYPE I                       J TYPE I                 CHANGING CN TYPE I.   DATA:         T1 TYPE I.   T1 = I - 1.   T1 = T1 * 256.   CN = T1 + J. ENDFORM.                    "GETCELLNUM *&---------------------------------------------------------------------* *&      Form  GETCELLVAL *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->I          text *      -->J          text *      -->SHEET      text *      -->VAL        text *----------------------------------------------------------------------* FORM GETCELLVAL USING I TYPE I                       J TYPE I                       SHEET TYPE OLE2_OBJECT                 CHANGING                       VAL TYPE STRING.   DATA:         CELL TYPE OLE2_OBJECT,         CN TYPE I.   PERFORM GETCELLNUM USING I J CHANGING CN.   CALL METHOD OF SHEET 'CELLS' = CELL EXPORTING #1 = CN.   GET PROPERTY OF CELL 'VALUE' = VAL.   FREE OBJECT CELL. ENDFORM.                    "SETCELLVAL