目录
- 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格式。 示例如下:
![](https://img7.php1.cn/3cdc5/cb19/42f/a4a64c3361c5f885.gif)
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.
![](https://img7.php1.cn/3cdc5/cb19/42f/a4a64c3361c5f885.gif)
这个函数虽然比较简单,但当FILETYPE为DAT和ASC时,生成的文件用EXCEL打开时会弹出如下的对话框:
![](https://img7.php1.cn/3cdc5/cb19/42f/1a3f5d6dd056a9dd.png)
原因: 以DAT和ASC格式存的表格其实是TXT格式,与EXCEL格式不一致,将扩展名改为TXT,会很容易看出这一点。
2. 函数:SAP_CONVERT_TO_XLS_FORMAT
这个FM功能与GUI_DOWNLOAD类似,支持xlsx格式:
![](https://img7.php1.cn/3cdc5/cb19/42f/a4a64c3361c5f885.gif)
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.
![](https://img7.php1.cn/3cdc5/cb19/42f/a4a64c3361c5f885.gif)
回到顶部
3. 函数: MS_EXCEL_OLE_STANDARD_DAT
同时也会直接打开EXCEL文件。这个FM不仅仅能把数据传到EXCEL&#xff0c;
但是这个函数有一个缺点&#xff1a;当要把中文数据导入到EXCEL时就必有登陆中文的GUI运行程序&#xff0c;否则中文就会变成&#39;#&#39;号。
![](https://img7.php1.cn/3cdc5/cb19/42f/a4a64c3361c5f885.gif)
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 .
![](https://img7.php1.cn/3cdc5/cb19/42f/a4a64c3361c5f885.gif)
说明&#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
![](https://img7.php1.cn/3cdc5/cb19/42f/65ad63b0f2c2abb3.png)
一种可视化表单生成工具&#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 .