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: 

Attachment mail with excel and Header should be in Bold

Former Member
0 Kudos

Hi abap gurus,

              i am able to sending mail with attachment but my requirement is that after sending mail in that Excel Sheet Attachment the Header should be in BOLD.

       

        i have searched in SCN and found only code for mail sending with / without attachments. please post the code for the above requirement.

<removed by moderator>

My code is :

CONCATENATE 'COMPANY CODE'
                 'SUPPLIER NAME'
                 'SUPPLIER GSL'
                 'PAY SITE CODE'
                 'PAY SITE ADDRESS'
                 'PAY SITE CITY'
                 'PAY SITE STATE'
                 'PAY SITE COUNTRY'
                 'INVOICE NO'
                 'VOUCHER NO'
                 'PO NUMBER'
                 'PO LINE'
                 'PO BUYER SSO'
                 'INVOICE DATE'
                 'CANCELLED DATE'
                 'INVOICE ENTRY DATE'
                 'INVOICE AMT'
                 'CREATED BY'
                 'STATUS'
                 INTO IT_ATTACHMENT SEPARATED BY
                 CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
     CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
     APPEND IT_ATTACHMENT.

* Selecting the mail id's
     SELECT INTID
            EMAIL
       FROM ZTBIDL
       INTO TABLE T_ZTBIDL
      WHERE INTID = 'RICEF21' AND
            OBJ_NAME = 'PIC'.

     LOOP AT T_ZTBIDL INTO WA_ZTBIDL.

       IT_RECEIVERS-RECEIVER = WA_ZTBIDL-EMAIL.
       IT_RECEIVERS-REC_TYPE = 'U'.
       IT_RECEIVERS-COM_TYPE = 'INT'.
       IT_RECEIVERS-NOTIF_DEL = 'X'.
       IT_RECEIVERS-NOTIF_NDEL = 'X'.
       IT_RECEIVERS-EXPRESS = 'X'.
       APPEND IT_RECEIVERS.
     ENDLOOP.

*File Type
     LD_FORMAT = 'XLS'.
**File Name
     CONCATENATE 'PIC_' SY-DATUM INTO LD_ATTFILENAME.
* Fill the document data.
     GD_DOC_DATA-DOC_SIZE = 1.
* Populate the subject/generic message attributes
     GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
     GD_DOC_DATA-OBJ_NAME = 'SAPRPT'.
     GD_DOC_DATA-OBJ_DESCR = PSUBJECT .
     GD_DOC_DATA-SENSITIVTY = 'F'.
* Fill the document data and get size of attachment
     CLEAR GD_DOC_DATA.
* Populate the subject/generic message attributes
     GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
     READ TABLE IT_ATTACHMENT INDEX W_CNT.
     GD_DOC_DATA-DOC_SIZE = ( W_CNT - 1 ) * 255 + STRLEN( IT_ATTACHMENT ).
     GD_DOC_DATA-OBJ_NAME  = 'SAPRPT'.
     GD_DOC_DATA-OBJ_DESCR = PSUBJECT.
     GD_DOC_DATA-SENSITIVTY = 'F'.
* Describe the body of the message
     CLEAR IT_PACKING_LIST.
     REFRESH IT_PACKING_LIST.
     IT_PACKING_LIST-TRANSF_BIN = SPACE.
     IT_PACKING_LIST-HEAD_START = 1.
     IT_PACKING_LIST-HEAD_NUM   = 0.
     IT_PACKING_LIST-BODY_START = 1.
     DESCRIBE TABLE IT_MESSAGE LINES IT_PACKING_LIST-BODY_NUM.
     IT_PACKING_LIST-DOC_TYPE   = 'RAW'.
     APPEND IT_PACKING_LIST.
**Describe the attachment info
     IT_PACKING_LIST-TRANSF_BIN = 'X'.
     IT_PACKING_LIST-HEAD_START = 1.
     IT_PACKING_LIST-HEAD_NUM   = 1.
     IT_PACKING_LIST-BODY_START = 1.
     DESCRIBE TABLE IT_ATTACHMENT LINES  IT_PACKING_LIST-BODY_NUM.
     IT_PACKING_LIST-DOC_TYPE   = LD_FORMAT.
     IT_PACKING_LIST-OBJ_NAME   = LD_ATTFILENAME.
     IT_PACKING_LIST-OBJ_DESCR  = LD_ATTFILENAME.
     IT_PACKING_LIST-DOC_SIZE   = IT_PACKING_LIST-BODY_NUM * 255.
     APPEND IT_PACKING_LIST.

     CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
       EXPORTING
         DOCUMENT_DATA = GD_DOC_DATA
         PUT_IN_OUTBOX = 'X'
         COMMIT_WORK   = 'X'
       TABLES
         PACKING_LIST  = IT_PACKING_LIST
         CONTENTS_BIN  = IT_ATTACHMENT
         CONTENTS_TXT  = IT_MESSAGE
         RECEIVERS     = IT_RECEIVERS.

   ENDIF.

