ABAP 动态数据导入

ABAP导入xls --> 创建动态内表--->ALV动态数据显示 

REPORT ZJ_TE9.

TYPE-POOLS:SLIS,ABAP.

DATA: BEGIN OF IEXCEL OCCURS 0.
        INCLUDE STRUCTURE ALSMEX_TABLINE.
DATA: END OF IEXCEL.

DATA: I_INDEX TYPE I.
FIELD-SYMBOLS: <FS>.



*-----------
DATA: D_REF TYPE REF TO DATA,

LT_ALV_CAT TYPE TABLE OF LVC_S_FCAT,

LS_ALV_CAT LIKE LINE OF LT_ALV_CAT.


DATA: LT_TABLE LIKE TABLE OF DNTAB.

DATA: LS_TABLE TYPE DNTAB.


DATA: DYN_TABLE TYPE REF TO DATA.

DATA: DYN_WA TYPE REF TO DATA.


FIELD-SYMBOLS :

  <DYN_TABLE> TYPE TABLE,

  <DYN_WA> TYPE ANY,

  <DYN_FIELD> TYPE ANY,

  <FS_STR> TYPE ANY.


*-------------------------------------------
PARAMETERS: P_FNAME LIKE RLGRAP-FILENAME MEMORY ID M01. " 获取文件路径
PARAMETERS P_TABLE TYPE TABNAME.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
  PERFORM GET_FIELD.


START-OF-SELECTION.
  PERFORM GET_TABLE.
  PERFORM UPLOAD.
  PERFORM ALV_SHOW.
  " PERFORM GT_TEST.

*&---------------------------------------------------------------------*
*&      Form  get_field
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_FIELD.


  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
*     DEF_FILENAME     = ' '
*     DEF_PATH         = ' '
      MASK             = 'Excel Files,*.xls,All Files,*.csv,*.*.'
*     MODE             = ' '
      TITLE            = '请选择要导入的格式'
    IMPORTING
      FILENAME         = P_FNAME
*     RC               =
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
  IF SY-SUBRC <> 0.
    WRITE: '导入数据出错'.
  ENDIF.

ENDFORM.                    "get_field


*&---------------------------------------------------------------------*
*&      Form  upLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM UPLOAD.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_FNAME
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 1
      I_END_COL               = 100
      I_END_ROW               = 100
    TABLES
      INTERN                  = IEXCEL
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  IF SY-SUBRC <> 0.
    WRITE:SY-SUBRC.
  ELSE.

    LOOP AT IEXCEL.
      IF IEXCEL-COL = 1.
        CONTINUE.
      ENDIF.

      " WRITE:IEXCEL-COL.
      MOVE IEXCEL-COL TO I_INDEX.
      ASSIGN COMPONENT I_INDEX OF STRUCTURE <DYN_WA> TO <FS> .
      MOVE IEXCEL-VALUE TO <FS>.
      AT END OF ROW.
        IF IEXCEL-COL <> 1.
          APPEND <DYN_WA> TO <DYN_TABLE>.
          CLEAR: <DYN_WA> .
        ENDIF.
        " APPEND IM_TAB.  "在每一行结束时
        " CLEAR IM_TAB.
      ENDAT.
    ENDLOOP.

  ENDIF.


ENDFORM.                    "upLOAD



*&---------------------------------------------------------------------*
*&      Form  get_table
*&---------------------------------------------------------------------*
*       text  获取内表结构
*----------------------------------------------------------------------*
FORM GET_TABLE.
*取出表结构的字段目录
  CALL FUNCTION 'NAMETAB_GET'
    EXPORTING
      LANGU          = SY-LANGU
      TABNAME        = P_TABLE
    TABLES
      NAMETAB        = LT_TABLE
    EXCEPTIONS
      NO_TEXTS_FOUND = 1.


*根据取出的字段目录生成参考字段目录

  LOOP AT LT_TABLE INTO LS_TABLE.

    LS_ALV_CAT-FIELDNAME = LS_TABLE-FIELDNAME.

    LS_ALV_CAT-REF_TABLE = P_TABLE.

    LS_ALV_CAT-REF_FIELD = LS_TABLE-FIELDNAME.

    APPEND LS_ALV_CAT TO LT_ALV_CAT.

    CLEAR LS_ALV_CAT.

  ENDLOOP.

*    内表创建

  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    EXPORTING
      IT_FIELDCATALOG = LT_ALV_CAT
    IMPORTING
      EP_TABLE        = D_REF.

*    指定生成的内表到字段符号
  ASSIGN D_REF->* TO <DYN_TABLE>.
*    创建动态工作区结构
  CREATE DATA DYN_WA LIKE LINE OF <DYN_TABLE>.
*    创建动态工作区
  ASSIGN DYN_WA->* TO <DYN_WA>.

ENDFORM.                    "get_table




*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ALV_SHOW.
*显示内表中的数据
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_STRUCTURE_NAME = P_TABLE
    TABLES
      T_OUTTAB         = <DYN_TABLE>
    EXCEPTIONS
      PROGRAM_ERROR    = 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.
ENDFORM.                    "ALV_SHOW


*&---------------------------------------------------------------------*
*&      Form  GT_TEST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GT_TEST.



ENDFORM.                    "GT_TEST

 

转载于:https://www.cnblogs.com/charles-guo/p/4142859.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值