欢迎来到萧静默的博客

书山有路勤为径,学海无涯苦作舟。

ABAP封装模板上传下载

1、代码如下

REPORT 11.
*&---------------------------------------------------------------------*
*& 包含               ZBP_CREATE_CHANGE_CLS
*&---------------------------------------------------------------------*
CLASS cl_bc_excel DEFINITION.

  PUBLIC SECTION.
  TYPES:BEGIN OF ty_excel_tabline,
    row   TYPE numc06,
    col   TYPE numc06,
    VALUE TYPE text4096,
  END OF ty_excel_tabline,
  ty_t_excel_tabline TYPE TABLE OF ty_excel_tabline.
  DATA lt_excel_tabline TYPE  ty_t_excel_tabline.
  TYPES: zchar30000 TYPE C LENGTH 30000."每一行数据为30000字符 上限

  CLASS-METHODS f4_file_excel "获取 excel 路径
  IMPORTING
    VALUE(iv_window_title)   TYPE string OPTIONAL
    VALUE(iv_file_filter)    TYPE string OPTIONAL
    VALUE(iv_multiselection) TYPE char01 OPTIONAL
  EXPORTING
    !ev_rc                   TYPE I
    !et_file_table           TYPE filetable
  CHANGING
    VALUE(cv_file_name)      TYPE localfile .
  CLASS-METHODS download_web_object "下载对象 SMW0
  IMPORTING
    VALUE(iv_relid)             TYPE indx_relid DEFAULT 'MI'
    VALUE(iv_objid)             TYPE w3objid
    VALUE(iv_window_title)      TYPE string OPTIONAL
    VALUE(iv_default_extension) TYPE string OPTIONAL
    VALUE(iv_file_filter)       TYPE string OPTIONAL
    VALUE(iv_default_file_name) TYPE string OPTIONAL
  EXPORTING
    !ev_rc                      TYPE sy-subrc
    !ev_filepath                TYPE string .
  CLASS-METHODS download_template "下载模板
  IMPORTING
    VALUE(name_of_template) TYPE char100
    VALUE(iv_relid)         TYPE indx_relid DEFAULT 'MI'
    VALUE(iv_objid)         TYPE w3objid
  EXPORTING
    VALUE(rv_filepath)      TYPE string
  EXCEPTIONS
    download_error .

  CLASS-METHODS update_excel_ole "上载excel
  IMPORTING
    REFERENCE(pi_filename)           TYPE  string
    REFERENCE(pi_sheetname)          TYPE  string DEFAULT 'Sheet1'
    REFERENCE(pi_startline)          TYPE  I DEFAULT '1'
    REFERENCE(pi_startcolumn)        TYPE  I DEFAULT '1'
    REFERENCE(pi_every_copy_endline) TYPE I DEFAULT '3000'
    REFERENCE(pi_endcolumn)          TYPE I DEFAULT '256'
    REFERENCE(pi_skpcl_tbl)          TYPE  I DEFAULT '0'
  CHANGING
    VALUE(pt_tab)                    TYPE ANY TABLE
  EXCEPTIONS
    open_file_err.

  CLASS-METHODS excel_2_inner_table  "将excel 导入内表
  IMPORTING
    VALUE(pi_filename)           TYPE  string
    VALUE(pi_sheetname)          TYPE  string DEFAULT 'Sheet1'
    VALUE(pi_every_copy_endline) TYPE I DEFAULT '3000'
    VALUE(pi_endcolumn)          TYPE I DEFAULT '256'
  CHANGING
    VALUE(pt_tab)                TYPE ANY TABLE
  EXCEPTIONS
    file_open_error
    PROTECTED SECTION.

  CLASS-METHODS download_to_excel "下载内表到excel
  IMPORTING
    VALUE(sheet_name)  TYPE  char20 DEFAULT 'DATA'
    VALUE(excel_id)    TYPE  w3objid
    VALUE(path)        TYPE  localfile
    VALUE(excel_fname) TYPE  char30
    VALUE(show_excel)  TYPE  char1 OPTIONAL
  EXPORTING
    VALUE(e_message)   TYPE char100
  CHANGING
    VALUE(i_data)      TYPE ty_t_excel_tabline
  EXCEPTIONS
    excel_error.

  PRIVATE SECTION.