Message was edited by: Thomas Zloch

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Srini,

Check this link . Hope it helps .

http://www.erpgreat.com/abap/download-to-excel-with-format-border-color-cell-etc.htm

Thanks,

Pradeep.

11 REPLIES 11

Former Member
0 Kudos

Hi Srini,

Check this link . Hope it helps .

http://www.erpgreat.com/abap/download-to-excel-with-format-border-color-cell-etc.htm

Thanks,

Pradeep.

0 Kudos

Hi Pradeep,

          i have to get the BOLD Letters for Header from the mail Attachment in excel. it should not be from the report. please suggest me how to proceed further?.

0 Kudos

Hi ,

I tried but due to some network issues i could not able to check its working fine or not.

Lets Try it.

DATA: att_size TYPE i,        " att Size

       att_itab_size TYPE i,   " Attachment size

       mailtxt_size TYPE i.    " Text in mail size

DATA:

it_mailpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE, " Dist details

it_mailhead LIKE solisti1   OCCURS  1 WITH HEADER LINE," Header data

it_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,   " Rec List

it_mailtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,    " Mail Text

it_att_data LIKE solisti1 OCCURS 0 WITH HEADER LINE,   " Attachment data

it_doc_att LIKE sodocchgi1.                          " Attri of new doc

*•Text in the mail.

it_mailtxt-line  =

'<BODY BGCOLOR="#FFFFCC">' &

'<B> This is a test mail,  Line Number--1</B><BR>'

.

APPEND it_mailtxt.

it_mailtxt-line = '<I> This is a test mail,  Line Number--2' &

                   ' This is a test mail,  Line Number--2</I><BR>'.

APPEND it_mailtxt.

it_mailtxt-line = '<U> This is a test mail,  Line Number--3' &

                   ' This is a test mail,  Line Number--3' &

                   ' This is a test mail,  Line Number--3</U>'.

APPEND it_mailtxt.

DESCRIBE TABLE it_mailtxt LINES mailtxt_size.

*•Create the att File

concatenate '<BODY><B>Attachment Line Number 1</B><BR>' space into

it_att_data-line.

APPEND it_att_data.

concatenate '<I>Attachment Line Number 2</I><BR>' space into

it_att_data-line.

APPEND it_att_data.

concatenate '<U>Attachment Line Number 3</U>' space into

it_att_data-line.

APPEND it_att_data.

DESCRIBE TABLE it_att_data LINES att_itab_size.

*•Attributes of new doc

CONCATENATE 'Attach' space 'mail'

             INTO it_doc_att-obj_descr SEPARATED BY space.

it_doc_att-sensitivty = 'F'.

it_doc_att-doc_size   = mailtxt_size * 255.

*•Create Pack to text in mail body.

it_mailpack-transf_bin   = space.

it_mailpack-head_start   = 1.

it_mailpack-head_num     = 0.

it_mailpack-body_start   = 1.

it_mailpack-body_num     = mailtxt_size.

it_mailpack-doc_type     = 'HTM'.

APPEND it_mailpack.

*•Create Pack for Attach.

it_mailpack-transf_bin   = 'X'.

it_mailpack-head_start   = 1.

it_mailpack-head_num     = 1.

it_mailpack-body_start   = 1.

it_mailpack-body_num     = att_itab_size.

it_mailpack-doc_type     = 'HTM'.

CONCATENATE 'My' space 'Attachment' INTO it_mailpack-obj_descr.

it_mailpack-doc_size     = att_itab_size * 255.

APPEND it_mailpack.

it_reclist-receiver   = 'mailid@domain.com'.

it_reclist-express    = 'X'.

it_reclist-rec_type   = 'U'.

*it_reclist-notif_del  = 'X'. " request delivery notification

APPEND it_reclist.

*•Call FM to send email

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

      EXPORTING

           document_data              = it_doc_att

           put_in_outbox              = 'X'

      TABLES

           packing_list               = it_mailpack

           object_header              = it_mailhead

           contents_txt               = it_mailtxt

           contents_bin               = it_att_data

           receivers                  = it_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.

IF sy-subrc <> 0.

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

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

elseif sy-subrc = 0.

   message ' Successfully sent' type 'I'.

ENDIF.

0 Kudos

Hi Pradeep,

           i have pasted the above code and tried. i am not able to see any of my mail in SOST Transaction.

           i think we can solve with oops Concept? please Help me.

gouravkumar64
Active Contributor
0 Kudos

Using OLE method u can solve this i Think.

search for thread.

Former Member
0 Kudos

Hi Srinivas,

Try with this below OOPS code for sending mail with attachment.

*REPORT  zattach_email  MESSAGE-ID zz

*                       LINE-SIZE 132

*                       NO STANDARD PAGE HEADING.

*----------------------------------------------------------------------*

