一:所用到的事物碼:
Smw0
二:上傳步驟
圖1
圖2
圖3
注:“包”爲你所在項目的包的名稱。
圖4
圖5
點擊“7” 選擇Excel模版,就可以將模版上傳到sap的服務器上了,另需要記住對象名稱,在後面的程序中有需要。
上傳新的模板覆蓋原來的模板
三:下載代碼
TABLES:sscrfields.
*定義OLE變量
DATA:g_excel TYPE ole2_object,
g_applica TYPE ole2_object,
g_sheet TYPE ole2_object,
g_cell TYPE ole2_object,
g_workbook TYPE ole2_object.
DATA:p_filepath TYPE string.
CONSTANTS:c_yes TYPE c VALUE 'X',
c_path TYPE char128 VALUE 'C:\TMP\價格信息批量導入.xls'.
*模版下載按鈕
SELECTION-SCREEN PUSHBUTTON /1(10) text-002
USER-COMMAND attch.
AT SELECTION-SCREEN.
PERFORM frm_check_input.
*&---------------------------------------------------------------------*
*& Form frm_check_input
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_check_input .
DATA l_ret TYPE abap_bool.
IF sscrfields-ucomm = 'ATTCH'.
* 下載模版
PERFORM frm_download_template.
ELSE.
IF p_filepath IS INITIAL.
MESSAGE s004(zmess) DISPLAY LIKE 'E'.
STOP.
ENDIF.
* 將路徑全部轉換爲大寫
TRANSLATE p_filepath TO UPPER CASE.
* 檢查文件是否存在
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = p_filepath
RECEIVING
result = l_ret
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF l_ret NE c_yes.
MESSAGE e004(zmess) WITH '文件不存在'.
ENDIF.
ENDIF.
ENDFORM. "frm_check_input
*&---------------------------------------------------------------------*
*& Form frm_download_template
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_download_template .
DATA: lv_objdata LIKE wwwdatatab,
lv_obj_name LIKE wwwdatatab-objid,
lv_destination LIKE rlgrap-filename,
lv_objid LIKE sy-repid,
lv_subrc LIKE sy-subrc.
DATA:l_ret TYPE abap_bool,
lv_answer.
DATA:lv_file TYPE string.
MOVE c_path TO lv_file.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = lv_file
RECEIVING
result = l_ret
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
IF l_ret EQ c_yes.
* 模版已存在,是否覆蓋
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = '模版已存在,是否覆蓋?'
text_button_1 = '是'(001)
text_button_2 = '否'(002)
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
IF lv_answer EQ 'A'. "取消
EXIT.
ELSEIF lv_answer NE '1'. "否
p_filepath = c_path.
ENDIF.
ELSE.
lv_answer = '1'.
ENDIF.
CREATE OBJECT g_excel 'EXCEL.APPLICATION'.
GET PROPERTY OF g_excel 'Workbooks' = g_workbook .
CALL METHOD OF
g_workbook
'Close'.
IF lv_answer EQ '1'.
MOVE 'ZGN_MMB021' TO lv_obj_name.
SELECT relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF lv_objdata
UP TO 1 ROWS
WHERE srtf2 = 0 AND relid = 'MI'
AND objid = lv_obj_name.
ENDSELECT.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_objdata
destination = c_path
IMPORTING
rc = lv_subrc.
IF lv_subrc = 0.
p_filepath = c_path.
ENDIF.
ENDIF.
CALL METHOD OF
g_workbook
'open'
EXPORTING
#1 = c_path.
CALL METHOD OF
g_excel
'worksheets' = g_sheet
EXPORTING
#1 = 1.
CALL METHOD OF
g_sheet
'activate'.
SET PROPERTY OF g_excel 'visible' = 1.
FREE OBJECT g_sheet.
FREE OBJECT g_applica.
FREE OBJECT g_workbook.
FREE OBJECT g_excel.
ENDFORM. "frm_download_template
自己的程序:ZPROINFO01
*&---------------------------------------------------------------------*
*& Form temp_excel_get
*&---------------------------------------------------------------------*
* 下載模板
*----------------------------------------------------------------------*
FORM temp_excel_get.
DATA: lo_objdata LIKE wwwdatatab,
lo_mime LIKE w3mime,
lc_filename TYPE string VALUE '程序報表管理模版' ,
lc_fullpath TYPE string VALUE'C:\' ,
lc_path TYPE string VALUE'C:\' ,
ls_destination LIKE rlgrap-filename,
ls_objnam TYPE string,
li_rc LIKE sy-subrc,
ls_errtxt TYPE string.
DATA:p_objid TYPE wwwdatatab-objid,
p_dest LIKE sapb-sappfad.
p_objid = 'ZINFO01'. "此處爲EXCEL模板名稱
CALL METHOD cl_gui_frontend_services=>file_save_dialog "調用保存對話框
EXPORTING
default_extension = 'XLS'
default_file_name = lc_filename
CHANGING
filename = lc_filename
path = lc_path
fullpath = lc_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF lc_fullpath = ''.
MESSAGE '不能打開excel' TYPE 'E'.
ENDIF.
IF sy-subrc = 0.
p_dest = lc_fullpath.
* concatenate p_objid '.XLS' into ls_objnam.
CONDENSE ls_objnam NO-GAPS.
SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
* where objid = p_objid.
*檢查表wwwdata中是否存在所指定的模板文件
IF sy-subrc NE 0 OR lo_objdata-objid EQ space."“如果不存在,則給出錯誤提示
CONCATENATE '模板文件' ls_objnam '不存在' INTO ls_errtxt.
MESSAGE ls_errtxt TYPE 'I'.
ENDIF.
ls_destination = p_dest. "”保存路徑
*如果存在,調用DOWNLOAD_WEB_OBJECT 函數下載模板到路徑下
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lo_objdata
destination = ls_destination
IMPORTING
rc = li_rc.
IF li_rc NE 0.
CONCATENATE '模板文件:' ls_objnam '下載失敗' INTO ls_errtxt.
MESSAGE ls_errtxt TYPE 'E'.
ENDIF.
* fname = ls_destination.
ENDIF.
ENDFORM. "fm_excel