很多项目都有这种需求,虽然别人用的各有不同,不过闲来无事,还是自己搞了一个出来。基于EXCEL的导入。
*&---------------------------------------------------------------------* *& Report ZLY_UPLOAD_TABLE *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZUPLOAD_TABLE. TABLES:RSRD1. TYPE-POOLS:ABAP. FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE, <DYN_WA>, <DYN_FIELD>. DATA: DY_TABLE TYPE REF TO DATA, DY_LINE TYPE REF TO DATA, XFC TYPE LVC_S_FCAT, IFC TYPE LVC_T_FCAT. DATA : GT_EXCEL_T TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE, GS_EXCEL_T LIKE LINE OF GT_EXCEL_T. DATA: GC_FIELDVALUE TYPE FIELDVALUE, "字符值 GC_FLDNAME TYPE FIELDNAME. "字段名 SELECTION-SCREEN:BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001. PARAMETERS:P_TBMA TYPE RSRD1-TBMA_VAL, P_FILE LIKE RLGRAP-FILENAME. SELECTION-SCREEN END OF BLOCK BLK01. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. PERFORM FRM_GET_FILEPATH. START-OF-SELECTION. CHECK P_TBMA IS NOT INITIAL. CHECK P_FILE IS NOT INITIAL. PERFORM PRM_GET_TAB_STRC. PERFORM PRM_GET_EXCEL. PERFORM PRM_UPDATA_TAB. *&---------------------------------------------------------------------* *& Form FRM_GET_FILEPATH *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_GET_FILEPATH . CALL FUNCTION 'WS_FILENAME_GET' EXPORTING MASK = ',Excel(*.xls),*.XLS,*.XLSX,' TITLE = '选择文件'(100) IMPORTING FILENAME = P_FILE EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. IF SY-SUBRC <> 0. " MESSAGE e100(zdev) WITH '选择文件出错!'(007). ENDIF. ENDFORM. " FRM_GET_FILEPATH *&---------------------------------------------------------------------* *& Form PRM_GET_TAB_STRC *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_GET_TAB_STRC . DATA:GT_TABLE TYPE DDFIELDS, GS_TABLE TYPE DFIES. CALL FUNCTION 'CATSXT_GET_DDIC_FIELDINFO' EXPORTING IM_STRUCTURE_NAME = P_TBMA IMPORTING EX_DDIC_INFO = GT_TABLE EXCEPTIONS FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. LOOP AT GT_TABLE INTO GS_TABLE. CLEAR XFC. XFC-FIELDNAME = GS_TABLE-FIELDNAME . XFC-INTTYPE = GS_TABLE-INTTYPE. XFC-INTLEN = GS_TABLE-LENG. XFC-DECIMALS = GS_TABLE-DECIMALS. APPEND XFC TO IFC. ENDLOOP. CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE EXPORTING IT_FIELDCATALOG = IFC IMPORTING EP_TABLE = DY_TABLE. ASSIGN DY_TABLE->* TO <DYN_TABLE>. CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>. ASSIGN DY_LINE->* TO <DYN_WA>. ENDFORM. " PRM_GET_TAB_STRC *&---------------------------------------------------------------------* *& Form PRM_GET_EXCEL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_GET_EXCEL . IF P_FILE IS NOT INITIAL. *将excel数据传入内表 CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING FILENAME = P_FILE I_BEGIN_COL = '1' I_BEGIN_ROW = '2' I_END_COL = '300' I_END_ROW = '50000' TABLES INTERN = GT_EXCEL_T. ENDIF. IF GT_EXCEL_T[] IS NOT INITIAL. LOOP AT GT_EXCEL_T INTO GS_EXCEL_T. AT NEW ROW. CLEAR <DYN_WA>. ENDAT. IF <DYN_WA> IS INITIAL. ASSIGN COMPONENT GS_EXCEL_T-COL OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. IF SY-SUBRC = 0. <DYN_FIELD> = SY-MANDT. ENDIF. ENDIF. GS_EXCEL_T-COL = GS_EXCEL_T-COL + 1. GC_FIELDVALUE = GS_EXCEL_T-VALUE. CONDENSE GC_FIELDVALUE. ASSIGN COMPONENT GS_EXCEL_T-COL OF STRUCTURE <DYN_WA> TO <DYN_FIELD>. IF SY-SUBRC = 0. <DYN_FIELD> = GC_FIELDVALUE. ENDIF. AT END OF ROW. APPEND <DYN_WA> TO <DYN_TABLE>. ENDAT. ENDLOOP. ENDIF. ENDFORM. " PRM_GET_EXCEL *&---------------------------------------------------------------------* *& Form PRM_UPDATA_TAB *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_UPDATA_TAB . MODIFY (P_TBMA) FROM TABLE <DYN_TABLE>. IF SY-SUBRC = 0. MESSAGE '导入成功' TYPE 'S'. ELSE. MESSAGE '导入失败' TYPE 'S' DISPLAY LIKE 'E'. EXIT. ENDIF. ENDFORM. " PRM_UPDATA_TAB
最简单的一种方式,输入参数:表名,EXXCEL(EXCEL里数据按表的数据元素顺序,可不加客户端)
^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架