1. 程式人生 > >ABAP EXCEL檔案上傳與下載

ABAP EXCEL檔案上傳與下載

*----------------------- 上傳 Example 1 ----------------------------------

 假設有資料在excel中如下:
 sname     sno   sex
 孫曉磊     001   
 周杰倫     002   
 阿貓       003   
 阿狗       004   

DATAgt_data TYPE alsmex_tabline OCCURS WITH HEADER LINE.
TYPESBEGIN OF ty_itab,
        sname(10),
        sno(10),
        sex(
3),
       END OF ty_itab.
DATAwa    TYPE ty_itab,
      itab  TYPE TABLE OF ty_itab."定義的這個內表結構要與excel表完全一樣

PARAMETERSp_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 <> AND sy-subrc <> 3.
    MESSAGE e100(
zdevWITH '選擇檔案出錯!'(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-POOLStruxs.
  TYPESBEGIN OF t_datatab,"只記錄excel檔案的前四列
        col1(30)    TYPE c,
        col2(30)    TYPE c,
        col3(30)    TYPE c,
        col4(30)    TYPE c,
        END OF t_datatab.
  DATAit_datatab TYPE STANDARD TABLE OF t_datatab,
        wa_datatab TYPE t_datatab.
  DATAit_raw TYPE truxs_t_text_data.
  PARAMETERSp_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-POOLSabap.
DATAfullpath    TYPE string,
      filename    TYPE string,
      path        TYPE string,
      user_action TYPE i,
      encoding    TYPE abap_encoding.


PARAMETERSp_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 <> OR user_action <> cl_gui_frontend_services=>action_ok.
    EXIT.
  ENDIF.

  DATAitab 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