SAP 读取EXCEL CSV XML TXT等文件到SAP内表示例
SAP用TEXT_CONVERT_XLS_TO_SAP ALSM_EXCEL_TO_INTERNAL_TABLE 读取EXCEL CSV XML TEXT等文件内容到SAP内表
Step1.获取文件路径
请查看另一篇博客:ABAP 获取文件路径的方法
Step2.读入文件
方法一:函数TEXT_CONVERT_XLS_TO_SAP
TEXT_CONVERT_XLS_TO_SAP函数属于函数组TRUX,其他类似的函数如下
示例:
TYPE-POOLS: TRUXS. PARAMETERS : P_FILE TYPE string. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. DATA: lv_rc TYPE i. DATA: lt_file_table TYPE filetable. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = '打开文件' CHANGING file_table = lt_file_table rc = lv_rc. IF sy-subrc = 0. READ TABLE lt_file_table INTO DATA(wa_file_table) INDEX 1. P_FILE = wa_file_table-filename. ENDIF. START-OF-SELECTION. DATA: lt_raw TYPE truxs_t_text_data. TYPES: BEGIN OF lty_upload, col1 TYPE C LENGTH 20, col2 TYPE C LENGTH 20, END OF lty_upload. DATA: lt_upload TYPE TABLE OF lty_upload. DATA: wa_upload TYPE lty_upload. DATA: lv_file TYPE RLGRAP-FILENAME. lv_file = p_file. "I_FILENAME 接受的类型不为string,所以要把P_file赋值到lv_file 若想直接传值,定义屏幕字段使用PARAMETERS : P_FILE TYPE RLGRAP-FILENAME CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING * I_FIELD_SEPERATOR = I_LINE_HEADER = 'X' I_TAB_RAW_DATA = lt_raw I_FILENAME = lv_file TABLES I_TAB_CONVERTED_DATA = lt_upload * EXCEPTIONS * CONVERSION_FAILED = 1 * OTHERS = 2 . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. LOOP AT lt_upload INTO wa_upload. WRITE:/ wa_upload-col1,wa_upload-col2. ENDLOOP.
运行结果:
方法二:OLE函数ALSM_EXCEL_TO_INTERNAL_TABLE
直接读取到内表
CLASS lcl_excel_uploader DEFINITION. PUBLIC SECTION. DATA: header_rows_count TYPE i. DATA: max_rows TYPE i. DATA: filename TYPE localfile. METHODS: constructor. METHODS: upload CHANGING ct_data TYPE ANY TABLE. PRIVATE SECTION. DATA: lv_tot_components TYPE i. METHODS: do_upload IMPORTING iv_begin TYPE i iv_end TYPE i EXPORTING rv_empty TYPE flag CHANGING ct_data TYPE STANDARD TABLE. ENDCLASS. "lcl_excel_uploader DEFINITION * CLASS lcl_excel_uploader IMPLEMENTATION. METHOD constructor. max_rows = 9999. ENDMETHOD. "constructor METHOD upload. DATA: lo_struct TYPE REF TO cl_abap_structdescr, lo_table TYPE REF TO cl_abap_tabledescr, lt_comp TYPE cl_abap_structdescr=>component_table. lo_table ?= cl_abap_structdescr=>describe_by_data( ct_data ). lo_struct ?= lo_table->get_table_line_type( ). lt_comp = lo_struct->get_components( ). * lv_tot_components = lines( lt_comp ). * DATA: lv_empty TYPE flag, lv_begin TYPE i, lv_end TYPE i. * lv_begin = header_rows_count + 1. lv_end = max_rows. WHILE lv_empty IS INITIAL. do_upload( EXPORTING iv_begin = lv_begin iv_end = lv_end IMPORTING rv_empty = lv_empty CHANGING ct_data = ct_data ). lv_begin = lv_end + 1. lv_end = lv_begin + max_rows. ENDWHILE. ENDMETHOD. "upload * METHOD do_upload. DATA: li_exceldata TYPE STANDARD TABLE OF alsmex_tabline. DATA: ls_exceldata LIKE LINE OF li_exceldata. DATA: lv_tot_rows TYPE i. DATA: lv_packet TYPE i. FIELD-SYMBOLS: <struc> TYPE any, <field> TYPE any. * Upload this packet CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = filename i_begin_col = 1 i_begin_row = iv_begin i_end_col = lv_tot_components i_end_row = iv_end TABLES intern = li_exceldata EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. * something wrong, exit IF sy-subrc NE 0. MESSAGE '导入文件失败,请检查文件是否存在未被锁定!' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. rv_empty = 'X'. ENDIF. * No rows uploaded, exit IF li_exceldata IS INITIAL. MESSAGE '模板为空,请检查模板!' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. rv_empty = 'X'. ENDIF. * Move from Row, Col to Flat Structure LOOP AT li_exceldata INTO ls_exceldata. " Append new row AT NEW row. APPEND INITIAL LINE TO ct_data ASSIGNING <struc>. ENDAT. " component and its value ASSIGN COMPONENT ls_exceldata-col OF STRUCTURE <struc> TO <field>. IF sy-subrc EQ 0. <field> = ls_exceldata-value. ENDIF. " add the row count AT END OF row. IF <struc> IS NOT INITIAL. lv_tot_rows = lv_tot_rows + 1. ENDIF. ENDAT. ENDLOOP. * packet has more rows than uploaded rows, * no more packet left. Thus exit lv_packet = iv_end - iv_begin. IF lv_tot_rows LT lv_packet. rv_empty = 'X'. ENDIF. ENDMETHOD. "do_upload ENDCLASS. "lcl_excel_uploader IMPLEMENTATION TYPE-POOLS: truxs. PARAMETERS : p_file TYPE rlgrap-filename. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. DATA: lv_rc TYPE i. DATA: lt_file_table TYPE filetable. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = '打开文件' CHANGING file_table = lt_file_table rc = lv_rc. IF sy-subrc = 0. READ TABLE lt_file_table INTO DATA(wa_file_table) INDEX 1. p_file = wa_file_table-filename. ENDIF. START-OF-SELECTION. TYPES: BEGIN OF lty_upload, col1 TYPE c LENGTH 20, col2 TYPE c LENGTH 20, col3 TYPE c LENGTH 20, col4 TYPE c LENGTH 20, col5 TYPE c LENGTH 20, END OF lty_upload. DATA: lt_upload TYPE TABLE OF lty_upload, wa_upload TYPE lty_upload. DATA: lo_uploader TYPE REF TO lcl_excel_uploader. CREATE OBJECT lo_uploader. * lo_uploader->max_rows = 10. "设置读取最大行,默认9999 lo_uploader->filename = p_file. lo_uploader->header_rows_count = 1. lo_uploader->upload( CHANGING ct_data = lt_upload ). IF sy-subrc NE 0. MESSAGE '读取数据失败,请检查模板!' TYPE 'E'. ENDIF. LOOP AT lt_upload INTO wa_upload. WRITE:/ wa_upload-col1,wa_upload-col2,wa_upload-col3,wa_upload-col4,wa_upload-col5. ENDLOOP.
运行结果:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
post SAP-Garson
原文链接:https://blog.csdn.net/qq_30797051/article/details/108842856文章来自于网络,如果侵犯了您的权益,请联系站长删除!