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

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,如果用ASC1000-不会显示为-1000,而dat会显示为-1000,如果用DBF则不会有缩进,即字符前面的空格会被除去,而且字符的前导0也会输出。

    CODEPAGE                        '8404'

  tables

    data_tab                        ITAB

    FIELDNAMES                      T_FIELDNAMES

 

这个函数虽然说比较简单,但当FILETYPDAT ASC时,在我的2010EXCEL打开时会弹出如下的对话框(不知道在EXCEL 2003会不会有这样的问题,知道的童鞋可以给个留言):

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

原因: DATASC格式存的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'. "针对非CNDT类型列的列名,函数有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格式的情况下使用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值