abap html编辑表格,用ABAP实现内表行列倒转

这篇博客介绍了如何使用ABAP编程语言将内表进行行列转换。作者提供了具体的代码示例,包括数据的添加、转置前后的内表结构定义以及转置操作的实现。程序通过遍历原始内表并初始化目标表来完成转换,适用于不同列数的场景。

用abap实现内表的行列转换_(翱翔云天)

********************************************************************************************

*Author: chunbo.xu

*Version: 1.0

*Create date: 2005/08/02

*If you have any problems ,contact me:

*msn:xuchunbo0901@hotmail.com

*email:xuchunbo0901@hotmail.com

*If you send it to another field, please write where it created

*该程序实现内表的行列转换

********************************************************************************************

REPORT  Z_MATRIX                                .

***加数据的宏,没什么说的

DEFINE ADD_DATA .

RTAB1-NUM = &1 .

RTAB1-0 = &2 .

RTAB1-1 = &3 .

**如果需要转置的表就两列,把这个去掉

RTAB1-2 = &4 .

APPEND RTAB1 TO ITAB1 .

END-OF-DEFINITION .

***因为是模拟矩阵的转置,所以列定义为数字

***需要转置的内表

DATA: BEGIN OF RTAB1 ,

NUM(4) TYPE C ,

0(4) TYPE C ,

1(4) TYPE C ,

********如果两列,去掉下面的

2(4) TYPE C ,

END OF RTAB1 .

**这是转置之后的表结构,找10列做的,可以自己修改

DATA: BEGIN OF RTAB2 ,

NUM(4) TYPE C ,

0(4) TYPE C ,

1(4) TYPE C ,

2(4) TYPE C ,

3(4) TYPE C ,

4(4) TYPE C ,

5(4) TYPE C ,

6(4) TYPE C ,

7(4) TYPE C ,

8(4) TYPE C ,

9(4) TYPE C ,

END OF RTAB2 .

**把要转置的表定义成排序表

DATA: ITAB1 LIKE SORTED TABLE OF RTAB1 WITH UNIQUE KEY NUM 0 .

DATA: ITAB2 LIKE STANDARD TABLE OF RTAB2 .

DATA: ITAB1_TEMP LIKE RTAB1 OCCURS 0 WITH HEADER LINE .

***变量定义

DATA: L_INDEX TYPE I ,    “表索引

L_TEMP(18) TYPE C , “表元素的名称

L_X TYPE I ,        “表的行数

L_H(2) TYPE C ,     “表的行

L_V(2) TYPE C ,     “表的列

L_CY(2) TYPE C .    “表的列的字符型

***这里是表的列数

CONSTANTS: L_COUN TYPE I VALUE 3 ,

***********这个是表的列数减1

L_NUM  TYPE I VALUE 2 .

***这个是表元素的指针

FIELD-SYMBOLS: TYPE ANY ,

TYPE ANY .

***这个是表结构的指针

FIELD-SYMBOLS: LIKE RTAB1 ,

LIKE RTAB2 .

***如果是两列,用下面注释的数据玩

*ADD_DATA '1000' 'AA' '1.1' .

*ADD_DATA '1000' 'BB' '2.1' .

*ADD_DATA '1000' 'CC' '3.1' .

*ADD_DATA '1000' 'DD' '4.1' .

*ADD_DATA '2000' 'AA' '1.2' .

*ADD_DATA '2000' 'BB' '2.2' .

*ADD_DATA '2000' 'CC' '3.2' .

*ADD_DATA '2000' 'DD' '4.2' .

*ADD_DATA '3000' 'AA' '1.3' .

*ADD_DATA '3000' 'BB' '2.3' .

*ADD_DATA '3000' 'CC' '3.3' .

*ADD_DATA '3000' 'DD' '4.3' .

*ADD_DATA '3000' 'EE' '5.3' .

*ADD_DATA '3000' 'FF' '6.3' .

*ADD_DATA '3000' 'GG' '7.3' .

*ADD_DATA '4000' 'AA' '1.4' .

*ADD_DATA '4000' 'BB' '2.4' .

*ADD_DATA '4000' 'CC' '3.4' .

*ADD_DATA '4000' 'DD' '4.4' .

*ADD_DATA '4000' 'EE' '5.4' .

*ADD_DATA '5000' 'AA' '1.5' .

*ADD_DATA '5000' 'BB' '2.5' .

*ADD_DATA '5000' 'CC' '3.5' .

*ADD_DATA '5000' 'DD' '4.5' .

*ADD_DATA '5000' 'EE' '5.5' .

*ADD_DATA '5000' 'FF' '6.5' .

*ADD_DATA '5000' 'GG' '7.5' .

*ADD_DATA '5000' 'HH' '8.5' .

*ADD_DATA '5000' 'II' '9.5' .

***如果是三列,用这个数据玩

ADD_DATA '1000' 'AA' '11.1' '12.1'.

ADD_DATA '1000' 'BB' '11.2' '12.2'.

ADD_DATA '1000' 'CC' '11.3' '12.3'.

ADD_DATA '1000' 'DD' '11.4' '12.4'.

ADD_DATA '2000' 'AA' '21.1' '22.1'.

ADD_DATA '2000' 'BB' '21.2' '22.2'.

ADD_DATA '2000' 'CC' '21.3' '22.3'.

ADD_DATA '2000' 'DD' '21.4' '22.4'.

ADD_DATA '3000' 'AA' '31.1' '32.1'.

ADD_DATA '3000' 'BB' '31.2' '32.2'.

ADD_DATA '3000' 'CC' '31.3' '32.3'.

ADD_DATA '3000' 'DD' '31.4' '32.4'.

ADD_DATA '3000' 'EE' '31.5' '32.5'.

ADD_DATA '3000' 'FF' '31.6' '32.6'.

ADD_DATA '4000' 'AA' '41.1' '42.1'.

ADD_DATA '4000' 'BB' '41.2' '42.2'.

ADD_DATA '4000' 'CC' '41.3' '42.3'.

ADD_DATA '4000' 'DD' '41.4' '42.4'.

ADD_DATA '4000' 'EE' '41.5' '42.5'.

ADD_DATA '5000' 'AA' '51.1' '52.1'.

ADD_DATA '5000' 'BB' '51.2' '52.2'.

ADD_DATA '5000' 'CC' '51.3' '52.3'.

ADD_DATA '5000' 'DD' '51.4' '52.4'.

ADD_DATA '5000' 'EE' '51.5' '52.5'.

ADD_DATA '5000' 'FF' '51.6' '52.6'.

ADD_DATA '5000' 'GG' '51.7' '52.7'.

ADD_DATA '5000' 'HH' '51.8' '52.8'.

***其实就是初始化目标表

LOOPAT ITAB1 INTO RTAB1 .

AT END OF NUM .

****向第一行加一个空数据,有几个不同的num就加几个

RTAB2-NUM = '' .

APPEND RTAB2 TO ITAB2 .

****有几个相同的num就加几个

DO L_NUM TIMES .

RTAB2-NUM = RTAB1-NUM .

APPEND RTAB2 TO ITAB2 .

ENDDO .

ENDAT .

ENDLOOP .

***初始化行列数

L_H = '0' .

L_V = '1' .

L_CY = '0' .

***处理开始了

LOOPAT ITAB1 INTO RTAB1 .

APPEND RTAB1 TO ITAB1_TEMP .

AT END OF NUM .

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值