*----------------------- 上传 Example 1 ----------------------------------
假设有数据在excel中如下:
sname sno sex
孙晓磊 001 男
周杰伦 002 男
阿猫 003 女
阿狗 004 男
DATA: gt_data TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF ty_itab,
sname(10),
sno(10),
sex(3),
END OF ty_itab.
DATA: wa TYPE ty_itab,
itab TYPE TABLE OF ty_itab."定义的这个内表结构要与excel表完全一样
PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mask = ',Excel Files,*.xls,All Files,*.*.'(101)
title = '选择文件'(100)
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 3.
MESSAGE e100(zdev) WITH '选择文件出错!'(007).
ENDIF.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' "读取excel文件中的内容
EXPORTING
filename = p_file
i_begin_col = '1'
i_begin_row = '1'
i_end_col = '50'
i_end_row = '5000'
TABLES
intern = gt_data.
SORT gt_data BY row col value.
*---整理到内表数据
LOOP AT gt_data.
CASE gt_data-col.
WHEN 1.
wa-sname = gt_data-value.
WHEN 2.
wa-sno = gt_data-value.
WHEN 3.
wa-sex = gt_data-value.
APPEND wa TO itab."对于这个例子,excel表有3列,append要加在最后一列.
CLEAR wa.
ENDCASE.
ENDLOOP.
LOOP AT itab INTO wa.
WRITE:/ wa-sname,wa-sno,wa-sex.
ULINE.
ENDLOOP.
*----------------------- 上传 Example 2 ----------------------------------
TYPE-POOLS: truxs.
TYPES: BEGIN OF t_datatab,"只记录excel文件的前四列
col1(30) TYPE c,
col2(30) TYPE c,
col3(30) TYPE c,
col4(30) TYPE c,
END OF t_datatab.
DATA: it_datatab TYPE STANDARD TABLE OF t_datatab,
wa_datatab TYPE t_datatab.
DATA: it_raw TYPE truxs_t_text_data.
PARAMETERS: p_file TYPE rlgrap-filename.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
START-OF-SELECTION.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = 'X' "带表头的,占一行,这一行不会读到内表
i_tab_raw_data = it_raw "WORK TABLE
i_filename = p_file "读这个文件时要保证它没有被打开
TABLES
i_tab_converted_data = it_datatab[] "ACTUAL DATA
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT it_datatab INTO wa_datatab.
CONDENSE wa_datatab.
WRITE:/ wa_datatab-col1,
wa_datatab-col2,
wa_datatab-col3,
wa_datatab-col4.
ENDLOOP.
*----------------------- 下载 Example ----------------------------------
TYPE-POOLS: abap.
DATA: fullpath TYPE string,
filename TYPE string,
path TYPE string,
user_action TYPE i,
encoding TYPE abap_encoding.
PARAMETERS: p_file TYPE string DEFAULT 'C:\ABC.xls'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '下载到本地文件'
default_extension = 'XLS' "缺省文件类型
default_file_name = '默认文件名称'
file_filter = '文本文件(*.TXT)|*.TXT|Excel 文件 (*.XLS)|*.XLS;*.XLSX|所有文件 (*.*)|*.*|'
with_encoding = 'X'
initial_directory = 'C:\'
CHANGING
filename = filename "获得用户输入文件名
path = path "获得用户所选路径
fullpath = fullpath "路径加文件名
user_action = user_action
file_encoding = encoding.
IF sy-subrc <> 0 OR user_action <> cl_gui_frontend_services=>action_ok.
EXIT.
ENDIF.
DATA: itab TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.
SELECT * FROM spfli INTO TABLE itab.
DATA filename2 TYPE rlgrap-filename.
filename2 = fullpath.
CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
EXPORTING
i_field_seperator = 'X' "字段分隔开
i_filename = filename2
TABLES
i_tab_sap_data = itab.
假设有数据在excel中如下:
sname sno sex
孙晓磊 001 男
周杰伦 002 男
阿猫 003 女
阿狗 004 男
DATA: gt_data TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF ty_itab,
sname(10),
sno(10),
sex(3),
END OF ty_itab.
DATA: wa TYPE ty_itab,
itab TYPE TABLE OF ty_itab."定义的这个内表结构要与excel表完全一样
PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mask = ',Excel Files,*.xls,All Files,*.*.'(101)
title = '选择文件'(100)
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 3.
MESSAGE e100(zdev) WITH '选择文件出错!'(007).
ENDIF.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' "读取excel文件中的内容
EXPORTING
filename = p_file
i_begin_col = '1'
i_begin_row = '1'
i_end_col = '50'
i_end_row = '5000'
TABLES
intern = gt_data.
SORT gt_data BY row col value.
*---整理到内表数据
LOOP AT gt_data.
CASE gt_data-col.
WHEN 1.
wa-sname = gt_data-value.
WHEN 2.
wa-sno = gt_data-value.
WHEN 3.
wa-sex = gt_data-value.
APPEND wa TO itab."对于这个例子,excel表有3列,append要加在最后一列.
CLEAR wa.
ENDCASE.
ENDLOOP.
LOOP AT itab INTO wa.
WRITE:/ wa-sname,wa-sno,wa-sex.
ULINE.
ENDLOOP.
*----------------------- 上传 Example 2 ----------------------------------
TYPE-POOLS: truxs.
TYPES: BEGIN OF t_datatab,"只记录excel文件的前四列
col1(30) TYPE c,
col2(30) TYPE c,
col3(30) TYPE c,
col4(30) TYPE c,
END OF t_datatab.
DATA: it_datatab TYPE STANDARD TABLE OF t_datatab,
wa_datatab TYPE t_datatab.
DATA: it_raw TYPE truxs_t_text_data.
PARAMETERS: p_file TYPE rlgrap-filename.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
START-OF-SELECTION.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = 'X' "带表头的,占一行,这一行不会读到内表
i_tab_raw_data = it_raw "WORK TABLE
i_filename = p_file "读这个文件时要保证它没有被打开
TABLES
i_tab_converted_data = it_datatab[] "ACTUAL DATA
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT it_datatab INTO wa_datatab.
CONDENSE wa_datatab.
WRITE:/ wa_datatab-col1,
wa_datatab-col2,
wa_datatab-col3,
wa_datatab-col4.
ENDLOOP.
*----------------------- 下载 Example ----------------------------------
TYPE-POOLS: abap.
DATA: fullpath TYPE string,
filename TYPE string,
path TYPE string,
user_action TYPE i,
encoding TYPE abap_encoding.
PARAMETERS: p_file TYPE string DEFAULT 'C:\ABC.xls'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '下载到本地文件'
default_extension = 'XLS' "缺省文件类型
default_file_name = '默认文件名称'
file_filter = '文本文件(*.TXT)|*.TXT|Excel 文件 (*.XLS)|*.XLS;*.XLSX|所有文件 (*.*)|*.*|'
with_encoding = 'X'
initial_directory = 'C:\'
CHANGING
filename = filename "获得用户输入文件名
path = path "获得用户所选路径
fullpath = fullpath "路径加文件名
user_action = user_action
file_encoding = encoding.
IF sy-subrc <> 0 OR user_action <> cl_gui_frontend_services=>action_ok.
EXIT.
ENDIF.
DATA: itab TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.
SELECT * FROM spfli INTO TABLE itab.
DATA filename2 TYPE rlgrap-filename.
filename2 = fullpath.
CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
EXPORTING
i_field_seperator = 'X' "字段分隔开
i_filename = filename2
TABLES
i_tab_sap_data = itab.
保存文件对话框
( Fri, 8 Jul 2011 11:49:46 +0800 )
Description:
TYPE-POOLS: abap.
DATA: fullpath TYPE string,
filename TYPE string,
path TYPE string,
user_action TYPE i,
encoding TYPE abap_encoding.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '下载到本地文件'
default_extension = 'XLS' "缺省文件类型
default_file_name = '默认文件名称'
file_filter = '文本文件(*.TXT)|*.TXT|Excel 文件 (*.XLS)|*.XLS;*.XLSX|所有文件 (*.*)|*.*|'
with_encoding = 'X'
initial_directory = 'C:\'
CHANGING
filename = filename "获得用户输入文件名
path = path "获得用户所选路径
fullpath = fullpath "路径加文件名
user_action = user_action
file_encoding = encoding.
IF sy-subrc <> 0 OR user_action <> cl_gui_frontend_services=>action_ok.
EXIT.
ENDIF.
TYPE-POOLS: abap.
DATA: fullpath TYPE string,
filename TYPE string,
path TYPE string,
user_action TYPE i,
encoding TYPE abap_encoding.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '下载到本地文件'
default_extension = 'XLS' "缺省文件类型
default_file_name = '默认文件名称'
file_filter = '文本文件(*.TXT)|*.TXT|Excel 文件 (*.XLS)|*.XLS;*.XLSX|所有文件 (*.*)|*.*|'
with_encoding = 'X'
initial_directory = 'C:\'
CHANGING
filename = filename "获得用户输入文件名
path = path "获得用户所选路径
fullpath = fullpath "路径加文件名
user_action = user_action
file_encoding = encoding.
IF sy-subrc <> 0 OR user_action <> cl_gui_frontend_services=>action_ok.
EXIT.
ENDIF.