DOI技術

TYPE-POOLS: SLIS,VRM, SBDST, SOI.

TABLES: LIKP, KNA1,LIPS,VBAP,MARA,KONV.

DATA: GD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: SLA TYPE SLIS_LAYOUT_ALV ,
      IVARIANT LIKE DISVARIANT,
      I_REPID LIKE SY-REPID .
CONSTANTS DOCUMENT_NAME(30) VALUE 'SD01'.
CONSTANTS INPLACE VALUE 'X'.
DATA: FLAG .
DATA: G_DEF_ACTIVE_SHEETNAME(50) VALUE 'Sheet1'.

DATA: CONTAINER   TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      CONTROL     TYPE REF TO I_OI_CONTAINER_CONTROL,
      DOCUMENT    TYPE REF TO I_OI_DOCUMENT_PROXY,
      SPREADSHEET TYPE REF TO I_OI_SPREADSHEET,
      ERROR       TYPE REF TO I_OI_ERROR,
      ERRORS TYPE REF TO I_OI_ERROR OCCURS 0 WITH HEADER LINE.

CONTROLS:   EXCELDATA TYPE TABLEVIEW USING SCREEN 0100.
DATA:       TABLENAME(10), OKCODE(15),
            ROW(4), COLUMN(4), DATA(39).
* spreadsheet interface structures for Excel data input
DATA: RANGEITEM TYPE SOI_RANGE_ITEM.
DATA: RANGES TYPE SOI_RANGE_LIST.
DATA: EXCEL_INPUT TYPE SOI_GENERIC_TABLE.
DATA: EXCEL_INPUT_WA TYPE SOI_GENERIC_ITEM.
DATA: INITIALIZED(1), RETCODE TYPE SOI_RET_STRING.
DATA: ITEM_URL(256), ALREADY_DONE, NEWNAME(40).
DATA  DOCUMENT_TYPE(80).
DATA: APP TYPE VRM_ID, APPLIST TYPE VRM_VALUES.
DATA: EXCEL(80) VALUE 'Excel.Sheet'.
DATA: LINE_COUNT TYPE I,
      COLUMN_COUNT TYPE I.

DATA: BEGIN OF TABLE_LINES OCCURS 0.
        INCLUDE STRUCTURE TLINE.
DATA: END   OF TABLE_LINES.
DATA:  G_PRODH LIKE MVKE-PRODH. "產品層次

*---------------------------------*
*data define
*---------------------------------*
DATA: BEGIN OF IT_ITAB OCCURS 0,
    VKORG LIKE LIKP-VKORG,
    KUNNR LIKE LIKP-KUNNR,
    NAME1 LIKE KNA1-NAME1,
    WADAT_IST LIKE LIKP-WADAT_IST,
    MATNR LIKE LIPS-MATNR,
    ARKTX LIKE LIPS-ARKTX,
*    lfimg LIKE lips-lfimg,
    LFIMG TYPE I         ,
    VBELN LIKE LIPS-VBELN,
    POSNR LIKE LIPS-POSNR,
    VGBEL LIKE LIPS-VGBEL,
*    netpr LIKE ekpo-netpr,
    NETPR TYPE P DECIMALS 5,
    PEINH LIKE EKPO-PEINH,
    MENGE LIKE EKPO-MENGE,
    BEDAT LIKE EKKO-BEDAT,
    VGPOS LIKE LIPS-VGPOS,
    COB TYPE P DECIMALS 5,
    SMTZ  TYPE P DECIMALS 5,
    COBZ  TYPE P DECIMALS 5,
    MENO(120) TYPE C,
    FLAG TYPE C ,
  END OF IT_ITAB.

DATA: BEGIN OF IT_CHART OCCURS 0 ,
        NAME1 LIKE KNA1-NAME1  ,
        SMTZ TYPE P DECIMALS 5 ,
      END OF IT_CHART .

SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
  S_VKORG  FOR LIKP-VKORG DEFAULT '8803'.
