최종 작성일: 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. 구문 부터 할것
'SAP > ABAP' 카테고리의 다른 글
[엑셀 업로드 프로그램 이해하기-3/N ]PBO,PAI (0) | 2024.08.18 |
---|---|
[WIP]Excel_Upload프로그램_프로그램 작동 로직(3/3) (0) | 2024.06.27 |
Excel_Upload프로그램_프로그램 작동 로직(1/3) (0) | 2024.06.25 |
CLASS (0) | 2024.06.25 |
Excel_Upload프로그램_Function Key 추가 (0) | 2024.06.17 |