SAP导出内表数据到excel
DATA: EXCEL TYPE OLE2_OBJECT,
SHEET TYPE OLE2_OBJECT,
CELL TYPE OLE2_OBJECT,
WORKBOOK TYPE OLE2_OBJECT,
XLSNAME TYPE STRING VALUE 'C:\sap_usr02.xls',
LINE TYPE I VALUE 0. "行号
CREATE OBJECT EXCEL 'EXCEL.APPLICATION'."启动Excel
IF SY-SUBRC NE 0.
WRITE: / '启动Excel失败。'.
STOP.
ENDIF.
CALL METHOD OF EXCEL 'WORKBOOKS' = WORKBOOK.
SET PROPERTY OF EXCEL 'VISIBLE' = 1. "使excel 可视
SET PROPERTY OF EXCEL 'SHEETSINNEWWORKBOOK' = 1. "如果是读取excel文件中的内容 则是直接打开工作簿第一页
CALL METHOD OF WORKBOOK 'ADD'. "例如:CALL METHOD OF EXCEL 'WORKSHEETS' = SHEET EXPORTING #1 = 1.
LOOP AT IT_DATA INTO MY_DATA.
LINE = LINE + 1. "Excel 中行号从1开始
CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = LINE #2 = 1. "指定单元格,
SET PROPERTY OF CELL 'VALUE' = MY_DATA-MANDT. "写入值
CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = LINE #2 = 2. "指定单元格,
SET PROPERTY OF CELL 'VALUE' = MY_DATA-BNAME. "写入值
CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = LINE #2 = 3. "指定单元格,
SET PROPERTY OF CELL 'VALUE' = MY_DATA-ERDAT. "写入值
CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = LINE #2 = 4. "指定单元格,
SET PROPERTY OF CELL 'VALUE' = MY_DATA-LTIME. "写入值
ENDLOOP.
GET PROPERTY OF EXCEL 'ACTIVESHEET' = SHEET. "激活工作簿
GET PROPERTY OF EXCEL 'ACTIVEWORKBOOK' = WORKBOOK. "激活工作区
CALL METHOD OF WORKBOOK 'SAVEAS' EXPORTING #1 = XLSNAME #2 = 1. "将excel文件保存
CALL METHOD OF WORKBOOK 'CLOSE'. "关闭工作区
CALL METHOD OF EXCEL 'QUIT'. "退出excel
*WRITE:/ XLSNAME,'DONE'. "退出成功,输出done
FREE OBJECT SHEET. "释放操作
FREE OBJECT WORKBOOK.
FREE OBJECT EXCEL.
其他方法:
目录
- 1. 函数: GUI_DOWNLOAD
- 3. 函数: MS_EXCEL_OLE_STANDARD_DAT
- 4. OLE
- 5. 函数: XXL_FULL_API
- 6. ABAP2XLSX
- 7. XLSX Workbench
1. 函数: GUI_DOWNLOAD
这是一种最基本的方法,对应 CLASS: CL_GUI_FRONTEND_SERVICES 的方法 GUI_DOWNLOAD
注意FILENAME参数的扩展名应为XLS,这样在保存时可以保存为EXCEL格式。 示例如下:
1 DATA:itab LIKE TABLE OF mara WITH HEADER LINE.
3DATA:BEGINOF t_fieldnames OCCURS0,
4
5 name TYPE char20,
6
7 END OF t_fieldnames.
8
9 START-OF-SELECTION.
10
11 SELECT * FROM mara INTO TABLE itab UP TO 10 ROWS.
12
13 t_fieldnames-name = '公司代码'.
14
15 APPEND t_fieldnames.
16
17 t_fieldnames-name = '功能范围'.
18
19 APPEND t_fieldnames.
20
21 CALL FUNCTION 'GUI_DOWNLOAD'
22 EXPORTING
23 filename = 'C:\1234.xls'
24 filetype = 'DAT'
25 "这里一般用DAT,如果用ASC则1000-不会显示为-1000,而dat会显示为-1000,如果用DBF则不会有缩进,即字符前面的空格会被除去,而且字符的前导0也会输出。
26 codepage = '8404'
27 TABLES
28 data_tab = itab
29 fieldnames = t_fieldnames.
这个函数虽然比较简单,但当FILETYPE为DAT和ASC时,生成的文件用EXCEL打开时会弹出如下的对话框:

原因: 以DAT和ASC格式存的表格其实是TXT格式,与EXCEL格式不一致,将扩展名改为TXT,会很容易看出这一点。
2. 函数:SAP_CONVERT_TO_XLS_FORMAT
这个FM功能与GUI_DOWNLOAD类似,支持xlsx格式:
SELECT * FROM sflight INTO TABLE @DATA(gt_temp) UP TO 10 ROWS. CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
EXPORTING
i_filename = 'C:\SAP\QQ1.XLSX'
TABLES
i_tab_sap_data = gt_temp
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
3. 函数: MS_EXCEL_OLE_STANDARD_DAT
同时也会直接打开EXCEL文件。这个FM不仅仅能把数据传到EXCEL,
但是这个函数有一个缺点:当要把中文数据导入到EXCEL时就必有登陆中文的GUI运行程序,否则中文就会变成'#'号。
1 DATA:BEGIN OF it_fieldnames OCCURS 0,
2
3 name TYPE char20,
4
5 END OF it_fieldnames.
6
7 it_fieldnames-name = 'Company Code'.
8
9 APPEND it_fieldnames.
10
11 it_fieldnames-name = 'Function Area'.
12
13 APPEND it_fieldnames.
14
15 it_fieldnames-name = '5'. "针对非C、N、D、T类型列的列名,函数有Bug
16
17 APPEND it_fieldnames.
18
19 CALL FUNCTION 'MS_EXCEL_OLE_STANDARD_DAT'
20 EXPORTING
21 file_name = 'C:\johnson.XLSX'
22 * CREATE_PIVOT = 0
23 * DATA_SHEET_NAME = ' '
24 * PIVOT_SHEET_NAME = ' '
25 * PASSWORD = ' '
26 * pASSWORD_OPTION = 0
27 TABLES
28 * PIVOT_FIELD_TAB =
29 data_tab = itab
30 fieldnames = it_fieldnames
31 * EXCEPTIONS
32 * FILE_NOT_EXIST = 1
33 * FILENAME_EXPECTED = 2
34 * cOMMUNICATION_ERROR = 3
35 * oLE_OBJECT_METHOD_ERROR = 4
36 * OLE_OBJECT_PROPERTY_ERROR = 5
37 * INVALID_PIVOT_FIELDS = 6
38 * DOWNLOAD_PROBLEM = 7
39 * OTHERS = 8
说明:应用这个FM时要注意的问题:
1、Fieldname数据类型会被强制转变为对应列的类型,如果转换失败则Dump
2、如果连续两次或两次以上以上调用,列名会跑到数据区
还有一个函数似乎是它的前身,名字是 EXCEL_OLE_STANDARD_DAT ,实现方法相似。不过这个函数对某些表会报"data can't converted in unicode program" 的错误,所以还是建议采用最新的函数。
4. OLE
这种方式与上面几种比较优点在于能够定制EXCEL格式,不过比较麻烦。
实现方法见这篇文章:http://www.cnblogs.com/hhelibeb/p/5787396.html
5. 函数: XXL_FULL_API
同样能实现EXCEL格式,并且速度上较OLE有优势。SE38有几个参考示例: XXLTTEST, XXLSTEST, XXLFTEST
6. ABAP2XLSX
这是一个类包,是一群爱好者开发的一个专门用于将ABAP数据导入到EXCEL的类,包括对齐,合并,字体,着色等的设置,因为是面向对象的,相比OLE方式要简单,编写程序也就比较省力。
一般用于需要定制EXCEL格式的情况。
具体可参考此文章
7. XLSX Workbench

