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.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值