Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

Sending excel as email attachment

Hi All,

In the program as below , i am getting the output and i am able to send excel as attachment , but when

downloaded to excel , i am getting all the records in a single line and also first record in comming in a single cell not like each field in single colum or cell.

report zsgx.

tables: ekko.

parameters: p_email type somlreci1-receiver

default 'mailid.

types: begin of t_ekpo,

ebeln type ekpo-ebeln,

ebelp type ekpo-ebelp,

aedat type ekpo-aedat,

matnr type ekpo-matnr,

end of t_ekpo.

data: it_ekpo type standard table of t_ekpo initial size 0,

wa_ekpo type t_ekpo.

types: begin of t_charekpo,

ebeln(10) type c,

ebelp(5) type c,

aedat(8) type c,

matnr(18) type c,

end of t_charekpo.

data: wa_charekpo type t_charekpo.

data: it_message type standard table of solisti1 initial size 0

with header line.

data: it_attach type standard table of solisti1 initial size 0

with header line.

data: t_packing_list like sopcklsti1 occurs 0 with header line,

t_contents like solisti1 occurs 0 with header line,

t_receivers like somlreci1 occurs 0 with header line,

t_attachment like solisti1 occurs 0 with header line,

t_object_header like solisti1 occurs 0 with header line,

w_cnt type i,

w_sent_all(1) type c,

w_doc_data like sodocchgi1,

gd_error type sy-subrc,

gd_reciever type sy-subrc.

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

*START_OF_SELECTION

start-of-selection.

*Retrieve sample data from table ekpo

perform data_retrieval.

***

*Populate table with detaisl to be entered into .xls file

perform build_xls_data_table.

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

*END-OF-SELECTION

end-of-selection.

***

*Populate message body text

perform populate_email_message_body.

***

*Send file by email as .xls speadsheet

perform send_file_as_email_attachment

tables it_message

it_attach

using p_email

'Example .xls documnet attachment'

'XLS'

'filename'

' '

' '

' '

changing gd_error

gd_reciever.

***

*Instructs mail send program for SAPCONNECT to send email(rsconn01)

perform initiate_mail_execute_program.

*&----


**& Form DATA_RETRIEVAL

*&----


***

***

*Retrieve data form EKPO table and populate itab it_ekko

*----


form data_retrieval.

select ebeln ebelp aedat matnr

up to 10 rows

from ekpo

into table it_ekpo.

endform. " DATA_RETRIEVAL

***

*&----


**& Form BUILD_XLS_DATA_TABLE

**&----


****

****

*Build data table for .xls document

*----


form build_xls_data_table.

data: ld_store(50) type c. "Leading zeros

constants: con_cret(5) type c value '0D', "OK for non Unicode

con_tab(5) type c value '09'. "OK for non Unicode

*If you have Unicode check active in program attributes thnen you will

*need to declare constants as follows

*class cl_abap_char_utilities definition load.

*constants:

*data :con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB,

*con_cret type c value cl_abap_char_utilities=>CR_LF.

concatenate 'EBELN' 'EBELP' 'AEDAT' 'MATNR' into it_attach separated by con_tab.

concatenate con_cret it_attach into it_attach.

append it_attach.

loop at it_ekpo into wa_charekpo.

*Modification to retain leading zeros

*inserts code for excell REPLACE command into ld_store

*=REPLACE("00100",1,5,"00100")

*concatenate '=REPLACE("' wa_charekpo-ebelp '",1,5,"'

*wa_charekpo-ebelp '")' into ld_store .

***

*concatenate ld_store into .xls file instead of actual value(ebelp)

concatenate wa_charekpo-ebeln ld_store wa_charekpo-aedat wa_charekpo-matnr into it_attach separated by con_tab.

concatenate con_cret it_attach into it_attach.

append it_attach.

endloop.

endform. " BUILD_XLS_DATA_TABLE

*&----


**& Form SEND_FILE_AS_EMAIL_ATTACHMENT

*&----


***

***

*Send email

*----


form send_file_as_email_attachment tables pit_message

pit_attach

using p_email

p_mtitle

p_format

p_filename

p_attdescription

p_sender_address

p_sender_addres_type