*                     TABLES                                           *

*----------------------------------------------------------------------*

TABLES: SOMLRECI1.

*----------------------------------------------------------------------*

*                     GLOBAL DATA DECLARATION                          *

*----------------------------------------------------------------------*

DATA: T_MAILHEX   TYPE STANDARD TABLE OF SOLIX,

       T_CONTENTS  TYPE STANDARD TABLE OF SOLISTI1,

       WA_CONTENTS TYPE SOLISTI1,

       W_FILE      TYPE DSVASDOCID,

       W_EXTN(5)   TYPE C,

       W_MAIL_SUBJ TYPE STRING,

       W_DOCUMENT  TYPE REF TO CL_DOCUMENT_BCS.

*----------------------------------------------------------------------*

*                     CONSTANTS DECLARATION                            *

*----------------------------------------------------------------------*

CONSTANTS:

*-- Constants used in the body of the Email (HTML)

C_HTM         TYPE CHAR3   VALUE 'HTM',

C_STYLE_START TYPE CHAR255 VALUE '<FONT face=Arial size=2>',

C_NEW_LINE    TYPE CHAR255 VALUE '<br>',

C_LINK_START  TYPE CHAR128 VALUE '<A href="www.w3schools.com">',

C_LINK_TEXT   TYPE CHAR32  VALUE 'Link for learning HTML',

C_LINK_END    TYPE CHAR4   VALUE '</A>',

C_SPACE(6)    TYPE C       VALUE ' ',

*-- Used as an Example for displaying space between texts in Email body

C_EMP1(6)     TYPE C       VALUE 101001,

C_EMP2(6)     TYPE C       VALUE 101002,

C_EMP3(6)     TYPE C       VALUE 101003.

*----------------------------------------------------------------------*

*                     SELECTION SCREEN                                 *

*----------------------------------------------------------------------*

*-- Input Details - Block

SELECTION-SCREEN BEGIN OF BLOCK FILE WITH FRAME TITLE TEXT-T01.

PARAMETERS: P_ATTACH   TYPE  RLGRAP-FILENAME.

SELECTION-SCREEN END OF BLOCK FILE.

*-- Email ID of the Recipient

SELECTION-SCREEN BEGIN OF BLOCK MAIL WITH FRAME TITLE TEXT-T02.

SELECT-OPTIONS: S_MAILID  FOR SOMLRECI1-RECEIVER NO INTERVALS.

SELECTION-SCREEN END OF BLOCK MAIL.

*----------------------------------------------------------------------*

*                          AT SELECTION SCREEN                         *

*----------------------------------------------------------------------*

*-- Providing F4 Help for the input file

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ATTACH.

   PERFORM FILE_PATH USING 'P_ATTACH'.

*&---------------------------------------------------------------------*

*                       START-OF-SELECTION                             *

*&---------------------------------------------------------------------*

START-OF-SELECTION.

   IF P_ATTACH IS INITIAL.

     MESSAGE I999(ZZ) WITH 'Please Enter at-least one file name'(001).

     EXIT.

   ENDIF.

*-- Upload data from Presentation Server to SAP

   PERFORM UPLOAD_DATA.

*----------------------------------------------------------------------*

*                        END OF SELECTION                              *

*----------------------------------------------------------------------*

END-OF-SELECTION.

*-- Frame the Body of the Email

   PERFORM FRAME_MAIL_BODY.

*-- Send Mail

   PERFORM SEND_MAIL.

*&--------------------------------------------------------------------*

*& Form Name      : File_path

*&--------------------------------------------------------------------*

*& Description    : F4 help for File Name / Path

*&--------------------------------------------------------------------*

*& Parameters     : FP_FILE  --> File Name

*&--------------------------------------------------------------------*

FORM FILE_PATH USING FP_FILE TYPE ANY.

*-- Selects the directory list

   CALL FUNCTION 'F4_DXFILENAME_4_DYNP'

     EXPORTING

       DYNPFIELD_FILENAME = FP_FILE

       DYNAME             = SY-CPROG

       DYNUMB             = SY-DYNNR

       FILETYPE           = 'P'

       LOCATION           = 'P'

       SERVER             = SPACE.

ENDFORM.                    " file_path

*&---------------------------------------------------------------------*

*& Form Name     : Upload_Data                                         *

*&---------------------------------------------------------------------*

*& Description   : Upload data into SAP from Presentation Server       *

*&---------------------------------------------------------------------*

*& Parameters    : None                                                *

*&---------------------------------------------------------------------*

FORM UPLOAD_DATA.

*-- Local data declaration

   DATA: L_FILE  TYPE STRING,

         L_INDEX TYPE SY-TABIX,

*-- For holding the split file name

         TL_SPLITFILE TYPE STANDARD TABLE OF RLGRAP-FILENAME,

         WL_SPLITFILE TYPE RLGRAP-FILENAME.

   L_FILE = P_ATTACH.

