热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ABAP内表导出为EXCEL格式的几种方法(转)

目录1.函数:GUI_DOWNLOAD3.函数:MS_EXCEL_OLE_STANDARD_DAT4.OLE5.函数:XXL_FULL_API6.ABAP2XLSX7.XLSXW

目录

  • 1. 函数: GUI_DOWNLOAD
  • 3. 函数: MS_EXCEL_OLE_STANDARD_DAT
  • 4. OLE
  • 5. 函数: XXL_FULL_API
  • 6. ABAP2XLSX
  • 7. XLSX Workbench

 

正文

 这是一篇转载文章,本人修改了其中的几个错字病句

内表数据下载到EXCEL的几种方法

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'EXPORTINGi_filename = 'C:\SAP\QQ1.XLSX'TABLESi_tab_sap_data = gt_tempEXCEPTIONSconversion_failed = 1OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

 

 

 

回到顶部

3. 函数: MS_EXCEL_OLE_STANDARD_DAT

     同时也会直接打开EXCEL文件。这个FM不仅仅能把数据传到EXCEL&#xff0c;

    但是这个函数有一个缺点&#xff1a;当要把中文数据导入到EXCEL时就必有登陆中文的GUI运行程序&#xff0c;否则中文就会变成&#39;#&#39;号。

 1 DATA:BEGIN OF it_fieldnames  OCCURS 0,
 2 
 3        name TYPE char20,
 4 
 5      END OF it_fieldnames.
 6 
 7 it_fieldnames-name &#61; &#39;Company Code&#39;.
 8 
 9 APPEND it_fieldnames.
10 
11 it_fieldnames-name &#61; &#39;Function Area&#39;.
12 
13 APPEND it_fieldnames.
14 
15 it_fieldnames-name &#61; &#39;5&#39;. "针对非C、N、D、T类型列的列名&#xff0c;函数有Bug
16 
17 APPEND it_fieldnames.
18 
19 CALL FUNCTION &#39;MS_EXCEL_OLE_STANDARD_DAT&#39;
20   EXPORTING
21     file_name  &#61; &#39;C:\johnson.XLSX&#39;
22 *   CREATE_PIVOT                    &#61; 0
23 *   DATA_SHEET_NAME                 &#61; &#39; &#39;
24 *   PIVOT_SHEET_NAME                &#61; &#39; &#39;
25 *   PASSWORD   &#61; &#39; &#39;
26 *   pASSWORD_OPTION                 &#61; 0
27   TABLES
28 *   PIVOT_FIELD_TAB                 &#61;
29     data_tab   &#61; itab
30     fieldnames &#61; it_fieldnames
31 *     EXCEPTIONS
32 *   FILE_NOT_EXIST                  &#61; 1
33 *   FILENAME_EXPECTED               &#61; 2
34 *   cOMMUNICATION_ERROR             &#61; 3
35 *   oLE_OBJECT_METHOD_ERROR         &#61; 4
36 *   OLE_OBJECT_PROPERTY_ERROR       &#61; 5
37 *   INVALID_PIVOT_FIELDS            &#61; 6
38 *   DOWNLOAD_PROBLEM                &#61; 7
39 *   OTHERS     &#61; 8
40   .

 

    说明&#xff1a;应用这个FM时要注意的问题:

  1、Fieldname数据类型会被强制转变为对应列的类型&#xff0c;如果转换失败则Dump

  2、如果连续两次或两次以上以上调用&#xff0c;列名会跑到数据区

 

    还有一个函数似乎是它的前身&#xff0c;名字是 EXCEL_OLE_STANDARD_DAT &#xff0c;实现方法相似。不过这个函数对某些表会报"data can&#39;t converted in unicode program" 的错误&#xff0c;所以还是建议采用最新的函数。

  

回到顶部

4. OLE

这种方式与上面几种比较优点在于能够定制EXCEL格式&#xff0c;不过比较麻烦。

实现方法见这篇文章&#xff1a;http://www.cnblogs.com/hhelibeb/p/5787396.html

 

回到顶部

5. 函数: XXL_FULL_API

同样能实现EXCEL格式&#xff0c;并且速度上较OLE有优势。SE38有几个参考示例&#xff1a; XXLTTEST, XXLSTEST, XXLFTEST

  

回到顶部

6. ABAP2XLSX

这是一个类包&#xff0c;是一群爱好者开发的一个专门用于将ABAP数据导入到EXCEL的类&#xff0c;包括对齐&#xff0c;合并&#xff0c;字体&#xff0c;着色等的设置&#xff0c;因为是面向对象的&#xff0c;相比OLE方式要简单&#xff0c;编写程序也就比较省力。

一般用于需要定制EXCEL格式的情况。

   具体可参考此文章

 

回到顶部

7. XLSX Workbench

  

 

 

 

一种可视化表单生成工具&#xff0c;相比复杂的OLE&#xff0c;可以用少量代码&#43;一些拖拽和配置来生成EXCEL报表&#xff0c;性能更好。按XLSX Workbench的文档介绍&#xff0c;它有九大特性&#xff1a;

 

  • 无需ABAP编程技能
  • 可视化设计方式
  • 高性能
  • 支持后台处理
  • 强大的表单格式特性支持
  • 支持公式
  • 支持图片
  • 支持图表
  • 支持树

 

官方文档&#xff1a;https://sites.google.com/site/sapxlwb/home

XLSX Workbench是我眼中的首选方案&#xff0c;因为它的可视化编辑工具真的很方便。通过这个工具&#xff0c;开发者只需要简单地将数据放入设计好的context结构&#xff0c;并且在可视化工具中将context绑定到具体的单元格&#xff0c;就可以生成EXCEL文件了&#xff1a;

 

 

DATA: l_data TYPE zcontext.CALL FUNCTION &#39;ZXLWB_CALLFORM&#39;EXPORTINGiv_formname &#61; &#39;ZXLWBFORM&#39;iv_context_ref &#61; l_dataEXCEPTIONSOTHERS &#61; 2.
IF sy-subrc NE 0 .MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF .

 


推荐阅读
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
author-avatar
醉后余欢0醒后亦欢
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有