ABAP EXCEL文件上传与下载

*----------------------- 上传 Example 1 ----------------------------------


 假设有数据在excel中如下:

 sname     sno   sex

 孙晓磊     001   男

 周杰伦     002   男

 阿猫       003   女

 阿狗       004   男


DATA: gt_data TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.

TYPES: BEGIN OF ty_itab,

        sname(10),

        sno(10),

        sex(3),

       END OF ty_itab.

DATA: wa    TYPE ty_itab,

      itab  TYPE TABLE OF ty_itab."定义的这个内表结构要与excel表完全一样


PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION 'WS_FILENAME_GET'

    EXPORTING

      mask             = ',Excel Files,*.xls,All Files,*.*.'(101)

      title            = '选择文件'(100)

    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 e100(zdev) WITH '选择文件出错!'(007).

  ENDIF.



START-OF-SELECTION.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取excel文件中的内容

    EXPORTING

      filename    = p_file

      i_begin_col = '1'

      i_begin_row = '1'

      i_end_col   = '50'

      i_end_row   = '5000'

    TABLES

      intern      = gt_data.

  SORT gt_data BY row col value.


*---整理到内表数据

  LOOP AT gt_data.

    CASE gt_data-col.

      WHEN 1.

        wa-sname = gt_data-value.

      WHEN 2.

        wa-sno = gt_data-value.

      WHEN 3.

        wa-sex = gt_data-value.

        APPEND wa TO itab."对于这个例子,excel表有3列,append要加在最后一列.

        CLEAR wa.

    ENDCASE.

  ENDLOOP.


  LOOP AT itab INTO wa.

    WRITE:/ wa-sname,wa-sno,wa-sex.

    ULINE.

  ENDLOOP.


*----------------------- 上传 Example 2 ----------------------------------

  TYPE-POOLS: truxs.

  TYPES: BEGIN OF t_datatab,"只记录excel文件的前四列

        col1(30)    TYPE c,

        col2(30)    TYPE c,

        col3(30)    TYPE c,

        col4(30)    TYPE c,

        END OF t_datatab.

  DATA: it_datatab TYPE STANDARD TABLE OF t_datatab,

        wa_datatab TYPE t_datatab.

  DATA: it_raw TYPE truxs_t_text_data.

  PARAMETERS: p_file TYPE  rlgrap-filename.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION 'F4_FILENAME'

    EXPORTING

      field_name = 'P_FILE'

    IMPORTING

      file_name  = p_file.


START-OF-SELECTION.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'

    EXPORTING

      i_line_header        = 'X'           "带表头的,占一行,这一行不会读到内表

      i_tab_raw_data       = it_raw        "WORK TABLE

      i_filename           = p_file        "读这个文件时要保证它没有被打开

    TABLES

      i_tab_converted_data = it_datatab[]   "ACTUAL DATA

    EXCEPTIONS

      conversion_failed    = 1

      OTHERS               = 2.

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

  LOOP AT it_datatab INTO wa_datatab.

    CONDENSE wa_datatab.

    WRITE:/ wa_datatab-col1,

            wa_datatab-col2,

            wa_datatab-col3,

            wa_datatab-col4.

  ENDLOOP.


*----------------------- 下载 Example ----------------------------------

TYPE-POOLS: abap.

DATA: fullpath    TYPE string,

      filename    TYPE string,

      path        TYPE string,

      user_action TYPE i,

      encoding    TYPE abap_encoding.



PARAMETERS: p_file TYPE string DEFAULT 'C:ABC.xls'.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog

    EXPORTING

      window_title      = '下载到本地文件'

      default_extension = 'XLS'           "缺省文件类型

      default_file_name = '默认文件名称'

      file_filter       = '文本文件(*.TXT)|*.TXT|Excel 文件 (*.XLS)|*.XLS;*.XLSX|所有文件 (*.*)|*.*|'

      with_encoding     = 'X'

      initial_directory = 'C:'

    CHANGING

      filename          = filename    "获得用户输入文件名

      path              = path        "获得用户所选路径

      fullpath          = fullpath    "路径加文件名

      user_action       = user_action

      file_encoding     = encoding.


  IF sy-subrc <> 0 OR user_action <> cl_gui_frontend_services=>action_ok.

    EXIT.

  ENDIF.


  DATA: itab TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.

  SELECT * FROM spfli INTO TABLE itab.


  DATA filename2 TYPE rlgrap-filename.

  filename2 = fullpath.


  CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'

    EXPORTING

      i_field_seperator = 'X'         "字段分隔开

      i_filename        = filename2

    TABLES

      i_tab_sap_data    = itab.  

保存文件对话框( Fri, 8 Jul 2011 11:49:46 +0800 )

Description:

  

TYPE-POOLS: abap.


DATA: fullpath    TYPE string,

      filename    TYPE string,

      path        TYPE string,

      user_action TYPE i,

      encoding    TYPE abap_encoding.


CALL METHOD cl_gui_frontend_services=>file_save_dialog

  EXPORTING

    window_title      = '下载到本地文件'

    default_extension = 'XLS'           "缺省文件类型

    default_file_name = '默认文件名称'

    file_filter       = '文本文件(*.TXT)|*.TXT|Excel 文件 (*.XLS)|*.XLS;*.XLSX|所有文件 (*.*)|*.*|'

    with_encoding     = 'X'

    initial_directory = 'C:'

  CHANGING

    filename          = filename    "获得用户输入文件名

    path              = path        "获得用户所选路径

    fullpath          = fullpath    "路径加文件名

    user_action       = user_action

    file_encoding     = encoding.


IF sy-subrc <> 0 OR user_action <> cl_gui_frontend_services=>action_ok.

  EXIT.

ENDIF.

关键词: ABAP

网友评论

发表评论