**-- Function module to split the Filename and Extension from the Path

   CALL FUNCTION 'CH_SPLIT_FILENAME'

     EXPORTING

       COMPLETE_FILENAME = L_FILE

     IMPORTING

       EXTENSION         = W_EXTN

       NAME              = W_FILE.

*-- Split the filename at '.'

   SPLIT L_FILE AT '.' INTO TABLE TL_SPLITFILE.

   DESCRIBE TABLE TL_SPLITFILE LINES L_INDEX.

*-- In case the filename contains more than one dot

   IF L_INDEX GT 2.

     CLEAR: WL_SPLITFILE, W_EXTN.

*-- Get the Extension of the file

     READ TABLE TL_SPLITFILE INTO WL_SPLITFILE INDEX L_INDEX.

     W_EXTN = WL_SPLITFILE.

     DELETE TL_SPLITFILE INDEX L_INDEX.

     DELETE TL_SPLITFILE INDEX 1.

     CLEAR WL_SPLITFILE.

*-- Get the Actual filename

     LOOP AT TL_SPLITFILE INTO WL_SPLITFILE.

       CONCATENATE '.' WL_SPLITFILE INTO WL_SPLITFILE.

     ENDLOOP.

     CONCATENATE W_FILE WL_SPLITFILE INTO W_FILE.

   ENDIF.

   CONDENSE W_EXTN.

*-- Upload File

   CALL FUNCTION 'GUI_UPLOAD'

     EXPORTING

       FILENAME                = L_FILE

       FILETYPE                = 'BIN'

     TABLES

       DATA_TAB                = T_MAILHEX

     EXCEPTIONS

       FILE_OPEN_ERROR         = 1

       FILE_READ_ERROR         = 2

       NO_BATCH                = 3

       GUI_REFUSE_FILETRANSFER = 4

       INVALID_TYPE            = 5

       NO_AUTHORITY            = 6

       UNKNOWN_ERROR           = 7

       BAD_DATA_FORMAT         = 8

       HEADER_NOT_ALLOWED      = 9

       SEPARATOR_NOT_ALLOWED   = 10

       HEADER_TOO_LONG         = 11

       UNKNOWN_DP_ERROR        = 12

       ACCESS_DENIED           = 13

       DP_OUT_OF_MEMORY        = 14

       DISK_FULL               = 15

       DP_TIMEOUT              = 16

       OTHERS                  = 17.

   IF SY-SUBRC IS NOT INITIAL.

     MESSAGE I999(ZZ) WITH 'Error in reading file for upload'(002)

     W_FILE.

   ENDIF.

ENDFORM.                    " upload_data

*&---------------------------------------------------------------------*

*& Form Name     : frame_mail_body                                     *

*&---------------------------------------------------------------------*

*& Description   : To frame the body part of the Email to be sent      *

*&---------------------------------------------------------------------*

*& Parameters    : None                                                *

*&---------------------------------------------------------------------*

FORM FRAME_MAIL_BODY.

*-- Local data declaration to hold the textpool

   DATA: TL_TEXTPOOL TYPE STANDARD TABLE OF TEXTPOOL,

         WL_TEXTPOOL TYPE TEXTPOOL.

*-- Read the Entire Textpool into an Internal table

   READ TEXTPOOL SY-REPID INTO TL_TEXTPOOL LANGUAGE SY-LANGU.

   IF SY-SUBRC IS INITIAL.

     SORT TL_TEXTPOOL BY ID KEY.

   ENDIF.

*-- Font start

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_STYLE_START.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- Program name : Email Attachment

   CLEAR: WL_TEXTPOOL, WA_CONTENTS.

   READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL

                          WITH KEY ID = 'I' KEY = 'T03'

                          BINARY SEARCH.

   IF SY-SUBRC EQ 0.

     WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.

*-- "#" Present in the Text Element will be replaced by the below value

     REPLACE: '#' WITH 'Email Attachment' INTO WA_CONTENTS-LINE.

     APPEND WA_CONTENTS TO T_CONTENTS.

   ENDIF.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- You can also change or add the text here...

   CLEAR: WL_TEXTPOOL, WA_CONTENTS.

   READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL

                          WITH KEY ID = 'I' KEY = 'T04'

                          BINARY SEARCH.

   IF SY-SUBRC EQ 0.

     WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.

     APPEND WA_CONTENTS TO T_CONTENTS.

   ENDIF.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- For giving spaces between texts, you can use...

   CLEAR: WL_TEXTPOOL, WA_CONTENTS.

   READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL

                          WITH KEY ID = 'I' KEY = 'T05'

                          BINARY SEARCH.

   IF SY-SUBRC EQ 0.

     WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.

     APPEND WA_CONTENTS TO T_CONTENTS.

   ENDIF.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- For Ex; Employee Numbers :

   CLEAR: WL_TEXTPOOL, WA_CONTENTS.

   READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL

                          WITH KEY ID = 'I' KEY = 'T06'

                          BINARY SEARCH.

   IF SY-SUBRC EQ 0.

     WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.

