从文件导入数据到数据表

导入文件格式可为TXT或者EXCEL,根据文件格式选择相应代码段

 

REPORT  YHJZ_004_UPLOAD NO STANDARD PAGE HEADING LINE-SIZE 110.

TABLES:SSCRFIELDS."是一个structure

DATA: RESULT   TYPE I.
DATA:EXCELITAB LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF T_YTCTK OCCURS 0.
        INCLUDE STRUCTURE YTCTK.
DATA:END OF T_YTCTK.
DATA:BEGIN OF WA .
        INCLUDE STRUCTURE YTCTK.
DATA:END OF WA.
DATA:LINE(1000) TYPE C,                               "存放TXT文件的一行
     T_YTCTK1 LIKE TABLE OF LINE WITH HEADER LINE.       "存放TXT文件的内表
DATA:L_FLAG TYPE C,COL TYPE I.

SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TT1 NO INTERVALS,
BEGIN OF LINE,
COMMENT (10) TEXT1.
PARAMETERS P_FILE LIKE RLGRAP-FILENAME VISIBLE LENGTH 20.
SELECTION-SCREEN:
PUSHBUTTON 34(10) BTN1 USER-COMMAND CLI1,
END OF LINE,
END OF BLOCK B1.

AT SELECTION-SCREEN .
  CASE SSCRFIELDS.
    WHEN 'CLI1'.
      CALL FUNCTION 'WS_FILENAME_GET'
        EXPORTING
          DEF_FILENAME     = ''
          DEF_PATH         = 'C:/'
*          MASK             = ',*.XLS,*.XLS.'
*          MODE             = '0'
          TITLE            = '选择需要导入的文件'
        IMPORTING
          FILENAME         = P_FILE
        EXCEPTIONS
          INV_WINSYS       = 1
          NO_BATCH         = 2
          SELECTION_CANCEL = 3
          SELECTION_ERROR  = 4
          OTHERS           = 5.
  ENDCASE.

INITIALIZATION.
  TT1 = '请选择要上传的文件'.
  TEXT1 = '上传文件:'.
  BTN1 = '浏览…'.

START-OF-SELECTION.
  PERFORM CHECK_FILE.
  PERFORM READ_FILE.
  PERFORM CONVERSION_ITAB_DATA.
  PERFORM MODIFY_TABLE.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  CHECK_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_FILE .
  CALL FUNCTION 'WS_QUERY'
    EXPORTING
      FILENAME       = P_FILE
      QUERY          = 'FE'
    IMPORTING
      RETURN         = RESULT
    EXCEPTIONS
      INV_QUERY      = 1
      NO_BATCH       = 2
      FRONTEND_ERROR = 3
      OTHERS         = 4.
  IF RESULT = 0.
    MESSAGE I888(SABAPDOCU) WITH  P_FILE '上传文件不存在!'.
    STOP.
  ENDIF.
ENDFORM.                    " CHECK_FILE
*&---------------------------------------------------------------------*
*&      Form  read_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM READ_FILE .
***************************导入EXCEL文件**********************
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1       "开始列
      I_BEGIN_ROW             = 2       "开始行
      I_END_COL               = 50      "结束列
      I_END_ROW               = 6000    "结束行
    TABLES
      INTERN                  = EXCELITAB
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.

*****************导入TXT文件**********************
**  CALL FUNCTION 'WS_UPLOAD'  "上传文件
**    EXPORTING
**    FILENAME = P_FILE
**    TABLES
**    DATA_TAB = T_YTCTK1
**    EXCEPTIONS
**    CONVERSION_ERROR = 1
**    FILE_OPEN_ERROR = 2
**    FILE_READ_ERROR = 3
**    INVALID_TYPE = 4
**    NO_BATCH = 5
**    UNKNOWN_ERROR = 6
**    INVALID_TABLE_WIDTH =7
**    GUI_REFUSE_FILETRANSFER = 8
**    CUSTOMER_ERROR = 9
**    OTHERS = 10.
  IF SY-SUBRC <> 0.
    MESSAGE I888(SABAPDOCU) WITH 'UPLOAD ERROR!'.
  ENDIF.

