1.FM:GUI_DOWNLOAD
这是最基本的方法,对应 CLASS: CL_GUI_FRONTEND_SERVICES 的方法 GUI_DOWNLOAD
注意参数 FILENAME 以xls 结尾这样在保存时可以保存为 excel.
示例如下
data:itab like table of mara WITH HEADER LINE.
DATA:BEGIN OF T_FIELDNAMES OCCURS 0,
NAME TYPE CHAR20,
END OF T_FIELDNAMES.
START-OF-SELECTION.
select * from mara into table itab up to 10 rows.
T_FIELDNAMES-NAME = \'公司代码\'.
APPEND T_FIELDNAMES.
T_FIELDNAMES-NAME = \'功能范围\'.
APPEND T_FIELDNAMES.
CALL FUNCTION \'GUI_DOWNLOAD\'
EXPORTING
filename = \'C:\1234.xls\'
FILETYPE = \'DAT\'
"这里一般用DAT,如果用ASC则1000-不会显示为-1000,而dat会显示为-1000,如果用DBF则不会有缩进,即字符前面的空格会被除去,而且字符的前导0也会输出。
CODEPAGE = \'8404\'
tables
data_tab = ITAB
FIELDNAMES = T_FIELDNAMES
这个函数虽然说比较简单,但当FILETYP为DAT 和ASC时,在我的2010版EXCEL打开时会弹出如下的对话框(不知道在EXCEL 2003会不会有这样的问题,知道的童鞋可以给个留言):
原因: 以DAT和ASC格式存的EXCEL其实是TXT格式,与EXCEL格式不一致。
2.FM:SAP_CONVERT_TO_XLS_FORMAT
这个FM功能与GUI_DOWNLOAD类似,不过与EXCEL版本有兼容性的问题,本人在自己的系统上(excel 2010)测试此FM,给出了EXCEL文件格式无效,无法打开,在EXCEL2003暂时没试过。不过,这里还是给出示例:
CALL FUNCTION \'SAP_CONVERT_TO_XLS_FORMAT\'
EXPORTING
* I_FIELD_SEPERATOR =
* I_LINE_HEADER =
I_FILENAME = p_file "文件名
* I_APPL_KEEP = \' \'
TABLES
I_TAB_SAP_DATA = itab “内表
* CHANGING
* I_TAB_CONVERTED_DATA =
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2
3.FM:MS_EXCEL_OLE_STANDARD_DAT
这个FM不仅仅能把数据传到EXCEL同时也会直接打开EXCEL文件。
但是这个函数有一个缺点:当要把中文数据导入到EXCEL时就必有登陆中文的GUI运行程序,否则中文就会变成\'#\'号。
DATA:BEGIN OF iT_FIELDNAMES OCCURS 0,
NAME TYPE CHAR20,
END OF iT_FIELDNAMES.
iT_FIELDNAMES-NAME = \'Company Code\'.
APPEND iT_FIELDNAMES.
iT_FIELDNAMES-NAME = \'Function Area\'.
APPEND iT_FIELDNAMES.
iT_FIELDNAMES-NAME = \'5\'. "针对非C、N、D、T类型列的列名,函数有Bug
APPEND iT_FIELDNAMES.
CALL FUNCTION \'MS_EXCEL_OLE_STANDARD_DAT\'
EXPORTING
file_name = \'C:\johnson.XLSX\'
* CREATE_PIVOT = 0
* DATA_SHEET_NAME = \' \'
* PIVOT_SHEET_NAME = \' \'
* PASSWORD = \' \'
* pASSWORD_OPTION = 0
TABLES
* PIVOT_FIELD_TAB =
DATA_TAB = itab
FIELDNAMES = it_fieldnames
* EXCEPTIONS
* FILE_NOT_EXIST = 1
* FILENAME_EXPECTED = 2
* cOMMUNICATION_ERROR = 3
* oLE_OBJECT_METHOD_ERROR = 4
* OLE_OBJECT_PROPERTY_ERROR = 5
* INVALID_PIVOT_FIELDS = 6
* DOWNLOAD_PROBLEM = 7
* OTHERS = 8.
说明:应用这个FM时要注意的BUG:
1、Fieldname数据类型会被强制转变为对应列的类型,如果转换失败则Dump
2、如果连续两次或两次以上以上调用,列名会跑到数据区
还有一个貌似是这个函数前身 EXCEL_OLE_STANDARD_DAT ,实现方法差不多,不过这个函数对某些表会报
"data can\'t converted in unicode program" 的错误,所以还是建议采用最新的函数。
4.FM: XXL_FULL_API
这个作者还没有用过,不过有个参考示例se38:XXLTTEST
5.OLE
这种方式与上面几种比较优点在于能够定制EXCEL格式,不过比较麻烦。
实现方法google
6.ABAP2XLSX
这是一个类包,是一群爱好者开发的一个专门用于将ABAP数据导入到EXCEL的类,包括对齐,合并,字体,着色等的设置,因为是面向对象的,相比OLE方式要简单,编写程序也就比较省力。
这个方法一般用于需要定制EXCEL格式的情况下使用。