*-- How to give Spaces in between texts

     CONCATENATE WA_CONTENTS-LINE C_SPACE C_EMP1 C_SPACE C_EMP2

                                  C_SPACE C_EMP3 INTO WA_CONTENTS-LINE.

     APPEND WA_CONTENTS TO T_CONTENTS.

   ENDIF.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- For more Information on HTML..

   CLEAR: WL_TEXTPOOL, WA_CONTENTS.

   READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL

                          WITH KEY ID = 'I' KEY = 'T07'

                          BINARY SEARCH.

   IF SY-SUBRC EQ 0.

     WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.

     APPEND WA_CONTENTS TO T_CONTENTS.

   ENDIF.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- New line

   CLEAR WA_CONTENTS.

   WA_CONTENTS-LINE = C_NEW_LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- Hyperlink

   CLEAR WA_CONTENTS.

   CONCATENATE C_LINK_START C_LINK_TEXT C_LINK_END INTO WA_CONTENTS-LINE.

   APPEND WA_CONTENTS TO T_CONTENTS.

*-- Subject of the Mail

   CONCATENATE TEXT-T08 W_MAIL_SUBJ INTO W_MAIL_SUBJ.

ENDFORM.                    " frame_mail_body

*&---------------------------------------------------------------------*

*& Form Name     : Send_mail                                           *

*&---------------------------------------------------------------------*

*& Description   : To set the recipients and send the mail             *

*&---------------------------------------------------------------------*

*& Parameters    : None                                                *

*&---------------------------------------------------------------------*

FORM SEND_MAIL.

*-- Local data declaration for sending mail

   DATA: L_SEND_REQUEST  TYPE REF TO CL_BCS,

         L_DOCUMENT      TYPE REF TO CL_DOCUMENT_BCS,

         L_SENDER        TYPE REF TO CL_SAPUSER_BCS,

         L_SUB           TYPE CHAR50,

         L_RECIPIENT     TYPE REF TO IF_RECIPIENT_BCS,

         TL_CONTENTS     TYPE STANDARD TABLE OF SOLI,

         L_DOC_LEN       TYPE SO_OBJ_LEN,

         L_CNT           TYPE SY-TABIX,

         L_RCV_EMAIL     TYPE ADR6-SMTP_ADDR,

         L_RESULT        TYPE SY-BINPT,

         L_BCS_EXCEPTION TYPE REF TO CX_BCS,

         L_SUBJ          TYPE STRING,

         WL_MAILID       LIKE LINE OF S_MAILID.

   TRY.

*-- Create persistent send request

       L_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

       TL_CONTENTS[] = T_CONTENTS[].

*-- Get the length of the Document

       DESCRIBE TABLE TL_CONTENTS LINES L_CNT.

       READ TABLE TL_CONTENTS INTO WA_CONTENTS INDEX L_CNT.

       L_DOC_LEN = ( L_CNT - 1 ) * 255 + STRLEN( WA_CONTENTS ).

*-- Subject of the mail

       L_SUB = W_MAIL_SUBJ.

*-- Create Document

       L_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(

                    I_TYPE       = C_HTM

                    I_TEXT       = TL_CONTENTS

                    I_LENGTH     = L_DOC_LEN

                    I_SUBJECT    = L_SUB

                    I_LANGUAGE   = SY-LANGU

                    I_IMPORTANCE = '1' ).

*-- Subject of the mail

       MOVE W_MAIL_SUBJ TO L_SUBJ.

       W_DOCUMENT = L_DOCUMENT.

       TRY.

*-- Set the Message Subject

           CALL METHOD L_SEND_REQUEST->SET_MESSAGE_SUBJECT

             EXPORTING

               IP_SUBJECT = L_SUBJ.

         CATCH CX_SY_DYN_CALL_ILLEGAL_METHOD.

       ENDTRY.

*-- Add document to send request

       CALL METHOD L_SEND_REQUEST->SET_DOCUMENT( L_DOCUMENT ).

*-- Do send delivery info for successful mails

       CALL METHOD L_SEND_REQUEST->SET_STATUS_ATTRIBUTES

         EXPORTING

           I_REQUESTED_STATUS = 'E'

           I_STATUS_MAIL      = 'A'.

*-- Set sender

       L_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ).

       CALL METHOD L_SEND_REQUEST->SET_SENDER

         EXPORTING

           I_SENDER = L_SENDER.

*-- To frame the attachments for the mail

       PERFORM FRAME_ATTACHMENTS.

*-- Add the recipients to the Send mail

       LOOP AT S_MAILID INTO WL_MAILID.

         L_RCV_EMAIL = WL_MAILID-LOW.

         CHECK NOT L_RCV_EMAIL IS INITIAL.

         L_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(

                                                       L_RCV_EMAIL ).

         CALL METHOD L_SEND_REQUEST->ADD_RECIPIENT

           EXPORTING

             I_RECIPIENT = L_RECIPIENT

             I_EXPRESS   = 'X'.

       ENDLOOP.

