使用函数生成excel模板并将excel中的数据导入到内表中

在报表程序中会遇到很多的批导数据问题,BDC、LSMW这些是常用数据维护工具,需要录屏,操作比较复杂而且比较固定。要是能把数据批量读取到内表中,然后对内表中数据进行操作将会显得更加方便和容易,也更加让ABAPER 容易接受一些。

下面我将介绍一种使用函数将excel表中的批量数据读取到内表中的方法:

1.声明模板需要显示的内表如下图:


2.选择屏幕的编写(P_PATH为文件路径)

3.调用函数实现能够进行文档的选择和下载路径的确定。

AT SELECTION-SCREEN ON VALUE-REQUEST FORP_PATH.

  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

   EXPORTING

     MASK      = ',文本文件(制表符分隔),*.xls'

     STATIC    = 'X'

  CHANGING

     FILE_NAME = P_PATH.

4.调用函数 WS_DOWNLOAD进行模板的下载。

   调用函数之前注意记得给第1步中的内表字段进行赋值,此处赋值是指定每一个字段的名称。

5.模板下载好后进行数据填写,然后上传。

6.上传基本逻辑:获取excel中数据的行数,从第2行开始进行数据读取,截止行数为之前获取的行数,列数为65535.

实现代码(可通用)2个PERFORM来实现:

PERFORM SUB_GET_MAX_COL USING ITAB_POWER      "获取excel中的行数
                             CHANGING G_MAX_COL.
PERFORM SUB_IMPORT_XLS_TO_ITAB TABLES ITAB_P_PWOER "将excel中的数据读取到内表itab_p_power中
                                      USING WA_P_POWER
                                            F_PATH.

最后的数据全部读取到了ITAB_P_POWER内表中。(这个内表和第1步中的内表结构字段一样)

FORM SUB_GET_MAX_COL USING P_TABLE TYPE STANDARD TABLE
                   CHANGING P_MAX_COL.
   DATALO_ABAP_TABLEDESCR TYPE REF TO CL_ABAP_TABLEDESCR,
         LO_ABAP_STRUCTDESCR TYPE REF TO CL_ABAP_STRUCTDESCR.
   DATA LS_ABAP_COMPDESCR TYPE ABAP_COMPDESCR.
   DATA L_LINES TYPE I.
   LO_ABAP_TABLEDESCR ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATAP_TABLE ).
   LO_ABAP_STRUCTDESCR ?= LO_ABAP_TABLEDESCR->GET_TABLE_LINE_TYPE).
   DESCRIBE TABLE LO_ABAP_STRUCTDESCR->COMPONENTS LINES L_LINES.
   P_MAX_COL L_LINES .
ENDFORM" SUB_GET_MAX_COL

FORM SUB_IMPORT_XLS_TO_ITAB TABLES P_TABLE
                              USING P_TAB_WA
                                    P_FPATCH.
   DATA LT_XLS TYPE ALSMEX_TABLINE OCCURS WITH HEADER LINE.
   DATA L_ITAB_COL TYPE I.
   FIELD-SYMBOLS <FS_FIELD>.
   IF P_FPATCH IS NOT INITIAL.
     CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
       EXPORTING
         FILENAME                P_FPATCH
         I_BEGIN_COL             1
         I_BEGIN_ROW             2
         I_END_COL               G_MAX_COL
         I_END_ROW               65535
       TABLES
        INTERN                  LT_XLS
      EXCEPTIONS
        INCONSISTENT_PARAMETERS 1
        UPLOAD_OLE              2
        OTHERS                  3.
    IF SY-SUBRC <> 0.
      MESSAGE '上传文件失败!' TYPE 'S' DISPLAY LIKE 'E'.
      STOP.
    ELSE.
      LOOP AT LT_XLS.
        L_ITAB_COL LT_XLS-COL.
        ASSIGN COMPONENT L_ITAB_COL OF STRUCTURE P_TAB_WA TO <FS_FIELD>.
        <FS_FIELD> LT_XLS-VALUE.
        AT END OF ROW.
          APPEND P_TAB_WA TO P_TABLE.
          CLEARL_ITAB_COLP_TAB_WA.
         ENDAT.
         CLEAR LT_XLS.
       ENDLOOP.
     ENDIF.
   ENDIF.
ENDFORM" SUB_IMPORT_XLS_TO_ITAB















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值