ABAP Excel上传相关函数

EXCEL上传函数:ALSM_EXCEL_TO_INTERNAL_TABLE

注意标准函数中的一个单元格的最大长度是50位,如果想输入更多的值,可以将其复制出来修改

 示例代码如下

  DATA: typedescr_ref TYPE REF TO cl_abap_typedescr.
  DATA: BEGIN OF lt_excel OCCURS 0. "excel上载内表
          INCLUDE STRUCTURE alsmex_tabline.
  DATA: END OF lt_excel.
  FIELD-SYMBOLS: <fs_excel> LIKE LINE OF lt_excel,
                 <fs_value>.
  DATA:lv_kbetr    TYPE char20.
  DATA:lv_date_str TYPE char10.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file2
      i_begin_col             = 1
      i_begin_row             = 2
      i_end_col               = 256
      i_end_row               = 65000
    TABLES
      intern                  = lt_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  SORT lt_excel BY row col.

  LOOP AT lt_excel ASSIGNING <fs_excel>.
    " 将值动态分配
    ASSIGN COMPONENT <fs_excel>-col OF STRUCTURE gs_sea_freight TO <fs_value>.
    IF sy-subrc EQ 0.
      " 通过值获取描述来对数量进行校验
      typedescr_ref = cl_abap_typedescr=>describe_by_data( <fs_value> ).
      IF typedescr_ref->absolute_name = '\TYPE=DATAB' OR typedescr_ref->absolute_name = '\TYPE=DATBI'.
        IF <fs_excel>-value IS NOT INITIAL.
          lv_date_str = <fs_excel>-value.
          PERFORM frm_date_change CHANGING lv_date_str.
          <fs_value> = lv_date_str.
        ENDIF.
      ELSE.
        <fs_value> = <fs_excel>-value.
      ENDIF.


    ENDIF.
    "在行变化的时候 将每行的数据添加到内表
    AT END OF row.

      MOVE-CORRESPONDING gs_sea_freight TO gs_sea_alv.
      gs_sea_alv-kappl = 'M'.
      gs_sea_alv-kschl = 'ZFC1'.
      IF gs_sea_alv-ekorg IS INITIAL .
        gs_sea_alv-msg  = 'Purchasing organization is empty!'.
        gs_sea_alv-icon = icon_red_light.
      ENDIF.
      IF gs_sea_alv-aland IS INITIAL .
        gs_sea_alv-msg  = gs_sea_alv-msg && 'Country is empty!'.
        gs_sea_alv-icon = icon_red_light.
      ENDIF.
      IF gs_sea_alv-inco1 IS INITIAL .
        gs_sea_alv-msg  = gs_sea_alv-msg && 'Incoterms (Part 1) is empty!'.
        gs_sea_alv-icon = icon_red_light.
      ENDIF.
      IF gs_duty_alv-werks IS INITIAL .
        gs_duty_alv-msg  = gs_sea_alv-msg && 'Plant is empty!'.
        gs_duty_alv-icon = icon_red_light.
      ENDIF.
      IF gs_sea_alv-matnr IS NOT INITIAL .
        TRANSLATE gs_sea_alv-matnr TO UPPER CASE.
        gs_sea_alv-matnr = |{ gs_sea_alv-matnr ALPHA = IN }|.
      ELSE.
        gs_sea_alv-msg  = gs_sea_alv-msg && 'Matrial is empty!'.
        gs_duty_alv-icon = icon_red_light.
      ENDIF.
      IF gs_sea_alv-kmein IS NOT INITIAL .
        CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
          EXPORTING
            input          = gs_sea_alv-kmein
            language       = sy-langu
          IMPORTING
            output         = gs_sea_alv-kmein
          EXCEPTIONS
            unit_not_found = 1
            OTHERS         = 2.
        IF sy-subrc <> 0.
* Implement suitable error handling here
        ENDIF.

      ELSE.
      ENDIF.


      IF gs_sea_alv-datab IS NOT INITIAL .
        PERFORM frm_date_change CHANGING gs_sea_alv-datab.
      ELSE.
        gs_sea_alv-msg  = gs_sea_alv-msg && 'Valid From is empty!'.
        gs_sea_alv-icon = icon_red_light.
      ENDIF.
      IF gs_sea_alv-datbi IS  INITIAL .
       gs_sea_alv-datbi = '99991231'.
      ENDIF.

      APPEND gs_sea_alv TO gt_sea_alv.
      CLEAR: gs_sea_alv,gs_sea_freight.
    ENDAT.
  ENDLOOP.

选择屏幕文件的F4搜索帮助示例代码

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
  PERFORM frm_get_excel USING p_file1.

FORM frm_get_excel  USING    p_file.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_path         = 'C:\'
      mask             = 'Excel(*.xls;*.xlsx)|*.XLSX;*.XLS;'
      title            = 'Choose File'
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0 AND sy-subrc <> 3.
    MESSAGE e001(00) WITH 'Choose file error'.
  ENDIF.
ENDFORM.

选择屏幕下载模板示例代码


SELECTION-SCREEN END OF BLOCK bk1.


SELECTION-SCREEN: FUNCTION KEY 1.

INITIALIZATION.
  functxt-icon_id   = icon_export.
  functxt-quickinfo = 'Template download'.
  functxt-icon_text = 'Template download'.
  sscrfields-functxt_01 = functxt.


AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      IF p_r1 IS NOT INITIAL .
        PERFORM frm_download_template USING p_file1
                                            'ZMM005'
                                            'Duty Upload Template_'.
      ENDIF.
      IF p_r2 IS NOT INITIAL .
        PERFORM frm_download_template USING p_file2
                                            'ZMM006'
                                            'Sea Freight Upload Template_'.
      ENDIF.
      IF p_r3 IS NOT INITIAL .
        PERFORM frm_download_template USING p_file3
                                            'ZMM007'
                                            'Inbound Cost Upload Template_'.
      ENDIF.
  ENDCASE.




*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_FILE
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_download_template  USING    p_file
                                     VALUE(p_objid)
                                     VALUE(p_name)
  .
  DATA: l_wa_objdata   TYPE wwwdatatab,
        l_dl_filename  TYPE rlgrap-filename,
        l_filename     TYPE string,
        l_path         TYPE string,
        l_fullpath     TYPE string,
        l_default_name TYPE string.

  CONCATENATE p_name sy-datum INTO l_default_name .

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_extension    = 'xlsx'
      default_file_name    = l_default_name
      file_filter          = '*.xlsx'
    CHANGING
      filename             = l_filename
      path                 = l_path
      fullpath             = l_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CHECK NOT l_fullpath IS INITIAL.


  l_dl_filename = l_fullpath.

  l_wa_objdata-relid = 'MI'.
  l_wa_objdata-objid = p_objid.

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = l_wa_objdata
      destination = l_dl_filename.

  p_file = l_dl_filename.
ENDFORM.

导入模板事物代码 SMW0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值