[11주차] SAP ERP : 업로드할 파일 경로 가져오기, 엑셀 다운로드

j_wisdom_h·2025년 3월 19일
0

SAP

목록 보기
5/8

[11주차] SAP ERP : 업로드할 파일 경로 가져오기, 엑셀 다운로드

0. MAIN

*&---------------------------------------------------------------------*
*& Report Z6WEEK_EXCEL007_SPFLI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z6WEEK_EXCEL007_SPFLI.

INCLUDE Z6WEEK_EXCEL007_TOP.
INCLUDE Z6WEEK_EXCEL007_SEL.
INCLUDE Z6WEEK_EXCEL007_C01.
INCLUDE Z6WEEK_EXCEL007_F01.
INCLUDE Z6WEEK_EXCEL007_I01.
INCLUDE Z6WEEK_EXCEL007_O01.

*&=====================================================================*
*& INITIALIZATION
*&=====================================================================*
* 조회화면 실행 전 / 버튼 만듬 *
**INITIALIZATION.
  PERFORM SET_FUNCTION_KEY.**

*&=====================================================================*
*& AT SELECTION-SCREEN
*&=====================================================================*
* 조회화면에서 (모든) 버튼을 눌렀을 때 *
AT SELECTION-SCREEN.
  PERFORM ACT_FUNCTION_KEY.

* P_FILE에 도움말 만드는 기능 *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM GET_FILE_PATH.

*&=====================================================================*
*& START-OF-SELECTION
*&=====================================================================*
START-OF-SELECTION.

IF r1 = 'X'.
    PERFORM CHECK_BEFORE_PROCESS.
* 파일 업로드 진행
    PERFORM UPLOAD_FROM_EXCEL.
    PERFORM GET_DATA.
ELSEIF r2 = 'X'.
    PERFORM GET_NEEDED_DATA.
ELSEIF r3 = 'X'.
    PERFORM DEL_DATA.
ENDIF.

*&=====================================================================*
*& END-OF-SELECTION
*&=====================================================================*
END-OF-SELECTION.
IF r1 ='X'.
  CALL SCREEN 100.
ELSEIF r2 = 'X'.
  IF GT_ZSCARR IS NOT INITIAL.
  CALL SCREEN 100.
  ELSE.
    MESSAGE '조회할 데이터가 없습니다.' TYPE 'I'.
  ENDIF.

ENDIF.

1. TOP - 변수 선언부

*&---------------------------------------------------------------------*
*& Include          ZTEST14_TOP
*&---------------------------------------------------------------------*

* OLE
TYPE-POOLS: OLE2. =>> 엑셀 다운로드 매크로 자동화 구조 포함

* FUNCTION CODE
  TABLES: SSCRFIELDS.  =>> Fields on selection screens 조회화면에 있는 필드 구조
  DATA: **G_FUNCTION_KEY** TYPE SMP_DYNTXT.  =>> 버튼에 텍스트/아이콘 넣는 구조

* EXCEL DOWN: DIRECTORY, SMW0
  DATA: **GV_DIRECTORY**     TYPE STRING,  =>> 다운받을 경로
        **GV_INITIAL_DIR**   TYPE STRING,  =>> 초기경로 
        **GV_FILE**          LIKE RLGRAP-FILENAME,  =>> 전체경로
        OBJFILE          TYPE REF TO CL_GUI_FRONTEND_SERVICES. =>> 클래스 참조변수

* 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.

DATA: BEGIN OF **GS_ZSC**,
        ZSTATUS   TYPE ICON-ID,
        MANDT      TYPE ZSCARR-MANDT,
        CARRID      TYPE ZSCARR-CARRID,
        CARRNAME     TYPE ZSCARR-CARRNAME,
        CURRCODE    TYPE ZSCARR-CURRCODE,
        URL    TYPE ZSCARR-URL,
        ZRESULT   TYPE CHAR200,
      END OF GS_ZSC.
