模板下载函数&&excel上载函数

留存一个批导模板下载的函数

使用方式如下

  CALL FUNCTION 'ZFM_DOWN_EXCEL'
    EXPORTING
      i_file = p_file
      i_name 'ZSDC016'.

 

I_FILE TYPE LOCALFILE
I_NAME TYPE W3OBJID

 

FUNCTION zfm_down_excel.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(I_FILE) TYPE  LOCALFILE
*"     VALUE(I_NAME) TYPE  W3OBJID
*"----------------------------------------------------------------------
  DATA: lv_objdata LIKE wwwdatatab,
        lv_obj_name LIKE wwwdatatab-objid,
        lv_destination LIKE rlgrap-filename,
        lv_objid LIKE sy-repid,
        lv_subrc LIKE sy-subrc.
  DATA:l_ret TYPE abap_bool,
       lv_answer.
  DATA:lv_file TYPE string.
  DATA:p_filepath TYPE string.

  DATA:g_excel TYPE ole2_object,
       g_applica TYPE ole2_object,
       g_sheet TYPE ole2_object,
       g_cell TYPE ole2_object,
       g_workbook TYPE ole2_object.

  DATA: lw_file TYPE localfile.

  MOVE i_file TO lv_file.

  CALL METHOD cl_gui_frontend_services=>file_exist
    EXPORTING
      file                 = lv_file
    RECEIVING
      result               = l_ret
    EXCEPTIONS
      cntl_error           1
      error_no_gui         2
      wrong_parameter      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.
    EXIT.
  ENDIF.

  IF l_ret EQ 'X'.

* 模版已存在,是否覆盖

    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        text_question  '模版已存在,是否覆盖?'
        text_button_1  '是'(001)
        text_button_2  '否'(002)
      IMPORTING
        answer         = lv_answer
      EXCEPTIONS
        text_not_found 1
        OTHERS         2.
    IF sy-subrc <> 0.

    ENDIF.

    IF lv_answer EQ 'A'"取消
      EXIT.
    ELSEIF lv_answer NE '1'"否
      p_filepath = i_file.
    ENDIF.
  ELSE.
    lv_answer '1'.
  ENDIF.

  CREATE OBJECT g_excel 'EXCEL.APPLICATION'.
  GET PROPERTY OF g_excel 'Workbooks' = g_workbook .
  CALL METHOD OF
      g_workbook
      'Close'.

  IF lv_answer EQ '1'.

    SELECT relid objid
      FROM wwwdata
      INTO  CORRESPONDING FIELDS OF lv_objdata
      UP TO ROWS
      WHERE srtf2 AND relid 'MI'
        AND objid = i_name.
    ENDSELECT.

    CONCATENATE i_file '.XLSX' INTO lw_file.

    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lv_objdata
        destination = lw_file
      IMPORTING
        rc          = lv_subrc.
    IF lv_subrc 0.
    ENDIF.
  ENDIF.

  CALL METHOD OF
      g_workbook
      'open'

    EXPORTING
      #1         = i_file.

  CALL METHOD OF
      g_excel
      'worksheets' = g_sheet
    EXPORTING
      #1           1.

  CALL METHOD OF
      g_sheet
      'activate'.

  SET PROPERTY OF g_excel 'visible' 1.
  FREE OBJECT g_sheet.
  FREE OBJECT g_applica.
  FREE OBJECT g_workbook.
  FREE OBJECT g_excel.

ENDFUNCTION.

 excel上载函数:使用方便但数量金额字段需在excel中转换为文本(不是只将单元格设置为文本),必须转换为EXCEL单元中左上角为绿色小三角形的文本单元格。 设置后再上载此数据。

  DATA:i_raw TYPE truxs_t_text_data.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        'X' "X表示带抬头行的EXCEL的抬头行不传进内表,否则EXCEL不要带抬头
      i_tab_raw_data       = i_raw           " WORK TABLE
      i_filename           = p_file
    TABLES
      i_tab_converted_data = gt_excel   "ACTUAL DATA
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    MESSAGE '无法上载数据,请检查EXCEL文件' TYPE  'S' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

posted on 2019-11-11 11:11  Shadow.Ling  阅读(624)  评论(0编辑  收藏  举报

导航