SAP/ABAP 코드
(ABAP 코드) Excel Upload
haramang
2022. 2. 8. 06:19
*&---------------------------------------------------------------------*
*& Form GET_FILE_PATH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
*& Form GET_FILE_PATH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_file_path .
DATA: ls_filetab TYPE file_table,
lt_filetab TYPE filetable,
lv_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
CHANGING
file_table = lt_filetab
rc = lv_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc NE 0.
MESSAGE e000 WITH '해당 파일을 불러오는데 실패하였습니다.'.
ENDIF.
READ TABLE lt_filetab INTO ls_filetab INDEX 1.
IF sy-subrc EQ 0.
CLEAR: p_file.
p_file = ls_filetab-filename.
ELSE.
MESSAGE e000 WITH '해당 파일을 불러오는데 실패하였습니다.'.
ENDIF.
ENDFORM.
DATA: ls_filetab TYPE file_table,
lt_filetab TYPE filetable,
lv_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
CHANGING
file_table = lt_filetab
rc = lv_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc NE 0.
MESSAGE e000 WITH '해당 파일을 불러오는데 실패하였습니다.'.
ENDIF.
READ TABLE lt_filetab INTO ls_filetab INDEX 1.
IF sy-subrc EQ 0.
CLEAR: p_file.
p_file = ls_filetab-filename.
ELSE.
MESSAGE e000 WITH '해당 파일을 불러오는데 실패하였습니다.'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form TRANSPORT_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
*& Form TRANSPORT_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM transport_excel CHANGING pv_err TYPE char01.
DATA: ls_intern TYPE alsmex_tabline, " 엑셀 저장 테이블
lt_intern TYPE TABLE OF alsmex_tabline.
DATA: lv_kstar TYPE zted15_plan-kstar. " 원가요소 임시저장
DATA: lv_kostl TYPE zted15_plan-kostl. " 코스트센터 임시저장
FIELD-SYMBOLS: <fs_val> TYPE any. " 계획 테이블 필드 값 저장용
CLEAR: pv_err, gs_t_plan.
DATA: ls_intern TYPE alsmex_tabline, " 엑셀 저장 테이블
lt_intern TYPE TABLE OF alsmex_tabline.
DATA: lv_kstar TYPE zted15_plan-kstar. " 원가요소 임시저장
DATA: lv_kostl TYPE zted15_plan-kostl. " 코스트센터 임시저장
FIELD-SYMBOLS: <fs_val> TYPE any. " 계획 테이블 필드 값 저장용
CLEAR: pv_err, gs_t_plan.
* 엑셀 데이터를 Internal table에 저장
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 15
i_end_row = 1000
TABLES
intern = lt_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 15
i_end_row = 1000
TABLES
intern = lt_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
* 실패
IF sy-subrc <> 0.
MESSAGE s000 WITH '엑셀파일을 불러오는데 실패하였습니다.' DISPLAY LIKE 'E'.
pv_err = 'X'.
EXIT.
ENDIF.
MESSAGE s000 WITH '엑셀파일을 불러오는데 실패하였습니다.' DISPLAY LIKE 'E'.
pv_err = 'X'.
EXIT.
ENDIF.
* 엑셀 업로드 데이터를 계획 테이블에 저장
LOOP AT lt_intern INTO ls_intern.
* 현재 Col 위치에 있는 임시 계획 테이블의 필드를 fs_line 필드심볼에 지정
ASSIGN COMPONENT ls_intern-col OF STRUCTURE gs_t_plan TO <fs_val>.
* 해당 값의 Col이 코스트센터일경우, 앞에 0을 채워 줌.
* 누락일 경우, 데이터 유효성 체크시 해당 값을 읽을 수 없음.
* 누락일 경우, 데이터 유효성 체크시 해당 값을 읽을 수 없음.
IF ls_intern-col EQ 1.
lv_kostl = ls_intern-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_kostl
IMPORTING
output = lv_kostl.
<fs_val> = lv_kostl.
lv_kostl = ls_intern-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_kostl
IMPORTING
output = lv_kostl.
<fs_val> = lv_kostl.
* 해당 값의 Col이 원가요소일경우, 앞에 0을 채워 줌.
* 누락일 경우, 데이터 유효성 체크시 해당 값을 읽을 수 없음.
* 누락일 경우, 데이터 유효성 체크시 해당 값을 읽을 수 없음.
ELSEIF ls_intern-col EQ 2.
lv_kstar = ls_intern-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_kstar
IMPORTING
output = lv_kstar.
<fs_val> = lv_kstar.
lv_kstar = ls_intern-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_kstar
IMPORTING
output = lv_kstar.
<fs_val> = lv_kstar.
* 해당 값의 Col이 코스트센터이거나 원가요소가 아닐경우, 숫자 필드
ELSE.
* 금액 필드에 문자가 입력됬을 경우 대비,
TRY.
<fs_val> = ls_intern-value.
<fs_val> = ls_intern-value.
* 숫자필드에 문자열이 입력되었을 경우,
CATCH cx_sy_conversion_no_number.
<fs_val> = 0.
ENDTRY.
ENDIF.
<fs_val> = 0.
ENDTRY.
ENDIF.
* Row의 마지막 데이터일 경우, 구분에 "계획" / 통화에 "USD" 세팅
* 임시 계획 테이블에 데이터 저장
* 임시 계획 테이블에 데이터 저장
AT END OF row.
gs_t_plan-catal = '계획'.
gs_t_plan-waers = 'USD'.
APPEND gs_t_plan TO gt_t_plan.
CLEAR: gs_t_plan.
ENDAT.
gs_t_plan-catal = '계획'.
gs_t_plan-waers = 'USD'.
APPEND gs_t_plan TO gt_t_plan.
CLEAR: gs_t_plan.
ENDAT.
* Unassign Field symbol
UNASSIGN <fs_val>.
CLEAR: lv_kostl, lv_kstar, ls_intern.
ENDLOOP.
ENDFORM.
CLEAR: lv_kostl, lv_kstar, ls_intern.
ENDLOOP.
ENDFORM.