ABAP EXCEL 批导模板

选择屏幕 

* 文件导入
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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值