본문 바로가기

SAP/BSP

BSP - 인터널 테이블의 데이터를 엑셀로 보내기.

사용자 삽입 이미지


  WHEN 'EXCEL_DOWN'.
    IF IT_DISP IS NOT INITIAL.
      DATA: EXCEL_OUTPUT TYPE STRING.
      DATA: EXCEL_OUTPUT_X TYPE XSTRING.
      DATA: DISPOSITION TYPE STRING.
      DATA: RESPONSE TYPE REF TO IF_HTTP_RESPONSE.
      RESPONSE = RUNTIME->SERVER->RESPONSE.

      CONSTANTS: CRLF TYPE STRING
                   VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF,
               TAB  TYPE STRING
                   VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
      CLEAR EXCEL_OUTPUT.
      CONCATENATE EXCEL_OUTPUT '헤' TAB
                               '더' TAB
                               '부' TAB
                               '분' CRLF "줄바꿈 구분자
          INTO EXCEL_OUTPUT.
      LOOP AT IT_DISP INTO WA_DISP.
        CONCATENATE EXCEL_OUTPUT
                    WA_DISP-바 TAB "해당 필드명
                    WA_DISP-디 TAB
                    WA_DISP-부 TAB
                    WA_DISP-분 CRLF
                    INTO EXCEL_OUTPUT.
      ENDLOOP.
      DATA APP_TYPE TYPE STRING.
      APP_TYPE = 'APPLICATION/MSEXCEL; CHARSET=UTF-16LE'.


      CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
        EXPORTING
          TEXT     = EXCEL_OUTPUT
          MIMETYPE = 'APPLICATION/MSEXCEL; CHARSET=UTF-16LE'
        IMPORTING
          BUFFER   = EXCEL_OUTPUT_X.

      CONCATENATE  CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_LITTLE
                   EXCEL_OUTPUT_X
                   INTO EXCEL_OUTPUT_X IN BYTE MODE.

      RESPONSE->DELETE_HEADER_FIELD(
                      NAME = IF_HTTP_HEADER_FIELDS=>CACHE_CONTROL ).
      RESPONSE->DELETE_HEADER_FIELD(
                      NAME = IF_HTTP_HEADER_FIELDS=>EXPIRES ).
      RESPONSE->DELETE_HEADER_FIELD(
                      NAME = IF_HTTP_HEADER_FIELDS=>PRAGMA ).
      RESPONSE->SET_DATA( DATA = EXCEL_OUTPUT_X ).

      RESPONSE->SET_HEADER_FIELD( NAME  = 'CONTENT-TYPE'
                                  VALUE =  'APPLICATION/VND.MS-EXCEL' ).
      NAVIGATION->RESPONSE_COMPLETE( ).
    ENDIF.