*-- Send Email

       CALL METHOD L_SEND_REQUEST->SEND(

         EXPORTING

           I_WITH_ERROR_SCREEN = 'X'

         RECEIVING

           RESULT              = L_RESULT ).

       IF L_RESULT = 'X'.

         MESSAGE S999(ZZ) WITH

         'Approval Mail Sent Successfully'(003).

       ENDIF.

     CATCH CX_BCS INTO L_BCS_EXCEPTION.

       IF L_RESULT NE 'X'.

         MESSAGE S999(ZZ) WITH

         'Approval Mail Not Successful'(004).

       ENDIF.

   ENDTRY.

   COMMIT WORK.                                             "Commit Work

ENDFORM.                    " send_mail

*&---------------------------------------------------------------------*

*& Form Name     : frame_attachments                                   *

*&---------------------------------------------------------------------*

*& Description   : To frame the attachments for the mail to be sent    *

*&---------------------------------------------------------------------*

*& Parameters    : None                                                *

*&---------------------------------------------------------------------*

FORM FRAME_ATTACHMENTS.

*-- Local Data declaration

   DATA: L_SUBJECT   TYPE SO_OBJ_DES,

         L_ATT_TYPE  TYPE SOODK-OBJTP.

*-- Subject of the Attachment

   L_SUBJECT  = W_FILE.

*-- Format of the Attachment

   L_ATT_TYPE = W_EXTN.

   IF T_MAILHEX[] IS NOT INITIAL.

     TRY.

*-- Add Attachment to the Document

         CALL METHOD W_DOCUMENT->ADD_ATTACHMENT

           EXPORTING

             I_ATTACHMENT_TYPE    = L_ATT_TYPE

             I_ATTACHMENT_SUBJECT = L_SUBJECT

             I_ATT_CONTENT_HEX    = T_MAILHEX.

       CATCH CX_DOCUMENT_BCS.

     ENDTRY.

   ENDIF.

ENDFORM.                    " frame_attachments

Regards,

Bharathkumar.MG

0 Kudos

Hi Bharat,

        i know the logic for the sending mail with attachment using OOPS concept.

    

        i have a requirement that in that excel attachment on the mail the Header should be in BOLD.

       please help me on that.

0 Kudos

Hi Srinivas,

The below code will satisfy your requirement..

REPORT  zexcel_code.

******************************Tables***********************************

  TABLES: objk, aufk.

TYPE-POOLS: ole2.

******************************Types*************************************

TYPES: BEGIN OF ty_ser,

          kunnr TYPE kna1-kunnr,

          name1 TYPE kna1-name1,

          ort01 TYPE kna1-ort01,

        END OF ty_ser.

TYPES: BEGIN OF ty_titles,

        title(20) TYPE c,

        field(20) TYPE c,

        END OF ty_titles.

***************************Data Declaration*****************************

DATA: it_ser   TYPE TABLE OF ty_ser,

       wa_ser   TYPE ty_ser,

       v_lines  TYPE i,

       it_title TYPE STANDARD TABLE OF ty_titles.

DATA: fm_name  TYPE rs38l_fnam,

       v_line   TYPE sy-tabix,

       v_tabix  TYPE sy-tabix,

       v_titles TYPE sy-tabix,

       v_field  TYPE string,

       filename TYPE string,

       path     TYPE string,

       fullpath TYPE string,

       v_text   TYPE string,

       v_file   TYPE rlgrap-filename.

DATA: e_sheet TYPE ole2_object,

       e_activesheet TYPE ole2_object,

       e_newsheet TYPE ole2_object,

       e_appl TYPE ole2_object,

       e_work TYPE ole2_object,

       e_cell TYPE ole2_object,

       e_color TYPE ole2_object,

       e_bold TYPE ole2_object.

DATA: data_titles TYPE REF TO data.

FIELD-SYMBOLS: <fs_spfli> LIKE LINE OF it_ser,

                <fs_titles> LIKE LINE OF it_title,

                <fs> TYPE any.

START-OF-SELECTION.

   PERFORM get_data.

   PERFORM get_titles.

   PERFORM convert_to_excel.

*&---------------------------------------------------------------------*

*&      Form  get_titles

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM get_titles.

   CREATE DATA data_titles TYPE ty_titles.

   ASSIGN data_titles->* TO <fs_titles>.

   <fs_titles>-title = 'Customer Number'.

   <fs_titles>-field = 'KUNNR'.

   APPEND <fs_titles> TO it_title.

   <fs_titles>-title = 'Name'.

   <fs_titles>-field = 'NAME1'.

   APPEND <fs_titles> TO it_title.

   <fs_titles>-title = 'COUNTRY'.

   <fs_titles>-field = 'ORT01'.

   APPEND <fs_titles> TO it_title.

