您的位置:首页 > 编程语言

abap开发之ole(附代码)

2015-10-16 00:08 232 查看
1.上传本地模版(在本地创建模版)



事务代码: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  abap