ENDCLASS.

CLASS cl_bc_excel IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_BC_EXCEL=>DOWNLOAD_TEMPLATE
* +-------------------------------------------------------------------------------------------------+
* | [--->] NAME_OF_TEMPLATE               TYPE        CHAR100
* | [--->] IV_RELID                       TYPE        INDX_RELID (default ='MI')
* | [--->] IV_OBJID                       TYPE        W3OBJID
* | [<---] RV_FILEPATH                    TYPE        STRING
* | [EXC!] DOWNLOAD_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD download_template.
*  DATA: lv_objid TYPE wwwdatatab-objid VALUE 'ZMM004'.
    DATA: lv_default_file_name TYPE string.
    DATA: lv_rc TYPE sy-subrc.
*  DATA: lv_filepath TYPE string.

    CONCATENATE name_of_template '-' sy-datum+0(8) sy-timlo+0(4)
    INTO lv_default_file_name.

    CALL METHOD cl_bc_excel=>download_web_object
    EXPORTING
      iv_relid             = iv_relid
      iv_objid             = iv_objid
      iv_default_file_name = lv_default_file_name
    IMPORTING
      ev_rc                = lv_rc
      ev_filepath          = rv_filepath.
    IF lv_rc <> 0.
      RAISE download_error.
    ENDIF.
  ENDMETHOD.

  METHOD download_web_object.
    DATA: ls_key         TYPE wwwdatatab,
          ls_wwwdata     TYPE wwwdata,
          lv_filename    TYPE string,
          lv_path        TYPE string,
          lv_fullpath    TYPE string,
          lv_extension   TYPE C LENGTH 100,
          lv_user_action TYPE I.
    DATA: lv_offset TYPE I,
          lv_length TYPE I.
    CLEAR ev_filepath.
    IF iv_relid IS INITIAL.
      SELECT SINGLE relid objid srtf2 checkout checknew chname tdate ttime TEXT
      INTO CORRESPONDING FIELDS OF ls_wwwdata
      FROM wwwdata
      WHERE objid = iv_objid.
      iv_relid = ls_wwwdata-relid.
    ELSE.
      SELECT SINGLE relid objid srtf2 checkout checknew chname tdate ttime TEXT
      INTO CORRESPONDING FIELDS OF ls_wwwdata
      FROM wwwdata
      WHERE relid = iv_relid AND objid = iv_objid.
    ENDIF.
    IF iv_window_title IS INITIAL.
      iv_window_title = '请选择文件存储路径...'(001).
    ENDIF.
*    IF iv_file_filter IS INITIAL.
*      iv_file_filter = '(*.xls)|*.xls'.
*    ENDIF.
*    IF iv_default_extension IS INITIAL.
*      iv_default_extension = '.xls'.
*    ENDIF.
    IF iv_default_extension IS INITIAL.
      CALL FUNCTION 'WWWPARAMS_READ'
      EXPORTING
        relid            = ls_wwwdata-relid
        objid            = ls_wwwdata-objid
        name             = 'fileextension' "c_extension of include LSHTMTOP
      IMPORTING
        VALUE            = lv_extension
      EXCEPTIONS
        entry_not_exists = 1
        OTHERS           = 2.
      IF sy-subrc <> 0.
      ENDIF.
      iv_default_extension = lv_extension.
    ENDIF.
    IF iv_file_filter IS INITIAL.
      iv_file_filter = '(*' && iv_default_extension && ')|*' && iv_default_extension.
    ENDIF.
    IF iv_default_file_name IS INITIAL.
      iv_default_file_name = ls_wwwdata-TEXT.
    ELSE.
      WHILE iv_default_file_name CA './'.
        lv_offset = sy-fdpos.
        lv_length = lv_offset.
        lv_offset = lv_offset + 1.
        iv_default_file_name = iv_default_file_name+0(lv_length) && iv_default_file_name+lv_offset.
      ENDWHILE.
    ENDIF.

    ls_key-relid = iv_relid.
    ls_key-objid = iv_objid.
    "File path of selection
    CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = iv_window_title
      default_extension    = iv_default_extension
      default_file_name    = iv_default_file_name
      file_filter          = iv_file_filter
    CHANGING
      filename             = lv_filename
      path                 = lv_path
      fullpath             = lv_fullpath
      user_action          = lv_user_action
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
    IF sy-subrc <> 0.
      ev_rc = sy-subrc.
      RETURN.
