(ABAP 코드) EXCEL_DOWNLOAD(SWM0)
*&---------------------------------------------------------------------*
*& Form EXCEL_DOWNLOAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM excel_download USING VALUE(pv_docname).
DATA: lt_doc_table TYPE TABLE OF w3mime,
ls_doc_table TYPE w3mime.
DATA: lv_doc_size TYPE i,
lv_doc_type TYPE c LENGTH 80 VALUE 'Excel.Sheet',
lv_doc_format TYPE c LENGTH 80.
DATA: lv_filename_1 TYPE string,
lv_filename_2 TYPE c LENGTH 100.
* 저장할 파일 이름 생성
DATA: lv_key TYPE w3objid.
DATA: lv_key_1 TYPE sy-repid.
DATA: lv_key_2 TYPE sy-datum.
lv_key = '비용 처리 계획 업로드 양식'.
* 2진 파일로 다운로드
* SMW0에 올려 놓은 비용계회처리 객체를 등록하여, 사이즈, 형태, 타입과 테이블을 받음.
CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
EXPORTING
object_id = pv_docname
IMPORTING
data_size = lv_doc_size
document_type = lv_doc_format
document_format = lv_doc_type
TABLES
data_table = lt_doc_table
EXCEPTIONS
object_not_found = 1
internal_error = 2
OTHERS = 3.
* 해당 엑셀양식의 데이터 구조를 파악하는데 실패했을 경우, 에러
IF sy-subrc <> 0.
MESSAGE e000 WITH '엑셀양식 구조를 파악하는데 실패하였습니다.'.
ENDIF.
* 파일이름 지정
CONCATENATE lv_key '.xlsx' INTO lv_filename_1.
* PC에 저장할 위치를 가져와서 파일경로를 만듬
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = lv_filename_1
def_path = 'C:\' " 최조 경로 - C Drive
mask = ',*.xlsx,*XLSX.'
mode = 'S'
title = ' '
IMPORTING
filename = lv_filename_2
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc EQ 0.
lv_filename_1 = lv_filename_2.
ELSEIF sy-subrc EQ 3.
MESSAGE e000 WITH '파일 업로드를 취소하셨습니다.'.
ELSE.
MESSAGE e000 WITH '파일 업로드에 실패하였습니다.'.
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = lv_doc_size
filename = lv_filename_1
filetype = 'BIN'
TABLES
data_tab = lt_doc_table
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
* 실패
IF sy-subrc EQ 0.
MESSAGE s000 WITH '비용처리 계획 양식 다운로드에 성공하였습니다.'.
ELSEIF sy-subrc EQ 19.
MESSAGE e000 WITH '파일을 찾을 수 없습니다..'.
ELSE.
MESSAGE e000 WITH '비용처리 계획 양식 다운로드에 실패하였습니다.'.
ENDIF.
ENDFORM.