Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Conversion from Excel to XML

former_member203627
Participant
0 Kudos

Hi,

Can any one tell me how to create XML file in SAP or if i have Excel file and needs to be converted to XML. is it possible.

regards

Ria

4 REPLIES 4

Former Member
0 Kudos

Hi ria,

1. I don't think there will be any direct way

to convert from Excel file to XML.

2. What can be done is that

the Excel file can be saved

as TAB DELIMITED file and the

data can be uploaded in to internal

table using GUI_UPLOAD.

3. then we can use TRANSFORMATION

functions to convert the data into xml

and save it as a file.

4 itab --- > xml

xml ---> itab.

5. This program will do both.

(just copy paste in new program)

6.

REPORT abc.

*----


DATA

DATA : t001 LIKE TABLE OF t001 WITH HEADER LINE.

DATA : BEGIN OF itab OCCURS 0,

a(100) TYPE c,

END OF itab.

DATA: xml_out TYPE string .

DATA : BEGIN OF upl OCCURS 0,

f(255) TYPE c,

END OF upl.

DATA: xmlupl TYPE string .

                                                              • FIRST PHASE

                                                              • FIRST PHASE

                                                              • FIRST PHASE

*----


Fetch Data

SELECT * FROM t001 INTO TABLE t001.

*----


XML

CALL TRANSFORMATION ('ID')

SOURCE tab = t001[]

RESULT XML xml_out.

*----


Convert to TABLE

CALL FUNCTION 'HR_EFI_CONVERT_STRING_TO_TABLE'

EXPORTING

i_string = xml_out

i_tabline_length = 100

TABLES

et_table = itab.

*----


Download

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

filetype = 'BIN'

filename = 'd:\xx.xml'

TABLES

data_tab = itab.

                                                              • SECOND PHASE

                                                              • SECOND PHASE

                                                              • SECOND PHASE

BREAK-POINT.

REFRESH t001.

CLEAR t001.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = 'D:\XX.XML'

filetype = 'BIN'

TABLES

data_tab = upl.

LOOP AT upl.

CONCATENATE xmlupl upl-f INTO xmlupl.

ENDLOOP.

*----


XML

CALL TRANSFORMATION ('ID')

SOURCE XML xmlupl

RESULT tab = t001[]

.

BREAK-POINT.

regards,

amit m.

former_member927251
Active Contributor
0 Kudos

Hi Ria,

1. You will have to first get your data from EXCEL to Internal Table. Refer the code below.

REPORT zexceltabc.

PARAMETERS: filename LIKE rlgrap-filename,

begcol TYPE i DEFAULT 1 NO-DISPLAY,

begrow TYPE i DEFAULT 1 NO-DISPLAY,

endcol TYPE i DEFAULT 100 NO-DISPLAY,

endrow TYPE i DEFAULT 32000 NO-DISPLAY.

PARAMETERS: kzheader AS CHECKBOX.

DATA: BEGIN OF intern OCCURS 0.

INCLUDE STRUCTURE alsmex_tabline.

DATA: END OF intern.

DATA: BEGIN OF intern1 OCCURS 0.

INCLUDE STRUCTURE alsmex_tabline.

DATA: END OF intern1.

DATA: BEGIN OF t_col OCCURS 0,

col LIKE alsmex_tabline-col,

size TYPE i.

DATA: END OF t_col.

DATA: zwlen TYPE i,

zwlines TYPE i.

DATA: BEGIN OF fieldnames OCCURS 3,

title(60),

table(6),

field(10),

kz(1),

END OF fieldnames.

DATA: BEGIN OF data_tab OCCURS 0,

value_0001(50),

value_0002(50),

value_0003(50),

value_0004(50),

value_0005(50),

value_0006(50),

value_0007(50),

value_0008(50),

value_0009(50),

value_0010(50),

value_0011(50),

value_0012(50),

value_0013(50),

value_0014(50),

value_0015(50),

value_0016(50),

value_0017(50),

value_0018(50),

value_0019(50),

value_0020(50),

value_0021(50),

value_0022(50),

value_0023(50),

value_0024(50),

value_0025(50),

value_0026(50),

value_0027(50),

value_0028(50),

value_0029(50),

value_0030(50),

value_0031(50),

value_0032(50),

value_0033(50),

value_0034(50),

value_0035(50),

value_0036(50),

value_0037(50),

value_0038(50),

value_0039(50),

value_0040(50),

value_0041(50),

value_0042(50),

value_0043(50),

value_0044(50),

value_0045(50),

value_0046(50),

value_0047(50),

value_0048(50),

value_0049(50),

value_0050(50),

value_0051(50),

value_0052(50),

value_0053(50),

value_0054(50),