*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    IF lv_user_action <> 0.
      ev_rc = lv_user_action.
      RETURN.
    ENDIF.

    ev_filepath = lv_fullpath.
    "Download web object
    DATA: lv_destination TYPE rlgrap-filename.
    lv_destination = ev_filepath.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         = ls_key
      destination = lv_destination
    IMPORTING
      rc          = ev_rc
    CHANGING
      temp        = lv_destination.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_BC_EXCEL=>F4_FILE_EXCEL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_WINDOW_TITLE                TYPE        STRING(optional)
* | [--->] IV_FILE_FILTER                 TYPE        STRING(optional)
* | [--->] IV_MULTISELECTION              TYPE        CHAR01(optional)
* | [<---] EV_RC                          TYPE        I
* | [<---] ET_FILE_TABLE                  TYPE        FILETABLE
* | [<-->] CV_FILE_NAME                   TYPE        LOCALFILE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD f4_file_excel.
    DATA: ls_file  TYPE file_table,
          lv_len_s TYPE I,
          lv_len_d TYPE I.
    DATA: lv_default_filename TYPE string.
    IF iv_window_title IS INITIAL.
      iv_window_title = '请选择文件上传路径...'(002).
    ENDIF.
    IF iv_file_filter IS INITIAL.
      iv_file_filter = 'Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel 97-2003(*.xls)|*.xls'.
    ENDIF.
    lv_default_filename = cv_file_name.

    CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            = iv_window_title
*       default_extension       =
      default_filename        = lv_default_filename
      file_filter             = iv_file_filter
*       with_encoding           =
*       initial_directory       =
      multiselection          = iv_multiselection
    CHANGING
      file_table              = et_file_table
      rc                      = ev_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.
    ENDIF.

    IF ev_rc < 1.
      RETURN.
    ENDIF.
    READ TABLE et_file_table INTO ls_file INDEX 1.
    IF sy-subrc = 0.
      lv_len_s = STRLEN( ls_file-filename ).
      DESCRIBE FIELD cv_file_name LENGTH lv_len_d IN CHARACTER MODE.
      IF lv_len_s > lv_len_d.
        MESSAGE i398(00) WITH '文件路径太长'(003).
        RETURN.
      ENDIF.
      cv_file_name = ls_file-filename.
    ENDIF.
  ENDMETHOD.

  METHOD update_excel_ole.
    DATA:
          lt_tabc       TYPE STANDARD TABLE OF zchar30000,
          lw_tabc       TYPE zchar30000,
          lv_tabix      TYPE sy-tabix,
          lt_cell       TYPE STANDARD TABLE OF string,
          lw_cell       TYPE string,
          lv_cell_tabix TYPE sy-tabix.

    DATA:
          lv_column_num TYPE I,
          lv_column_skp TYPE I,
    lw_tab_ref    TYPE REF TO DATA.

    DATA:
          lo_cx_root TYPE REF TO cx_root.
    DATA:
          lv_message TYPE string.
    DATA
          descr_ref TYPE REF TO cl_abap_structdescr.

    FIELD-SYMBOLS:
    <lw_tab>   TYPE ANY,
    <lv_value> TYPE ANY.

    CREATE DATA lw_tab_ref LIKE LINE OF pt_tab.
    ASSIGN lw_tab_ref->* TO <lw_tab>.

    lv_column_skp = pi_skpcl_tbl.

    CALL METHOD cl_bc_excel=>excel_2_inner_table
    EXPORTING
      pi_filename           = pi_filename
      pi_sheetname          = pi_sheetname
      pi_every_copy_endline = pi_every_copy_endline
      pi_endcolumn          = pi_endcolumn
    CHANGING
      pt_tab                = lt_tabc
    EXCEPTIONS
      file_open_error       = 1
      OTHERS                = 2.

*->把数据切割到内表
    LOOP AT lt_tabc INTO lw_tabc.
      lv_tabix = sy-tabix.

      CHECK lv_tabix >= pi_startline.
      CLEAR lt_cell.

      SPLIT lw_tabc AT cl_abap_char_utilities=>horizontal_tab INTO TABLE lt_cell.

      LOOP AT lt_cell INTO lw_cell.
        lv_cell_tabix = sy-tabix.

        lv_column_num = lv_cell_tabix - pi_startcolumn + 1 + lv_column_skp.

        CHECK lv_column_num > 0.

        ASSIGN COMPONENT lv_column_num OF STRUCTURE <lw_tab> TO <lv_value>.
        CHECK sy-subrc = 0.
        TRY.
          <lv_value> = lw_cell.
        CATCH cx_root INTO lo_cx_root.
          descr_ref ?= cl_abap_typedescr=>describe_by_data( pt_tab ).
          READ TABLE descr_ref->components INTO DATA(ls_name) INDEX lv_column_num.
          lv_message = lv_tabix && 'Lines' && lv_column_num && 'Name of column is ' && ls_name-name && 'error value:' && lw_cell.
          MESSAGE e001(00) WITH lv_tabix lv_column_num lv_message RAISING open_file_err.
        ENDTRY.
      ENDLOOP.
      IF <lw_tab> IS NOT INITIAL.
        INSERT <lw_tab> INTO TABLE pt_tab.
        CLEAR <lw_tab>.
      ENDIF.

    ENDLOOP.

  ENDMETHOD.

  METHOD excel_2_inner_table.
    TYPE-POOLS:
    ole2.

    DATA:
          ole_excel      TYPE ole2_object,
          ole_workbooks  TYPE ole2_object,
          ole_workbook   TYPE ole2_object,
          ole_worksheets TYPE ole2_object,
          ole_worksheet  TYPE ole2_object,
          ole_cell_begin TYPE ole2_object,
          ole_cell_end   TYPE ole2_object,
          ole_range      TYPE ole2_object.

    DATA:
          lv_subrc     TYPE sy-subrc,
          lv_begin_col TYPE I,
          lv_end_col   TYPE I,
          lv_begin_row TYPE I,
          lv_end_row   TYPE I,
          lv_add_rows  TYPE I VALUE 3000.

    lv_add_rows = pi_every_copy_endline.

    DATA:
          lt_excel_tab     TYPE STANDARD TABLE OF zchar30000,
          lw_excel_tab     TYPE zchar30000,
          lw_excel_tab_tmp TYPE zchar30000.


*->生成Excel object
    CREATE OBJECT ole_excel 'Excel.Application'.
    IF sy-subrc <> 0.
      MESSAGE e001(zbc) RAISING file_open_error.
    ENDIF.

*->
    SET PROPERTY OF ole_excel 'Visible' = 0.

    GET PROPERTY OF ole_excel 'Workbooks' = ole_workbooks.

    CALL METHOD OF
    ole_workbooks
    'Open'        = ole_workbook
    EXPORTING
      #1            = pi_filename.