ENDFORM.                    "get_titles

*&---------------------------------------------------------------------*

*&      Form  CONVERT_TO_EXCEL

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM convert_to_excel.

   CALL METHOD cl_gui_frontend_services=>file_save_dialog

     EXPORTING

       window_title      = 'Select archive'

       default_extension = 'xls'

       file_filter       = '*.xls'

     CHANGING

       filename          = filename

       path              = path

       fullpath          = fullpath.

   v_line = 1.

   CREATE OBJECT e_appl 'EXCEL.APPLICATION'.

   SET PROPERTY OF e_appl 'VISIBLE' = 1.

   CALL METHOD OF

       e_appl

       'WORKBOOKS' = e_work.

   CALL METHOD OF

       e_work

       'Add'  = e_work.

   GET PROPERTY OF e_appl 'ActiveSheet' = e_activesheet.

   SET PROPERTY OF e_activesheet 'Name' = sy-datum.

   LOOP AT it_ser ASSIGNING <fs_spfli>.

     v_tabix = sy-tabix.

     v_line = v_line + 1.

     LOOP AT it_title ASSIGNING <fs_titles>.

       v_titles = sy-tabix.

       CALL METHOD OF

           e_appl

           'Cells' = e_cell

         EXPORTING

           #1      = 1

           #2      = v_titles.

       SET PROPERTY OF e_cell 'Value' =  <fs_titles>-title.

       GET PROPERTY OF e_cell 'Interior' = e_color.

       SET PROPERTY OF e_color 'ColorIndex' = 35.

       GET PROPERTY OF e_cell 'Font' = e_bold.

       SET PROPERTY OF e_bold 'Bold' = 1.

       CALL METHOD OF

           e_appl

           'Cells' = e_cell

         EXPORTING

           #1      = v_line

           #2      = v_titles.

       CONCATENATE '<fs_spfli>-' <fs_titles>-field

       INTO v_field.

       ASSIGN (v_field) TO <fs>.

       IF v_titles = 2.

         SET PROPERTY OF e_cell 'NumberFormat' = '@'.

       ENDIF.

       SET PROPERTY OF e_cell 'Value' = <fs>.

       GET PROPERTY OF e_cell 'Interior' = e_color.

       SET PROPERTY OF e_cell 'ColumnWidth' = 20.

       SET PROPERTY OF e_color 'ColorIndex' = 0.

       GET PROPERTY OF e_cell 'Font' = e_bold.

       SET PROPERTY OF e_bold 'Bold' = 0.

     ENDLOOP.

   ENDLOOP.

   CALL METHOD OF e_work 'SAVEAS'

     EXPORTING

       #1       = fullpath.

   FREE OBJECT e_appl.

ENDFORM.                    " CONVERT_TO_EXCEL

*&---------------------------------------------------------------------*

*&      Form  GET_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM get_data.

   SELECT kunnr name1 ort01 FROM kna1 INTO CORRESPONDING FIELDS OF TABLE it_ser UP TO 10 ROWS.

ENDFORM.                    " GET_DATA

Let me know if it helps. Any comments are appreciated.

<removed by moderator>

Regards,

Bharathkumar.MG

Message was edited by: Thomas Zloch

0 Kudos

Hi Bharat,

          i have executed your code it is working fine but the output should come from the mail attachment (SOST T-Code).

please help me .  <removed by moderator>.

Message was edited by: Thomas Zloch

0 Kudos

Hi Srinivas,

Thanks for your reply. Am not getting your exact requirement.

SOST transaction will have the status log of mail which has triggered already like whether it has sent or waiting or error.

Could you please explain this discussion in deep to provide answer.

Regards,

Bharathkumar.MG 

0 Kudos

Hi Bharat,

         the below is for sending mail with attachment as Excel sheet. i need in that excel sheet to have Header Fields in BOLD.

NOTE : customer number
            name
            country

