Ⅰ. ERP/1. ABAP
[ ABAP] 엑셀 업로드
초록활명수
2024. 5. 10. 13:52
728x90
gif, png, html, xlsx 등 SAP 서버에 올리고 관리할 수 있는 저장소가 SAP Web Repository ( 웹 저장소 ) 입니다.
이를 활용해서 엑셀 업로드하는 방법 공유드립니다.
엑셀 파일 업로드 T-CODE : SMW0
엑셀 파라미터 추가
PARAMETERS: PA_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT 'C:\'.
엑셀 파일 업로드하는 창 띄우기
" 파일경로 설정
PERFORM F4_HELP_FOR_FILE CHANGING GV_FILE.
*&---------------------------------------------------------------------*
*& Form F4_HELP_FOR_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_FILE1 text
*----------------------------------------------------------------------*
FORM F4_HELP_FOR_FILE CHANGING P_FILE1.
DATA: IT_TAB TYPE FILETABLE,
GD_SUBRC TYPE I,
FILE_NAME TYPE STRING.
CONCATENATE '_template.xls' INTO FILE_NAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ' '
MODE = ' '
TITLE = ' '
IMPORTING
FILENAME = PA_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
IF SY-SUBRC = 0.
MESSAGE '엑셀 파일을 선택하셨습니다.' TYPE 'S'.
ELSE.
MESSAGE '선택한 파일을 확인해주세요.' TYPE 'I'.
ENDIF.
ENDFORM. " F4_HELP_FOR_FILE
엑셀을 인터널 테이블로 변환
DATA: lt_alsmex TYPE TABLE OF alsmex_tabline.
DATA : lt_dfies TYPE TABLE OF dfies.
DATA : lt_pernr TYPE TABLE OF pernr.
DATA : lv_index TYPE i .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 6
I_END_ROW = 11000
TABLES
INTERN = lt_alsmex
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC NE 0.
MESSAGE S000 WITH '파일을 확인하세요.' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
"ITAB에 넣기
TRY .
CLEAR : gs_excel, gt_excel[].
LOOP AT lt_alsmex INTO DATA(ls_alsmex).
MOVE ls_alsmex-col TO lv_index.
ASSIGN COMPONENT lv_index OF STRUCTURE gs_excel
TO <fs_1>.
"TYPE 체크 후 처리
REPLACE ALL OCCURRENCES OF ',' IN ls_alsmex-value WITH space.
REPLACE ALL OCCURRENCES OF '-' IN ls_alsmex-value WITH space.
IF ls_alsmex-value EQ cv_y OR ls_alsmex-value EQ cv_by.
ls_alsmex-value = cv_bx.
ELSEIF ls_alsmex-value EQ cv_n OR ls_alsmex-value EQ cv_bn.
CLEAR ls_alsmex-value .
ENDIF.
MOVE ls_alsmex-value TO <fs_1>.
AT END OF row.
MOVE-CORRESPONDING ls_alsmex TO gs_excel.
APPEND gs_excel TO gt_excel.
CLEAR: ls_alsmex, <fs_1>, gs_excel.
ENDAT.
ENDLOOP.
CATCH cx_sy_conversion_overflow.
MESSAGE i021(3e) WITH ' OVERFLOW :: 파일 재확인 요망'.
STOP.
CLEANUP.
ENDTRY.
DEFINE _CONV_ALPHA_I. "0000 더함
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = &1
IMPORTING
OUTPUT = &1.
END-OF-DEFINITION.
** 엑셀다운로드
DATA : lv_filename TYPE string,
lv_path TYPE string ,
lv_fullpath TYPE string,
lv_file TYPE string,
lv_default TYPE string.
DATA : ls_key TYPE wwwdatatab,
lv_dest TYPE rlgrap-filename VALUE 'C:\'.
DATA : p_ext TYPE string.
DATA : p_title TYPE string.
DATA : p_path_file TYPE string.
DATA : lv_rc TYPE sy-subrc.
lv_filename = |파일명_| & |{ SY-DATUM }| & |.xlsx|.
*SMWO 저장여부 확인
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_key
FROM wwwdata
WHERE objid = '프로그램명'.
*저장경로 선정
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = p_title
default_extension = p_ext
default_file_name = lv_filename
CHANGING
filename = lv_file
path = lv_path
fullpath = p_path_file.
check p_path_file is not INITIAL.
lv_dest = p_path_file.
*다운로드
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_key "Template
destination = lv_dest "다운로드 경로
IMPORTING
rc = lv_rc.
+ 24.10.11 ----------------------------------------------------------------
** 헉 이 방법은 라인 수 제약이 있다고 하네요
주의) Max line(10000 ) 제약 있음
728x90