*->取得Sheet
    GET PROPERTY OF ole_workbook 'Worksheets' = ole_worksheets
    EXPORTING
      #1 = pi_sheetname.

    IF sy-subrc = 0.
      CALL METHOD OF
      ole_worksheets
      'Activate'.
    ELSE.
      CALL METHOD OF
      ole_excel
      'QUIT'.
      MESSAGE e001(00) WITH 'error in open Sheet , please check Sheet name' RAISING file_open_error.
    ENDIF.

*->把Sheet上数据Copy 到 ClipBoard
    lv_begin_col = 1.
    lv_end_col = pi_endcolumn.
    lv_begin_row = 0.
    lv_end_row = 0.

    WHILE lv_subrc IS INITIAL.

      IF lv_begin_row IS INITIAL.
        lv_begin_row = 1.
        lv_end_row   = lv_add_rows.
      ELSE.
        lv_begin_row = lv_begin_row + lv_add_rows.
        lv_end_row   = lv_end_row   + lv_add_rows.
      ENDIF.

      CALL METHOD OF
      ole_worksheets
      'Cells'        = ole_cell_begin
      EXPORTING
        #1             = lv_begin_row
        #2             = lv_begin_col.

      CALL METHOD OF
      ole_worksheets
      'Cells'        = ole_cell_end
      EXPORTING
        #1             = lv_end_row
        #2             = lv_end_col.

      CALL METHOD OF
      ole_worksheets
      'RANGE'        = ole_range
      EXPORTING
        #1             = ole_cell_begin
        #2             = ole_cell_end.

      CALL METHOD OF
      ole_range
      'SELECT'.
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.

      CALL METHOD OF
      ole_range
      'COPY'.

* read clipboard into ABAP
      CALL METHOD cl_gui_frontend_services=>clipboard_import
      IMPORTING
      DATA                 = lt_excel_tab
      EXCEPTIONS
        cntl_error           = 1
        error_no_gui         = 2
        not_supported_by_gui = 3
        OTHERS               = 4.
      IF sy-subrc <> 0.
        CALL METHOD OF
        ole_excel
        'QUIT'.
        MESSAGE 'Error during import of clipboard contents' TYPE 'A'.
      ENDIF.

      lv_subrc = 4.
      LOOP AT lt_excel_tab INTO lw_excel_tab.
        lw_excel_tab_tmp = lw_excel_tab.
        REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN lw_excel_tab_tmp WITH space.
        IF NOT ( lw_excel_tab_tmp = space OR lw_excel_tab_tmp IS INITIAL ).
          INSERT lw_excel_tab INTO TABLE pt_tab.
          CLEAR lv_subrc.
        ENDIF.
      ENDLOOP.

      CLEAR lt_excel_tab.

    ENDWHILE.

    DATA:
          lv_rc TYPE I.
    CALL METHOD cl_gui_frontend_services=>clipboard_export
    IMPORTING
    DATA       = lt_excel_tab
    CHANGING
      rc         = lv_rc
    EXCEPTIONS
      cntl_error = 1
*       ERROR_NO_GUI         = 2
*       NOT_SUPPORTED_BY_GUI = 3
      OTHERS     = 4.

*  CALL METHOD OF
*    ole_worksheets
*    'COLSE'.

*  CALL METHOD OF
*    ole_workbook
*    'COLSE'.

*  CALL METHOD OF
*    ole_workbooks
*    'CLOSE'.

    CALL METHOD OF
    ole_excel
    'QUIT'.
    FREE OBJECT:
    ole_excel      ,
    ole_workbooks  ,
    ole_workbook   ,
    ole_worksheets ,
    ole_worksheet  ,
    ole_cell_begin ,
    ole_cell_end   ,
    ole_range      .
  ENDMETHOD.

  METHOD download_to_excel.

    DATA: g_excel     TYPE ole2_object,
          g_workbookl TYPE ole2_object,
          g_workbook  TYPE ole2_object,
          g_sheet     TYPE ole2_object,
          g_cell      TYPE ole2_object,
          g_cell1     TYPE ole2_object,
          g_range     TYPE ole2_object.

    DATA: l_formkey TYPE  wwwdatatab.
    DATA: l_excel_template_path TYPE localfile,
          l_excel_path          TYPE localfile,
          l_data_path           TYPE localfile.
    DATA: l_msg TYPE char128.

