当前位置: 首页 > news >正文

ABAP 导入Excel形成内表

在这里插入图片描述

文章目录

  • 创建导入模板
  • 程序实现
  • 代码
  • 代码解析
  • 运行结果

创建导入模板

在这里插入图片描述

程序实现

在这里插入图片描述

代码

*&---------------------------------------------------------------------*
*& Report Z_EXCEL_UPLOAD_LHY
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_EXCEL_UPLOAD_LHY.
TABLES SSCRFIELDS.DATA: LS_FUNCTXT TYPE SMP_DYNTXT.
CONSTANTS:COS_TEMPLATE TYPE W3OBJID VALUE 'ZFI001',COS_FILENAME TYPE STRING VALUE '财务导入模板.xlsx'.
TYPES: BEGIN OF T_MARC,MATNR TYPE MARC-MATNR, "物料编号WERKS TYPE MARC-WERKS, "工厂MAKTX TYPE MAKT-MAKTX,  "物料描述MATKL TYPE MARA-MATKL,  "物料组END   OF T_MARC.
DATA GT_DATA TYPE TABLE OF T_MARC.SELECTION-SCREEN BEGIN OF BLOCK BK1.PARAMETERS P_FILE TYPE RLGRAP-FILENAME  MODIF ID M1.
SELECTION-SCREEN END OF BLOCK BK1.
**--按钮定义
SELECTION-SCREEN FUNCTION KEY 1.AT SELECTION-SCREEN ON VALUE-REQUEST FOR  P_FILE. "按选择帮助<F4>键时触发该事件PERFORM FRM_GET_FILE_NAME CHANGING P_FILE.INITIALIZATION.
**--按钮定义-初始化CLEAR LS_FUNCTXT.LS_FUNCTXT-ICON_ID   = ICON_IMPORT. "图标,可以通过ICON查找LS_FUNCTXT-ICON_TEXT = '下载文件'."描述SSCRFIELDS-FUNCTXT_01 = LS_FUNCTXT.AT SELECTION-SCREEN.
**--按钮响应CASE SSCRFIELDS-UCOMM.WHEN 'FC01'.PERFORM FRM_DOWNLOAD_TEMPLATE USING COS_TEMPLATE COS_FILENAME.WHEN OTHERS.ENDCASE.START-OF-SELECTION."解析Excel文件到内表PERFORM FILE_DATA_INPUT.**&---------------------------------------------------------------------*
**& Module STATUS_9000 OUTPUT
**&---------------------------------------------------------------------*
**&
**&---------------------------------------------------------------------*
*MODULE STATUS_9000 OUTPUT.
*  SET PF-STATUS 'STANDARD'.
** SET TITLEBAR 'xxx'.
*ENDMODULE.
*&---------------------------------------------------------------------*
*& Form frm_get_file_name
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- P_FILE
*&---------------------------------------------------------------------*
FORM FRM_GET_FILE_NAME  CHANGING CV_FILE.DATA: LT_FILETABLE TYPE FILETABLE,  "表类型LS_FILETABLE TYPE FILE_TABLE, "结构类型LV_RC        TYPE I.FREE LT_FILETABLE.CLEAR: LV_RC.CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOGEXPORTING
*     window_title            =DEFAULT_EXTENSION       = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
*     default_filename        =FILE_FILTER             = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
*     with_encoding           =
*     initial_directory       =
*     multiselection          =CHANGINGFILE_TABLE              = LT_FILETABLERC                      = LV_RC
*     user_action             =
*     file_encoding           =EXCEPTIONSFILE_OPEN_DIALOG_FAILED = 1CNTL_ERROR              = 2ERROR_NO_GUI            = 3NOT_SUPPORTED_BY_GUI    = 4OTHERS                  = 5.READ TABLE LT_FILETABLE INTO LS_FILETABLE INDEX 1.IF SY-SUBRC <> 0.
*     Implement suitable error handling hereENDIF.IF SY-SUBRC EQ 0.CV_FILE = LS_FILETABLE-FILENAME.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> COS_TEMPLATE
*&      --> COS_FILENAME
*&---------------------------------------------------------------------*
FORM FRM_DOWNLOAD_TEMPLATE  USING   U_OBJID TYPE W3OBJIDU_FILE_NAME TYPE STRING.DATA: LS_KEY      TYPE WWWDATATAB,LV_FILENAME TYPE STRING,LV_PATH     TYPE STRING,LV_FULLPATH TYPE STRING."判断模板是否存在SELECT SINGLE * FROM WWWDATAWHERE RELID EQ 'MI'AND OBJID EQ @U_OBJIDINTO CORRESPONDING FIELDS OF @LS_KEY.IF SY-SUBRC NE 0.
*   模板&1不存在MESSAGE 'ZFI001下载模板不存在' TYPE 'E'."ZFI001RETURN.ENDIF.
*   调用函数打开文件选择框CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOGEXPORTING
*     window_title              =DEFAULT_EXTENSION         = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCELDEFAULT_FILE_NAME         = U_FILE_NAME
*     with_encoding             =
*     file_filter               =
*     initial_directory         =
*     prompt_on_overwrite       = 'X'CHANGINGFILENAME                  = LV_FILENAMEPATH                      = LV_PATHFULLPATH                  = LV_FULLPATH
*     user_action               =
*     file_encoding             =EXCEPTIONSCNTL_ERROR                = 1ERROR_NO_GUI              = 2NOT_SUPPORTED_BY_GUI      = 3INVALID_DEFAULT_FILE_NAME = 4OTHERS                    = 5.IF SY-SUBRC <> 0.
*   Implement suitable error handling hereENDIF.CHECK LV_FULLPATH NE ''.
*   下载SMW0模版CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGKEY         = LS_KEYDESTINATION = CONV LOCALFILE( LV_FULLPATH ).ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILE_DATA_INPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FILE_DATA_INPUT .CLEAR GT_DATA. "清空内表DATA: LT_INTERN TYPE STANDARD TABLE OF ALSMEX_TABLINE.DATA: ERROR_STR TYPE STRING.FREE: LT_INTERN.CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGFILENAME                = P_FILEI_BEGIN_COL             = 1I_BEGIN_ROW             = 2I_END_COL               = 99I_END_ROW               = 65536TABLESINTERN                  = LT_INTERNEXCEPTIONSINCONSISTENT_PARAMETERS = 1UPLOAD_OLE              = 2OTHERS                  = 3.IF SY-SUBRC NE 0.ENDIF.SORT LT_INTERN BY ROW COL.LOOP AT LT_INTERN INTO DATA(LS_INTERN).AT NEW ROW. "如果字段ROWROW的左侧全部字段的数据,与上一行数据不一致,则执行代码。APPEND INITIAL LINE TO GT_DATA ASSIGNING FIELD-SYMBOL(<FS_DATA>).ENDAT."按照现在的LS_INTERNCOL的值,分配结构<FS_DATA>的对应下标的地址给指针<FS_VAL>ASSIGN COMPONENT LS_INTERN-COL OF STRUCTURE <FS_DATA> TO FIELD-SYMBOL(<FS_VAL>).<FS_VAL> = LS_INTERN-VALUE.CLEAR LS_INTERN.ENDLOOP.CL_DEMO_OUTPUT=>DISPLAY( GT_DATA ).
ENDFORM.