一种可视化表单生成工具,相比复杂的OLE,可以用少量代码+一些拖拽和配置来生成EXCEL报表,性能更好。按XLSX Workbench的文档介绍,它有九大特性:
- 无需ABAP编程技能
- 可视化设计方式
- 高性能
- 支持后台处理
- 强大的表单格式特性支持
- 支持公式
- 支持图片
- 支持图表
- 支持树
官方文档:https://sites.google.com/site/sapxlwb/home
XLSX Workbench是我眼中的首选方案,因为它的可视化编辑工具真的很方便。通过这个工具,开发者只需要简单地将数据放入设计好的context结构,并且在可视化工具中将context绑定到具体的单元格,就可以生成EXCEL文件了:
DATA: l_data TYPE zcontext. CALL FUNCTION 'ZXLWB_CALLFORM'
EXPORTING
iv_formname = 'ZXLWBFORM'
iv_context_ref = l_data
EXCEPTIONS
OTHERS = 2.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF .
SAP导出内表数据到excel的更多相关文章
- 七十一、SAP中内表的修改,改一行数据,或一行的某个字段
一.SAP中内表的修改,只能通过工作区来修改,代码如下 二.效果如下
- 使用POI导出百万级数据到excel的解决方案
1.HSSFWorkbook 和SXSSFWorkbook区别 HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls,一张表最大支持65536行数据,256列 ...
- REUSE_ALV_GRID_DISPLAY显示ALV,设置可编辑时,与内表数据同步问题
使用function module: REUSE_ALV_GRID_DISPLAY显示ALV,并设置alv某些列可编辑,可是编辑后发现对应的内表数据并没有随之改变.记得需要设置一个参数的值,怎么想也记 ...
- ABAP内表数据和JSON格式互转
本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...
- SQLServer导出导出单表数据
1.SQLServer导出单表数据为TXT文件 数据库--任务--导出数据
- 七十四、SAP中内表的4中删除方法
一.代码如下 二.效果如下 *&---------------------------------------------------------------------* *& Re ...
- 六十七、SAP中内表插入的三种方法之一,APPEND的使用
一.如果内表是一个普通的内表,只用于存储数据不用来排序,那么优先选择APPEND插入 二.我们运行程序,并把工作区和内表加入到断点变量,如图所示,1X22的意思如图 三.我们点击ITAB1,来看内表数 ...
- SAP ABAP: 把内表数据以excel或csv格式,通过前台或者后台的方式上传至FTP服务器
今天接到一个FTP的需求,就是每天晚上把当天某个报表的数据自动保存excel上传到FTP服务器. SAP已经有现成的FTP函数使用,可以通过函数的方式来实现,实现前先准备一些数据: User:登录FT ...
- mysql导出多个表数据为excel方法,substring函数查询
//查询sys_username以S.00655开头的用户 ),sys_password FROM `tbl_sa_syslogin` where sys_username like 'S.%'; / ...
随机推荐
- ASP.NET Core 入门笔记4,ASP.NET Core MVC路由入门
敲了一部分,懒得全部敲完,直接复制大佬的博客了,如有侵权,请通知我尽快删除修改 摘抄自https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc ...
- 3分钟Markdown快速入门与使用
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 注意:图片为效果图 1 标题 #开头代表标题,几个#号代表几级,最高支持六级标题 ...
- docker清理
# 删除退出的容器docker rm $(docker ps -qa --no-trunc --filter "status=exited") # 删除悬挂镜像docker rmi ...
- APP安全_Android渗透环境
Android渗透 移动APP大多通过WEB API服务的方式与服务端进行交互,这种模式把移动安全和web安全绑在一起.常见的web漏洞在移动APP中也存在,比如SQL注入,文件上传,中间件/serv ...
- 用Blackbox Exporter to Monitor web和端口
1.按照exporter .wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.12.0/blackbo ...
- ASP.NET Core中使用Dapper
⒈添加 NuGet 包 Install-Package Dapper ⒉封装数据库类型 using System; using System.Collections.Generic; using Sy ...
- mybatis 基础(一) xml配置
如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬! mybatis: 1.轻量级 2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库, ...
- LeetCode 141 ——环形链表(JAVA)
给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. 示例 1: 输入: ...
- golang 客户端
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { fmt ...
- 使用SQL语句查询Elasticsearch索引数据
Elasticsearch 的官方查询语言是 Query DSL,存在毕竟有存在的道理,存在即合理.SQL 作为一个数据库查询语言,它语法简洁,书写方便而且大部分服务端程序员都清楚了解和熟知它的写法. ...