* Download the excel template from server
    CONCATENATE 'MI' excel_id   INTO l_formkey.
    CONCATENATE path '\' excel_fname '.XLT' INTO l_excel_template_path.
    REPLACE ALL OCCURRENCES OF  '\\' IN l_excel_template_path WITH '\'.

*  PERFORM DOWNLOAD_TEMPLATE USING L_FORMKEY L_EXCEL_TEMPLATE_PATH .
    DATA: l_path TYPE localfile.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         = l_formkey
      destination = l_excel_template_path
    CHANGING
      temp        = l_path.

* Create EXCEL application
*  PERFORM CREATE_APPLICATION CHANGING E_MESSAGE.
    DATA: l_indicator TYPE I VALUE 0.
    IF g_excel IS INITIAL.
      CREATE OBJECT g_excel 'EXCEL.APPLICATION'.
    ENDIF.
*    PERFORM err_hdl CHANGING e_message.
    IF sy-subrc NE 0.
      e_message =  'EXCEL操作没成功执行' .
      RAISE excel_error.
    ENDIF.
    SET PROPERTY OF g_excel  'Visible' = l_indicator.
*    PERFORM err_hdl CHANGING e_message.
    IF sy-subrc NE 0.
      e_message =  'EXCEL操作没成功执行' .
      RAISE excel_error.
    ENDIF.
    SET PROPERTY OF g_excel 'DisplayAlerts' = l_indicator.

* Download to Excel indicator
    l_msg = '下载数据到EXCEL,请等待....'.
*    PERFORM progress_indicator  USING l_msg.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 0
      TEXT       = l_msg.
* Download data to Front
    CONCATENATE path '\' excel_fname '.TXT' INTO l_data_path.
    REPLACE ALL OCCURRENCES OF  '\\' IN l_data_path WITH '\'.
*    PERFORM download_data_file TABLES i_data USING l_data_path.
    SORT i_data BY row col.
    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename              = l_data_path
      write_field_separator = cl_abap_char_utilities=>horizontal_tab
      codepage              = '8400'
    TABLES
      data_tab              = i_data.
    IF sy-subrc <> 0.
    ENDIF.
    CLEAR i_data[].
* Open excel template
*    PERFORM open_excel_template USING l_excel_template_path
*                                CHANGING e_message .
    CALL METHOD OF g_excel 'Workbooks' = g_workbookl.
*    PERFORM err_hdl CHANGING e_message.
    IF sy-subrc NE 0.
      e_message =  'EXCEL操作没成功执行' .
      RAISE excel_error.
    ENDIF.
* OPen template file
    CALL METHOD OF g_workbookl 'Open' = g_workbook
    EXPORTING
      #1 = l_excel_template_path.
    IF sy-subrc NE 0.
      e_message =  'EXCEL操作没成功执行' .
      RAISE excel_error.
    ENDIF.
* Open excel sheet
*    PERFORM open_excel_sheet USING sheet_name
*          CHANGING e_message.
    CALL METHOD OF g_workbook 'WORKSHEETS' = g_sheet
    EXPORTING
      #1 = sheet_name.
    IF sy-subrc NE 0.
      e_message =  'EXCEL操作没成功执行' .
      RAISE excel_error.
    ENDIF.
    CALL METHOD OF g_sheet 'ACTIVATE'.
    IF sy-subrc NE 0.
      e_message =  'EXCEL操作没成功执行' .
      RAISE excel_error.
    ENDIF.
