본문 바로가기

SAP/ABAP

[WIP]Excel_Upload프로그램_프로그램 작동 로직(2/3)

최종 작성일: 2024년 6월 25일

최종 목표: 엑셀 업로드 동작이 어떻게 돌아가는 지 확인하기

 

1)FORM excel_down_smpl .
* 다운로드 양식 선택
    LS_KEY-OBJID = 'ZTEST14_EXCEL01'.
    LS_KEY-RELID = 'MI'.

* 파일 경로 조회
 2) PERFORM SET_DIRECTORY USING LS_KEY-OBJID.

* 엑셀 다운
 3) PERFORM DOWNLOAD_EXCEL_SMPL USING LS_KEY-OBJID.

  IF SY-SUBRC = 0.
    MESSAGE '엑셀정상다운' TYPE 'S'.
  ELSE.
    MESSAGE '엑셀다운에러' TYPE 'S'.
  ENDIF.


ENDFORM.

 

 

 

1. 파일 저장 경로 조회 ( 다운로드 받은 엑셀 파일을 어디에 저장할거야)

FORM set_directory  USING    p_ls_key_objid.
  CLEAR GV_FILE.  "GV_FILE은 "RLGRAP테이블의 FILENAME이라는 이름을 가진 행을 복사함.
  CREATE OBJECT OBJFILE.

  IF GV_FILE IS NOT INITIAL.
    GV_INITIAL_DIR = GV_FILE.
  ELSE.
    OBJFILE->GET_TEMP_DIRECTORY( CHANGING     TEMP_DIR = GV_INITIAL_DIR
                                 EXCEPTIONS   CNTL_ERROR           = 1
                                              ERROR_NO_GUI         = 2
                                              NOT_SUPPORTED_BY_GUI = 3 ).
  ENDIF.

  OBJFILE->DIRECTORY_BROWSE( EXPORTING  INITIAL_FOLDER = GV_INITIAL_DIR
                             CHANGING   SELECTED_FOLDER = GV_DIRECTORY
                             EXCEPTIONS CNTL_ERROR      = 1
                                        ERROR_NO_GUI    = 2
                                        NOT_SUPPORTED_BY_GUI = 3 ).
  IF SY-SUBRC = 0.
    GV_FILE = GV_DIRECTORY && '\' && LS_KEY-OBJID && '.xlsx'.
  ELSE.
    MESSAGE '파일경로에러' TYPE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.

 

  CLEAR GV_FILE.  "GV_FILE은 "RLGRAP테이블의 FILENAME이라는 이름을 가진 행을 복사함.

 

RLGRAP은 구조체로

1)FILE NAME : local file for upload/download

2) FIEL TYPE : Transfer file format (upload/download)

3)FILE MODE : type of data trasfer to local file

4) PRINTER : printer for sap graphics

5)FILEFM_UL : format of the trasfer data (uploads only)

 

2. download_excel_smpl 구문 실행

 

2-1) OLE를 통해서 아밥을 통해서 EXCEL 기능 가져오기

* EXCEL DOWN: OLE
  DATA: LS_KEY LIKE WWWDATATAB.
  DATA: GO_APPLICATION  TYPE OLE2_OBJECT,
        GO_BOOKS        TYPE OLE2_OBJECT,
        GO_WBOOK        TYPE OLE2_OBJECT,
        GO_BOOK         TYPE OLE2_OBJECT,
        GO_SHEETS       TYPE OLE2_OBJECT,
        GO_SHEET        TYPE OLE2_OBJECT,
        GO_CELLS        TYPE OLE2_OBJECT,
        GO_CELL         TYPE OLE2_OBJECT,
        GO_RANGE        TYPE OLE2_OBJECT,
        GO_FONT         TYPE OLE2_OBJECT,
        GO_ROW          TYPE OLE2_OBJECT,
        GV_PATH         TYPE STRING,
        GV_NUM          TYPE I.
"이 데이터 선언부를 통해서 SAP상 엑셀 기능을 그대로 가져다 씀

 

2-2) 엑셀업로드 상 샘플 엑셀 파일 생성하

FORM download_excel_smpl  USING    p_ls_key_objid.
* OLE OBJECT 생성 & 실행
  CREATE OBJECT GO_APPLICATION 'Excel.Application'.

* 화면 DISPLAY 설정 (1을 설정하면 DISPLAY)
  SET PROPERTY OF GO_APPLICATION 'Visible' = 1. " 0,1,2를 모두 입력후 다시 프로그램을 실행했지만 차이가 없음

1)WOKRBOOK(엑셀파일)을 열고
* WORKBOOK 및 WORKBOOK 설정 & OPEN     
  CALL METHOD OF GO_APPLICATION 'Workbooks' = GO_WBOOK.
  CALL METHOD OF GO_WBOOK 'Add'.
  
2)해당 WORKBOOK(엑셀파일)의 첫번째 탭으로 이동하여 실행 후 해당 탭의 이름을 'ZSCARR'로 설정
* 최초 실행 SHEET는 첫번째
  CALL METHOD OF GO_APPLICATION 'Worksheets' = GO_SHEET
    EXPORTING
      #1 = 1.
  CALL METHOD OF GO_SHEET 'Activate'.
  SET PROPERTY OF GO_SHEET 'Name' = 'ZSCARR'.
3)해당 탭을 실행 시킨 후
GET PROPERTY OF GO_APPLICATION 'ActiveWorkbook' = GO_WBOOK.

4) 실행시킨 탭상 쉬트에 데이터 열 제목을 추가
* 데이터 입력
  PERFORM FILL_CELL USING GO_APPLICATION 01: 01 'MANDT',
                                             02 'CARRID',
                                             03 'CARRNAME',
                                             04 'CURRCODE',
                                             05 'URL'.

* 파일명 설정
  CONCATENATE GV_DIRECTORY '\' P_LS_KEY_OBJID '.xlsx' INTO GV_PATH.

* 실행 파일 저장
  CALL METHOD OF GO_WBOOK 'SaveAs' EXPORTING #1 = GV_PATH.


  IF SY-SUBRC = 0.
    MESSAGE '엑셀정상다운' TYPE 'S'.
  ELSE.
    MESSAGE '엑셀다운에러' TYPE 'S'.
  ENDIF.
ENDFORM.

2-3) FILL_CELL

FORM FILL_CELL  USING    PV_APPLICATION
                         PV_ROW
                         PV_COL
                         PV_VALUE.

  DATA: LV_ECELL TYPE OLE2_OBJECT.

  CALL METHOD OF PV_APPLICATION 'Cells' = LV_ECELL
    EXPORTING
      #1 = PV_ROW
      #2 = PV_COL.

  SET PROPERTY OF LV_ECELL 'Value' = PV_VALUE.
ENDFORM.

 

  DATA: LV_ECELL TYPE OLE2_OBJECT. -> 인수인계 준비

  CALL METHOD OF PV_APPLICATION 'Cells' = LV_ECELL 

-> Cells(메소드)라는 업무카테고리를 LV_ECELL에 인수인계함.

 

    EXPORTING
      #1 = PV_ROW
      #2 = PV_COL.

-> 업무 위치를 1번째 행에 1번째 열에서 일을 하라고 지시

 

SET PROPERTY OF LV_ECELL 'Value' PV_VALUE.

->  값을 mandt로 세팅해줘라 ( -> 1번째 열 * 1번째 행에 MANDT를 넣어줘라)

 

 

 

 

추가적으로 해야할일: 10주차에서  'CALL METHOD OF GO_APPLICATION 'Workbooks' = GO_WBOOK. 구문 부터 할것