ENDFORM.                    " read_file
*&---------------------------------------------------------------------*
*&      Form  conversion_itab_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CONVERSION_ITAB_DATA .
***************************导入EXCEL文件**********************
  SORT EXCELITAB BY ROW COL.
  LOOP AT EXCELITAB.
    TRANSLATE EXCELITAB-VALUE TO UPPER CASE.
    CASE EXCELITAB-COL.
      WHEN '0001'.
        T_YTCTK-GJAHR = EXCELITAB-VALUE.
      WHEN '0002'.
        T_YTCTK-RPMAX = EXCELITAB-VALUE.
      WHEN '0003'.
        T_YTCTK-YTCDX = EXCELITAB-VALUE.
      WHEN '0004'.
        T_YTCTK-YTCLX = EXCELITAB-VALUE.
      WHEN '0005'.
        T_YTCTK-BZIRK = EXCELITAB-VALUE.
      WHEN '0006'.
        T_YTCTK-BZTXT = EXCELITAB-VALUE.
      WHEN '0007'.
        T_YTCTK-VKBUR = EXCELITAB-VALUE.
      WHEN '0008'.
        T_YTCTK-BEZEI = EXCELITAB-VALUE.
      WHEN '0009'.
        T_YTCTK-PERNR = EXCELITAB-VALUE.
      WHEN '0010'.
        T_YTCTK-MVGR1 = EXCELITAB-VALUE.
      WHEN '0011'.
        T_YTCTK-MVGR3 = EXCELITAB-VALUE.
      WHEN '0012'.
        T_YTCTK-YBGDA = EXCELITAB-VALUE.
      WHEN '0013'.
        T_YTCTK-YENDA = EXCELITAB-VALUE.
      WHEN '0014'.
        T_YTCTK-YTCMB = EXCELITAB-VALUE.
      WHEN '0015'.
        T_YTCTK-YBEIZ = EXCELITAB-VALUE.
        WHEN'0016'.
        T_YTCTK-YQDSH = EXCELITAB-VALUE.
    ENDCASE.

    AT END OF ROW.
      IF T_YTCTK-GJAHR <> ''.
        APPEND T_YTCTK.
        CLEAR T_YTCTK.
      ENDIF.
    ENDAT.
  ENDLOOP.


*****************导入TXT文件**********************
**  LOOP AT T_YTCTK1.
**    SPLIT T_YTCTK1 AT ',' INTO WA-GJAHR WA-RPMAX WA-YTCDX WA-YTCLX WA-BZIRK WA-BZTXT WA-VKBUR WA-BEZEI
**                               WA-PERNR WA-MVGR1 WA-MVGR3 WA-YBGDA WA-YENDA WA-YBEIZ WA-YQDSH .
**    APPEND WA TO T_YTCTK.
**  ENDLOOP.
*****注意:工作区WA的字段数据类型必需为C,N,D,T OR STRING.
ENDFORM.                    " conversion_itab_data
*&---------------------------------------------------------------------*
*&      Form  modify_table
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_TABLE .
  DESCRIBE TABLE T_YTCTK LINES COL.
  IF COL NE 0.
    LOOP AT T_YTCTK.
      MODIFY YTCTK FROM TABLE T_YTCTK.
      IF SY-SUBRC NE 0.
        L_FLAG = 'X'.
        MESSAGE '导入失败,请联系管理员!' TYPE 'E'.
      ENDIF.
    ENDLOOP.

    IF L_FLAG EQ 'X'.
      MESSAGE '导入失败,请联系管理员!' TYPE 'E'.
    ELSE.
      MESSAGE '数据成功导入!' TYPE 'S'.
    ENDIF.

  ELSE.
    MESSAGE '导入失败,请检查数据源!' TYPE 'E'.
  ENDIF.
ENDFORM.                    " modify_table

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值