DATA: BEGIN OF **GS_EXCEL**,
        MANDT      TYPE ZSCARR-MANDT,
        CARRID      TYPE ZSCARR-CARRID,
        CARRNAME     TYPE ZSCARR-CARRNAME,
        CURRCODE    TYPE ZSCARR-CURRCODE,
        URL    TYPE ZSCARR-URL,
      END OF GS_EXCEL.
DATA: GT_ZSC     LIKE TABLE OF GS_ZSC,
      GT_EXCEL   LIKE TABLE OF GS_EXCEL.

* 엑셀 업로드
FIELD-SYMBOLS : <gt_data>       TYPE STANDARD TABLE .

* DB 데이터
*DATA: GT_DOMAIN   TYPE TABLE OF DD07T.
*
*DATA: GS_DOMAIN     LIKE LINE OF  GT_DOMAIN.
DATA: GT_ZSCARR **TYPE TABLE OF** ZSCARR,
      GS_ZSCARR **TYPE**          ZSCARR.

* 데이터 저장
*DATA: LT_ROW TYPE LVC_T_ROID,
*      LS_ROW TYPE LVC_S_ROID.

* 기타
DATA: OK_CODE   TYPE SY-UCOMM,
      GV_TITLE  TYPE SY-TITLE.

* ALV 관련
*DATA: GO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,
DATA : GO_CUSTOM  TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       GO_GRID    TYPE REF TO CL_GUI_ALV_GRID.
DATA : GT_FCAT   TYPE LVC_T_FCAT,
       GS_FCAT   TYPE LVC_S_FCAT,
       GS_LAYOUT TYPE LVC_S_LAYO.
* LVC_T_FCAT: 필드 카탈로그 테이블 타입.
* LVC_S_FCAT: 필드 카탈로그 구조체 타입.
* LVC_S_LAYO: ALV 레이아웃 구조체 타입.
       
       
*툴바 관련
DATA: fcode    TYPE TABLE OF sy-ucomm,
      wa_fcode TYPE sy-ucomm.

DATA: it_zscarrcp TYPE TABLE OF ZSCARR WITH HEADER LINE,
      it_changes  TYPE TABLE OF ZSCARR WITH HEADER LINE,
      it_deletes  TYPE TABLE OF ZSCARR WITH HEADER LINE.
* it_zscarrcp: 기본 데이터를 저장하는 테이블.
* it_changes: 변경된 데이터를 저장하는 테이블.
* it_deletes: 삭제된 데이터를 저장하는 테이블.

** CLASS *
*
*CLASS lcl_event_receiver DEFINITION DEFERRED.
*DATA: g_event_receiver TYPE REF TO lcl_event_receiver.
*
*
*
**--------------------------------------------------
** 클래스 선언
**-------------------------------------------------
*CLASS lcl_event_receiver DEFINITION.
*PUBLIC SECTION.
*METHODS : handle_double_click
*FOR EVENT double_click OF cl_gui_alv_grid
*IMPORTING e_row
*e_column.
*ENDCLASS.
**--------------------------------------------
** 클래스 구현
**--------------------------------------------
*CLASS lcl_event_receiver IMPLEMENTATION.
*METHOD handle_double_click.
*
** 내가 선택하는 alv .... line
*
*IF r1 ='X'.
*  DATA: tmp_GT_ZSC LIKE LINE OF GT_ZSC.
*
*  READ TABLE GT_ZSC INDEX e_row-index INTO tmp_GT_ZSC.
*ELSEIF r2 ='X'.
*  DATA: tmp_GT_ZSC LIKE LINE OF GT_ZSCARR.
*
*  READ TABLE GT_ZSCARR INDEX e_row-index INTO tmp_GT_ZSC.
*ENDIF.
*
*set PARAMETER ID 'DTB' FIELD tmp_GT_ZSC-carrid.
*call TRANSACTION 'SE11' WITHOUT AUTHORITY-CHECK.
*
*
*ENDMETHOD.
*ENDCLASS.

