abap开发之ole(附代码)
2015-10-16 00:08
232 查看
1.上传本地模版(在本地创建模版)
事务代码:smw0
创建ole程序(程序名称和对象名称一致):
步骤:
*引入函数所需要的变量
INCLUDE ZOLE_INC_ZF.
DATA:
G_LFGJA LIKE BKPF-GJAHR,
G_LFMON LIKE BKPF-MONAT,
G_FILE LIKE RLGRAP-FILENAME, ” 文件地址
G_EXCEL TYPE OLE2_OBJECT,
G_BOOKS TYPE OLE2_OBJECT,
G_SHEET TYPE OLE2_OBJECT,
G_SHEET_O TYPE OLE2_OBJECT,
G_RANGE TYPE OLE2_OBJECT,
G_ROW TYPE OLE2_OBJECT,
G_CELL TYPE OLE2_OBJECT,
G_SHEET_N TYPE OLE2_OBJECT,
G_COUNT_S TYPE I.
*主要步骤
INITIALIZATION.
START-OF-SELECTION.
PERFORM data_get. “1.数据获取
PERFORM frm_select_file CHANGING G_FILE.”2.文件路径选取
PERFORM frm_get_template USING ‘Z_MOBAN’. “3.提取模版
PERFORM frm_open_excel.”4.打开excel
PERFORM add_data.”5.数据添加
PERFORM frm_free_excel.”6.数据保存
END-OF-SELECTION.
第一步:数据获取data_get
这里获取stuinfor_zf(自建表)中的前三条数据,并将其写入内表it_tab当中
FORM data_get .
SELECT * FROM zstuinfor_zf INTO TABLE it_tab .
*取前三条数据
LOOP AT it_tab FROM 1 to 3.
MOVE-CORRESPONDING it_tab to it_out .
APPEND it_out.
ENDLOOP.
ENDFORM. ” DATA_DISPLAY
注意:it_tab要声明为带表头的内表,并且在写完数据不要忘记append,否则内表里边没有数据
第二步:文件路径选取 frm_select_file(不要忘记g_file参数的传递)
FORM frm_select_file CHANGING pc_file.
DATA l_file TYPE string.
CALL METHOD cl_gui_frontend_services=>directory_browse
CHANGING
selected_folder = l_file.
pc_file = l_file.
ENDFORM.
此时会弹出一个路径选择对话框,用于保存文件
第三步:模版提取,此时要用到我们之前上传的模版frm_get_template(using ‘Z_MOBAN’)
FORM frm_get_template USING pr_objid.
*提取模版
DATA:ls_key TYPE wwwdatatab.
DATA:l_file TYPE string,
l_msgtx TYPE bapi_msg. ” 消息文本
ls_key-relid = ‘MI’. “对象类型,MI代表EXCEL
ls_key-objid = pr_objid. “对象名称,即放在SMW0处模板名称
CONCATENATE g_file ‘\’ pr_objid ‘’ sy-datum ‘’ sy-uzeit ‘.xlsx’
INTO g_file. “给模板命名
CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’
EXPORTING
key = ls_key
destination = g_file.
IF sy-subrc <> 0.
CLEAR l_msgtx.
l_msgtx = ‘SAP WEB资源库中无可用模板供使用,请检查模板是否存在!’.
MESSAGE l_msgtx TYPE ‘I’.
STOP.
ENDIF.
ENDFORM. ” FRM_GET_TEMPLATE
第四步:打开excel文件(详细请见后面的代码)
第五步:数据添加
ORM add_data.
*添加数据
LOOP AT it_out .
ta = sy-tabix + 1.
PERFORM FRM_FILL_CELL USING 3 ta it_out-zno.
PERFORM FRM_FILL_CELL USING 4 ta it_out-zschool.
PERFORM FRM_FILL_CELL USING 5 ta it_out-zmajor.
PERFORM FRM_FILL_CELL USING 6 ta it_out-zidcard.
ENDLOOP.
ENDFORM.
*向FRM_FILL_CELL传递三个参数,第一个参数是列数,第二个参数是行数(sy-tabix是循环的次数,从1开始,ta的值依次为2,3,4…),第三个参数是要填入excel单元格的值
第六步:数据保存
在添加完数据后执行最后一步操作,如果没有这步操作,最后excel里边是没有值的
(由于使用的excel版本为最新版2013,在保存数据后要另存,否则下次点开文件时只有模版里边的内容,其他内容为空)
代码:
事务代码:smw0
webrfc应用程序的二进制数据==》F8查找==》 包:&tmp(本地包,测试用) 对象名称:ole创建的程序名称 目标描述:任意 ==》F5创建==》对象名称:要创建的模版名称(模版名称以z开头) ==》完成(输入)==》选择要上传的模版(本地文件)==》允许完成 模版上传成功,可以在程序中通过访问模版名称调用模版
创建ole程序(程序名称和对象名称一致):
步骤:
*引入函数所需要的变量
INCLUDE ZOLE_INC_ZF.
DATA:
G_LFGJA LIKE BKPF-GJAHR,
G_LFMON LIKE BKPF-MONAT,
G_FILE LIKE RLGRAP-FILENAME, ” 文件地址
G_EXCEL TYPE OLE2_OBJECT,
G_BOOKS TYPE OLE2_OBJECT,
G_SHEET TYPE OLE2_OBJECT,
G_SHEET_O TYPE OLE2_OBJECT,
G_RANGE TYPE OLE2_OBJECT,
G_ROW TYPE OLE2_OBJECT,
G_CELL TYPE OLE2_OBJECT,
G_SHEET_N TYPE OLE2_OBJECT,
G_COUNT_S TYPE I.
*主要步骤
INITIALIZATION.
START-OF-SELECTION.
PERFORM data_get. “1.数据获取
PERFORM frm_select_file CHANGING G_FILE.”2.文件路径选取
PERFORM frm_get_template USING ‘Z_MOBAN’. “3.提取模版
PERFORM frm_open_excel.”4.打开excel
PERFORM add_data.”5.数据添加
PERFORM frm_free_excel.”6.数据保存
END-OF-SELECTION.
第一步:数据获取data_get
这里获取stuinfor_zf(自建表)中的前三条数据,并将其写入内表it_tab当中
FORM data_get .
SELECT * FROM zstuinfor_zf INTO TABLE it_tab .
*取前三条数据
LOOP AT it_tab FROM 1 to 3.
MOVE-CORRESPONDING it_tab to it_out .
APPEND it_out.
ENDLOOP.
ENDFORM. ” DATA_DISPLAY
注意:it_tab要声明为带表头的内表,并且在写完数据不要忘记append,否则内表里边没有数据
第二步:文件路径选取 frm_select_file(不要忘记g_file参数的传递)
FORM frm_select_file CHANGING pc_file.
DATA l_file TYPE string.
CALL METHOD cl_gui_frontend_services=>directory_browse
CHANGING
selected_folder = l_file.
pc_file = l_file.
ENDFORM.
此时会弹出一个路径选择对话框,用于保存文件
第三步:模版提取,此时要用到我们之前上传的模版frm_get_template(using ‘Z_MOBAN’)
FORM frm_get_template USING pr_objid.
*提取模版
DATA:ls_key TYPE wwwdatatab.
DATA:l_file TYPE string,
l_msgtx TYPE bapi_msg. ” 消息文本
ls_key-relid = ‘MI’. “对象类型,MI代表EXCEL
ls_key-objid = pr_objid. “对象名称,即放在SMW0处模板名称
CONCATENATE g_file ‘\’ pr_objid ‘’ sy-datum ‘’ sy-uzeit ‘.xlsx’
INTO g_file. “给模板命名
CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’
EXPORTING
key = ls_key
destination = g_file.
IF sy-subrc <> 0.
CLEAR l_msgtx.
l_msgtx = ‘SAP WEB资源库中无可用模板供使用,请检查模板是否存在!’.
MESSAGE l_msgtx TYPE ‘I’.
STOP.
ENDIF.
ENDFORM. ” FRM_GET_TEMPLATE
第四步:打开excel文件(详细请见后面的代码)
第五步:数据添加
ORM add_data.
*添加数据
LOOP AT it_out .
ta = sy-tabix + 1.
PERFORM FRM_FILL_CELL USING 3 ta it_out-zno.
PERFORM FRM_FILL_CELL USING 4 ta it_out-zschool.
PERFORM FRM_FILL_CELL USING 5 ta it_out-zmajor.
PERFORM FRM_FILL_CELL USING 6 ta it_out-zidcard.
ENDLOOP.
ENDFORM.
*向FRM_FILL_CELL传递三个参数,第一个参数是列数,第二个参数是行数(sy-tabix是循环的次数,从1开始,ta的值依次为2,3,4…),第三个参数是要填入excel单元格的值
第六步:数据保存
在添加完数据后执行最后一步操作,如果没有这步操作,最后excel里边是没有值的
(由于使用的excel版本为最新版2013,在保存数据后要另存,否则下次点开文件时只有模版里边的内容,其他内容为空)
代码:
*&---------------------------------------------------------------------* *& Report ZOLE_ZF *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zole_zf. INCLUDE ZOLE_INC_ZF. DATA: it_tab LIKE TABLE OF zstuinfor_zf WITH HEADER LINE , it_out LIKE TABLE OF zstuinfor_zf WITH HEADER LINE. DATA: G_LFGJA LIKE BKPF-GJAHR, G_LFMON LIKE BKPF-MONAT, G_FILE LIKE RLGRAP-FILENAME, " 文件地址 G_EXCEL TYPE OLE2_OBJECT, G_BOOKS TYPE OLE2_OBJECT, G_SHEET TYPE OLE2_OBJECT, G_SHEET_O TYPE OLE2_OBJECT, G_RANGE TYPE OLE2_OBJECT, G_ROW TYPE OLE2_OBJECT, G_CELL TYPE OLE2_OBJECT, G_SHEET_N TYPE OLE2_OBJECT, G_COUNT_S TYPE I. DATA: ta TYPE i. ************类型以及相关变量声明 *申明相关的OFFICE的OLE对象 DATA: stu_no LIKE zstuinfor_zf-zno, stu_major LIKE zstuinfor_zf-zmajor. SELECTION-SCREEN BEGIN OF BLOCK blok WITH FRAME TITLE text-001. SELECT-OPTIONS: stuno FOR stu_no, major FOR stu_major. SELECTION-SCREEN END OF BLOCK blok. *END-OF-SELECTION. INITIALIZATION. START-OF-SELECTION. PERFORM data_get. "数据获取 PERFORM frm_select_file CHANGING G_FILE. PERFORM frm_get_template USING 'Z_MOBAN'. "提取模版 PERFORM frm_open_excel."打开excel PERFORM add_data."数据添加 PERFORM frm_free_excel."数据保存 END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form DATA_get *&---------------------------------------------------------------------* * 数据获取 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM data_get . SELECT * FROM zstuinfor_zf INTO TABLE it_tab . *取前三条数据 LOOP AT it_tab FROM 1 to 3. MOVE-CORRESPONDING it_tab to it_out . APPEND it_out. ENDLOOP. ENDFORM. " DATA_DISPLAY FORM add_data. *添加数据 LOOP AT it_out . ta = sy-tabix + 1. PERFORM FRM_FILL_CELL USING 3 ta it_out-zno. PERFORM FRM_FILL_CELL USING 4 ta it_out-zschool. PERFORM FRM_FILL_CELL USING 5 ta it_out-zmajor. PERFORM FRM_FILL_CELL USING 6 ta it_out-zidcard. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FILL_CELL *&---------------------------------------------------------------------* * text *-------------------------- 4000 --------------------------------------------* * -->PR_ROW text * -->PR_COL text * -->PR_VALUE text *----------------------------------------------------------------------* FORM frm_fill_cell USING pr_row TYPE i pr_col TYPE i pr_value TYPE any. CALL METHOD OF g_sheet 'Cells' = g_cell EXPORTING #1 = pr_row #2 = pr_col. SET PROPERTY OF g_cell 'Value' = pr_value. ENDFORM. "FRM_FILL_CELL *&---------------------------------------------------------------------* *& Form FRM_SELECT_FILE *&---------------------------------------------------------------------* * 选择路径 *----------------------------------------------------------------------* * <--PC_FILE text *----------------------------------------------------------------------* FORM frm_select_file CHANGING pc_file. DATA l_file TYPE string. CALL METHOD cl_gui_frontend_services=>directory_browse CHANGING selected_folder = l_file. pc_file = l_file. ENDFORM. " FRM_SELECT_FILE *&---------------------------------------------------------------------* *& Form FRM_GET_TEMPLATE *&---------------------------------------------------------------------* * 提取模版 *----------------------------------------------------------------------* * -->P_0120 text *----------------------------------------------------------------------* FORM frm_get_template USING pr_objid. *提取模版 DATA:ls_key TYPE wwwdatatab. DATA:l_file TYPE string, l_msgtx TYPE bapi_msg. " 消息文本 ls_key-relid = 'MI'. "对象类型,MI代表EXCEL ls_key-objid = pr_objid. "对象名称,即放在SMW0处模板名称 CONCATENATE g_file '\' pr_objid '_' sy-datum '_' sy-uzeit '.xlsx' INTO g_file. "给模板命名 CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = ls_key destination = g_file. IF sy-subrc <> 0. CLEAR l_msgtx. l_msgtx = 'SAP WEB资源库中无可用模板供使用,请检查模板是否存在!'. MESSAGE l_msgtx TYPE 'I'. STOP. ENDIF. ENDFORM. " FRM_GET_TEMPLATE *&---------------------------------------------------------------------* *& Form FRM_OPEN_EXCEL *&---------------------------------------------------------------------* * 打开excel模版 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_open_excel . *打开execl文档 CREATE OBJECT g_excel 'Excel.application'. "创建EXCEL对象 SET PROPERTY OF g_excel 'Visible' = 1. "1/0 是否显示EXCEL CALL METHOD OF g_excel 'Workbooks' = g_books. "打开下载的Excel Book对象 CALL METHOD OF g_books 'Add' = g_books "创建一个命名的Excel Book EXPORTING #1 = g_file. CALL METHOD OF g_books 'Worksheets' = g_sheet "在创建好的Excel Book创建一个sheet EXPORTING #1 = 1. CALL METHOD OF g_sheet 'Activate'. "激活sheet * SET PROPERTY OF g_excel 'DISPLAYALERTS' = 0. ENDFORM. " FRM_OPEN_EXCEL *数据添加完进行保存 FORM frm_free_excel . SET PROPERTY OF g_excel 'Visible' = 1. * FREE:g_excel,g_books,g_sheet,g_row,g_cell,g_sheet_n. ENDFORM. " FRM_FREE_EXCEL
相关文章推荐
- 整理硬盘发现几个以前做的视频,分享下
- 朗泽SAP:SAP在中国已进入高速时代
- seletc-options:当输入的数据量过多时 SQL语句dump
- 程序效率相关小技巧(除去很多共知的)
- SAP ABAP SQL 自动查询工具
- SAP系统直接查询物流、快递跟踪信息
- SAP ECC 主数据自动切换、刷新方案
- SAP RFC
- SAP各模块常用BAPI
- ABAP 内表用法小结
- SAP中日期时间函数收集
- ABAP调用外部WebService
- User client windows logon basic data
- ABAP 字段查找
- SM36 定义后台作业之日期变量
- 简化ABAP SQL语句
- ALV DataChange 事件
- 关于select * 在ABAP中要注意的问题
- SAP学习8--ABAP数据字典
- SAP学习7--ABAP Report程序