OLE整理:

1.定义,分别对应EXCEL,workbook(工作簿),sheet(页),单元格

DATA: EXCEL_OBJ                         TYPE OLE2_OBJECT,
BOOK_OBJ TYPE OLE2_OBJECT,
SHEET_OBJ TYPE OLE2_OBJECT,
CELL_OBJ TYPE OLE2_OBJECT.

2.方法说明:

CREATE OBJECT name_obj 'app'."创建APP应用类的一个对象obj_name实例
SET PROPERTY OF name_obj 'XXX' = f ."设置对象NAME_obj属性xxx为值f
GET PROPERTY OF name_obj 'xxx' = f ."将name_obj的属性xxx的值获取赋给f
CALL METHOD OF
name_obj
'xxx' = f "由f来接收返回值
EXPORTING
# = f1. "调用name_obj的方法xxx 传入参数f1…fn
FREE OBJECT name_obj . "释放.

3.创建对象

CREATE OBJECT EXCEL_OBJ 'EXCEL.APPLICATION'.

SET PROPERTY OF EXCEL_OBJ 'VISIBLE' = ."使excel可见(1:可见 0:后台运行不可见)

SET PROPERTY OF EXCEL_OBJ 'SHEETSINNEWWORKBOOK' = ."设置 Microsoft Excel 软件打开时,自动插入到新工作簿中的工作表数目(即初始sheet数目,默认名字依次为 Sheet1、Sheet2.....)

4.创建workbook

CALL METHOD OF EXCEL_OBJ 'WORKBOOKS' = BOOK_OBJ.

"由于Workbooks同时为属性,所以可以使用下面语句代替上面语句
*GET PROPERTY OF EXCEL 'Workbooks' = WORKBOOK_OBJ .
CALL METHOD OF BOOK_OBJ 'ADD'.
CALL METHOD OF BOOK_OBJ 'OPEN'EXPORTING # = 'c:\***.xlsx'."开文件

5.增添sheet

CALL METHOD OF EXCEL_OBJ 'sheets' = SHEET_OBJ.
CALL METHOD OF SHEET_OBJ 'Add'. SET PROPERTY OF SHEET_OBJ 'Name' = 'NAME'."sheet重命名

6.切换sheet

CALL METHOD OF EXCEL_OBJ 'Worksheets' = SHEET EXPORTING # = 'sheet3'.
CALL METHOD OF SHEET_OBJ 'Activate'.

7.给单元格赋值

CaLL METHOD OF EXCEL_OBJ 'CELLS' = CELL EXPORTING # = row # = col.
SET PROPERTY OF CELL_OBJ 'value' = xxxx.

8.执行宏

CALL METHOD OF EXCEL_OBJ 'RUN' EXPORTING # = 'ZRUNM'.

9.保存和退出

PS:如果遇到程序执行完之后 EXCEL后台未关闭的时候,检查一下 有没有在保存操作前 执行激活

GET PROPERTY OF EXCEL_OBJ 'ACTIVESHEET' = SHEET."激活工作簿
GET PROPERTY OF EXCEL_OBJ 'ACTIVEWORKBOOK' = WORKBOOK."激活工作区
CALL METHOD OF BOOK_OBJ 'SAVEAS'EXPORTING # = 'c:\1.xls' # = . "另存为
"CALL METHOD OF BOOK_OBJ 'SAVE'."保存
CALL METHOD OF BOOK_OBJ 'CLOSE'. "关闭工作区
CALL METHOD OF EXCEL_OBJ 'QUIT'."退出excel

10.释放资源

FREE OBJECT SHEET_OBJ.
FREE OBJECT WORKBOOK_OBJ.
FREE OBJECT EXCEL_OBJ.

11.例子:

 REPORT ZZJX_TEST08 MESSAGE-ID ZZJXMSG.

 DATA:C_EXPORT_FILENAME_XLS   TYPE STRING VALUE 'ZJX_TEST.XLSX', "导出模板默认文件名 '数据导入模板'
C_OBJID_XLS TYPE WWWDATATAB-OBJID VALUE 'ZZJX_TEST08'. "存放模板的对象id DATA: LO_OBJDATA LIKE WWWDATATAB, "Excel模板对象
LS_DESTINATION LIKE RLGRAP-FILENAME ,"下载保存的目标路径
LC_PATH TYPE STRING, "存储路径
LC_FULLPATH TYPE STRING, "文件完整路径
LI_RC LIKE SY-SUBRC. "返回值 DATA: EXCEL_OBJ TYPE OLE2_OBJECT,
BOOK_OBJ TYPE OLE2_OBJECT,
SHEET_OBJ TYPE OLE2_OBJECT,
CELL_OBJ TYPE OLE2_OBJECT. LOAD-OF-PROGRAM. PARAMETERS: P_FILE TYPE RLGRAP-FILENAME OBLIGATORY. INITIALIZATION. AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
EXPORTING
WINDOW_TITLE = 'File Directory'
INITIAL_FOLDER = 'C:\Users\BRIGHT-SH-002\Desktop'
CHANGING
SELECTED_FOLDER = LC_PATH
* EXCEPTIONS
* CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
* OTHERS = 4
.
P_FILE = LC_PATH. START-OF-SELECTION.
*第一步: 下载Excel到本地
PERFORM DOWNLOAD_XLS_TEMPLATE. *第二步:打开Excel文档
PERFORM OPEN_EXCEL. *第三步: 写入数据
PERFORM WRITE_EXCEL. END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_XLS_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWNLOAD_XLS_TEMPLATE .
* 获取保存路径
* LC_PATH = P_FILE. * CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
* CHANGING
* DESKTOP_DIRECTORY = LC_PATH
** EXCEPTIONS
** CNTL_ERROR = 1
** ERROR_NO_GUI = 2
** NOT_SUPPORTED_BY_GUI = 3
** OTHERS = 4
* .
* IF LC_PATH IS INITIAL.
* LC_PATH = 'C:\Users\BRIGHT-SH-002\Desktop'.
* ENDIF. CONCATENATE LC_PATH '\' C_EXPORT_FILENAME_XLS INTO LC_FULLPATH.
* 检查模板是否存在
SELECT SINGLE RELID OBJID FROM WWWDATA INTO CORRESPONDING FIELDS OF LO_OBJDATA
WHERE SRTF2 = 0 AND RELID = 'MI' AND OBJID = C_OBJID_XLS.
IF SY-SUBRC NE 0 OR LO_OBJDATA-OBJID EQ SPACE.
MESSAGE E000(ZZJXMSG) WITH C_EXPORT_FILENAME_XLS.
ENDIF. * 下载模板
LS_DESTINATION = LC_FULLPATH .
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LO_OBJDATA
DESTINATION = LS_DESTINATION
IMPORTING
RC = LI_RC
* CHANGING
* TEMP =
.
IF LI_RC NE 0.
MESSAGE E001(ZZJXMSG) WITH C_EXPORT_FILENAME_XLS.
ENDIF. ENDFORM. " DOWNLOAD_XLS_TEMPLATE
*&---------------------------------------------------------------------*
*& Form OPEN_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM OPEN_EXCEL .
CREATE OBJECT EXCEL_OBJ 'EXCEL.APPLICATION'.
IF SY-SUBRC NE 0.
MESSAGE 'EXCEL创建错误' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF. CALL METHOD OF
EXCEL_OBJ
'WORKBOOKS' = BOOK_OBJ.
SET PROPERTY OF EXCEL_OBJ 'VISIBLE' = 0.
* SET PROPERTY OF EXCEL_OBJ 'SheetInNewWorkbook' = 1. * 打开excel文件,(新建使用:call method of book_obj 'Add' = sheet_obj)
CALL METHOD OF
BOOK_OBJ
'Open' = SHEET_OBJ
EXPORTING
#1 = LS_DESTINATION. CALL METHOD OF
EXCEL_OBJ
'Sheets' = SHEET_OBJ"切换sheets
EXPORTING
#1 = 1. CALL METHOD OF
SHEET_OBJ
'Select'. * FREE OBJECT SHEET_OBJ."ok
CALL METHOD OF SHEET_OBJ 'ACTIVATE'."激活
SET PROPERTY OF SHEET_OBJ 'NAME' = '库存物料表'.
ENDFORM. " OPEN_EXCEL
*&---------------------------------------------------------------------*
*& Form WRITE_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_EXCEL .
DATA:BEGIN OF IT_DATA OCCURS 10,
MANDT TYPE MANDT,
MATNR TYPE MATNR,
MAKTX TYPE MAKT-MAKTX,
WERKS TYPE WERKS_D,
NAME1 TYPE NAME1,
LGORT TYPE LGORT_D,
LGOBE TYPE T001L-LGOBE,
LABST TYPE LABST,
MEINS TYPE MEINS,
END OF IT_DATA.
DATA LV_ROWS TYPE I.
RANGES: LR_MATNR FOR MARD-MATNR.
CLEAR LR_MATNR.
LR_MATNR-SIGN = 'I'.
LR_MATNR-OPTION = 'BT'.
LR_MATNR-LOW = ''.
LR_MATNR-HIGH = ''.
APPEND LR_MATNR. SELECT A~MATNR B~MAKTX A~WERKS C~NAME1 A~LGORT D~LGOBE A~LABST E~MEINS
INTO CORRESPONDING FIELDS OF TABLE IT_DATA
FROM MARD AS A
INNER JOIN MAKT AS B ON B~MATNR = A~MATNR AND B~SPRAS = 'JA'
INNER JOIN T001W AS C ON C~WERKS = A~WERKS
INNER JOIN T001L AS D ON D~LGORT = A~LGORT
INNER JOIN MARA AS E ON E~MATNR = A~MATNR
UP TO 5 ROWS
WHERE A~MATNR IN LR_MATNR. FIELD-SYMBOLS <FS1> LIKE LINE OF IT_DATA.
LOOP AT IT_DATA ASSIGNING <FS1> .
<FS1>-MANDT = SY-MANDT.
ENDLOOP. * PERFORM EXCEL_ROW_INSERT USING SHEET_OBJ 3 1.
* 输出Excel表头,自定义格式的列等
PERFORM FILL_CELL USING 3 1 1 'MANDT'.
PERFORM FILL_CELL USING 3 2 1 'MATNR'.
PERFORM FILL_CELL USING 3 3 1 'MAKTX'.
PERFORM FILL_CELL USING 3 4 1 'WERKS'.
PERFORM FILL_CELL USING 3 5 1 'NAME1'.
PERFORM FILL_CELL USING 3 6 1 'LGORT'.
PERFORM FILL_CELL USING 3 7 1 'LGOBE'.
PERFORM FILL_CELL USING 3 8 1 'LABST'.
PERFORM FILL_CELL USING 3 9 1 'MEINS'.
CLEAR LV_ROWS.
LOOP AT IT_DATA.
LV_ROWS = SY-TABIX + 3.
* PERFORM EXCEL_ROW_INSERT USING SHEET_OBJ LV_ROWS 1.
PERFORM FILL_CELL USING: LV_ROWS 1 0 IT_DATA-MANDT,
LV_ROWS 2 1 IT_DATA-MATNR,
LV_ROWS 3 0 IT_DATA-MAKTX,
LV_ROWS 4 0 IT_DATA-WERKS,
LV_ROWS 5 0 IT_DATA-NAME1,
LV_ROWS 6 0 IT_DATA-LGORT,
LV_ROWS 7 0 IT_DATA-LGOBE,
LV_ROWS 8 0 IT_DATA-LABST,
LV_ROWS 9 0 IT_DATA-MEINS.
ENDLOOP. FREE OBJECT CELL_OBJ.
GET PROPERTY OF EXCEL_OBJ 'ActiveSheet' = SHEET_OBJ. "获取活动SHEET
FREE OBJECT SHEET_OBJ.
GET PROPERTY OF EXCEL_OBJ 'ACTIVEWORKBOOK' = BOOK_OBJ."激活工作区
"save
* CALL METHOD OF
* BOOK_OBJ
* 'SAVEAS'
* EXPORTING
* #1 = LC_FULLPATH
* #2 = 1.
CALL METHOD OF
BOOK_OBJ
'SAVE'.
* SET PROPERTY OF excel 'Visible' = 1. "是否显示EXCEL 此处显示不退出
CALL METHOD OF
BOOK_OBJ
'CLOSE'.
CALL METHOD OF
EXCEL_OBJ
'QUIT'. FREE OBJECT BOOK_OBJ.
FREE OBJECT EXCEL_OBJ.
ENDFORM. " WRITE_EXCEL
*&---------------------------------------------------------------------*
*& Form filL_cell
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->row 行
* -->col 列
* -->bold 加粗
* -->val 填充值
*----------------------------------------------------------------------*
FORM FILL_CELL USING VALUE(ROW)
VALUE(COL)
VALUE(BOLD)
VALUE(VAL).
CALL METHOD OF
EXCEL_OBJ
'CELLS' = CELL_OBJ
EXPORTING
#1 = ROW
#2 = COL.
* SET PROPERTY OF CELL_OBJ 'BOLD' = BOLD.
SET PROPERTY OF CELL_OBJ 'VALUE' = VAL.
* FREE OBJECT CELL_OBJ.
ENDFORM. " FIL_CELL
*&---------------------------------------------------------------------*
*& Form EXCEL_ROW_INSERT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SHEET text
* -->P_TAB text
* -->P_1 text
*----------------------------------------------------------------------*
FORM EXCEL_ROW_INSERT USING LCOBJ_SHEET
LC_ROW
LC_COUNT.
DATA LC_RANGE TYPE OLE2_OBJECT.
DATA H_BORDERS TYPE OLE2_OBJECT.
DO LC_COUNT TIMES.
CALL METHOD OF
LCOBJ_SHEET
'Rows' = LC_RANGE
EXPORTING
#1 = 1.
CALL METHOD OF LC_RANGE 'Copy'. "COPY第6行插入一个新行
CALL METHOD OF
LCOBJ_SHEET
'Rows' = LC_RANGE
EXPORTING
#1 = LC_ROW.
CALL METHOD OF
LC_RANGE
'Insert'.
CALL METHOD OF LC_RANGE 'ClearContents'. "是否需要清空Cell
ENDDO.
ENDFORM. " EXCEL_ROW_INSERT