PARAMETERS:
  P_LFART  LIKE LIKP-LFART DEFAULT 'ZLCC' OBLIGATORY.
SELECT-OPTIONS:
  S_KUNNR FOR KNA1-KUNNR,
  S_WADAT FOR LIKP-WADAT_IST,
  S_MATNR FOR LIPS-MATNR,
  S_VBELN FOR LIKP-VBELN.
PARAMETERS : COB(10) TYPE C OBLIGATORY DEFAULT '2' .
SELECTION-SCREEN END OF BLOCK BLK01.
PARAMETERS :
    P_CHART TYPE C AS CHECKBOX DEFAULT 'X' .

INITIALIZATION .
*  CASE sy-tcode.
*    WHEN 'ZSD14' .
*      p_lfart = 'ZLCC'.
*    WHEN 'ZSD15'.
*      p_lfart = 'LF'.
*  ENDCASE.
*
*AT SELECTION-SCREEN OUTPUT.
*  IF sy-tcode <> 'SE38'.
*    LOOP AT SCREEN.
*      IF screen-name = 'P_LFART'.
*        screen-input = '0'.
*        MODIFY SCREEN.
*      ENDIF.
*    ENDLOOP.
*  ENDIF.

*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
*PARAMETERS:
*    p_n RADIOBUTTON GROUP rad1  DEFAULT 'X' ,
*    p_w RADIOBUTTON GROUP rad1 .
*SELECTION-SCREEN END OF BLOCK b2.
*-------------------------------------*
*start of selection
*-------------------------------------*
START-OF-SELECTION.
  IF P_LFART <> 'ZLCC' AND P_LFART <> 'LF'.
    MESSAGE I000(OO) WITH '訂單類型必須爲LF或者ZLCC'.
    EXIT.
  ENDIF.
  PERFORM FRM_GET_DATA.
  PERFORM FIXDATA.
  PERFORM GET_CHART_DATA.
  IF P_CHART = ''.
    PERFORM OUTDATA.
  ELSE.
    CALL SCREEN 100.
  ENDIF.
*----------------------------------------*
*form frm-get-data
*----------------------------------------*
FORM FRM_GET_DATA.
  SELECT
      LIKP~VKORG
      LIKP~KUNNR
      LIKP~WADAT_IST
      LIKP~VBELN
      LIPS~POSNR
      LIPS~MATNR
      LIPS~ARKTX
      LIPS~LFIMG
      LIPS~VGBEL
      LIPS~VGPOS
      KNA1~NAME1
    INTO CORRESPONDING FIELDS OF TABLE IT_ITAB
    FROM LIKP
    INNER JOIN LIPS ON LIKP~VBELN = LIPS~VBELN
    INNER JOIN KNA1 ON LIKP~KUNNR = KNA1~KUNNR
    WHERE LIKP~VKORG IN S_VKORG    AND
          LIKP~LFART = P_LFART     AND
          LIKP~KUNNR IN S_KUNNR    AND
          LIKP~WADAT_IST IN S_WADAT  AND
          LIKP~VBELN IN S_VBELN.
ENDFORM.                    "frm_get_data

