今天给大家分享一个函数,可以用来下载Excel和TXT格式的文件,非常好用
所需的变量:
DATA:
lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_destination LIKE rlgrap-filename,
ls_objdata LIKE wwwdatatab,
lv_objid TYPE wwwdatatab-objid,
lv_fname TYPE string.
首先调用一个类的方法,用来选取我们下载的保存的地址:
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_file_name = lv_fname
window_title = '另存为:'
default_extension = 'xls' "默认保存的类型
file_filter = '.xls' "选择要另存的文件类型
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
在使用这个GUI_DOWNLOAD
函数下载Excel需要指定一个抬头文本.
FORM frm_excel_head.
DATA:lt_fieldcat TYPE lvc_t_fcat,
ls_fieldcat TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZMM001' "需要获取这个结构字段吗文本
i_bypassing_buffer = 'X'
CHANGING
ct_fieldcat = lt_fieldcat[] "获取到的字段和描述
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
*在这里我就拿到了 字段以及字段描述,我们只需要字段描述 通过下面的循环 可自定义获取字段描述
*或者删除某些不需要的字段
*DELETE lt_fieldcat WHERE fieldnames = 'SEL' .
LOOP AT lt_fieldcat INTO ls_fieldcat.
gs_head-fieldname = ls_fieldcat-scrtext_l.
APPEND gs_head TO gt_head.
CLEAR gs_head.
ENDLOOP.
ENDFORM.
接下来我们调用下载的函数:
*可以判断 lv_filename 这个参数 来确定 他在另存时候是否选择了路径或取消了
IF lv_filename IS NOT INITIAL .
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename "文件名
filetype = 'ASC' "文件类型
write_field_separator = 'X'
codepage = '8404' "gbk格式
TABLES
data_tab = gt_xml "下载的数据
FIELDNAMES = gt_head "抬头
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.
ELSE.
MESSAGE '已取消下载!' TYPE 'E' .
ENDIF.