Skip to Content
avatar image
Former Member

sending excel as email attachment

Hi All,

I am getting data in the email as excel as attachment, the problem is i am using internal table it_attach type standard table of solisti thie table is of line have char lenth 255

I am getting excel header columns till 255 char and the contents are ok , only problem is header getting truncated.

Regards

subba

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

2 Answers

  • Sep 16, 2008 at 07:56 AM

    Excel file is by definition a binary format

    So you should use the other table parameter (contents_hex) so that your attachment is seen like a binary file

    In binary mode you don't have length limitation

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member

      Hi,

      I tried to change the table parameter to contents_hex but still the problem is same and getting the same output

      Regards

      subba

  • avatar image
    Former Member
    Sep 16, 2008 at 08:03 AM

    HI,

    FOR sending excel as email attachment u just use function module: SO_NEW_DOCUMENT_ATT_SEND_API1

    This will definately help you as this is exact code of sending internal table data in excel format through mail :

    FIRSTLY exported the data to memory using the FM LIST_FROM_MEMORY.

    CALL FUNCTION 'LIST_FROM_MEMORY'

    TABLES

    listobject = t_listobject

    EXCEPTIONS

    not_found = 1

    OTHERS = 2.

    IF sy-subrc 0.

    MESSAGE e000(su) WITH text-001.

    ENDIF.

    then i converted it into ASCII using LIST_TO_ASCI,

    CALL FUNCTION 'LIST_TO_ASCI'

    TABLES

    listasci = t_xlstab

    listobject = t_listobject

    EXCEPTIONS

    empty_list = 1

    list_index_invalid = 2

    OTHERS = 3.

    IF sy-subrc NE 0.

    MESSAGE e003(yuksdbfzs).

    ENDIF.

    This gives the data in ASCII format separated by '|' and the header has '-', dashes. If you use this internal table directly without any proccesing in SO_NEW_DOCUMENT_ATT_SEND_API1, then you will not get a good excel sheet attachment. To overcome this limitation, i used cl_abap_char_utilities=>newline and cl_abap_char_utilities=>horizontal_tab to add horizontal and vertical tabs to the internal table, replacing all occurences of '|' with

    cl_abap_char_utilities=>horizontal_tab.

    Set the doc_type as 'XLS', create the body and header using the packing_list and pass the data to be downloaded to SO_NEW_DOCUMENT_ATT_SEND_API1 as contents_bin.

    This will create an excel attachment.

    Sample code for formatting the data for the attachment in excel format.

    u2022 Format the data for excel file download

    LOOP AT t_xlstab INTO wa_xlstab .

    DESCRIBE TABLE t_xlstab LINES lw_cnt.

    CLEAR lw_sytabix.

    lw_sytabix = sy-tabix.

    u2022 If not new line then replace '|' by tabs

    IF NOT wa_xlstab EQ cl_abap_char_utilities=>newline.

    REPLACE ALL OCCURRENCES OF '|' IN wa_xlstab

    WITH cl_abap_char_utilities=>horizontal_tab.

    MODIFY t_xlstab FROM wa_xlstab .

    CLEAR wa_xlstab.

    wa_xlstab = cl_abap_char_utilities=>newline.

    IF lw_cnt NE 0 .

    lw_sytabix = lw_sytabix + 1.

    u2022 Insert new line for the excel data

    INSERT wa_xlstab INTO t_xlstab INDEX lw_sytabix.

    lw_cnt = lw_cnt - 1.

    ENDIF.

    CLEAR wa_xlstab.

    ENDIF.

    ENDLOOP.

    Sample code for creating attachment and sending mail:

    FORM send_mail .

    u2022 Define the attachment format

    lw_doc_type = 'XLS'.

    u2022 Create the document which is to be sent

    lwa_doc_chng-obj_name = 'List'.

    lwa_doc_chng-obj_descr = w_subject. "Subject

    lwa_doc_chng-obj_langu = sy-langu.

    u2022 Fill the document data and get size of message

    LOOP AT t_message.

    lt_objtxt = t_message-line.

    APPEND lt_objtxt.

    ENDLOOP.

    DESCRIBE TABLE lt_objtxt LINES lw_tab_lines.

    IF lw_tab_lines GT 0.

    READ TABLE lt_objtxt INDEX lw_tab_lines.

    lwa_doc_chng-doc_size = ( lw_tab_lines - 1 ) * 255 + STRLEN( lt_objtxt ).

    lwa_doc_chng-obj_langu = sy-langu.

    lwa_doc_chng-sensitivty = 'F'.

    ELSE.

    lwa_doc_chng-doc_size = 0.

    ENDIF.

    u2022 Fill Packing List For the body of e-mail

    lt_packing_list-head_start = 1.

    lt_packing_list-head_num = 0.

    lt_packing_list-body_start = 1.

    lt_packing_list-body_num = lw_tab_lines.

    lt_packing_list-doc_type = 'RAW'.

    APPEND lt_packing_list.

    u2022 Create the attachment (the list itself)

    DESCRIBE TABLE t_xlstab LINES lw_tab_lines.

    u2022 Fill the fields of the packing_list for creating the attachment:

    lt_packing_list-transf_bin = 'X'.

    lt_packing_list-head_start = 1.

    lt_packing_list-head_num = 0.

    lt_packing_list-body_start = 1.

    lt_packing_list-body_num = lw_tab_lines.

    lt_packing_list-doc_type = lw_doc_type.

    lt_packing_list-obj_name = 'Attach'.

    lt_packing_list-obj_descr = w_docdesc.

    lt_packing_list-doc_size = lw_tab_lines * 255.

    APPEND lt_packing_list.

    u2022 Fill the mail recipient list

    lt_reclist-rec_type = 'U'.

    LOOP AT t_recipient_list.

    lt_reclist-receiver = t_recipient_list-address.

    APPEND lt_reclist.

    ENDLOOP.

    u2022 Finally send E-Mail

    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

    EXPORTING

    document_data = lwa_doc_chng

    put_in_outbox = 'X'

    commit_work = 'X'

    IMPORTING

    sent_to_all = lw_sent_to_all

    TABLES

    packing_list = lt_packing_list

    object_header = lt_objhead

    contents_bin = t_xlstab

    contents_txt = lt_objtxt

    receivers = lt_reclist

    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.

    hope it will help you

    thanks and regards

    RAHUL SHARMA

    Edited by: RAHUL SHARMA on Sep 16, 2008 10:05 AM

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member

      Hi Rahul,

      Could you please send the sample code with data declaration so that i can paste and change accordingly,

      you have send diffrent functions and class code , better if you can send the saple program.

      Regards

      subba