*&---------------------------------------------------------------------*
*&      Form  fixdata
*&---------------------------------------------------------------------*
FORM FIXDATA.
  DATA: TMPVBELN LIKE VBAP-VBELN ,
        TMPPOSNR LIKE VBAP-POSNR ,
        TMPKNUMV LIKE VBAK-KNUMV .

  LOOP AT IT_ITAB.
    CLEAR G_PRODH.
    CLEAR:TMPVBELN ,TMPPOSNR ,TMPKNUMV .
    IF P_LFART = 'ZLCC'.
      SELECT SINGLE NETPR PEINH MENGE
      INTO (IT_ITAB-NETPR,IT_ITAB-PEINH,IT_ITAB-MENGE)
      FROM EKPO
      WHERE EKPO~EBELN = IT_ITAB-VGBEL AND
            EKPO~EBELP = IT_ITAB-VGPOS+1(5).

      SELECT SINGLE BEDAT INTO IT_ITAB-BEDAT
      FROM EKKO
      WHERE EKKO~EBELN = IT_ITAB-VGBEL.
    ELSE.
      SELECT SINGLE VBAK~KNUMV VBAP~VBELN VBAP~POSNR
      INTO (TMPKNUMV,TMPVBELN,TMPPOSNR)
      FROM VBAK INNER JOIN VBAP ON VBAK~VBELN = VBAP~VBELN
      WHERE VBAK~AUART = 'ZOR1'        AND
            VBAP~VBELN = IT_ITAB-VGBEL AND
            VBAP~POSNR = IT_ITAB-VGPOS    .
      IF SY-SUBRC = 0 .
        SELECT SINGLE *  "kbetr kumza INTO (it_itab-netpr,it_itab-peinh)
        FROM KONV
        WHERE KNUMV = TMPKNUMV AND
              KSCHL = 'ZSMT'.
        IF SY-SUBRC = 0 .
          IT_ITAB-NETPR = KONV-KBETR.
          IT_ITAB-PEINH = KONV-KUMZA.
        ENDIF.
      ELSE.
        IT_ITAB-FLAG = 'D'.
      ENDIF.
    ENDIF.

    IF IT_ITAB-PEINH <> 0.
      IT_ITAB-NETPR = IT_ITAB-NETPR / IT_ITAB-PEINH.
    ENDIF.

*COB單價
    IT_ITAB-COB = COB.

*產品層次
    SELECT SINGLE PRODH INTO G_PRODH
           FROM MVKE
           WHERE MATNR = IT_ITAB-MATNR  AND
                 VKORG = IT_ITAB-VKORG.
    IF G_PRODH+10(8) = '00000001'.
      IT_ITAB-NETPR = IT_ITAB-NETPR - COB.
    ELSE.
      IT_ITAB-COB = 0 .
    ENDIF.
*COB總金額
    IT_ITAB-COBZ = IT_ITAB-COB * IT_ITAB-LFIMG.
*SMT總金額
    IT_ITAB-SMTZ = IT_ITAB-NETPR * IT_ITAB-LFIMG.


*讀取文本(貼裝點數)
    PERFORM READ_TEXT USING IT_ITAB-MATNR
                            IT_ITAB-MENO.
    MODIFY IT_ITAB.
    CLEAR IT_ITAB.
  ENDLOOP.
  DELETE IT_ITAB WHERE FLAG = 'D'.
ENDFORM.                    " fixdata

*&---------------------------------------------------------------------*
*&      Form  get_chart_data
*&---------------------------------------------------------------------*
FORM GET_CHART_DATA.
  DATA: TMPCOBZ TYPE P DECIMALS 5 .

  SORT IT_ITAB BY NAME1.
  LOOP AT IT_ITAB.
    MOVE-CORRESPONDING IT_ITAB TO IT_CHART.
    COLLECT IT_CHART.
    TMPCOBZ = TMPCOBZ + IT_ITAB-COBZ.
  ENDLOOP.
  IT_CHART-NAME1 = 'COB'.
  IT_CHART-SMTZ = TMPCOBZ .
  APPEND IT_CHART.
ENDFORM.                    " get_chart_data

*&------------------------------------------------------*
*&      Form  read_text
*&------------------------------------------------------*
FORM READ_TEXT USING  MATNR LIKE IT_ITAB-MATNR
                      MEMO.
  DATA: TDNAME LIKE THEAD-TDNAME.
  CONCATENATE  MATNR '880300' INTO TDNAME.

  CLEAR MEMO.
  CLEAR TABLE_LINES.
  REFRESH TABLE_LINES.
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      ID                      = '0001'
      LANGUAGE                = '1'
      NAME                    = TDNAME
      OBJECT                  = 'MVKE'
    TABLES
      LINES                   = TABLE_LINES
    EXCEPTIONS
      ID                      = 1
      LANGUAGE                = 2
      NAME                    = 3
      NOT_FOUND               = 4
      OBJECT                  = 5
      REFERENCE_CHECK         = 6
      WRONG_ACCESS_TO_ARCHIVE = 7
      OTHERS                  = 8.
