2015 Aug 03 9:52 PM
Hi - How can i convert the below grid into an internal table.
| Range of: | 150 | 200 | 250 |
| $8.15 | 1.00% | 2.00% | 0.00% |
| $9.00 | 3.00% | 4.00% | 5.00% |
My requirement is: I get the above data in an excel and i need to convert that excel into an internal table like below.
$8.15 150 1.00%
$8.15 200 2.00%
$8.15 250 0.00%
$8.00 150 3.00%
$8.00 200 4.00%
$8.00 250 5.00%
I am using ALSM_EXCEL_TO_INTERNAL_TABLE to read the excel but how can i covert the read excel into above format.
Could you please help me
Hi Venkata,
After you get excel sheet data in the internal table you can process the internal table as per your requirement.
An example can be figured out by this sample code:
REPORT ZR_DISPLAY_DATA.
TYPES: BEGIN OF TY1,
A TYPE C LENGTH 15,
B TYPE C LENGTH 15,
C TYPE C LENGTH 15,
D TYPE C LENGTH 15,
END OF TY1.
DATA: ITAB1 TYPE STANDARD TABLE OF TY1,
WA1 TYPE TY1,
WA3 TYPE TY1.
TYPES: BEGIN OF TY2,
A TYPE C LENGTH 15,
B TYPE C LENGTH 15,
C TYPE C LENGTH 15,
END OF TY2.
DATA: ITAB2 TYPE STANDARD TABLE OF TY2,
WA2 TYPE TY2.
WA1-A = 'RANGE OF:'.
WA1-B = '150'.
WA1-C = '200'.
WA1-D = '250'.
APPEND WA1 TO ITAB1.
WA1-A = '$8.15'.
WA1-B = '1.00%'.
WA1-C = '2.00%'.
WA1-D = '0.00%'.
APPEND WA1 TO ITAB1.
WA1-A = '9.00%'.
WA1-B = '3.00%'.
WA1-C = '4.00%'.
WA1-D = '5.00%'.
APPEND WA1 TO ITAB1.
LOOP AT ITAB1 INTO WA1.
IF WA1-A = 'RANGE OF:'.
WA3-B = WA1-B.
WA3-C = WA1-C.
WA3-D = WA1-D.
ELSE.
WA2-A = WA1-A.
WA2-B = WA3-B.
WA2-C = WA1-B.
APPEND WA2 TO ITAB2.
WA2-A = WA1-A.
WA2-B = WA3-C.
WA2-C = WA1-C.
APPEND WA2 TO ITAB2.
WA2-A = WA1-A.
WA2-B = WA3-D.
WA2-C = WA1-D.
APPEND WA2 TO ITAB2.
ENDIF.
ENDLOOP.
LOOP AT ITAB2 INTO WA2.
WRITE: / WA2-A, WA2-B, WA2-C.
ENDLOOP.
2015 Aug 04 11:29 AM
Hi Venkata,
After you get excel sheet data in the internal table you can process the internal table as per your requirement.
An example can be figured out by this sample code:
REPORT ZR_DISPLAY_DATA.
TYPES: BEGIN OF TY1,
A TYPE C LENGTH 15,
B TYPE C LENGTH 15,
C TYPE C LENGTH 15,
D TYPE C LENGTH 15,
END OF TY1.
DATA: ITAB1 TYPE STANDARD TABLE OF TY1,
WA1 TYPE TY1,
WA3 TYPE TY1.
TYPES: BEGIN OF TY2,
A TYPE C LENGTH 15,
B TYPE C LENGTH 15,
C TYPE C LENGTH 15,
END OF TY2.
DATA: ITAB2 TYPE STANDARD TABLE OF TY2,
WA2 TYPE TY2.
WA1-A = 'RANGE OF:'.
WA1-B = '150'.
WA1-C = '200'.
WA1-D = '250'.
APPEND WA1 TO ITAB1.
WA1-A = '$8.15'.
WA1-B = '1.00%'.
WA1-C = '2.00%'.
WA1-D = '0.00%'.
APPEND WA1 TO ITAB1.
WA1-A = '9.00%'.
WA1-B = '3.00%'.
WA1-C = '4.00%'.
WA1-D = '5.00%'.
APPEND WA1 TO ITAB1.
LOOP AT ITAB1 INTO WA1.
IF WA1-A = 'RANGE OF:'.
WA3-B = WA1-B.
WA3-C = WA1-C.
WA3-D = WA1-D.
ELSE.
WA2-A = WA1-A.
WA2-B = WA3-B.
WA2-C = WA1-B.
APPEND WA2 TO ITAB2.
WA2-A = WA1-A.
WA2-B = WA3-C.
WA2-C = WA1-C.
APPEND WA2 TO ITAB2.
WA2-A = WA1-A.
WA2-B = WA3-D.
WA2-C = WA1-D.
APPEND WA2 TO ITAB2.
ENDIF.
ENDLOOP.
LOOP AT ITAB2 INTO WA2.
WRITE: / WA2-A, WA2-B, WA2-C.
ENDLOOP.
2015 Aug 04 8:21 PM
Hi - Thanks for info. I am able to solve it.
But now I have to do the reverse.
I have the data in internal table like below.
$8.15 150 1.00%
$8.15 200 2.00%
$8.15 250 0.00%
$8.00 150 3.00%
$8.00 200 4.00%
$8.00 250 5.00%
I need to conver the able internal table and display as GRID like below.
| Range of: | 150 | 200 | 250 |
| $8.15 | 1.00% | 2.00% | 0.00% |
| $9.00 | 3.00% | 4.00% | 5.00% |
Could you please help me.
2015 Aug 06 3:03 PM
Hi Venkata,
You can reverse your logic to again read the internal table in the following way:
*---- READING HEADER
CLEAR WA1.
CLEAR ITAB1.
LOOP AT ITAB2 INTO WA2.
WA1-A = 'RANGE OF:'.
IF WA1-B IS INITIAL.
WA1-B = WA2-B.
ELSEIF WA1-C IS INITIAL.
WA1-C = WA2-B.
ELSEIF WA1-D IS INITIAL.
WA1-D = WA2-B.
ENDIF.
IF WA1-A IS NOT INITIAL AND
WA1-B IS NOT INITIAL AND
WA1-C IS NOT INITIAL AND
WA1-D IS NOT INITIAL.
APPEND WA1 TO ITAB1.
EXIT.
ENDIF.
ENDLOOP.
CLEAR WA1.
****READING RANGE ONLY
LOOP AT ITAB2 INTO WA2.
READ TABLE ITAB1 INTO WA1 WITH KEY A = WA2-A.
IF SY-SUBRC NE 0.
WA1-A = WA2-A.
APPEND WA1 TO ITAB1.
CLEAR WA1.
ENDIF.
ENDLOOP.
****READING DATA
LOOP AT ITAB2 INTO WA2.
READ TABLE ITAB1 INTO WA1 WITH KEY A = WA2-A.
IF SY-SUBRC = 0.
IF WA1-B IS INITIAL.
WA1-B = WA2-C.
ELSEIF WA1-C IS INITIAL.
WA1-C = WA2-C.
ELSEIF WA1-D IS INITIAL.
WA1-D = WA2-C.
ENDIF.
MODIFY ITAB1 FROM WA1 INDEX SY-tabix.
CLEAR WA1.
ENDIF.
ENDLOOP.
LOOP AT ITAB1 INTO WA1.
WRITE: / WA1-A, WA1-B, WA1-C, WA1-D.
ENDLOOP.
| User | Count |
|---|---|
| 6 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |