Ⅰ. ERP/1. ABAP

[ ABAP] 엑셀 업로드

초록활명수 2024. 5. 10. 13:52
728x90

gif, png, html, xlsx 등 SAP 서버에 올리고 관리할 수 있는 저장소가 SAP Web Repository (  웹 저장소 ) 입니다.

이를 활용해서 엑셀 업로드하는 방법 공유드립니다.

 

엑셀 파일 업로드 T-CODE : SMW0

 

엑셀 파라미터 추가 

PARAMETERS: PA_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT 'C:\'.

 

엑셀 파일 업로드하는 창 띄우기

  " 파일경로 설정
  PERFORM F4_HELP_FOR_FILE CHANGING GV_FILE.


*&---------------------------------------------------------------------*
*&      Form  F4_HELP_FOR_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_FILE1  text
*----------------------------------------------------------------------*
FORM F4_HELP_FOR_FILE  CHANGING P_FILE1.

  DATA: IT_TAB TYPE FILETABLE,
        GD_SUBRC TYPE I,
        FILE_NAME TYPE STRING.

  CONCATENATE '_template.xls' INTO FILE_NAME.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             = ' '
      MODE             = ' '
      TITLE            = ' '
    IMPORTING
      FILENAME         = PA_FILE
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.

  IF SY-SUBRC = 0.
    MESSAGE '엑셀 파일을 선택하셨습니다.' TYPE 'S'.
  ELSE.
    MESSAGE '선택한 파일을 확인해주세요.' TYPE 'I'.
  ENDIF.

ENDFORM.                    " F4_HELP_FOR_FILE

 

엑셀을 인터널 테이블로 변환

  DATA: lt_alsmex TYPE TABLE OF alsmex_tabline.
  DATA : lt_dfies TYPE TABLE OF dfies.
  DATA : lt_pernr TYPE TABLE OF pernr.
  DATA : lv_index TYPE i .

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 2
      I_END_COL               = 6
      I_END_ROW               = 11000
    TABLES
      INTERN                  = lt_alsmex
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.

  IF SY-SUBRC NE 0.
    MESSAGE S000 WITH '파일을 확인하세요.' DISPLAY LIKE 'E'.

    LEAVE LIST-PROCESSING.

  ENDIF.
  
  "ITAB에 넣기
  TRY .

      CLEAR : gs_excel, gt_excel[].
      LOOP AT lt_alsmex INTO DATA(ls_alsmex).
        MOVE ls_alsmex-col TO lv_index.

        ASSIGN COMPONENT lv_index OF STRUCTURE gs_excel
                                            TO <fs_1>.

        "TYPE 체크 후 처리

        REPLACE ALL OCCURRENCES OF ',' IN ls_alsmex-value WITH space.
        REPLACE ALL OCCURRENCES OF '-' IN ls_alsmex-value WITH space.


        IF ls_alsmex-value  EQ cv_y OR ls_alsmex-value  EQ cv_by.
          ls_alsmex-value  = cv_bx.
        ELSEIF ls_alsmex-value  EQ cv_n OR ls_alsmex-value  EQ cv_bn.
          CLEAR ls_alsmex-value .
        ENDIF.


        MOVE ls_alsmex-value TO <fs_1>.

        AT END OF row.
          MOVE-CORRESPONDING ls_alsmex TO gs_excel.

          APPEND gs_excel TO gt_excel.
          CLEAR: ls_alsmex, <fs_1>, gs_excel.
        ENDAT.
      ENDLOOP.

     CATCH cx_sy_conversion_overflow.

     MESSAGE i021(3e) WITH ' OVERFLOW :: 파일 재확인 요망'.
          STOP.
        CLEANUP.


  ENDTRY.

 

DEFINE _CONV_ALPHA_I. "0000 더함

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT         = &1
    IMPORTING
      OUTPUT        = &1.

END-OF-DEFINITION.

 

 

** 엑셀다운로드

DATA : lv_filename TYPE string,
         lv_path     TYPE string ,
         lv_fullpath TYPE string,
         lv_file     TYPE string,
         lv_default  TYPE string.

  DATA : ls_key  TYPE wwwdatatab,
         lv_dest TYPE rlgrap-filename VALUE 'C:\'.
  DATA : p_ext TYPE string.
  DATA : p_title TYPE string.
  DATA : p_path_file TYPE string.
  DATA : lv_rc TYPE sy-subrc.

lv_filename = |파일명_| & |{ SY-DATUM }| & |.xlsx|.

*SMWO 저장여부 확인
  SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_key
    FROM wwwdata
    WHERE objid = '프로그램명'.


*저장경로 선정
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title      = p_title
      default_extension = p_ext
      default_file_name = lv_filename
    CHANGING
      filename          = lv_file
      path              = lv_path
      fullpath          = p_path_file.

check p_path_file is not INITIAL.
  lv_dest = p_path_file.

*다운로드
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = ls_key      "Template
      destination = lv_dest     "다운로드 경로
    IMPORTING
      rc          = lv_rc.

 

 

+ 24.10.11 ----------------------------------------------------------------

** 헉 이 방법은 라인 수 제약이 있다고 하네요

 

 주의) Max line(10000 ) 제약 있음

 

 

728x90