*    LOOP AT table_lines .
*      CONCATENATE memo table_lines-tdline INTO memo SEPARATED BY '|' .
*    ENDLOOP .
*    IF memo+0(1) = '|' . SHIFT memo . ENDIF .
*    CLEAR table_lines .
*    REFRESH table_lines .
  READ TABLE TABLE_LINES INDEX 1.
  IF SY-SUBRC = 0 .
    MEMO = TABLE_LINES-TDLINE .
  ELSE.
    MEMO = ''.
  ENDIF.

ENDFORM.                    "READ_TEXT

*&---------------------------------------------------------------------*
*&      Form  outdata
*&---------------------------------------------------------------------*
FORM OUTDATA.
  PERFORM FIELDCAT_INIT .
  SLA-COLWIDTH_OPTIMIZE = 'X'.
  I_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = I_REPID
      IT_FIELDCAT             = GD_FIELDCAT[]
      I_SAVE                  = 'A'
      IS_VARIANT              = IVARIANT
      IS_LAYOUT               = SLA
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
    TABLES
      T_OUTTAB                = IT_ITAB[].
ENDFORM.                    " outdata
*---------------------------------------------------------------------*
*       FORM fieldcat_init                                            *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT .
  PERFORM FRM_CATLG_SET USING:  'VBELN'  '交貨單號',
                                'POSNR'  '交貨單項目'.
  IF P_LFART = 'ZLCC'.
    PERFORM FRM_CATLG_SET USING:   'VGBEL'  '採購單號',
                                   'VGPOS'  '採購單項目',
                                   'BEDAT'  '採購訂單日期',
                                   'MENGE'  '採購訂單數量'.
  ELSE.
    PERFORM FRM_CATLG_SET USING:   'VGBEL'  '銷售單號',
                                   'VGPOS'  '銷售單項目'.
  ENDIF.
  PERFORM FRM_CATLG_SET USING:  'KUNNR'  '客戶代碼',
                                'NAME1'  '客戶名稱',
                                'MATNR'  '物料編號',
                                'ARKTX'  '規格型號',
                                'WADAT_IST'  '實際發貨日期',
                                'LFIMG'  '實際發貨數量',
                                'MENO'  '貼裝點數',
                                'NETPR'  'SMT單價',
                                'SMTZ'  'SMT總金額',
                                'COB'  'COB單價',
                                'COBZ'  'COB總金額' .
ENDFORM.                    "fieldcat_init

*---------------------------------------------------------------------*
*       FORM frm_catlg_set                                            *
*---------------------------------------------------------------------*
FORM FRM_CATLG_SET USING P_FIELD
                         P_TEXT.
  DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

  LS_FIELDCAT-FIELDNAME     =  P_FIELD.
  LS_FIELDCAT-SELTEXT_L     =  P_TEXT.

  APPEND LS_FIELDCAT TO GD_FIELDCAT .
  CLEAR LS_FIELDCAT .
ENDFORM.                    "frm_catlg_set

*---------------------------------------------------------------------*
*       FORM user_command                                             *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                    RS_SELFIELD TYPE SLIS_SELFIELD.
  READ TABLE IT_ITAB INDEX RS_SELFIELD-TABINDEX.
  CASE R_UCOMM.
    WHEN '&IC1'. "雙擊
      IF RS_SELFIELD-FIELDNAME = 'VBELN'.
        SET PARAMETER ID 'VL' FIELD IT_ITAB-VBELN .
        CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN .
      ELSEIF RS_SELFIELD-FIELDNAME = 'VGBEL' AND P_LFART = 'ZLCC' .
        CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
          EXPORTING
            I_EBELN              = IT_ITAB-VGBEL
          EXCEPTIONS
            NOT_FOUND            = 1
            NO_AUTHORITY         = 2
            INVALID_CALL         = 3
            PREVIEW_NOT_POSSIBLE = 4
            OTHERS               = 5.
      ELSEIF RS_SELFIELD-FIELDNAME = 'VGBEL' AND P_LFART <> 'ZLCC' .
        SET PARAMETER ID 'AUN' FIELD IT_ITAB-VGBEL .
        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN .
      ENDIF.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDFORM. "user_com

