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. js中的分页

    分页是前端经常会用到的一个非常实用的一个知识点,今天闲来没事,做了一个小demo,虽然样子,比较丑,哈哈哈,但是这是分页的核心思想都在,希望能给某个小伙伴一些启发.可直接复制在编辑器中运行. < ...

  2. Seafile和Nextcloud相比较哪个好用

    面对大量的照片视频,备份资料成了很多网友的刚需.但现在各大免费网盘,关闭地关闭,收费的收费,自建网盘成了一个不得已的选择.可以自建私有网盘的网盘程序最出名的要数Seafile和Nextcloud,一款 ...

  3. matlab安装MinG-w64 C/C++编译器

    matlab 2018b之编译器的安装 安装MinGW C/C++ 编译器

  4. vue.js v-cloak指令

    可以使用 v-cloak 指令设置样式,这些样式会在 Vue 实例编译结束时,从绑定的 HTML 元素上被移除. 当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示 ...

  5. ASP.Net参数传递小结

    同一页面.aspx与.aspx.cs之间参数传递 1. .aspx.cs接收.aspx的参数:由于.aspx和.aspx.cs为继承关系,所以.aspx.cs可以直接对.aspx中的ID进行值提取,具 ...

  6. 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)

    Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...

  7. spring boot项目接入xxl-job

    关于分布式任务调度平台XXL-JOB,作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里就不做过多的介绍了.按照文档搭建xxl-job,做此纪录. 1.源码下载地址 GitHub:https: ...

  8. springboot2.0最精简的配置yml

    https://blog.csdn.net/yu_hongrun/article/details/81708762

  9. [POI2010]MOT-Monotonicity 2

    洛谷题目链接 动态规划$+$线段树 题目链接(洛谷) 首先,先要明确一点,当我们填了第$i$位时,自然下一位的符号也就出来了 那么我们可以分情况讨论: $1.$当下一位是$>$时:我们可以建一棵 ...

  10. array_merge与array+array的区别

    结果: