ABAP将Excel导入SAP数据表

如何将Excel导入SAP系统,在sap可执行程序中可以通过调用函数ALSM_EXCEL_TO_INTERNAL_TABLE实现。
实现简单效果如下:
在这里插入图片描述
选择文件:
在这里插入图片描述
点击选择后,文件地址会写入地址栏:
在这里插入图片描述
最后点击执行:
在这里插入图片描述
具体代码如下:
REPORT ztest_xt2.

TABLES: zschool.

"假设我们要上传的内容有三个字段:学校ID,名称,地址。然后定义类型。 重点:与EXCEL表的要完全对应上
TYPES:BEGIN OF ty_school,

  •    mandt  TYPE sy-mandt ,          "客户端号
      zsid   TYPE zschool-zsid,       "学校ID
      zsname TYPE zschool-zsname,     "名称
      zsadd  TYPE zschool-zsadd,      "地址
    END OF ty_school.
    

“定义参照TY_SCHOOL类型的内表和工作区,用于暂存取到的Excel内容”
DATA:lt_school TYPE TABLE OF ty_school,
ls_school TYPE ty_school.

“定义内表,用于insert或modify透明表内容”
DATA:gt_school TYPE TABLE OF zschool, “直接参照透明表”
gs_school TYPE zschool.

“选择屏幕”
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS p_file(80). “地址栏”
SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM open_dialog.“调用选择文件函数”

AT SELECTION-SCREEN.“用于屏幕输入检验”

IF p_file IS INITIAL.
MESSAGE ‘文件地址不可为空!’ TYPE ‘S’ DISPLAY LIKE ‘E’.
STOP.
ENDIF.

START-OF-SELECTION.

PERFORM upload.

END-OF-SELECTION.

FORM open_dialog.“选择文件会话。”
DATA:lt_file_table TYPE filetable.
DATA:lw_file_table TYPE file_table.
DATA:l_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = ‘选择文件’
default_filename = ‘*.XLSX’ “默认excel文件”
initial_directory = 'D:\ ’ “默认打开D盘,也可以默认空”
multiselection = ‘’ “文件单选”
CHANGING
file_table = lt_file_table
rc = l_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.

CHECK l_rc EQ 1.“因为文件单选,所以这里判断一下选择的数量为1”

READ TABLE lt_file_table INDEX 1 INTO p_file. “将选择的文件地址写入到地址栏”

ENDFORM.

FORM upload. "最后也是最关键的一步
"定义表格结构内表,ALSMEX_TABLINE是具有Excel数据的表行,有三个组件,row col value 。
DATA: i_excel TYPE TABLE OF alsmex_tabline, "表格结构。
w_excel TYPE alsmex_tabline.

DATA:get_file TYPE rlgrap-filename.“这里参照系统中的结构字段。”
MOVE p_file TO get_file.“将地址栏的值赋值给GET_FILE”

“调用此函数,将Excel中的内容以类似坐标的形式存储到I_excel内表中。”
CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
EXPORTING
filename = get_file
i_begin_col = 1
i_begin_row = 1
i_end_col = 8
i_end_row = 65535
TABLES
intern = i_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.

DELETE i_excel WHERE row = 1.“删除第一行抬头。如果excel文件中不存在抬头的话,可不写此句。”

IF i_excel IS INITIAL.
CALL FUNCTION ‘POPUP_TO_CONFIRM_WITH_MESSAGE’
EXPORTING

  •   DEFAULTOPTION = 'Y'
      diagnosetext1 = '数据错误'
    
  •   DIAGNOSETEXT2 = ' '
    
  •   DIAGNOSETEXT3 = ' '
      textline1     = 'Excel表格中没有内容!'
      titel         = '提示'.
    

    RETURN.
    ENDIF.

    CLEAR:lt_school.
    FIELD-SYMBOLS:. "这里涉及到SAP内部字段的使用。
    SORT i_excel BY row col.
    DATA:num_col TYPE i.

    LOOP AT i_excel INTO w_excel.
    num_col = w_excel-col.
    ASSIGN COMPONENT num_col OF STRUCTURE ls_school TO .
    = w_excel-value.
    AT END OF row.
    APPEND ls_school TO lt_school.
    CLEAR:ls_school.
    ENDAT.
    CLEAR:w_excel.
    ENDLOOP.

    LOOP AT lt_school INTO ls_school.
    gs_school-mandt = sy-mandt.“客户端号,创建透明表必须包含的字段。”
    gs_school-zsid = ls_school-zsid.
    gs_school-zsname = ls_school-zsname.
    gs_school-zsadd = ls_school-zsadd.
    APPEND gs_school TO gt_school.
    CLEAR:gs_school.
    CLEAR:ls_school.
    ENDLOOP.

    “将数据库中内容更新”
    MODIFY zschool FROM TABLE gt_school.“这里使用modify,兼顾增加和修改,若主键存在则为修改,否则增加”
    IF sy-subrc = 0.
    COMMIT WORK AND WAIT.“成功提交,或者最后程序结束系统也会自动提交”
    DATA:num_tab(6) TYPE c.
    DESCRIBE TABLE gt_school LINES num_tab.
    CONDENSE num_tab NO-GAPS.
    DATA:str_line1 TYPE string .
    CONCATENATE ‘成功导入数据’ num_tab ‘行’ INTO str_line1 .
    “读出excel中的数据条数,用于消息提示”
    CALL FUNCTION ‘POPUP_TO_CONFIRM_WITH_MESSAGE’
    EXPORTING
    diagnosetext1 = ‘成功’
    textline1 = str_line1
    titel = ‘提示’.
    ELSE.
    ROLLBACK WORK.“否则失败”
    ENDIF.

ENDFORM.

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值