*&-------------------------------------------------------------------
*&      Module  OUTPUT_TO_EXCEL  OUTPUT
*&-------------------------------------------------------------------
MODULE OUTPUT_TO_EXCEL OUTPUT.
  SET PF-STATUS '100'.
  IF FLAG = SPACE .
    PERFORM CREATE_BASIC_OBJECTS USING ''  '' '' '' DOCUMENT_NAME.
    PERFORM OUTPUT_TO_EXCEL.
  ENDIF.

ENDMODULE.                 " OUTPUT_TO_EXCEL  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
MODULE EXIT INPUT.
  FLAG = 'X'.
  CASE OKCODE.
    WHEN 'TESTMAC'.
      CALL METHOD DOCUMENT->EXECUTE_MACRO
        EXPORTING
          MACRO_STRING = '模塊1.TestMac'
        IMPORTING
          ERROR        = ERRORS.
    WHEN 'STOP' .
      IF NOT DOCUMENT IS INITIAL.
        CALL METHOD DOCUMENT->CLOSE_DOCUMENT.
        FREE DOCUMENT.
      ENDIF.
      IF NOT CONTROL IS INITIAL.
        CALL METHOD CONTROL->DESTROY_CONTROL.
        FREE CONTROL.
      ENDIF.
      LEAVE PROGRAM.
    WHEN 'BACK' .
      IF NOT DOCUMENT IS INITIAL.
        CALL METHOD DOCUMENT->CLOSE_DOCUMENT.
        FREE DOCUMENT.
      ENDIF.
      IF NOT CONTROL IS INITIAL.
        CALL METHOD CONTROL->DESTROY_CONTROL.
        FREE CONTROL.
      ENDIF.
      " LEAVE TO SCREEN 1000.
      SET SCREEN 0.  " quit the program
      "set screen 1000.
  ENDCASE.
ENDMODULE.                 " EXIT  INPUT
*---------------------------------------------------------------------*
*       FORM create_basic_objects                                     *
*---------------------------------------------------------------------*
FORM  CREATE_BASIC_OBJECTS USING P_APP_NAME
                                 P_CLASSNAME
                                 P_CLASSTYPE
                                 P_OBJ_KEY
                                 P_DOCNAME.

  CHECK INITIALIZED IS INITIAL.
* first get the SAP DOI i_oi_container_control interface
  CALL METHOD
    C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
    IMPORTING
      CONTROL = CONTROL
      ERROR   = ERROR.
* check no errors occured
  CALL METHOD ERROR->RAISE_MESSAGE
    EXPORTING
      TYPE = 'E'.
  CREATE OBJECT CONTAINER
            EXPORTING CONTAINER_NAME = 'CONTAINER'.
  DATA L_APP_NAME(200).
  IF P_APP_NAME IS INITIAL.
    L_APP_NAME = 'R/3 Reporter'.
  ELSE.
    L_APP_NAME = P_APP_NAME.
  ENDIF.
  CALL METHOD CONTROL->INIT_CONTROL
    EXPORTING
      R3_APPLICATION_NAME      = L_APP_NAME
      INPLACE_ENABLED          = INPLACE
      INPLACE_SCROLL_DOCUMENTS = 'X'
      PARENT                   = CONTAINER
      REGISTER_ON_CLOSE_EVENT  = 'X'
      REGISTER_ON_CUSTOM_EVENT = 'X'
      NO_FLUSH                 = 'X'
    IMPORTING
      ERROR                    = ERRORS.