value_0055(50),

value_0056(50),

value_0057(50),

value_0058(50),

value_0059(50),

value_0060(50),

value_0061(50),

value_0062(50),

value_0063(50),

value_0064(50),

value_0065(50),

value_0066(50),

value_0067(50),

value_0068(50),

value_0069(50),

value_0070(50),

value_0071(50),

value_0072(50),

value_0073(50),

value_0074(50),

value_0075(50),

value_0076(50),

value_0077(50),

value_0078(50),

value_0079(50),

value_0080(50),

value_0081(50),

value_0082(50),

value_0083(50),

value_0084(50),

value_0085(50),

value_0086(50),

value_0087(50),

value_0088(50),

value_0089(50),

value_0090(50),

value_0091(50),

value_0092(50),

value_0093(50),

value_0094(50),

value_0095(50),

value_0096(50),

value_0097(50),

value_0098(50),

value_0099(50),

value_0100(50).

DATA: END OF data_tab.

DATA: tind(4) TYPE n.

DATA: zwfeld(19).

FIELD-SYMBOLS: 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

END-OF-SELECTION.

  • max. Feldlänge je Spalte ermitteln...

LOOP AT intern.

intern1 = intern.

CLEAR intern1-row.

APPEND intern1.

ENDLOOP.

SORT intern1 BY col.

LOOP AT intern1.

AT NEW col.

t_col-col = intern1-col.

APPEND t_col.

ENDAT.

zwlen = strlen( intern1-value ).

READ TABLE t_col WITH KEY col = intern1-col.

IF sy-subrc EQ 0.

IF zwlen > t_col-size.

t_col-size = zwlen.

MODIFY t_col INDEX sy-tabix.

ENDIF.

ENDIF.

ENDLOOP.

  • max. Spaltenanzahl ermitteln.

DESCRIBE TABLE t_col LINES zwlines.

  • wenn die 1. Zeile die Spaltenüberschriften enthält...

SORT intern BY row col.

IF kzheader = 'X'.

LOOP AT intern.

fieldnames-title = intern-value.

APPEND fieldnames.

AT END OF row. " Ende der 1. Zeile

EXIT.

ENDAT.

ENDLOOP.

ELSE.

DO zwlines TIMES.

WRITE sy-index TO fieldnames-title.

APPEND fieldnames.

ENDDO.

ENDIF.

  • Data_tab füllen ...

SORT intern BY row col.

LOOP AT intern.

IF kzheader = 'X'

AND intern-row = 1.

CONTINUE.

ENDIF.

tind = intern-col.

CONCATENATE 'DATA_TAB-VALUE_' tind INTO zwfeld.

ASSIGN (zwfeld) TO = intern-value.

AT END OF row.

APPEND data_tab.

CLEAR data_tab.

ENDAT.

ENDLOOP.

CALL FUNCTION 'DISPLAY_BASIC_LIST'

EXPORTING

file_name = filename

TABLES

data_tab = data_tab

fieldname_tab = fieldnames.

2. Now you can use this internal table to create an XML file. Refer the code below.

*----

-


DATA

DATA : t001 LIKE TABLE OF t001 WITH HEADER LINE.

DATA : BEGIN OF itab OCCURS 0,

a(100) TYPE c,

END OF itab.

DATA: xml_out TYPE string .

DATA : BEGIN OF upl OCCURS 0,

f(255) TYPE c,

END OF upl.

DATA: xmlupl TYPE string .

                                                              • FIRST PHASE

                                                              • FIRST PHASE

                                                              • FIRST PHASE

*----

-


Fetch Data

SELECT * FROM t001 INTO TABLE t001.

*----

-


XML

CALL TRANSFORMATION ('ID')

SOURCE tab = t001[]

RESULT XML xml_out.

*----

-


Convert to TABLE

CALL FUNCTION 'HR_EFI_CONVERT_STRING_TO_TABLE'

EXPORTING

i_string = xml_out

i_tabline_length = 100

TABLES

et_table = itab.

*----

-


Download

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

filetype = 'BIN'

filename = 'd:xx.xml'

TABLES

data_tab = itab.

Hope this helps.

Please mark helpful answers.

Regards,

Amit Mishra

athavanraja
Active Contributor
0 Kudos

its more dependant on your requirement.

you can both convert the excel file to xml or load the xml into a itab in row/column format and generate a xml out of it.

but the xmls in both the cases will be different.

for example.

excel to xml = the resulting xml will have all the properties of the excel file , e.g workbook details, sheet details, cell property

excel to itab to xml - in this case only the data will be available.

Why are you generating XML what do you want to do with the XML generated. If you could answer this then we can come up with a right solution for you.

Regards

Raja