ABAP - SMW0 EXCEL模板下载 和 EXCEL文件上传与解析(超详细教程)

  • 关于给报表做模板下载和文件上传的功能ABAPER是最熟悉不过的了,于是乎整理一下下,方便以后用到.
  • 报表大概长这样:

                                                      

  • 按照业务顾问讲的需求,用户先点击模板下载按钮,下载模板填数据后,在报表界面的文件上传模板,然后执行。
  • 根据需求是先完成模板下载的实现:在SMW0上传准备好的模板,然后在程序处理。
  • SMW0操作步骤:输入TCODE:SMW0

  •  现在是可以进行报表的开发了
  • 示例代码:
TABLES ekpo.

TABLES sscrfields.

PARAMETERS: p_file LIKE rlgrap-filename." obligatory.

SELECTION-SCREEN FUNCTION KEY 1.           "第一个按钮

INITIALIZATION.
  sscrfields-functxt_01 = '模板下载'.      "定义第一个按钮文本

** 给p_file绑定事件
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM frm_selectfile CHANGING p_file.  "文件上传处理的FROM

AT SELECTION-SCREEN.
** 按钮命令事件处理  按钮功能
  CASE sscrfields-ucomm.
    WHEN 'FC01'.                           
      PERFORM frm_temp_download.           "模板下载处理的FROM
  ENDCASE.

START-OF-SELECTION.
  IF p_file NE ''.
    PERFORM frm_get_data_file.            "文件内容处理的FROM
  ELSE.
    MESSAGE '请先上传文件' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.

FORM frm_selectfile CHANGING cv_selfile LIKE rlgrap-filename.
  DATA: lv_rc        TYPE i,
        lt_filetable TYPE filetable.

  DATA lv_file_filter TYPE string.
  DATA lv_window_title TYPE string.

  lv_window_title = '请选择导入Excel文件'."'请选择导入Excel文件'
  lv_file_filter = 'Excel(*.XLSX)|*.XLSX|全部文件 (*.*)|*.*|'."'Excel(*.XLSX)|*.XLSX|全部文件 (*.*)|*.*|'

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            = lv_window_title
      file_filter             = lv_file_filter
      multiselection          = space
    CHANGING
      file_table              = lt_filetable
      rc                      = lv_rc
    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 '文件上传失败' TYPE 'E'.
  ENDIF.
ENDFORM.                    "SELECT_FILE


FORM frm_temp_download .
  DATA: ls_wwwdatatab     LIKE wwwdatatab,
        lt_mime           LIKE w3mime OCCURS 10,
        lv_filename       TYPE string,
        lv_path           TYPE string,
        lv_fullpath       TYPE string,
        window_title      TYPE string,
        default_file_name TYPE string.
  DATA: lv_destination TYPE rlgrap-filename,
        lv_subrc       TYPE sy-subrc.

  CLEAR: ls_wwwdatatab,lt_mime[],lv_filename,lv_path,lv_fullpath,window_title,default_file_name.
  CLEAR: lv_destination,lv_subrc.
  ls_wwwdatatab-relid = 'MI'.
  ls_wwwdatatab-objid = 'ZMM_XX'.                        "这里写入TCODE:SMW0上传的对象
  ls_wwwdatatab-text  = 'XXXX模板关系(ZACE06)'.
  window_title = '下载导入模板'.
  default_file_name = 'XXXX模板关系(ZACE06)'.

  CALL FUNCTION 'WWWDATA_IMPORT'                          "#EC *
    EXPORTING
      key               = ls_wwwdatatab
    TABLES
      mime              = lt_mime
    EXCEPTIONS
      wrong_object_type = 1
      import_error      = 2
      OTHERS            = 3.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = window_title
      default_extension    = 'xlsx'
      default_file_name    = default_file_name
    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.

  IF sy-subrc <> 0.
    STOP.
  ENDIF.

  IF lv_fullpath IS NOT INITIAL.
    lv_destination = lv_fullpath.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = ls_wwwdatatab
        destination = lv_destination
      IMPORTING
        rc          = lv_subrc.
    IF lv_subrc = 0.
      MESSAGE '模板下载成功' TYPE 'S'.
    ELSE.
      MESSAGE '模板下载失败' TYPE 'E'.
    ENDIF.
  ENDIF.
ENDFORM.

FORM frm_get_data_file .

  DATA: lt_raw TYPE truxs_t_text_data.
  TYPES: BEGIN OF ty_datatab,
           fd01 TYPE string,    "存放第一列数据的字段
           fd02 TYPE string,    "存放第二列数据的字段
           fd03 TYPE string,    "存放第三列数据的字段
           fd04 TYPE string,    "存放第四列数据的字段
         END OF ty_datatab.

  DATA lt_datatab TYPE TABLE OF ty_datatab.
  DATA lw_datatab TYPE ty_datatab.

  REFRESH: lt_datatab[],lt_raw[].

** 调用函数将Excel内容保存到内表
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_line_header        = 'X'
      i_tab_raw_data       = lt_raw
      i_filename           = p_file
    TABLES
      i_tab_converted_data = lt_datatab
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE '获取文件数据失败' TYPE 'I'.
    STOP.
  ENDIF.

  LOOP AT lt_datatab INTO lw_datatab.

  ENDLOOP.

ENDFORM.

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值