* save error object in collection
  APPEND ERRORS.
  CLEAR ITEM_URL.
  DATA: BDS_INSTANCE TYPE REF TO CL_BDS_DOCUMENT_SET.
  DATA: DOC_SIGNATURE TYPE SBDST_SIGNATURE,
        WA_DOC_SIGNATURE LIKE LINE OF DOC_SIGNATURE,
        DOC_COMPONENTS TYPE SBDST_COMPONENTS,
        DOC_URIS TYPE SBDST_URI,
        WA_DOC_URIS LIKE LINE OF DOC_URIS.

  DATA: DOC_CLASSNAME TYPE SBDST_CLASSNAME VALUE 'ZEXCEL',
        DOC_CLASSTYPE TYPE SBDST_CLASSTYPE VALUE 'OT',
        DOC_OBJECT_KEY TYPE SBDST_OBJECT_KEY VALUE 'ZEXCEL'.

  IF  NOT (  P_CLASSNAME IS INITIAL OR P_CLASSTYPE IS INITIAL
           OR P_OBJ_KEY IS INITIAL ).
    DOC_CLASSNAME =  P_CLASSNAME.
    DOC_CLASSTYPE =  P_CLASSTYPE.
    DOC_OBJECT_KEY = P_OBJ_KEY.
  ENDIF.

  WA_DOC_SIGNATURE-PROP_NAME = 'DESCRIPTION'.
  APP = 'excel'.
  IF APP = 'excel'.  " default value.
    DOCUMENT_TYPE = EXCEL.
    WA_DOC_SIGNATURE-PROP_VALUE = P_DOCNAME.
  ELSE.
*    document_type = lotus.
*    wa_doc_signature-prop_value = 'SPREAD123'.
  ENDIF.
  APPEND WA_DOC_SIGNATURE TO DOC_SIGNATURE.
  CREATE OBJECT BDS_INSTANCE.
  CALL METHOD BDS_INSTANCE->GET_INFO
    EXPORTING
      CLASSNAME  = DOC_CLASSNAME
      CLASSTYPE  = DOC_CLASSTYPE
      OBJECT_KEY = DOC_OBJECT_KEY
    CHANGING
      COMPONENTS = DOC_COMPONENTS
      SIGNATURE  = DOC_SIGNATURE.

  CALL METHOD BDS_INSTANCE->GET_WITH_URL
    EXPORTING
      CLASSNAME  = DOC_CLASSNAME
      CLASSTYPE  = DOC_CLASSTYPE
      OBJECT_KEY = DOC_OBJECT_KEY
    CHANGING
      URIS       = DOC_URIS
      SIGNATURE  = DOC_SIGNATURE.

  FREE BDS_INSTANCE.

  READ TABLE DOC_URIS INTO WA_DOC_URIS INDEX 1.

  ITEM_URL = WA_DOC_URIS-URI.

* ask the SAP DOI container for a i_oi_document_proxy for Excel
  CALL METHOD CONTROL->GET_DOCUMENT_PROXY
    EXPORTING
      DOCUMENT_TYPE  = 'Excel.Sheet'
      NO_FLUSH       = 'X'
    IMPORTING
      DOCUMENT_PROXY = DOCUMENT
      ERROR          = ERRORS.
  APPEND ERRORS.

* open a document saved in business document service.
  CALL METHOD DOCUMENT->OPEN_DOCUMENT
    EXPORTING
      OPEN_INPLACE = INPLACE
      DOCUMENT_URL = ITEM_URL.

  DATA: HAS TYPE I.
  CALL METHOD DOCUMENT->HAS_SPREADSHEET_INTERFACE
    EXPORTING
      NO_FLUSH     = ''
    IMPORTING
      IS_AVAILABLE = HAS
      ERROR        = ERRORS.
  APPEND ERRORS.
  CALL METHOD DOCUMENT->GET_SPREADSHEET_INTERFACE
    EXPORTING
      NO_FLUSH        = ' '
    IMPORTING
      SHEET_INTERFACE = SPREADSHEET
      ERROR           = ERRORS.
  APPEND ERRORS.
