commit (2026.08.18 17:05)
This commit is contained in:
@@ -20,6 +20,158 @@ ENDCLASS.
|
||||
CLASS ZCL_COMMON_CLASS IMPLEMENTATION.
|
||||
|
||||
|
||||
method UPLOAD_EXCEL_TO_ITAB.
|
||||
endmethod.
|
||||
METHOD upload_excel_to_itab.
|
||||
DATA: lt_bin TYPE solix_tab,
|
||||
lv_xstring TYPE xstring,
|
||||
lv_filename TYPE string,
|
||||
lo_excel TYPE REF TO cl_fdt_xl_spreadsheet,
|
||||
lt_worksheets TYPE if_fdt_doc_spreadsheet=>t_worksheet_names,
|
||||
lv_sheet_name TYPE string,
|
||||
lr_data_ref TYPE REF TO data.
|
||||
|
||||
DATA: lt_row TYPE ty_row,
|
||||
lv_idx TYPE i.
|
||||
|
||||
FIELD-SYMBOLS: <lt_sheet> TYPE STANDARD TABLE,
|
||||
<ls_sheet> TYPE any,
|
||||
<lv_cell> TYPE any.
|
||||
|
||||
" 파일 선택
|
||||
DATA: lt_file_table TYPE filetable,
|
||||
lv_rc TYPE i.
|
||||
|
||||
CALL METHOD cl_gui_frontend_services=>file_open_dialog
|
||||
EXPORTING
|
||||
default_extension = 'XLSX'
|
||||
file_filter = 'Excel Files (*.xlsx)|*.xlsx'
|
||||
CHANGING
|
||||
file_table = lt_file_table
|
||||
rc = lv_rc
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0 OR lv_rc = 0.
|
||||
MESSAGE '파일 선택이 취소되었습니다.' TYPE 'S'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_file_table INDEX 1 INTO DATA(ls_file).
|
||||
IF sy-subrc <> 0.
|
||||
MESSAGE '선택한 파일 정보를 읽을 수 없습니다.' TYPE 'E'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_filename = ls_file-filename.
|
||||
|
||||
" 엑셀 파일 바이너리 업로드
|
||||
CALL METHOD cl_gui_frontend_services=>gui_upload
|
||||
EXPORTING
|
||||
filename = lv_filename
|
||||
filetype = 'BIN'
|
||||
IMPORTING
|
||||
filelength = DATA(lv_filelength)
|
||||
CHANGING
|
||||
data_tab = lt_bin
|
||||
EXCEPTIONS
|
||||
file_open_error = 1
|
||||
file_read_error = 2
|
||||
no_batch = 3
|
||||
gui_refuse_filetransfer = 4
|
||||
invalid_type = 5
|
||||
no_authority = 6
|
||||
unknown_error = 7
|
||||
bad_data_format = 8
|
||||
header_not_allowed = 9
|
||||
separator_not_allowed = 10
|
||||
header_too_long = 11
|
||||
unknown_dp_error = 12
|
||||
access_denied = 13
|
||||
dp_out_of_memory = 14
|
||||
disk_full = 15
|
||||
dp_timeout = 16
|
||||
not_supported_by_gui = 17
|
||||
error_no_gui = 18
|
||||
OTHERS = 19.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
MESSAGE '엑셀 파일 업로드 중 오류가 발생했습니다.' TYPE 'E'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
" 바이너리 -> XSTRING 변환
|
||||
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
|
||||
EXPORTING
|
||||
input_length = lv_filelength
|
||||
IMPORTING
|
||||
buffer = lv_xstring
|
||||
TABLES
|
||||
binary_tab = lt_bin
|
||||
EXCEPTIONS
|
||||
failed = 1
|
||||
OTHERS = 2.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
MESSAGE '엑셀 파일 변환 중 오류가 발생했습니다.' TYPE 'E'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
"---------------------------------------------------------------"
|
||||
" 4. XLSX 파싱 및 첫 번째 시트 읽기
|
||||
"---------------------------------------------------------------"
|
||||
TRY.
|
||||
CREATE OBJECT lo_excel
|
||||
EXPORTING
|
||||
document_name = lv_filename
|
||||
xdocument = lv_xstring.
|
||||
|
||||
IF lo_excel IS INITIAL.
|
||||
MESSAGE '엑셀 객체 생성에 실패했습니다.' TYPE 'E'.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
|
||||
lo_excel->if_fdt_doc_spreadsheet~get_worksheet_names(
|
||||
IMPORTING
|
||||
worksheet_names = lt_worksheets ).
|
||||
|
||||
READ TABLE lt_worksheets INTO lv_sheet_name INDEX 1.
|
||||
IF sy-subrc <> 0.
|
||||
MESSAGE '워크시트를 찾을 수 없습니다.' TYPE 'E'.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
|
||||
lr_data_ref = lo_excel->if_fdt_doc_spreadsheet~get_itab_from_worksheet(
|
||||
lv_sheet_name ).
|
||||
|
||||
rr_data = lr_data_ref.
|
||||
|
||||
* ASSIGN lr_data_ref->* TO <lt_sheet>.
|
||||
* IF <lt_sheet> IS NOT ASSIGNED.
|
||||
* MESSAGE '시트 데이터를 읽을 수 없습니다.' TYPE 'E'.
|
||||
* EXIT.
|
||||
* ENDIF.
|
||||
|
||||
CATCH cx_root.
|
||||
MESSAGE '엑셀 파일 해석 중 오류가 발생했습니다.' TYPE 'E'.
|
||||
EXIT.
|
||||
ENDTRY.
|
||||
|
||||
|
||||
* LOOP AT <lt_sheet> ASSIGNING <ls_sheet>.
|
||||
* CLEAR lt_row.
|
||||
*
|
||||
* lv_idx = 1.
|
||||
* DO.
|
||||
* ASSIGN COMPONENT lv_idx OF STRUCTURE <ls_sheet> TO <lv_cell>.
|
||||
* IF sy-subrc <> 0.
|
||||
* EXIT.
|
||||
* ENDIF.
|
||||
*
|
||||
* APPEND CONV string( <lv_cell> ) TO lt_row.
|
||||
* lv_idx = lv_idx + 1.
|
||||
* ENDDO.
|
||||
*
|
||||
* APPEND lt_row TO et_data.
|
||||
* ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
Reference in New Issue
Block a user