엑셀에 있는 데이터를 SAP에 올리기 위해 EXCEL 업로드 펑션을 사용한다.
엑셀 파일을 업로드 할 파라미터 타입은 RLGRAP-FILENAME 를 사용한다.
PARAMETERS : P_FILE TYPE RLGRAP-FILENAME
내컴퓨터에서 업로드 하기 위해 셀렉션이벤트
AT SELECTION SCREEN에서 F4 엑셀을 만들어 준다.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
* DEF_FILENAME = 'C:\'.. " Preset file name
DEF_PATH = 'C:\' " Preset path
* MASK = SPACE " Selection screen
* MODE = SPACE " S = Save, O = Open
* TITLE = SPACE " Title of the selection window
IMPORTING
FILENAME = FILE " Selected file name
* RC = " not used
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5
EXPORTING
* DEF_FILENAME = 'C:\'.. " Preset file name
DEF_PATH = 'C:\' " Preset path
* MASK = SPACE " Selection screen
* MODE = SPACE " S = Save, O = Open
* TITLE = SPACE " Title of the selection window
IMPORTING
FILENAME = FILE " Selected file name
* RC = " not used
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5
파일을 올리고 실행하면 함수를 통해 엑셀에서 데이터를 가지고 오도록한다.
AT SELECTION-SCREEN.
DATA : GV_INDEX TYPE I,
LT_EXCEL LIKE TABLE OF KCDE_CELLS,
LS_EXCEL LIKE KCDE_CELLS.
FIELD-SYMBOLS : <FS1>.
CHECK FILE IS NOT INITIAL.
"엑셀 데이터 변환 (엑셀데이터 -> LT_EXCEL)
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
EXPORTING
FILENAME = FILE " 업로드 파일
I_BEGIN_COL = 1 " 시작열
I_BEGIN_ROW = 2 " 시작행
I_END_COL = 256 " 종료열
I_END_ROW = 60000 " 종료행
TABLES
INTERN = LT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2.
IF LT_EXCEL IS INITIAL.
MESSAGE '파일이 존재하지 않습니다.' TYPE 'E'.
ENDIF.
LT_EXCEL에 엑셀의 데이터가 담기게 된다.
담기는 데이터는 컬럼마다 하나씩 담기게 된다.
LS_EXCEL-ROW = 1,
LS_EXCEL-COL = 1
LS_EXCEL-VALUE = 사과
로 데이터를 받아와서 ALV에 띄우기 위해서는 가공하는 과정이 필요하다.
이때, 엑셀의 필드와 데이터 가공시 받을 인터널 테이블(GS_EXCEL)의 필드가 같아야
같은 필드에 정확하게 들어간다.
엑셀 데이터를 받고 ALV에 추가적인 데이터나 필드를 넣고 싶다면
ALV용 인터널 테이블(GS_DISPLAY)에 데이터를 가공해서 넣어주면 된다.
CLEAR : GS_EXCEL,
GT_EXCEL.
"엑셀 데이터 -> 인터널 테이블
LOOP AT LT_EXCEL INTO LS_EXCEL.
CLEAR GV_INDEX.
MOVE LS_EXCEL-COL TO GV_INDEX.
ASSIGN COMPONENT GV_INDEX OF STRUCTURE GS_EXCEL TO <FS1>.
MOVE LS_EXCEL-VALUE TO <FS1>.
AT END OF ROW.
APPEND GS_EXCEL TO GT_EXCEL.
CLEAR :GS_EXCEL.
ENDAT.
CLEAR LS_EXCEL.
ENDLOOP.
LOOP AT GT_EXCEL INTO GS_EXCEL.
MOVE-CORRESPONDING GS_EXCEL TO GS_DISPLAY.
APPEND GS_DISPLAY TO GT_DISPLAY.
ENDLOOP.
ENDFORM.
GT_EXCEL.
"엑셀 데이터 -> 인터널 테이블
LOOP AT LT_EXCEL INTO LS_EXCEL.
CLEAR GV_INDEX.
MOVE LS_EXCEL-COL TO GV_INDEX.
ASSIGN COMPONENT GV_INDEX OF STRUCTURE GS_EXCEL TO <FS1>.
MOVE LS_EXCEL-VALUE TO <FS1>.
AT END OF ROW.
APPEND GS_EXCEL TO GT_EXCEL.
CLEAR :GS_EXCEL.
ENDAT.
CLEAR LS_EXCEL.
ENDLOOP.
LOOP AT GT_EXCEL INTO GS_EXCEL.
MOVE-CORRESPONDING GS_EXCEL TO GS_DISPLAY.
APPEND GS_DISPLAY TO GT_DISPLAY.
ENDLOOP.
ENDFORM.
Tags:
SAP ABAP