[ABAP] 엑셀 데이터 업로드
PARAMETERS 값으로 데이터를 생성할 엑셀파일을 받습니다.
파일경로를 붙여줍니다.
실행하면 생성된 데이터를 볼수 있습니다.
임의로 만든 테이블에 엑셀파일로 받은 데이터를 생성시켜줬습니다.
[코드]
*&---------------------------------------------------------------------*
*& 파일입력받기
*&---------------------------------------------------------------------*
PARAMETERS PA_INT TYPE RLGRAP-FILENAME. "엑셀파일 받을 파라미터 생성
INITIALIZATION."엑셀파일 초기값 설정
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_INT .
*&---------------------------------------------------------------------*
*& 파일경로 붙이기
*&---------------------------------------------------------------------*
DATA : LT_FILE TYPE FILETABLE,"파일 FILETABLE타입
LV_RC TYPE I.
DATA : LS_FILE TYPE STRING. "파일명 STRING타입
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
CHANGING
FILE_TABLE = LT_FILE
RC = LV_RC.
READ TABLE LT_FILE INTO LS_FILE INDEX 1.
IF SY-SUBRC = 0.
PA_INT = LS_FILE.
ENDIF.
*&---------------------------------------------------------------------*
*& 엑셀값 불러오기
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA : LT_INTERN TYPE TABLE OF ALSMEX_TABLINE,
LS_INTERN TYPE ALSMEX_TABLINE.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = PA_INT
I_BEGIN_COL = 1 "1COL부터 데이터 추출
I_BEGIN_ROW = 2 "2ROW부터 데이터 추출
I_END_COL = 10 "10COL까지 데이터 추출
I_END_ROW = 100 "100ROW까지 데이터 추출
TABLES
INTERN = LT_INTERN.
* EXCEPTIONS
* INCONSISTENT_PARAMETERS = 1
* UPLOAD_OLE = 2
* OTHERS = 3.
*&---------------------------------------------------------------------*
*& 엑셀값 테이블에 넣기 "PK값은 중복안됨 APPEND 안되고 수정만됨
*&---------------------------------------------------------------------*
DATA : GT_EXCEL TYPE TABLE OF ZSCARR, "엑셀데이터를 넣을 테이블
GS_EXCEL LIKE LINE OF GT_EXCEL.
LOOP AT LT_INTERN INTO LS_INTERN.
CASE LS_INTERN-COL.
WHEN 1.
GS_EXCEL-MANDT = LS_INTERN-VALUE.
WHEN 2.
GS_EXCEL-CARRID = LS_INTERN-VALUE.
WHEN 3.
GS_EXCEL-CARRNAME = LS_INTERN-VALUE.
WHEN 4.
GS_EXCEL-CURRCODE = LS_INTERN-VALUE.
WHEN 5.
GS_EXCEL-URL = LS_INTERN-VALUE.
ENDCASE.
AT END OF ROW.
APPEND GS_EXCEL TO GT_EXCEL . "테이블에 APPEND
CLEAR GS_EXCEL.
ENDAT.
ENDLOOP.
SORT GT_EXCEL BY CARRID. "데이터 SORT
MODIFY ZSCARR FROM TABLE GT_EXCEL. "테이블에 넣기
*&---------------------------------------------------------------------*
*& 생성한 데이터 ALV로 보여주기
*&---------------------------------------------------------------------*
DATA : GO_CONT TYPE REF TO CL_GUI_CUSTOM_CONTAINER, " ALV
GO_ALV TYPE REF TO CL_GUI_ALV_GRID.
DATA : OK_CODE TYPE SY-UCOMM.
CALL SCREEN '0100'.
END-OF-SELECTION.
**&---------------------------------------------------------------------*
**& Module STATUS_0100 OUTPUT
**&---------------------------------------------------------------------*
**&
**&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'S100'.
SET TITLEBAR 'T100'.
ENDMODULE.
MODULE INT_ALV OUTPUT.
IF GO_CONT IS INITIAL.
CREATE OBJECT GO_CONT
EXPORTING
CONTAINER_NAME = 'EXCEL1' "레이아웃 이름으로 지정하기
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
" MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
" WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT GO_ALV
EXPORTING
I_PARENT = GO_CONT
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
" MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
" WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD GO_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'zscarr' "테이블 데이터 디스플레이가 됩니다.
"IS_variant = gs_variant
I_SAVE = 'A'
CHANGING
IT_OUTTAB = GT_EXCEL
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE TO SCREEN 0. "program(종료)
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CLEAR_OK_CODE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE CLEAR_OK_CODE INPUT.
CLEAR : OK_CODE.
ENDMODULE.