2018.04.03 ABAP OLE操作整理的更多相关文章

  1. ABAP ole操作1

    转自:https://www.cnblogs.com/jxzhu/p/8708686.html OLE整理: 1.定义,分别对应EXCEL,workbook(工作簿),sheet(页),单元格 DAT ...

  2. ABAP ole操作

    1.ole 如何保存和退出call method of sheetname 'saves' exporting #1 = filepath #2 = 1. call method of applica ...

  3. 04、常用RDD操作整理

    常用Transformation 注:某些函数只有PairRDD只有,而普通的RDD则没有,比如gropuByKey.reduceByKey.sortByKey.join.cogroup等函数要根据K ...

  4. 2018/04/03 每日一个Linux命令 之 lastb/last

    今天还在想暴力破解一个服务器是怎么完成的....... -- lastb功能说明:列出登录系统失败的用户相关信息. -- 单独执行 lastb 时候,它会读取/var/log 下的 btmp 文件,输 ...

  5. 2018/04/03 PHP 中的 进制计算问题

    还是先抛出一个问题 017 + 1 = ? -- 如果你知道的话,那也就不用看下面了,哈哈. 答案是 // 15 -- 如果你想的答案和这个不对的话,说明你也有这个问题,也应该学习一下啦. -- 首先 ...

  6. SQL不同服务器数据库之间的数据操作整理(完整版)

    ---------------------------------------------------------------------------------- -- Author : htl25 ...

  7. 转载-SQL不同服务器数据库之间的数据操作整理(完整版) .

    ---------------------------------------------------------------------------------- -- Author : htl25 ...

  8. 20172319 2018.04.11-16 《Java程序设计教程》 第6周学习总结

    20172319 2018.04.11-16 <Java程序设计教程>第6周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题 ...

  9. 转:2018最全Redis面试题整理

    Java面试----2018最全Redis面试题整理 1.什么是Redis? 答:Redis全称为:Remote Dictionary Server(远程数据服务),是一个基于内存的高性能key-va ...