代码解析

在这里插入图片描述

运行结果

在这里插入图片描述

相关文章:

  • 基于 Spark 和 Hadoop 的空气质量数据分析与预测系统
  • canal同步mysql到mysql主要配置
  • 民宿管理系统5
  • 【LaTeX+VSCode本地Win11编译教程】
  • (undone) MIT6.S081 2023 学习笔记 (Day11: LAB10 mmap)
  • macOS 上是否有类似 WinRAR 的压缩软件?
  • android-ndk开发(2): macOS 安装 ndk
  • C++竞赛指南
  • Pinocchio导入URDF关节为continuous的问题及详细解释
  • 第二章-猜数游戏
  • 【bazel】bazel简介及简单使用
  • Qt实现网页内嵌
  • UDP协议(特点与应用场景)
  • cudaMalloc函数说明
  • 无人机 | 无人机设计概述
  • 某信服EDR3.5.30.ISO安装测试(一)
  • 【Java项目脚手架系列】第二篇:JavaWeb项目脚手架
  • 数据库MySQL学习——day9(聚合函数与分组数据)
  • 机器学习中常见搜索算法
  • Java基础学完,继续深耕(0505)Linux 常用命令
  • 余姚警方通报:一司机未悬挂车牌,事故现场就地粘贴安装
  • 建邦高科赴港上市,大股东陈子淳系山东建邦集团董事长陈箭之子
  • 一周观展|上海浦东美术馆透纳展还剩最后5天
  • 这 3 种食物,不要放进微波炉!第 1 个就大意了
  • 外交部就习近平主席将应邀对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典答问
  • “仿佛一场追星粉丝会”,老铺黄金完成国内头部商业中心全覆盖,品牌化后下一步怎么走?