[11주차] SAP ERP : 업로드할 파일 경로 가져오기, 엑셀 다운로드
*&---------------------------------------------------------------------*
*& 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.
*&---------------------------------------------------------------------*
*& 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.
외부 응용 프로그램(예: 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.
OBJ_RECORD
는 OLE2_OBJECT
와 관련된 데이터 구조로, OLE 객체의 속성과 식별자를 저장
TYPE : 데이터 타입, LIKE : 데이터 객체 자체
선택 화면(Selection Screen)에서 사용되는 필드들을 정의한 구조. 버튼
에 대한 정보 있음
메뉴그리는 구조. 버튼에 텍스트/아이콘 넣는 구조
ICON_ID
가 비어 있는 경우, 이 텍스트가 버튼이나 메뉴 항목에 표시된다.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 클래스의 주요 메서드을 사용할 수 있게 참조변수를 선언한것.
wwwdatatab
는 SAP ABAP에서 웹 관련 데이터(예: MIME 타입, 파일 경로, 객체 ID)를 저장하기 위한 표준 구조. 주로 SAP 시스템에 업로드된 파일이나 웹 리소스와 관련된 정보를 관리할 때 사용된다.
<gt_data>
는 필드 심볼(Field Symbol)로 선언
필드 심볼은 특정 데이터 객체를 동적으로 참조
하여 작업할 때 사용된다.
GO_ | Global Object | 객체 참조 변수(Object Reference)를 나타냄. 주로 클래스 인스턴스를 가리킴. |
---|---|---|
GT_ | Global Table | 내부 테이블(Internal Table)을 나타냄. 대량 데이터를 저장하고 처리할 때 사용. |
GS_ | Global Structure | 구조체(Structure)를 나타냄. 단일 레코드(행)를 저장하거나 처리할 때 사용 |
SY-UCOMM
은 SAP ABAP에서 제공하 시스템 필드(System Field)로, 사용자가 화면에서 수행한 최근 동작(예: 버튼 클릭, 메뉴 선택 등)의 Function Code(기능 코드)를 저장한다.
*&---------------------------------------------------------------------*
*& 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.**
파일이름과 경로를 필드로 갖는 구조.
💡SAPLGRAP
는 SAP 시스템에서 사용되는 Function Group(함수 그룹) 중 하나로, 그래픽 처리 및 파일 업로드/다운로드와 관련된 작업을 처리하는 데 사용된다
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다운", "노트생성")을 추가하고, 각각 다른 작업을 수행하도록 설정하는 예제
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.
CHANGING
은 메서드가 호출될 때, 해당 파라미터(FILE_TABLE
, RC
)에 초기 값을 전달하고, 메서드 실행 후 변경된 값을 반환받는다.
LT_FILE
이 메서드에 전달된다.FILE_TABLE
에 저장된다.FILE_TABLE
의 내용이 LT_FILE
로 반환된다.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
클래스의 인스턴스를 생성
키워드 | 역할 |
---|---|
EXPORTING | 프로그램에서 메서드나 함수로 값을 전달(입력값). |
CHANGING | 프로그램에서 메서드나 함수로 값을 전달하고, 메서드 실행 후 변경된 값을 반환(입출력값). |
CNTL_ERROR
가 발생하면 SY-SUBRC = 1
.ERROR_NO_GUI
가 발생하면 SY-SUBRC = 2
.NOT_SUPPORTED_BY_GUI
가 발생하면 SY-SUBRC = 3
.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.