1-1. OLE2 (Object Linking and Embedding

외부 응용 프로그램(예: Microsoft Excel, Word 등)의 객체를 ABAP 프로그램 내에서 제어하거나 상호작용

TYPE-POOL OLE2 .

TYPES:
  **OLE2_OBJECT** LIKE   OBJ_RECORD.
*    Object handle initialization
CONSTANTS:
  OLE2_OBJECT_HEADER TYPE OLE2_OBJECT-HEADER VALUE 'OBJH',
  OLE2_OBJECT_TYPE   TYPE OLE2_OBJECT-TYPE   VALUE 'OLE2',
  OLE2_OBJECT_HANDLE TYPE OLE2_OBJECT-HANDLE VALUE -1,
  BEGIN OF OLE2_OBJECT_INITIAL,
    HEADER   TYPE OLE2_OBJECT-HEADER    VALUE OLE2_OBJECT_HEADER,
    TYPE     TYPE OLE2_OBJECT-TYPE      VALUE OLE2_OBJECT_TYPE,
    HANDLE   TYPE OLE2_OBJECT-HANDLE    VALUE OLE2_OBJECT_HANDLE,
    CB_INDEX TYPE OLE2_OBJECT-CB_INDEX  VALUE SPACE,
    CLSID    TYPE OLE2_OBJECT-CLSID     VALUE SPACE,
  END OF OLE2_OBJECT_INITIAL.

CONSTANTS: OLE2_%_POINTER POINTER.
TYPES: BEGIN OF **OLE2_PCB**,
       PCBID TYPE I,
       DATACB LIKE OLE2_%_POINTER,
       END OF OLE2_PCB.

TYPES BEGIN OF **OLE2_METH_PARMS**.
  INCLUDE STRUCTURE SWCONT.
  TYPES POINTER TYPE OLE2_PCB.
TYPES END OF   OLE2_METH_PARMS.

TYPES:
  OLE2_METH_PARMS_TAB TYPE OLE2_METH_PARMS OCCURS 0,
*    Method Parameter Table: contains the methoid parameter
*      types and values exporting and importing parameters.
  OLE2_LCID TYPE I,
*    Locale Id: determines the language and other settings
*      (like value formats) of the automation server.
*      For more information see: Include OLE2LCID
  OLE2_TYPE TYPE I.
*    OLE Variant Type: determines the "variant type" for the
*      parameters of Automation Controller requests.
*      For more information see: Include OLE2TYPE

TYPES: OLE2_PARAMETER LIKE SWCBCONT-VALUE.

image.png

OBJ_RECORD는 OLE2_OBJECT와 관련된 데이터 구조로, OLE 객체의 속성과 식별자를 저장

💡

TYPE : 데이터 타입, LIKE : 데이터 객체 자체

1-2. SSCRFILEDS

선택 화면(Selection Screen)에서 사용되는 필드들을 정의한 구조. 버튼에 대한 정보 있음

image.png

1-3. SMP_DYNTXT

메뉴그리는 구조. 버튼에 텍스트/아이콘 넣는 구조

image.png

  1. TEXT
    • 메뉴 또는 함수의 텍스트를 저장한다.
    • ICON_ID가 비어 있는 경우, 이 텍스트가 버튼이나 메뉴 항목에 표시된다.
    • 예: "File", "Edit", "Save"와 같은 메뉴 항목 이름.
  2. ICON_ID
    • 텍스트 필드에 표시될 아이콘의 ID를 저장한다.
    • 예: SAP 표준 아이콘 코드.
  3. ICON_TEXT:
    • 아이콘과 함께 표시되는 보조 텍스트
  4. QUICKINFO:
    • 사용자가 마우스를 올렸을 때 표시되는 퀵 인포(Quick Info) 또는 툴팁 정보를 저장한다.
  5. PATH:
    • Fastpath ID를 저장하며, 이는 빠른 경로 탐색에 사용된다.
    • 예: 단축키 또는 특정 경로 식별자.

1-4. CL_GUI_FRONTEND_SERVICES

💡

TYPE REF TO참조 변수(Reference Variable)를 선언할 때 사용하는 키워드.

참조 변수는 특정 데이터 객체나 클래스의 인스턴스를 가리키는 포인터 역할을 한다.

💡

CL_GUI_FRONTEND_SERVICES는 SAP ABAP에서 제공하는 표준 글로벌 클래스(Global Class)로, 클라이언트 PC에서 실행되는 GUI 관련 작업을 수행하기 위한 다양한 메서드를 제공한다.

즉, OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES.CL_GUI_FRONTEND_SERVICES 클래스의 주요 메서드을 사용할 수 있게 참조변수를 선언한것.

1-5. wwwdatatab

💡

wwwdatatab는 SAP ABAP에서 웹 관련 데이터(예: MIME 타입, 파일 경로, 객체 ID)를 저장하기 위한 표준 구조. 주로 SAP 시스템에 업로드된 파일이나 웹 리소스와 관련된 정보를 관리할 때 사용된다.

image.png

1-6. <gt_data>

<gt_data>필드 심볼(Field Symbol)로 선언
필드 심볼은 특정 데이터 객체를 동적으로 참조하여 작업할 때 사용된다.

1-7. LVC , CL , Global 접두사

  • CL_: 클래스(Class)를 나타낸다.
  • LVC_: 새로운 경량화된 ALV 기술과 관련된 데이터 타입을 나타낸다. Lightweight Value Control.
  • GV_: 글로벌변수
GO_Global Object객체 참조 변수(Object Reference)를 나타냄. 주로 클래스 인스턴스를 가리킴.
GT_Global Table내부 테이블(Internal Table)을 나타냄. 대량 데이터를 저장하고 처리할 때 사용.
GS_Global Structure구조체(Structure)를 나타냄. 단일 레코드(행)를 저장하거나 처리할 때 사용

1-8. SY-UCOMM

💡

SY-UCOMM은 SAP ABAP에서 제공하 시스템 필드(System Field)로, 사용자가 화면에서 수행한 최근 동작(예: 버튼 클릭, 메뉴 선택 등)의 Function Code(기능 코드)를 저장한다.

2. SEL

*&---------------------------------------------------------------------*
*& Include          ZTEST14_SEL
*&---------------------------------------------------------------------*

* UPLOAD 파일
SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME TITLE TEXT-001.
    PARAMETERS: P_FILE TYPE RLGRAP-FILENAME DEFAULT 'C:\' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BL01.

SELECTION-SCREEN BEGIN OF BLOCK BL02 WITH FRAME TITLE TEXT-002.
PARAMETERS: r1 RADIOBUTTON GROUP rad DEFAULT 'X',
            r2 RADIOBUTTON GROUP rad,
            r3 RADIOBUTTON GROUP rad.
SELECTION-SCREEN END OF BLOCK BL02.

* FUNCTION KEY
**SELECTION-SCREEN: FUNCTION KEY 1.**
**SELECTION-SCREEN: FUNCTION KEY 3.**

2-1. RLGRAP-FILENAME

image.png

파일이름과 경로를 필드로 갖는 구조.

💡

SAPLGRAP는 SAP 시스템에서 사용되는 Function Group(함수 그룹) 중 하나로, 그래픽 처리 및 파일 업로드/다운로드와 관련된 작업을 처리하는 데 사용된다

3. FUNCTION

3-1 . 버튼 만들기

main

**INITIALIZATION.
  PERFORM SET_FUNCTION_KEY.**
💡

INITIALIZATION

  • 프로그램이 실행될 때 가장 먼저 호출되는 초기화 이벤트 블록
  • 조회화면 전에 실행 / 조회화면에 초기값을 넣을때 사용
  • 여기서는 조회화면에 버튼 넣는 용도로도 사용

top

  DATA: **G_FUNCTION_KEY** TYPE SMP_DYNTXT.

sel

* FUNCTION KEY
**SELECTION-SCREEN: FUNCTION KEY 1.**
**SELECTION-SCREEN: FUNCTION KEY 3.**

FUNCTION KEY 1은 기본적으로 FC01이라는 Function Code를 할당받는다.

FUNCTION KEY 3은 기본적으로 FC03이라는 Function Code를 할당받는다.

사용자가 버튼을 클릭하면, 해당 버튼의 Function Code가 시스템 필드 SSCRFIELDS-UCOMM에 저장된다.

function

FORM **set_function_key** .
*SMPL
  G_FUNCTION_KEY-ICON_ID   = ICON_XLS.
  G_FUNCTION_KEY-ICON_TEXT = 'SAMPLE다운'.
  G_FUNCTION_KEY-TEXT      = 'SAMPLE다운'.
  SSCRFIELDS-**FUNCTXT_01**    = G_FUNCTION_KEY.

  clear G_FUNCTION_KEY.
  G_FUNCTION_KEY-ICON_ID   = ICON_CREATE_NOTE.
  G_FUNCTION_KEY-ICON_TEXT = '노트생성'.
  G_FUNCTION_KEY-TEXT      = '노트생성'.
  SSCRFIELDS-**FUNCTXT_03**    = G_FUNCTION_KEY. 
  =>> 필드에 행을 넣어버리면 한줄로 합쳐져서 들어간다

ENDFORM.

→ SAP ABAP에서 선택 화면의 툴바에 두 개의 버튼("SAMPLE다운", "노트생성")을 추가하고, 각각 다른 작업을 수행하도록 설정하는 예제

3-2. 버튼 도움말, 파일 가져오기

main

AT SELECTION-SCREEN **ON VALUE-REQUEST FOR** P_FILE.
  PERFORM GET_FILE_PATH.
💡

ON VALUE-REQUEST FOR는 선택 화면(Selection Screen)에서 특정 입력 필드에 대해 도움말을 제공하기 위해 사용되는 이벤트

sel

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

function

FORM get_file_path .
* 선택된 파일의 주소를 P_FILE 입력칸에 할당
* METHOD 사용
  DATA : LT_FILE TYPE FILETABLE,
         LS_FILE TYPE FILE_TABLE,
         LV_RC   TYPE I.
         
	" FILE_OPEN_DIALOG 실행
	" 왼쪽을 오른쪽에 할당  
	
	" RC : 선택한 파일 개수
  CALL METHOD **CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG**
	 " EXPORTING
	 "   INITIAL_DIRECTORY = 'C:\Temp' " 초기 디렉토리 설정
	 "   MULTISELECTION    = ABAP_TRUE " 다중 선택 활성화
  
    CHANGING
      FILE_TABLE = LT_FILE
      RC         = LV_RC.
        
	" 첫 번째 행 읽어오기
  READ TABLE LT_FILE INTO LS_FILE INDEX 1.
  
  IF SY-SUBRC = 0.
    **P_FILE = LS_FILE.**
    " 구조체(LS_FILE)가 단일 필드만 포함할 경우, 
    " 해당 구조체를 단일 필드처럼 사용할 수 있다.
    " 선택화면 파라미터에 파일명 할당
  ENDIF.

* FUNCTION 사용시: CALL FUNCTION 'F4_FILENAME'
ENDFORM.

FILE_TABLE

image.png

동작순서

💡

CHANGING은 메서드가 호출될 때, 해당 파라미터(FILE_TABLERC)에 초기 값을 전달하고, 메서드 실행 후 변경된 값을 반환받는다.

  1. 메소드 호출.
  2. LT_FILE이 메서드에 전달된다.
  3. 사용자가 파일을 선택하면, 선택된 파일 정보가 메서드 내부에서 FILE_TABLE에 저장된다.
  4. 메서드 실행이 완료되면, FILE_TABLE의 내용이 LT_FILE로 반환된다.

3-3 . 버튼 동작

main

AT SELECTION-SCREEN.
  PERFORM **ACT_FUNCTION_KEY.**

AT SELECTION-SCREEN

선택 화면(Selection Screen)에서 발생한 사용자 액션(버튼 클릭)을 처리하기 위한 로직

top

 DATA: **LS_KEY** LIKE WWWDATATAB. 

function

FORM **act_function_key** .
  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01'.
      PERFORM **EXCEL_DOWN_SMPL**.
  ENDCASE.
ENDFORM.

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

* 파일 경로 조회
  PERFORM **SET_DIRECTORY** USING LS_KEY-OBJID.
  * 여러 개의 인자를 전달할 때, 공백으로 구분

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

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

ENDFORM.
💡

인자의 전달
ABAP에서는 여러 개의 인자를 전달할 때 공백으로 구분하여 나열한다.

sel

OBJFILE  TYPE REF TO CL_GUI_FRONTEND_SERVICES.

funtion


FORM set_directory  USING  p_ls_key_objid.
  CLEAR GV_FILE.
  **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.
💡

CREATE OBJECT : CL_GUI_FRONTEND_SERVICES 클래스의 인스턴스를 생성

CHANGING vs EXPORTING

키워드역할
EXPORTING프로그램에서 메서드나 함수로 값을 전달(입력값).
CHANGING프로그램에서 메서드나 함수로 값을 전달하고, 메서드 실행 후 변경된 값을 반환(입출력값).

EXCEPTIONS

  • CNTL_ERROR가 발생하면 SY-SUBRC = 1.
  • ERROR_NO_GUI가 발생하면 SY-SUBRC = 2.
  • NOT_SUPPORTED_BY_GUI가 발생하면 SY-SUBRC = 3.

[11주차 과제]

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

* 화면 DISPLAY 설정 (1을 설정하면 DISPLAY)
  **SET** PROPERTY OF GO_APPLICATION 'Visible' = 1.

* WORKBOOK 및 WORKBOOK 설정 & OPEN
  **CALL** METHOD OF GO_APPLICATION 'Workbooks**' =** GO_WBOOK**.**

  SET PROPERTY OF GO_APPLICATION 'SheetsInNewWorkbook' = 2.

  CALL METHOD OF GO_WBOOK 'Add'.

* 최초 실행 SHEET는 첫번째
  CALL METHOD OF GO_APPLICATION 'Worksheets' = GO_SHEET
    EXPORTING
      #1 = 1.
     
  CALL METHOD OF GO_SHEET 'Activate'.
  SET PROPERTY OF GO_SHEET 'Name' = 'ZSPFLI'.
  GET PROPERTY OF GO_APPLICATION 'ActiveWorkbook' = GO_WBOOK.

* 데이터 입력
PERFORM FILL_CELL USING GO_APPLICATION 01:   01 'MANDT',
                                             02 'CARRID',
                                             03 'CONNID',
                                             04 'COUNTRYFR',
                                             05 'CITYFROM',
                                             06 'AIRPFROM',
                                             07 'COUNTRYTO',
                                             08 'CITYTO',
                                             09 'AIRPTO',
                                             10 'FLTIME',
                                             11 'DEPTIME',
                                             12 'ARRTIME',
                                             13 'DISTANCE',
                                             14 'DISTID',
                                             15 'FLTYPE',
                                             16 'PERIOD'.

  DATA : TAB1 TYPE TABLE OF SPFLI WITH HEADER LINE.
  DATA : RNUM TYPE I.
  DATA : CNUM TYPE I.

  SELECT * FROM SPFLI INTO TABLE TAB1.

  LOOP AT TAB1 INTO TAB1.
    RNUM = sy-tabix + 1.
    PERFORM FILL_CELL USING GO_APPLICATION RNUM: 01 TAB1-MANDT,
                                                 02 TAB1-CARRID,
                                                 03 TAB1-CONNID,
                                                 04 TAB1-COUNTRYFR,
                                                 05 TAB1-CITYFROM,
                                                 06 TAB1-AIRPFROM,
                                                 07 TAB1-COUNTRYTO,
                                                 08 TAB1-CITYTO,
                                                 09 TAB1-AIRPTO,
                                                 10 TAB1-FLTIME,
                                                 11 TAB1-DEPTIME,
                                                 12 TAB1-ARRTIME,
                                                 13 TAB1-DISTANCE,
                                                 14 TAB1-DISTID,
                                                 15 TAB1-FLTYPE,
                                                 16 TAB1-PERIOD.

  ENDLOOP.

*DATA: lo_columns TYPE ole2_object.
*CALL METHOD OF go_application 'Columns' = lo_columns.
*CALL METHOD OF lo_columns 'Autofit'.
  PERFORM column_width USING 5 20.
  PERFORM column_width USING 8 20.

  DATA : BORDERS TYPE OLE2_OBJECT.
  DATA : RANGE TYPE OLE2_OBJECT.
  DATA : CELL1 TYPE OLE2_OBJECT.
  DATA : CELL2 TYPE OLE2_OBJECT.

  CALL METHOD OF GO_APPLICATION 'CELLS' = CELL1  " gs_cell2 에 2열 5행을 대입하고
    EXPORTING
    #1 = 1
    #2 = 1.

  CALL METHOD OF GO_APPLICATION 'Cells' = CELL2  " gs_cell2 에 3열 15행을 대입하고
    EXPORTING
    #1 = 1
    #2 = 16.

  CALL METHOD OF GO_APPLICATION 'Range' = RANGE
    EXPORTING
    #1 = CELL1
    #2 = CELL2.

  DATA: lo_interior TYPE ole2_object.

  CALL METHOD OF RANGE 'Interior' = lo_interior.
  SET PROPERTY OF lo_interior 'Color' = 65535.

  CALL METHOD OF GO_APPLICATION 'Cells' = CELL2  " gs_cell2 에 3열 15행을 대입하고
    EXPORTING
    #1 = RNUM
    #2 = 16.
  CALL METHOD OF GO_APPLICATION 'Range' = RANGE
    EXPORTING
    #1 = CELL1
    #2 = CELL2.

  CALL METHOD OF RANGE 'borders' = borders
    EXPORTING #1 = 7.
  SET PROPERTY OF borders 'Linestyle' = 1.

  CALL METHOD OF RANGE 'borders' = borders
    EXPORTING #1 = 8.
  SET PROPERTY OF borders 'Linestyle' = 1.

  CALL METHOD OF RANGE 'borders' = borders
    EXPORTING #1 = 9.
  SET PROPERTY OF borders 'Linestyle' = 1.

  CALL METHOD OF RANGE 'borders' = borders
    EXPORTING #1 = 10.
  SET PROPERTY OF borders 'Linestyle' = 1.

  CALL METHOD OF RANGE 'borders' = borders
    EXPORTING #1 = 11.
  SET PROPERTY OF borders 'Linestyle' = 1.

  CALL METHOD OF RANGE 'borders' = borders
    EXPORTING #1 = 12.
  SET PROPERTY OF borders 'Linestyle' = 1.

*CALL METHOD OF RANGE 'Merge'.

* Align:
  CONSTANTS:
    c_center TYPE i VALUE -4108,
    c_left   TYPE i VALUE -4131,
    c_right  TYPE i VALUE -4152.

  CALL METHOD OF RANGE 'select'.
  SET PROPERTY OF RANGE 'HorizontalAlignment' = c_center.

  CALL METHOD OF GO_APPLICATION 'Worksheets' = GO_SHEET
    EXPORTING
      #1 = 2.
  CALL METHOD OF GO_SHEET 'Activate'.
    SET PROPERTY OF GO_SHEET 'Name' = 'ZSPFLI2'.

* 파일명 설정
  CONCATENATE GV_DIRECTORY '\' p_fname '.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.
profile
뚜잇뚜잇

0개의 댓글