天天看点

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

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

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

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

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

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.

   DATA: LO_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_DATA( P_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 0 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.

          CLEAR: L_ITAB_COL, P_TAB_WA.

         ENDAT.

         CLEAR LT_XLS.

       ENDLOOP.

     ENDIF.

   ENDIF.

ENDFORM. " SUB_IMPORT_XLS_TO_ITAB

继续阅读