the above 3 fields should be in BOLD with attachment as Excel sheet.

   LV_MESSAGE = 'Mail For Cancelled Invoices.'.
   APPEND LV_MESSAGE TO IT_MESSAGE.


   DATA:L_YEAR(4),
        L_MON(2),
        L_DAY(2),
        L_DATE(20),
        L_NOTE(255).

   L_YEAR =  SY-DATUM+0(4).
   L_MON  =  SY-DATUM+4(2).
   L_DAY  =  SY-DATUM+6(2).

   CONCATENATE L_DAY L_MON L_YEAR INTO P_DATE SEPARATED BY '-'.
   CONCATENATE 'Date:' P_DATE INTO L_DATE SEPARATED BY SPACE.
   CONCATENATE TEXT-020 TEXT-021 INTO L_NOTE SEPARATED BY SPACE.

    CONCATENATE 'FI REPORT'
               L_DATE
           INTO IT_ATTACHMENT SEPARATED BY   CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
   CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.


   APPEND IT_ATTACHMENT.


   CONCATENATE '' ' ' INTO IT_ATTACHMENT SEPARATED BY   CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
   CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
   APPEND IT_ATTACHMENT.

   CONCATENATE L_NOTE ' ' INTO IT_ATTACHMENT SEPARATED BY   CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
   CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
   APPEND IT_ATTACHMENT.

   CONCATENATE '' ' ' INTO IT_ATTACHMENT SEPARATED BY   CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
   CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
   APPEND IT_ATTACHMENT.

   CONCATENATE 'customer number'
               'name'
               'country'
               INTO IT_ATTACHMENT SEPARATED BY
               CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
   CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
   APPEND IT_ATTACHMENT.

   LOOP AT IT_SER INTO WA_SER.

     CONCATENATE WA_SER-KUNNR
                 WA_SER-NAME1
                 WA_SER-ORT01
                                     INTO IT_ATTACHMENT SEPARATED BY
              CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

     CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
     APPEND IT_ATTACHMENT.
   ENDLOOP.

* Selecting the mail id's
   SELECT INTID
          EMAIL
     FROM ZTBIDL
     INTO TABLE T_ZTBIDL
    WHERE INTID = 'RICEF21' AND
          OBJ_NAME = 'PIC'.

   LOOP AT T_ZTBIDL INTO WA_ZTBIDL.

     IT_RECEIVERS-RECEIVER = WA_ZTBIDL-EMAIL.
     IT_RECEIVERS-REC_TYPE = 'U'.
     IT_RECEIVERS-COM_TYPE = 'INT'.
     IT_RECEIVERS-NOTIF_DEL = 'X'.
     IT_RECEIVERS-NOTIF_NDEL = 'X'.
     IT_RECEIVERS-EXPRESS = 'X'.
     APPEND IT_RECEIVERS.
   ENDLOOP.

*File Type
   LD_FORMAT = 'XLS'.
**File Name
   CONCATENATE 'PIC_' SY-DATUM INTO LD_ATTFILENAME.
* Fill the document data.
   GD_DOC_DATA-DOC_SIZE = 1.
* Populate the subject/generic message attributes
   GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
   GD_DOC_DATA-OBJ_NAME = 'SAPRPT'.
   GD_DOC_DATA-OBJ_DESCR = PSUBJECT .
   GD_DOC_DATA-SENSITIVTY = 'F'.
* Fill the document data and get size of attachment
   CLEAR GD_DOC_DATA.
* Populate the subject/generic message attributes
   GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
   READ TABLE IT_ATTACHMENT INDEX W_CNT.
   GD_DOC_DATA-DOC_SIZE = ( W_CNT - 1 ) * 255 + STRLEN( IT_ATTACHMENT ).
   GD_DOC_DATA-OBJ_NAME  = 'SAPRPT'.
   GD_DOC_DATA-OBJ_DESCR = PSUBJECT.
   GD_DOC_DATA-SENSITIVTY = 'F'.
* Describe the body of the message
   CLEAR IT_PACKING_LIST.
   REFRESH IT_PACKING_LIST.
   IT_PACKING_LIST-TRANSF_BIN = SPACE.
   IT_PACKING_LIST-HEAD_START = 1.
   IT_PACKING_LIST-HEAD_NUM   = 0.
   IT_PACKING_LIST-BODY_START = 1.
   DESCRIBE TABLE IT_MESSAGE LINES IT_PACKING_LIST-BODY_NUM.
   IT_PACKING_LIST-DOC_TYPE   = 'RAW'.
   APPEND IT_PACKING_LIST.
**Describe the attachment info
   IT_PACKING_LIST-TRANSF_BIN = 'X'.
   IT_PACKING_LIST-HEAD_START = 1.
   IT_PACKING_LIST-HEAD_NUM   = 1.
   IT_PACKING_LIST-BODY_START = 1.
   DESCRIBE TABLE IT_ATTACHMENT LINES  IT_PACKING_LIST-BODY_NUM.
   IT_PACKING_LIST-DOC_TYPE   = LD_FORMAT.
   IT_PACKING_LIST-OBJ_NAME   = LD_ATTFILENAME.
   IT_PACKING_LIST-OBJ_DESCR  = LD_ATTFILENAME.
   IT_PACKING_LIST-DOC_SIZE   = IT_PACKING_LIST-BODY_NUM * 255.
   APPEND IT_PACKING_LIST.

   CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
     EXPORTING
       DOCUMENT_DATA = GD_DOC_DATA
       PUT_IN_OUTBOX = 'X'
       COMMIT_WORK   = 'X'
     TABLES
       PACKING_LIST  = IT_PACKING_LIST
       CONTENTS_BIN  = IT_ATTACHMENT
       CONTENTS_TXT  = IT_MESSAGE
       RECEIVERS     = IT_RECEIVERS.