changing p_error

p_reciever.

data: ld_error type sy-subrc,

ld_reciever type sy-subrc,

ld_mtitle like sodocchgi1-obj_descr,

ld_email like somlreci1-receiver,

ld_format type so_obj_tp ,

ld_attdescription type so_obj_nam ,

ld_attfilename type so_obj_des ,

ld_sender_address like soextreci1-receiver,

ld_sender_address_type like soextreci1-adr_typ,

ld_receiver like sy-subrc.

ld_email = p_email.

ld_mtitle = p_mtitle.

ld_format = p_format.

ld_attdescription = p_attdescription.

ld_attfilename = p_filename.

ld_sender_address = p_sender_address.

ld_sender_address_type = p_sender_addres_type.

*Fill the document data.

w_doc_data-doc_size = 1.

***

*Populate the subject/generic message attributes

w_doc_data-obj_langu = sy-langu.

w_doc_data-obj_name = 'SAPRPT'.

w_doc_data-obj_descr = ld_mtitle .

w_doc_data-sensitivty = 'F'.

*Fill the document data and get size of attachment

clear w_doc_data.

read table it_attach index w_cnt.

w_doc_data-doc_size =

*( w_cnt - 1 ) * 255 + strlen( it_attach ).*

w_doc_data-obj_langu = sy-langu.

w_doc_data-obj_name = 'SAPRPT'.

w_doc_data-obj_descr = ld_mtitle.

w_doc_data-sensitivty = 'F'.

clear t_attachment.

refresh t_attachment.

t_attachment[] = it_attach[].

***

*Describe the body of the message

clear t_packing_list.

refresh t_packing_list.

t_packing_list-transf_bin = space.

t_packing_list-head_start = 1.

t_packing_list-head_num = 0.

t_packing_list-body_start = 1.

describe table it_message lines t_packing_list-body_num.

t_packing_list-doc_type = 'RAW'.

append t_packing_list.

***

*Create attachment notification

t_packing_list-transf_bin = 'X'.

t_packing_list-head_start = 1.

t_packing_list-head_num = 1.

t_packing_list-body_start = 1.

describe table t_attachment lines t_packing_list-body_num.

t_packing_list-doc_type = ld_format.

t_packing_list-obj_descr = ld_attdescription.

t_packing_list-obj_name = ld_attfilename.

*t_packing_list-doc_size = t_packing_list-body_num * 255.*

append t_packing_list.

***

*Add the recipients email address

clear t_receivers.

refresh t_receivers.

t_receivers-receiver = ld_email.

t_receivers-rec_type = 'U'.

t_receivers-com_type = 'INT'.

t_receivers-notif_del = 'X'.

t_receivers-notif_ndel = 'X'.

append t_receivers.

call function 'SO_DOCUMENT_SEND_API1'

exporting

document_data = w_doc_data

put_in_outbox = 'X'

sender_address = ld_sender_address

sender_address_type = ld_sender_address_type

commit_work = 'X'

importing

sent_to_all = w_sent_all

tables

packing_list = t_packing_list

contents_bin = t_attachment

contents_txt = it_message

receivers = t_receivers

exceptions

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

others = 8.

***

*Populate zerror return code

ld_error = sy-subrc.

***

*Populate zreceiver return code

loop at t_receivers.

ld_receiver = t_receivers-retrn_code.

endloop.

endform.

*&----


**& Form INITIATE_MAIL_EXECUTE_PROGRAM

*&----


***

***

*Instructs mail send program for SAPCONNECT to send email.

*----


form initiate_mail_execute_program.

wait up to 2 seconds.

submit rsconn01 with mode = 'INT'

with output = 'X'

and return.

endform. " INITIATE_MAIL_EXECUTE_PROGRAM

*&----


**& Form POPULATE_EMAIL_MESSAGE_BODY

*&----


***

***

*Populate message body text

*----


form populate_email_message_body.

refresh it_message.

it_message = 'Please find attached a list test ekpo records'.

append it_message.

endform. " POPULATE_EMAIL_MESSAGE_BODY

Regards,

subba

Tags:

Helpful Answer

by
Not what you were looking for? View more on this topic or Ask a question