* Activate  sheet 1
  CALL METHOD SPREADSHEET->SELECT_SHEET
    EXPORTING
      NAME     = G_DEF_ACTIVE_SHEETNAME
      NO_FLUSH = ''
    IMPORTING
      ERROR    = ERRORS.
  APPEND ERRORS.

  LOOP AT ERRORS.
    CALL METHOD ERRORS->RAISE_MESSAGE
      EXPORTING
        TYPE = 'E'.
  ENDLOOP.
  FREE ERRORS.

  INITIALIZED = 'X'.

ENDFORM.              " CREATE_BASIC_OBJECTS

*---------------------------------------------------------------------*
*       FORM output_to_excel                                          *
*---------------------------------------------------------------------*
FORM OUTPUT_TO_EXCEL.
  DATA: TMPDATE(10) TYPE C.
  COLUMN_COUNT = 2.

  IT_CHART-NAME1 = 'Test1'.
  IT_CHART-SMTZ  = 20.
  APPEND IT_CHART.
  IT_CHART-NAME1 = 'Test2'.
  IT_CHART-SMTZ  = 30.
  APPEND IT_CHART.
  IT_CHART-NAME1 = 'Test3'.
  IT_CHART-SMTZ  = 40.
  APPEND IT_CHART.

  LOOP AT IT_CHART.
    LINE_COUNT = 2.
    PERFORM FILL_CELL USING LINE_COUNT
                            COLUMN_COUNT
                            IT_CHART-NAME1.
    LINE_COUNT = LINE_COUNT + 1.
    PERFORM FILL_CELL USING LINE_COUNT
                            COLUMN_COUNT
                            IT_CHART-SMTZ.
    COLUMN_COUNT = COLUMN_COUNT + 1.
  ENDLOOP.

ENDFORM.                    "output_to_excel
*---------------------------------------------------------------------*
*       FORM fill_cell                                                *
*---------------------------------------------------------------------*
FORM FILL_CELL  USING I J VAL.
  DATA: COLUMNS_NUMBER TYPE I,
        ROWS_NUMBER    TYPE I.

  COLUMNS_NUMBER = 1.
  ROWS_NUMBER = 1.

  CALL METHOD SPREADSHEET->INSERT_RANGE_DIM
    EXPORTING
      NAME     = 'cell'
      NO_FLUSH = 'X'
      TOP      = I
      LEFT     = J
      ROWS     = ROWS_NUMBER
      COLUMNS  = COLUMNS_NUMBER
    IMPORTING
      ERROR    = ERRORS.
  APPEND ERRORS.

  REFRESH: RANGES, EXCEL_INPUT.
  RANGEITEM-NAME = 'cell'.
  RANGEITEM-COLUMNS = 1.
  RANGEITEM-ROWS = 1.
  APPEND RANGEITEM TO RANGES.

  EXCEL_INPUT_WA-COLUMN = 1.
  EXCEL_INPUT_WA-ROW = 1.
  EXCEL_INPUT_WA-VALUE = VAL.
  APPEND EXCEL_INPUT_WA TO EXCEL_INPUT.

* set data
  CALL METHOD SPREADSHEET->SET_RANGES_DATA
    EXPORTING
      RANGES   = RANGES
      CONTENTS = EXCEL_INPUT
      NO_FLUSH = 'X'
    IMPORTING
      ERROR    = ERRORS.
  APPEND ERRORS.

  CALL METHOD SPREADSHEET->FIT_WIDEST
    EXPORTING
      NAME     = SPACE
      NO_FLUSH = 'X'.

  REFRESH: RANGES, EXCEL_INPUT.

ENDFORM.                    "fill_cell 

發佈了58 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章