随机推荐

  1. Hosts 长期更新【已停】

    修改hosts篇 [2018.1.3] 由于google的对应的hosts更新过于频繁,再加上上次(18+1)大之后,国家政策原因,网上hosts更新基本上都停了,github的项目也陆续挂掉了. 还 ...

  2. JVM指令集[转]

    http://blog.csdn.net/tccth4091/article/details/5833103 http://www.cnblogs.com/rollenholt/articles/21 ...

  3. 【Leetcode】【简单】【1. 两数之和】【JavaScript】

    题目描述 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能 ...

  4. Centos杀死进程kill方法大全

    杀死进程最安全的方法是单纯使用kill命令. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常都能达到目的.终止有问题的进程,并 ...

  5. 正则表达式匹配IP地址

    '''首先分析ip地址的特征:255.255.255.255,前三位的数字处理基本一致 1位: 0-9              \d2位:10-99         [1-9]\d3位:100-19 ...

  6. Paper Reading:HyperNet

    论文:HyperNet: Towards Accurate Region Proposal Generation and Joint Object Detection 发表时间:2016 发表作者:( ...

  7. Java字节码方法表与属性表深度剖析

    方法表: 在上一次咱们已经分析到了字段信息了,如下: 紧接着就是方法相关的信息了: 而它展开之后的结构为: 所以往后数2个字节,看一下方法的总数: 3个方法,可咱们只定义了两个方法呀: 因为编译器会为 ...

  8. jquery 选择器能否查找display:none的元素

    jQuery可以用可见性“:hidden”查找“display:none”的元素. 1.新家html文档,在head标签中引入本地jQuery文件,也可以引入cdn文件: 2.在body标签中添加一些 ...

  9. script标签中的async、defer属性

    Script标签是我们常用的引用js脚本的一种方式. 撸代码的时候,我们常常只写src属性,直接忽略其他属性. 最近发现了2个可以利用的属性:async.defer. 顾名思义async就是异步,在不 ...

  10. 第90题:子集II

    一. 问题描述 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2] 输出: [ [2], [1], [1, ...