ABAP 개발 시에 엑셀로 데이터 대량 업로드 할 경우 저장하기 전에 필요한 유효성 체크를 해야한다.
DATA : GV_INDEX TYPE I. "
DATA : LT_EXCEL LIKE TABLE OF KCDE_CELLS,
LS_EXCEL LIKE KCDE_CELLS.
DATA : LV_LEN(3),
LV_LEN2(3),
LV_TYPE TYPE DD01V-DATATYPE.
FIELD-SYMBOLS : <FS1>.
CHECK P_FILE IS NOT INITIAL.
"엑셀 데이터 변환 (엑셀데이터 -> LT_EXCEL)
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
EXPORTING
FILENAME = P_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 'W' DISPLAY LIKE 'E'.
ENDIF.
"------------------------------------------------------------------------"
CLEAR : GS_EXCEL,
GT_EXCEL.
"엑셀 데이터 -> 인터널 테이블
LOOP AT LT_EXCEL INTO LS_EXCEL. "
CLEAR GV_INDEX.
MOVE LS_EXCEL-COL TO GV_INDEX.
" 대문자로 변환
TRANSLATE LS_EXCEL-VALUE TO UPPER CASE.
" 날짜, 계좌번호 , 사업자 번호 등의 숫자만 들어오도록 변환
"여기서 COL 의 숫자는 엑셀의 몇번째 열인지
IF LS_EXCEL-COL = 3 OR LS_EXCEL-COL = 4.
REPLACE ALL OCCURRENCES OF ',' IN LS_EXCEL-VALUE WITH ' '.
REPLACE ALL OCCURRENCES OF '-' IN LS_EXCEL-VALUE WITH ' '.
REPLACE ALL OCCURRENCES OF '.' IN LS_EXCEL-VALUE WITH ' '.
REPLACE ALL OCCURRENCES OF '/' IN LS_EXCEL-VALUE WITH ' '.
CONDENSE LS_EXCEL-VALUE NO-GAPS.
ENDIF.
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.
"ALV DISPLAY 가져온 엑셀 데이터를 보여줄 ALV 인터널 테이블로
LOOP AT GT_EXCEL INTO GS_EXCEL.
*---데이터 길이 체크
" 저장할 필드의 길이가 제한되어 있을때 잘못된 데이터가 저장되지 않도록 체크
CLEAR: LV_LEN.
CALL METHOD CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH
EXPORTING
FIELD = GS_EXCEL-BNKN " Field "
RECEIVING
LEN = LV_LEN. " Output Length "
IF LV_LEN > 10 .
GS_DISPLAY-MSG = ' 길이가 14자리가 넘습니다.'.
ENDIF.
*--------데이터 타입 확인
* 숫자만 해당되는 데이터의 경우 에러 체크
* 문자, 특수문자의 경우 LV_TYPE = 'CHAR' 로 출력
CLEAR : LV_TYPE.
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
STRING_IN = GS_EXCEL-ZBNKN
IMPORTING
* STRING_OUT =
HTYPE = LV_TYPE.
IF LV_TYPE = 'CHAR'.
GS_DISPLAY-MSG = ' 문자가 포함되어 있습니다.'.
ENDIF.
MOVE-CORRESPONDING GS_EXCEL TO GS_DISPLAY.
APPEND GS_DISPLAY TO GT_DISPLAY.
CLEAR GS_DISPLAY.
Tags:
SAP ABAP