For project reason I need to fill some excel.
The content of each column comes from content in SE11:
In order to avoid such boring task, I write a small ABAP class to automate it.
This class will first read corresponding database table name based on CRM settype id, then call function module DDIF_NAMETAB_GET to get all metadata of each table field, and then send the data to clipboard.
Once done, put the focus on the first cell of content row, press Ctrl+V, all the data from clipboard will be copied into excel automatically.
The source code could be found below:
class ZCL_EXCEL_TOOL definition
public
final
create public .
public section.
methods GET_SETTYPE_FIELDS
importing
!IV_SETTYPE_ID type COMT_FRGTYPE_ID default 'COMM_PR_SHTEXT' .
PROTECTED SECTION.
private section.
types:
BEGIN OF ty_column,
a_index TYPE char3,
b_table TYPE dd03l-tabname,
c_fieldname TYPE dd03l-fieldname,
d_element TYPE dd03l-rollname,
e_datatype TYPE x031l-dtyp,
f_length TYPE char4,
g_description TYPE char40,
END OF ty_column .
types:
tt_column TYPE STANDARD TABLE OF ty_column WITH KEY a_index b_table c_fieldname .
types:
BEGIN OF ty_clipdata,
data TYPE c LENGTH 500,
END OF ty_clipdata .
types:
tt_formatted TYPE STANDARD TABLE OF ty_clipdata .
data MT_COLUMN type TT_COLUMN .
data MT_FORMATTED type TT_FORMATTED .
constants C_TAB type CHAR1 value CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB ##NO_TEXT.
methods CONVERT .
methods GET_FIELD_LABEL
importing
!IV_TAB_NAME type DDOBJNAME
!IV_FIELD_NAME type DFIES-FIELDNAME
returning
value(RV_LABEL) type STRING .
ENDCLASS.
CLASS ZCL_EXCEL_TOOL IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_EXCEL_TOOL->CONVERT
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD convert.
LOOP AT mt_column ASSIGNING FIELD-SYMBOL(<raw>).
APPEND INITIAL LINE TO mt_formatted ASSIGNING FIELD-SYMBOL(<converted>).
CONCATENATE <raw>-a_index <raw>-b_table <raw>-c_fieldname <raw>-d_element <raw>-e_datatype
<raw>-f_length <raw>-g_description INTO <converted> SEPARATED BY c_tab.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_EXCEL_TOOL->GET_FIELD_LABEL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_TAB_NAME TYPE DDOBJNAME
* | [--->] IV_FIELD_NAME TYPE DFIES-FIELDNAME
* | [<-()] RV_LABEL TYPE STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_field_label.
CALL FUNCTION 'DDIF_FIELDLABEL_GET'
EXPORTING
tabname = iv_tab_name
fieldname = iv_field_name
langu = sy-langu
IMPORTING
label = rv_label.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_EXCEL_TOOL->GET_SETTYPE_FIELDS
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_SETTYPE_ID TYPE COMT_FRGTYPE_ID (default ='COMM_PR_SHTEXT')
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_settype_fields.
DATA: lv_tab TYPE comc_settype-frgtype_tab,
lv_ret TYPE int4,
lt_list TYPE STANDARD TABLE OF x031l.
SELECT SINGLE frgtype_tab INTO lv_tab FROM comc_settype WHERE frgtype_id = iv_settype_id.
IF sy-subrc <> 0.
WRITE: / 'no database table maintained for settype: ', iv_settype_id.
RETURN.
ENDIF.
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
tabname = CONV ddobjname( lv_tab )
status = 'A'
TABLES
x031l_tab = lt_list
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE:/ 'table metadata parse error'.
RETURN.
ENDIF.
LOOP AT lt_list ASSIGNING FIELD-SYMBOL(<list>).
APPEND INITIAL LINE TO mt_column ASSIGNING FIELD-SYMBOL(<insert>).
<insert>-a_index = sy-tabix.
<insert>-b_table = lv_tab.
<insert>-c_fieldname = <list>-fieldname.
<insert>-d_element = <list>-rollname.
<insert>-e_datatype = <list>-dtyp.
<insert>-f_length = CONV i( <list>-exlength ). "cast CL_ABAP_ELEMDESCR( CL_ABAP_ELEMDESCR=>describe_by_name( <list>-rollname ) )->output_length.
<insert>-g_description = get_field_label( EXPORTING iv_tab_name = CONV #( lv_tab ) iv_field_name = <list>-fieldname ).
ENDLOOP.
convert( ).
cl_gui_frontend_services=>clipboard_export(
EXPORTING
no_auth_check = abap_true
IMPORTING
data = mt_formatted
CHANGING
rc = lv_ret
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
).
ENDMETHOD.
ENDCLASS.
相关推荐
SAP ABAP 数据库操作,快速学会ABAP!
abap逻辑数据库ABAP数据库操作,abap过程中的小积累。用处多多哦
\ABAP数据库操作之操作语句Insert
SAP初探之ABAP-数据库对象 解释说明 在ABAP里面 面向对象的概念
ABAP数据表大全ABAP数据表大全ABAP数据表大全
abap 数据库查询 效率指南 pdf abap 数据库查询 效率指南 pdf
SAP_ABAP程序设计基础教程第7章ABAP数据库操作
【转】Mr.Go大叔 ABAP 读取EXECL数据到数据表中
ABAP内表处理的效率问题(排序内表、标准内表比较)
abap內表 工作区 的定义和区别
abap内表使用方法,包括填充内表(详细讲解相关的方法)、读取并处理 数据库表(ABAP/4的开放式 SQL),很实用哦!
ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建ABAP内表创建
Abap基础学习文档11_读取并处理 数据库表.doc,非常基础,但非常实用的ABAP学习文档,照着文档练习,肯定就没问题了
DBCO通过ABAP程序连接外部数据库
ABAP4数据库编程练习.doc ABAP4数据库编程练习.doc
ABAP常用表描述
abap航班表源码,转自论坛,自用。感觉还不错
SAP——ABAP常用数据表介绍
在SAP ABAP里动态内表的构建,以及数据的传递,并且还附有说明的例子,简单明了.
ABAP 为物料主数据添加字段 Add field in material master.