SAP ABAP EXCLE_INCLUDE

*&---------------------------------------------------------------------*
*& Include ZINCLUDE_EXCLE
*&---------------------------------------------------------------------*

TYPE-POOLS: icon,slis.

TABLES: sscrfields.

DATA functxt   TYPE smp_dyntxt.


*----------------------------------------------------------------------*
*           SELECTION-SCREEN                                           *
*----------------------------------------------------------------------*
* 工具栏
SELECTION-SCREEN FUNCTION KEY 1.
* 数据导入
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-t01.
* 选择导入文件
PARAMETERS p_file   TYPE rlgrap-filename MODIF ID p1.

SELECTION-SCREEN END OF BLOCK blk01.

*&---文件路径搜索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    CHANGING
      file_name = p_file.


INITIALIZATION.

  PERFORM frm_sub_button.


*&---------------------------------------------------------------------*

*&      Form  frm_sub_button

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM frm_sub_button.

  functxt-icon_id       = icon_export.

  functxt-icon_text     = '下载模板'.

  sscrfields-functxt_01 = functxt.

ENDFORM.                    "frm_sub_button

*&---------------------------------------------------------------------*

*&      Form  frm_dwl_module

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->GV_NAME    text

*----------------------------------------------------------------------*

FORM frm_dwl_module USING gv_name.

  DATA:

    lv_sheet_number TYPE i, "打开的EXCEL的SHEET的名字

    lv_name         LIKE wwwdatatab,

    lv_mime         LIKE w3mime OCCURS 10,

    lv_filename     TYPE string,    "文件名

    lv_path         TYPE string,    "路径

    lv_fullpath     TYPE string,    "全路径

    lv_title        TYPE string.


  lv_name-relid = 'MI'.

  lv_name-objid = gv_name."pv_mname.       "***************这里给定模板的名字*******************

  lv_name-text = sy-title.


  CALL FUNCTION 'WWWDATA_IMPORT'
    EXPORTING
      key               = lv_name
    TABLES
      mime              = lv_mime
    EXCEPTIONS
      wrong_object_type = 1
      import_error      = 2
      OTHERS            = 3.

  IF sy-subrc <> 0.

    STOP.

  ENDIF.

  lv_title = sy-title.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = lv_title
      default_extension    = 'xlsx'
      default_file_name    = lv_title
      file_filter          = '(电子表格EXCEL)'
    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.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename = lv_fullpath
      filetype = 'BIN'
    TABLES
      data_tab = lv_mime.

  IF sy-subrc = 0.

    MESSAGE '导出模板成功.' TYPE 'I'.

  ENDIF.


ENDFORM.                    "frm_dwl_module


*&---------------------------------------------------------------------*

*&      Form  open_dialog

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM open_dialog USING gv_file."选择文件会话。"

  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 gv_file.

  "将选择的文件地址写入到地址栏"

ENDFORM.                    "open_dialog

*&---------------------------------------------------------------------*

*&      Form  sec_get_file

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->GT_TAB     text

*----------------------------------------------------------------------*

FORM sec_get_file TABLES gt_tab USING gv_file gv_line.


  FIELD-SYMBOLS : <fs>.

*  DATA: l_intern LIKE kcde_cells OCCURS 0 WITH HEADER LINE.

  DATA: l_intern LIKE zalsmex_tabline OCCURS 0 WITH HEADER LINE.

  DATA: len_str TYPE i,

        l_index TYPE i,

        lv_line TYPE i.

  TRANSLATE gv_file TO UPPER CASE.

  len_str = strlen( gv_file ).

  len_str = len_str - 4.

  CLEAR gt_tab[].

  lv_line = gv_line.

*  if p_file+len_str(4) ne '.XLS'.

*    concatenate p_file '.XLS' into p_file.

*  endif.

*  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
*  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = gv_file
      i_begin_col             = 1
      i_begin_row             = 1
      i_end_col               = 256
      i_end_row               = 65535
    TABLES
      intern                  = l_intern
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.


  SORT l_intern BY row col.

  DATA: cwts(30).

**&赋值给内表

  LOOP AT l_intern WHERE row > lv_line.


    MOVE l_intern-col TO l_index.

    ASSIGN COMPONENT l_index OF STRUCTURE gt_tab TO <fs>.

    MOVE l_intern-value TO <fs>.

    AT END OF row.

      APPEND gt_tab.

      CLEAR gt_tab.

    ENDAT.

  ENDLOOP.

ENDFORM.                    "sec_get_file

*********************************************************************
以下是使用方法

INCLUDE zinclude_excle.

AT SELECTION-SCREEN OUTPUT.
  PERFORM frm_set_screen.

*&------------------------------------------------------------------------&
*&创建时间:16.09.2021 09:15:07
*&
*&------------------------------------------------------------------------&
FORM frm_set_screen.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'S1'.
        IF r_1 EQ 'X'.
          screen-active  = 0.
        ENDIF.
      WHEN 'P1'.
        IF r_2 EQ 'X'.
          screen-active  = 0.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_dwl_module USING 'ZHRR_9011'.
  ENDCASE.
  
START-OF-SELECTION.
      IF p_file IS INITIAL.
        MESSAGE '请选择导入的文件' TYPE 'E'.
      ENDIF.
      PERFORM sec_get_file TABLES gt_alv USING p_file 2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值