选择屏幕
* 文件导入
PARAMETERS P_1 TYPE STRING .
"对字段P_1做搜索帮助并获取文件路径赋值给P_1
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_1.
DATA :
lt_file TYPE filetable, " 存文件名的内表
* LS_FILE_TABLE LIKE LINE OF LT_TAB, " 用来读取文件名的结构
lv_rc TYPE i. " 返回值
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = '选择导入文件' "对话框标题
* DEFAULT_EXTENSION = 默认的文件后缀名
* DEFAULT_FILENAME = 默认打开的文件名
* FILE_FILTER =
* WITH_ENCODING =
initial_directory = 'C:/' "默认打开文件路径
* MULTISELECTION = 是否可以同时打开多个文件 通过ABAP_TRUE控制
CHANGING
file_table = lt_file
rc = lv_rc
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 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.
ELSE.
READ TABLE lt_file INTO p_1 INDEX 1. "得到文件路径后赋值给PARAMETERS
ENDIF.
START-OF-SELECTION.
DATA:
t_lt_intern TYPE TABLE OF kcde_intern_struc, "储存EXCEL上传值的内表
ls_intern TYPE kcde_intern_struc, "用来将EXCEL上传值循环到储存ALV展示数据的内表
lv_col_pos TYPE i, "设置宏的变量
e_lv_file TYPE string, "用来接PARAMETERS的文件名
lv_file TYPE rlgrap-filename,
rr_lv_result TYPE abap_bool, "参照类型组
e_lv_filename TYPE rlgrap-filename, "用来接内表名
lv_message TYPE string. "拼接消息类型
DATA: lv_datum TYPE sy-datum.
*选择屏幕文件路径
lv_file = p_1.
*判断文件路径是否存在
* 传值临时转换下string
e_lv_file = p_1.
* 文件路径检查
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = e_lv_file "文件名路径
RECEIVING
result = rr_lv_result "返回消息
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
* 判断返回值等于空的情况报错 如果文件路径存在返回值为 X
IF rr_lv_result <> abap_true.
CONCATENATE '文件路径' p_1 '不存在' INTO lv_message.
"将文件路径与002消息内容拼接 002消息内柔为:文件路径&1不存在。
* MESSAGE E002(ZMM1_ZX) WITH P_1.
MESSAGE lv_message TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
DATA: excel TYPE ole2_object,
lv_index TYPE i.
DATA: lt_excel LIKE TABLE OF alsmex_tabline,
ls_excel LIKE alsmex_tabline.
FIELD-SYMBOLS: <fs>.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = lv_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 19
i_end_row = 9999
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
* SET PROPERTY OF EXCEL 'DisplayAlerts' = 0.
SORT lt_excel BY row col.
LOOP AT lt_excel INTO ls_excel.
ON CHANGE OF ls_excel-row.
IF sy-tabix NE 1.
APPEND gs_data TO gt_data. " 内表字段顺序 一定要与EXCEL 顺序相同
CLEAR gs_data.
ENDIF.
ENDON.
* lv_index = lv_index + 1.
IF ls_excel-col = 13.
PERFORM get_date CHANGING ls_excel-value.
gs_data-zkmsj = ls_excel-value.
CLEAR lv_datum.
ELSE.
ASSIGN COMPONENT ls_excel-col OF STRUCTURE gs_data TO <fs>.
<fs> = ls_excel-value.
ENDIF.
CLEAR ls_excel.
ENDLOOP.
* 最后一条添加
APPEND gs_data TO gt_data.