commit (2026.08.18 17:05)
This commit is contained in:
@@ -20,6 +20,158 @@ ENDCLASS.
|
|||||||
CLASS ZCL_COMMON_CLASS IMPLEMENTATION.
|
CLASS ZCL_COMMON_CLASS IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
method UPLOAD_EXCEL_TO_ITAB.
|
METHOD upload_excel_to_itab.
|
||||||
endmethod.
|
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.
|
ENDCLASS.
|
||||||
|
|||||||
Reference in New Issue
Block a user