上传EXCEL到ABAP内表

上传EXCEL到ABAP内表

将EXCEL文件上载到内表两种方式:

一、直接将excel数据读入具有相同结构的内表

二、将excel数据读入一个行号,列号,值组成的内表,然后通过指针将数据读到与excel结构相同的内表

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      file_name = P_FILE.

 

CLEAR PROGRESS_TEXT.
  CONCATENATE '正在上载、转换文件,请稍侯......' '' INTO progress_text.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      TEXT = progress_text.

  DATA l_size TYPE I .
"可以省略upload
  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      filename   = p_file
      filetype   = 'BIN'
    IMPORTING
      filelength = l_size
    TABLES
      data_tab   = rawdata.

"内表结构与excel一致,字段最好定义为C类型,读入内表之后,转换成系统对应字段类型
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING      "i_line_header        = 'X'"表示包括字段名
      i_tab_raw_data       = rawdata
      i_filename           = p_file
    TABLES
      i_tab_converted_data = gt_itab
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.

 

 **********************************************************************************************8

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM SELECT_FILE.

 

FORM SELECT_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.
ENDFORM.                    " SELECT_FILE

"接收excel数据的内表

DATA: GT_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

FORM UPLOAD_ITAB .
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME    = P_FILE
      I_BEGIN_COL = '1'
      I_BEGIN_ROW = '2'
      I_END_COL   = '100'
      I_END_ROW   = '30000'
    TABLES
      INTERN      = GT_DATA.
  SORT GT_DATA BY ROW COL VALUE.
"将数据转换成一般处理内表结构的数据
  LOOP AT GT_DATA.
    MOVE GT_DATA-COL TO L_INDEX.
    ASSIGN COMPONENT L_INDEX OF STRUCTURE GT_ITAB TO <FS>.
    MOVE GT_DATA-VALUE TO <FS>.
    AT END OF ROW.
      APPEND GT_ITAB.
      CLEAR GT_ITAB.
    ENDAT.
  ENDLOOP.

  IF GT_ITAB IS NOT INITIAL.
    APPEND GT_ITAB.
    CLEAR GT_ITAB.
  ENDIF.
ENDFORM.                    " UPLOAD_ITAB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值