将Excel导入SAP数据库表
来源:互联网 发布:eve数据库 编辑:程序博客网 时间:2024/04/29 14:11
如何将Excel导入Sap系统,在sap可执行程序中可以通过调用函数ALSM_EXCEL_TO_INTERNAL_TABLE实现。
实现简单效果如下:
选择文件:
点击选择后,文件地址会写入地址栏:
最后点击执行:
具体代码部分如下:
*&---------------------------------------------------------------------**& Report *****&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT ****.TABLES: ZTABLE001."假设我们要上传的内容有两个字段:序号,内容。然后定义类型,包含两个组件即序号和内容"TYPES:BEGIN OF TY_ZT, NUM TYPE ZTABLE001-NUM,"序号" TXT TYPE ZTABLE001-TXT,"内容" END OF TY_ZT."定义参照TY_ZT类型的内表和工作区,用于暂存取到的Excel内容"DATA:I_TABLE TYPE TABLE OF TY_ZT, W_TABLE TYPE TY_ZT.
我们需要自建一个透明表,注意上面定义类型时,我们参考的组件就是自建透明表组件,如下就是我们定义好的透明表:
注意一点:自建表时,客户端字段一定要有,其次主键要勾选“键”(如图示)。
"定义内表,用于insert或modify透明表内容"DATA:GT_TABLE TYPE TABLE OF ZTABLE001,"直接参照透明表" GW_TABLE TYPE ZTABLE001."选择屏幕"SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(9) STR1."维护" PARAMETERS P_1 RADIOBUTTON GROUP G1 DEFAULT 'X'."单选" SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(9) STR2 ."导入" PARAMETERS P_2 RADIOBUTTON GROUP G1."单选" SELECTION-SCREEN COMMENT 16(2) STR3. PARAMETERS P_FILE(80)."地址栏" SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK B1.INITIALIZATION.STR1 = '维护'.STR2 = '导入'."导入文件地址栏就是一个parameter ,这里通过一个radiobutton单选按钮,选择 维护或导入两种功能。选择屏幕写好之后,接下来要用到的就只有 P_FILE 这个参数已经调用相应的函数。"
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. PERFORM OPEN_DIALOG."调用选择文件函数"
这部分代码实现的就是当我们点击下图中红圈中的图标时:
弹出选择对话框(如图所示)
这里通过类方法实现(具体看FORM OPEN_DIALOG中的代码):
类接口CL_GUI_FRONTEND_SERVICES调用方法FILE_OPEN_DIALOG。
AT SELECTION-SCREEN."用于屏幕输入检验"IF P_2 = 'X'. IF P_FILE IS INITIAL. MESSAGE '文件地址不可为空!' TYPE 'S' DISPLAY LIKE 'E'. STOP. ENDIF.ENDIF.START-OF-SELECTION. IF P_1 = 'X'. PERFORM FRM_CALL_VIEW.ELSEIF P_2 = 'X'. PERFORM UPLOAD.ENDIF.END-OF-SELECTION.FORM FRM_CALL_VIEW."维护视图"DATA:P_TABNAM LIKE DD02V-TABNAME."Char(30)"P_TABNAM = 'ZTABLE001'.CALL FUNCTION 'VIEW_MAINTENANCE_CALL' "调用维护视图" EXPORTING ACTION = 'S' VIEW_NAME = P_TABNAM "表名" EXCEPTIONS CLIENT_REFERENCE = 1 FOREIGN_LOCK = 2 INVALID_ACTION = 3 NO_CLIENTINDEPENDENT_AUTH = 4 NO_DATABASE_FUNCTION = 5 NO_EDITOR_FUNCTION = 6 NO_SHOW_AUTH = 7 NO_TVDIR_ENTRY = 8 NO_UPD_AUTH = 9 ONLY_SHOW_ALLOWED = 10 SYSTEM_FAILURE = 11 UNKNOWN_FIELD_IN_DBA_SELLIST = 12 VIEW_NOT_FOUND = 13 MAINTENANCE_PROHIBITED = 14 OTHERS = 15 .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.FORM OPEN_DIALOG."选择文件会话。"DATA:LT_FILE_TABLE TYPE FILETABLE.DATA:LW_FILE_TABLE TYPE FILE_TABLE.DATA:L_RC TYPE I. CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG EXPORTING WINDOW_TITLE = '选择文件' DEFAULT_FILENAME = '*.XLSX' "默认excel文件" INITIAL_DIRECTORY = 'D:\ ' "默认打开D盘,也可以默认空" MULTISELECTION = '' "文件单选" CHANGING FILE_TABLE = LT_FILE_TABLE RC = L_RC EXCEPTIONS FILE_OPEN_DIALOG_FAILED = 1 CNTL_ERROR = 2 ERROR_NO_GUI = 3 NOT_SUPPORTED_BY_GUI = 4 others = 5 .CHECK L_RC EQ 1."因为文件单选,所以这里判断一下选择的数量为1"READ TABLE LT_FILE_TABLE INDEX 1 INTO P_FILE."将选择的文件地址写入到地址栏"ENDFORM.FORM UPLOAD."最后也是最关键的一步""定义表格结构内表。"DATA: I_EXCEL TYPE TABLE OF ALSMEX_TABLINE,"表格结构。" W_EXCEL TYPE ALSMEX_TABLINE."ALSMEX_TABLINE是具有Excel数据的表行,有三个组件,row col value 。"DATA:GET_FILE TYPE RLGRAP-FILENAME."这里参照系统中的结构字段。"MOVE P_FILE TO GET_FILE."将地址栏的值赋值给GET_FILE""调用此函数,将Excel中的内容以类似坐标的形式存储到I_excel内表中。" CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING FILENAME = GET_FILE I_BEGIN_COL = 1 I_BEGIN_ROW = 1 I_END_COL = 8 I_END_ROW = 65535 TABLES INTERN = I_EXCEL EXCEPTIONS INCONSISTENT_PARAMETERS = 1 UPLOAD_OLE = 2 OTHERS = 3 .DELETE I_EXCEL WHERE ROW = 1."删除第一行抬头。如果excel文件中不存在抬头的话,可不写此句。"IF I_EXCEL IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE' EXPORTING* DEFAULTOPTION = 'Y' DIAGNOSETEXT1 = '数据错误'* DIAGNOSETEXT2 = ' '* DIAGNOSETEXT3 = ' ' TEXTLINE1 = 'Excel表格中没有内容!' TITEL = '提示' . RETURN.ENDIF.CLEAR:I_TABLE.FIELD-SYMBOLS:<FS>."这里涉及到SAP内部字段的使用,详情请参见微博相关介绍。"SORT I_EXCEL BY ROW COL.DATA:NUM_COL TYPE I.LOOP AT I_EXCEL INTO W_EXCEL. NUM_COL = W_EXCEL-COL. ASSIGN COMPONENT NUM_COL OF STRUCTURE W_TABLE TO <FS>. <FS> = W_EXCEL-VALUE. AT END OF ROW. APPEND W_TABLE TO I_TABLE. CLEAR:W_TABLE. ENDAT. CLEAR:W_EXCEL.ENDLOOP.LOOP AT I_TABLE INTO W_TABLE. GW_TABLE-MANDT = SY-MANDT."客户端号,创建透明表必须包含的字段。" GW_TABLE-NUM = W_TABLE-NUM. GW_TABLE-TXT = W_TABLE-TXT.APPEND GW_TABLE TO GT_TABLE.CLEAR:GW_TABLE.CLEAR:W_TABLE.ENDLOOP."将数据库中内容更新"MODIFY ZTABLE001 FROM TABLE GT_TABLE."这里使用modify,兼顾增加和修改,若主键存在则为修改,否则增加"IF SY-SUBRC = 0. COMMIT WORK AND WAIT."成功提交,或者最后程序结束系统也会自动提交" DATA:NUM_TAB(6) TYPE C. DESCRIBE TABLE GT_TABLE LINES NUM_TAB. CONDENSE NUM_TAB NO-GAPS. DATA:STR_LINE1 TYPE STRING . CONCATENATE '成功导入数据' NUM_TAB '行' INTO STR_LINE1 ."读出excel中的数据条数,用于消息提示" CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE' EXPORTING DIAGNOSETEXT1 = '成功' TEXTLINE1 = STR_LINE1 TITEL = '提示' . ELSE. ROLLBACK WORK."否则失败" ENDIF.ENDFORM.
这样,一个简单的导入程序就完成了。
这里需要说明,使用ALSM_EXCEL_TO_INTERNAL_TABLE函数导入数据,一个excel文件最大行数只可为9999,如果超出是无法全部读入内表中的,会丢失其余行。
最后,当选择维护选项的时候,我们想要能够展示出数据库表的内容,并且能实现增删查改。这里我们就通过维护视图功能实现。
代码中的子例程 FORM FRM_CALL_VIEW ,调用函数即可,但是单纯的调用系统函数还不能完成,还需要我们创建数据表的维护对话框等。
在我们创建完透明表后:
点击实用程序–>表维护生成器:
这里一次维护权限组、函数组。然后维护屏幕编号,可按系统自选。
最后点击左上角一张纸的图标,即可。
这样,我们执行程序选择维护,点击执行时,就会弹出对应窗口。
1 0
- 将Excel导入SAP数据库表
- EXCEL导入SAP自建数据库表中
- 将EXCEL导入数据库
- 实现将Excel表导入数据库
- java实现将Excel表导入数据库
- 【数据库】将Excel导入数据库
- 将excel表格导入数据库
- 如何将Excel导入数据库
- 如何将Excel导入数据库
- 将数据库数据导入Excel
- 将EXCEL表格导入数据库
- 将excel数据导入数据库
- 将Excel导入到数据库
- 将excel导入到数据库
- 将Excel导入到数据库
- 将EXCEL导入到数据库
- 将Excel导入Oracle数据库
- C#将excel导入数据库
- Android频道管理集成
- nfs 安装配置
- 协议,委托与代理
- mysql 左连接右连接问题
- tq2440 pwm 驱动
- 将Excel导入SAP数据库表
- Linux驱动学习之:PWM驱动
- IDM刘涛版
- 【java】synchronized 关键字
- AndroidStudio 编译问题org/gradle/api/publication/maven/internal/DefaultMavenFactory
- 【android】:android如何实现对一个控件的监听
- jquery 将disabled的元素置为enabled的三种方法
- android开发经验总结
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系