* Convert data file to excel
*    PERFORM run_macro_open_text USING l_data_path sheet_name.
    CALL METHOD OF g_excel 'RUN'
    EXPORTING
      #1 = 'Open_text'
      #2 = l_data_path
      #3 = sheet_name.
* Save excel file
    CONCATENATE path '\' excel_fname '.XLS' INTO l_excel_path.
    REPLACE ALL OCCURRENCES OF  '\\' IN l_excel_path WITH '\'.
*    PERFORM run_macro_save_excel USING l_excel_path.
    CALL METHOD OF g_excel 'RUN'
    EXPORTING
      #1 = 'Save_excel'
      #2 = l_excel_path.

    IF show_excel = 'X'.
      SET PROPERTY OF g_excel  'VISIBLE' = 1 NO FLUSH.
    ENDIF.
* Close excel
*    PERFORM close_excel CHANGING show_excel.
* Free objects
    IF show_excel = space.
      CALL METHOD OF g_excel 'Quit'.
    ENDIF.
    FREE OBJECT g_cell.
    FREE OBJECT g_cell1.
    FREE OBJECT g_range.
    FREE OBJECT g_sheet.
    FREE OBJECT g_workbook.
    FREE OBJECT g_workbookl.

* force flush
    CALL FUNCTION 'FLUSH'
    EXCEPTIONS
      OTHERS = 0.

* Delete data file & template file
*    PERFORM delete_file USING l_data_path.
    CALL FUNCTION 'GUI_DELETE_FILE'
    EXPORTING
      file_name = l_data_path
    EXCEPTIONS
      failed    = 1
      OTHERS    = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
*    PERFORM delete_file USING l_excel_template_path.
    CALL FUNCTION 'GUI_DELETE_FILE'
    EXPORTING
      file_name = l_excel_template_path
    EXCEPTIONS
      failed    = 1
      OTHERS    = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
  ENDMETHOD.


ENDCLASS.

2、se24,点击导入

 选中这一行进行导入

 

 

 

 导入后激活类的话此时报错,要将类改为上面新建的全局类名称。

 3、调用方法

REPORT ZBDCSU0101.
TABLES:SSCRFIELDS,VBAK,VBAP.
TYPE-POOLS: ICON, SLIS,VRM."vrm.存放combobox内容的type pool
SELECTION-SCREEN:FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE  TYPE RLGRAP-FILENAME MODIF ID M1."路径
SELECTION-SCREEN END OF BLOCK BLK01.

INITIALIZATION.
  DATA BUT_DOWN(255) TYPE C.
  CALL FUNCTION 'ICON_CREATE' " 给按钮添加图标和文本
    EXPORTING
      NAME   = ICON_XLS
      TEXT   = '下载产品周期导入模板' "自己填名称
    IMPORTING
      RESULT = BUT_DOWN
    EXCEPTIONS
      OTHERS = 0.
  SSCRFIELDS-FUNCTXT_01 = BUT_DOWN.

AT SELECTION-SCREEN.
  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01'.
      PERFORM FRM_DOWN_TEMPLATE."下载导入模板
  ENDCASE.
FORM FRM_DOWN_TEMPLATE."下载导入模板
  CALL METHOD ZCL_BC_EXCEL=>DOWNLOAD_TEMPLATE
    EXPORTING
      NAME_OF_TEMPLATE = '111'
      IV_RELID         = 'MI'
      IV_OBJID         = 'ZSD115'
*    IMPORTING
*     RV_FILEPATH      =
*    EXCEPTIONS
*     DOWNLOAD_ERROR   = 1
*     OTHERS           = 2
    .
  IF SY-SUBRC <> 0.
*   Implement suitable error handling here
  ENDIF.

ENDFORM.

 如果传到其他client报如下保存不了excel格式的错误,是因为模板没有传过去

 

posted @ 2025-05-26 16:38  萧静默  阅读(93)  评论(0)    收藏  举报