abap 导入Excel

*&---------------------------------------------------------------------*
*& Report YCLY_VL_POST1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Y_EXCEL_UPLOAD.


DATA:LO_DATA TYPE REF TO DATA.
DATA: L_RC TYPE I.

START-OF-SELECTION.

  PERFORM SUB_UPLOAD_DATA CHANGING LO_DATA L_RC.
  BREAK-POINT.


*&---------------------------------------------------------------------*
*& Form SUB_UPLOAD_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM SUB_UPLOAD_DATA   CHANGING CO_DATA TYPE REF TO DATA
                                C_RC TYPE I.
  DATA :
    L_RC            TYPE I,
    L_FILE          TYPE STRING,
    LT_FILETABLE    TYPE FILETABLE,

    L_FILENAME      TYPE STRING,
    LT_DATA         TYPE SOLIX_TAB,
    L_HEADERXSTRING TYPE XSTRING,
    L_FILELENGTH    TYPE I.

  C_RC  = 0.
  REFRESH LT_FILETABLE.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            = '选择文件'
      DEFAULT_EXTENSION       = ',*.xlsx,xlsx,*.xls,xls'
    CHANGING
      FILE_TABLE              = LT_FILETABLE
      RC                      = L_RC
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      OTHERS                  = 5.
  IF SY-SUBRC <> 0.
    C_RC  = SY-SUBRC.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    RETURN.
  ENDIF..

  READ TABLE LT_FILETABLE INTO DATA(LS_FILETABLE) INDEX 1.
  IF SY-SUBRC <>  0.
    C_RC  = SY-SUBRC.
    RETURN.
  ENDIF.

  L_FILENAME = LS_FILETABLE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
    EXPORTING
      FILENAME                = L_FILENAME
      FILETYPE                = 'BIN'
    IMPORTING
      FILELENGTH              = L_FILELENGTH
      HEADER                  = L_HEADERXSTRING
    CHANGING
      DATA_TAB                = LT_DATA
    EXCEPTIONS
      FILE_OPEN_ERROR         = 1
      FILE_READ_ERROR         = 2
      NO_BATCH                = 3
      GUI_REFUSE_FILETRANSFER = 4
      INVALID_TYPE            = 5
      NO_AUTHORITY            = 6
      UNKNOWN_ERROR           = 7
      BAD_DATA_FORMAT         = 8
      HEADER_NOT_ALLOWED      = 9
      SEPARATOR_NOT_ALLOWED   = 10
      HEADER_TOO_LONG         = 11
      UNKNOWN_DP_ERROR        = 12
      ACCESS_DENIED           = 13
      DP_OUT_OF_MEMORY        = 14
      DISK_FULL               = 15
      DP_TIMEOUT              = 16
      NOT_SUPPORTED_BY_GUI    = 17
      ERROR_NO_GUI            = 18
      OTHERS                  = 19.
  IF SY-SUBRC <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    C_RC = SY-SUBRC.
    MESSAGE '请关闭EXCEL后重试.' TYPE 'E'.
    RETURN .
  ENDIF.


  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      INPUT_LENGTH = L_FILELENGTH
    IMPORTING
      BUFFER       = L_HEADERXSTRING
    TABLES
      BINARY_TAB   = LT_DATA
    EXCEPTIONS
      FAILED       = 1
      OTHERS       = 2.

  IF SY-SUBRC IS NOT INITIAL.
    C_RC = SY-SUBRC.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    RETURN.
  ENDIF.

  TRY .
*     操作多tab页对象创建
      DATA(LO_EXCEL_REF) = NEW CL_FDT_XL_SPREADSHEET( DOCUMENT_NAME = L_FILENAME
                                                      XDOCUMENT     = L_HEADERXSTRING ).

    CATCH CX_FDT_EXCEL_CORE INTO DATA(LO_CX_FDT_EXCEL_CORE).
      C_RC = 4.
      DATA(L_MSG) = LO_CX_FDT_EXCEL_CORE->GET_TEXT( ).
      MESSAGE E368(00) WITH 'EXCEL导入失败' L_MSG.

  ENDTRY .

  IF LO_EXCEL_REF IS BOUND.
*   获取页签列表
    LO_EXCEL_REF->IF_FDT_DOC_SPREADSHEET~GET_WORKSHEET_NAMES(
      IMPORTING
        WORKSHEET_NAMES = DATA(LT_WORKSHEETS) ).

    READ TABLE LT_WORKSHEETS INTO DATA(LS_WOKSHEETNAME) INDEX 1.
    CHECK SY-SUBRC = 0.
    CO_DATA = LO_EXCEL_REF->IF_FDT_DOC_SPREADSHEET~GET_ITAB_FROM_WORKSHEET( LS_WOKSHEETNAME ).

  ENDIF.
ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值