Multi-sheets EXCEL file creation and sending as email attachment using XML DOM method in ABAP.
EXCEL file creation based on XML DOM method has multiple advantages:
- Supports multiple sheet creation
- Suitable for background execution
- High performance in case of huge data extraction into excel
- Build in connectivity (send file by email)
Report Source Code:
*&---------------------------------------------------------------------*
*& creating excel file with multiple sheets
*& and send as attachment in email
*& Note: Report has no selection screen parameter.
*& Author: Jeetendra Kapase, SAP ABAP consultant, Accenture
*&---------------------------------------------------------------------*
REPORT sy-repid.
*XML Library Types
TYPE-POOLS: ixml.
*-----------------------------------------------------------------------
*
* Data Declarations
*
*-----------------------------------------------------------------------
*
* Structure for final output table
TYPES: BEGIN OF gty_final,
srno(3) TYPE n,
user_id TYPE usr02-bname,
full_name TYPE bapiaddr3-fullname,
dept TYPE bapiaddr3-department,
login(3) TYPE c,
function TYPE ad_fnctn,
building TYPE ad_bldng_p,
floor TYPE ad_floor,
END OF gty_final,
* Structure for USR02
BEGIN OF gty_usr02,
bname TYPE usr02-bname,
trdat TYPE usr02-trdat,
END OF gty_usr02,
* Structure for xml line
BEGIN OF gty_xml_line,
data(255) TYPE x,
END OF gty_xml_line.
* Internal Table & Work Area for Final Internal Table
DATA: gt_final TYPE TABLE OF gty_final,
gs_final TYPE gty_final,
gt_usr02 TYPE TABLE OF gty_usr02,
gs_usr02 TYPE gty_usr02,
gs_addr TYPE bapiaddr3,
gt_return TYPE TABLE OF bapiret2,
gv_date TYPE d,
gref_ixml TYPE REF TO if_ixml,
gref_streamfactory TYPE REF TO if_ixml_stream_factory,
gref_ostream TYPE REF TO if_ixml_ostream,
gref_renderer TYPE REF TO if_ixml_renderer,
gref_document TYPE REF TO if_ixml_document,
gref_element_root TYPE REF TO if_ixml_element,
gref_ns_attribute TYPE REF TO if_ixml_attribute,
gref_element_pro TYPE REF TO if_ixml_element,
gref_worksheet TYPE REF TO if_ixml_element,
gref_table TYPE REF TO if_ixml_element,
gref_column TYPE REF TO if_ixml_element,
gref_row TYPE REF TO if_ixml_element,
gref_cell TYPE REF TO if_ixml_element,
gref_data TYPE REF TO if_ixml_element,
gv_value TYPE string,
gref_styles TYPE REF TO if_ixml_element,
gref_style TYPE REF TO if_ixml_element,
gref_style1 TYPE REF TO if_ixml_element,
gref_format TYPE REF TO if_ixml_element,
gref_border TYPE REF TO if_ixml_element,
gt_xml_table TYPE TABLE OF gty_xml_line,
gs_xml TYPE gty_xml_line.
*-----------------------------------------------------------------------
*
* Initialization
*-----------------------------------------------------------------------
INITIALIZATION.
gv_date = sy-datum - 1.
*-----------------------------------------------------------------------
*
* Start of Selection
*
*-----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM get_user_data.
PERFORM create_xml_based_excel.
PERFORM send_mail.
*-----------------------------------------------------------------------
*
* End of Selection
*
*-----------------------------------------------------------------------
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form get_user_data
*&---------------------------------------------------------------------*
* Fetch User details from USR02
*----------------------------------------------------------------------*
FORM get_user_data.
REFRESH gt_final.
SELECT DISTINCT bname
trdat UP TO 5 ROWS
FROM usr02 INTO TABLE gt_usr02.
IF sy-subrc IS INITIAL.
SORT gt_usr02 BY bname.
LOOP AT gt_usr02 INTO gs_usr02.
* Excel Sheet 1 data
CLEAR gs_final.
gs_final-srno = sy-tabix. " Serial No.
gs_final-user_id = gs_usr02-bname. " User ID
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING
username = gs_usr02-bname
IMPORTING
address = gs_addr
TABLES
return = gt_return
EXCEPTIONS
OTHERS = 4.
IF sy-subrc IS INITIAL.
gs_final-full_name = gs_addr-fullname. " Full Name
gs_final-dept = gs_addr-department. " Department
ENDIF.
IF gs_usr02-trdat EQ gv_date.
gs_final-login = 'YES'. " Login on Previous
ELSE.
gs_final-login = 'NO'.
ENDIF.
* Excel Sheet 2 data
gs_final-function = gs_addr-function. "Function
gs_final-building = gs_addr-building_p. "Building
gs_final-floor = gs_addr-floor_p. "Floor
APPEND gs_final TO gt_final.
ENDLOOP.
ENDIF.
ENDFORM. " get_user_data
*&---------------------------------------------------------------------*
*& Form SEND_MAIL
*&---------------------------------------------------------------------*
* Send Email
*----------------------------------------------------------------------*
FORM send_mail.
DATA: lt_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
lt_objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE,
lt_objbin LIKE solix OCCURS 10 WITH HEADER LINE,
lt_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
lt_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE,
ls_doc_chng LIKE sodocchgi1,
lv_tabix TYPE sy-tabix,
lv_sub_date(10) TYPE c.
* Mail Subject
CONCATENATE gv_date+6(2) '-' gv_date+4(2) '-' gv_date+0(4) INTO lv_sub_date.
CONCATENATE 'SAP EXCEL attach using XML' lv_sub_date INTO ls_doc_chng-obj_descr SEPARATED BY space.
* Mail Contents
lt_objtxt = 'Dear Friend,'.
APPEND lt_objtxt.
* Space in mail body
CLEAR lt_objtxt.
APPEND lt_objtxt.
CLEAR lt_objtxt.
APPEND lt_objtxt.
CLEAR lt_objtxt.
APPEND lt_objtxt.
* Mail Signature
lt_objtxt = 'Thanks & Regards,'.
APPEND lt_objtxt.
lt_objtxt = 'Jeetendra Kapase'.
APPEND lt_objtxt.
lt_objtxt = 'ABAP-Consultant'.
APPEND lt_objtxt.
DESCRIBE TABLE lt_objtxt LINES lv_tabix.
READ TABLE lt_objtxt INDEX lv_tabix.
* Get mail body size
IF sy-subrc IS INITIAL.
ls_doc_chng-doc_size = ( lv_tabix - 1 ) * 255 + strlen( lt_objtxt ).
ENDIF.
* Packing List For the E-mail Body
lt_objpack-head_start = 1.
lt_objpack-head_num = 0.
lt_objpack-body_start = 1.
lt_objpack-body_num = lv_tabix.
lt_objpack-doc_type = 'RAW'.
APPEND lt_objpack.
* Creation of the Excel Document Attachment
LOOP AT gt_xml_table INTO gs_xml.
CLEAR lt_objbin.
lt_objbin-line = gs_xml-data.
APPEND lt_objbin.
ENDLOOP.
DESCRIBE TABLE lt_objbin LINES lv_tabix.
lt_objhead = 'SAP User Details'.
APPEND lt_objhead.
* Packing List For the E-mail Attachment
* Excel File name
lt_objpack-transf_bin = 'X'.
lt_objpack-head_start = 1.
lt_objpack-head_num = 0.
lt_objpack-body_start = 1.
lt_objpack-body_num = lv_tabix.
CONCATENATE 'SAP_User_Details' lv_sub_date INTO lt_objpack-obj_descr SEPARATED BY space.
lt_objpack-doc_type = 'XLS'.
lt_objpack-doc_size = lv_tabix * 255.
APPEND lt_objpack.
* Email Recipent
CLEAR lt_reclist.
lt_reclist-receiver = 'testuser@testsystem.com'.
lt_reclist-rec_type = 'U'.
APPEND lt_reclist.
* Sending the mail with excel document as attachment.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = ls_doc_chng
put_in_outbox = 'X'
TABLES
packing_list = lt_objpack
object_header = lt_objhead
contents_txt = lt_objtxt
contents_hex = lt_objbin
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.
IF sy-subrc IS INITIAL.
*To confirm mail is send sucessfully use commit work.
COMMIT WORK.
MESSAGE i899(f2) WITH 'Mail send with attach successfully (SOST)'.
ELSE.
* Error/ Exception handling messages.
MESSAGE i899(f2) WITH 'Mail was not send!' DISPLAY LIKE 'E'.
ENDIF.
ENDFORM. " SEND_MAIL
*&---------------------------------------------------------------------*
*& Form create_XML_based_Excel
*&---------------------------------------------------------------------*
* Process XML Data
*----------------------------------------------------------------------*
FORM create_xml_based_excel .
* Creating a ixml Factory
gref_ixml = cl_ixml=>create( ).
* Creating the DOM Object Model for Excel file
gref_document = gref_ixml->create_document( ).
* Create Root Node Excel 'Workbook'
gref_element_root = gref_document->create_simple_element( name = 'Workbook' parent = gref_document ).
gref_element_root->set_attribute( name = 'xmlns' value ='urn:schemas-microsoft-com:office:spreadsheet' ).
gref_ns_attribute = gref_document->create_namespace_decl( name = 'ss' prefix = 'xmlns' uri = 'urn:schemas-microsoft-com:office:spreadsheet').
gref_element_root->set_attribute_node( gref_ns_attribute ).
gref_ns_attribute = gref_document->create_namespace_decl( name = 'x' prefix = 'xmlns' uri = 'urn:schemas-microsoft-com:office:excel' ).
gref_element_root->set_attribute_node( gref_ns_attribute ).
* Create node for document properties.
gref_element_pro = gref_document->create_simple_element( name = 'TEST_PROGRAM' parent = gref_element_root ).
gv_value = sy-uname.
* Excel file author
gref_document->create_simple_element( name = 'Author' value = gv_value parent = gref_element_pro ).
* Excel Styles
gref_styles = gref_document->create_simple_element( name = 'Styles' parent = gref_element_root ).
* Style, alignment and font for Header
gref_style = gref_document->create_simple_element( name = 'Style' parent = gref_styles ).
gref_style->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'Header' ).
gref_format = gref_document->create_simple_element( name = 'Font' parent = gref_style ).
gref_format->set_attribute_ns( name = 'Bold' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Interior' parent = gref_style ).
gref_format->set_attribute_ns( name = 'Color' prefix = 'ss' value = '#92D050' ).
gref_format->set_attribute_ns( name = 'Pattern' prefix = 'ss' value = 'Solid' ).
gref_format = gref_document->create_simple_element( name = 'Alignment' parent = gref_style ).
gref_format->set_attribute_ns( name = 'Vertical' prefix = 'ss' value = 'Center' ).
gref_format->set_attribute_ns( name = 'WrapText' prefix = 'ss' value = '1' ).
* Border Setting
gref_border = gref_document->create_simple_element( name = 'Borders' parent = gref_style ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
* Style for Data in Excel file
gref_style1 = gref_document->create_simple_element( name = 'Style' parent = gref_styles ).
gref_style1->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'Data' ).
gref_border = gref_document->create_simple_element( name = 'Borders' parent = gref_style1 ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
* Excel Worksheet1 Data.
gref_worksheet = gref_document->create_simple_element( name = 'Worksheet' parent = gref_element_root ).
* Worksheet Name
gref_worksheet->set_attribute_ns( name = 'Name' prefix = 'ss' value ='SAPUserID' ).
* Table
gref_table = gref_document->create_simple_element( name = 'Table' parent = gref_worksheet ).
gref_table->set_attribute_ns( name = 'FullColumns' prefix = 'x' value = '1' ).
gref_table->set_attribute_ns( name = 'FullRows' prefix = 'x' value = '1' ).
* Excel Column Formatting
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '40' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '140' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '150' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
* Blank Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Column Headers Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Serial No.' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* SAP User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'User Name' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* User Full Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Full Name' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Department
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Department' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Login
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
CONCATENATE 'Login - ' gv_date+6(2) '/' gv_date+4(2) '/' gv_date+0(4) INTO gv_value.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Blank Row after Headers columns
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
* Adding Data into excel sheet1
LOOP AT gt_final INTO gs_final.
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = sy-tabix.
CONDENSE gv_value NO-GAPS.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ).
* Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'Number' ).
* Cell format
* User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-user_id.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Full Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-full_name.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Department gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-dept.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Login
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-login.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
ENDLOOP.
* Excel Worksheet2 Data.
gref_worksheet = gref_document->create_simple_element( name = 'Worksheet' parent = gref_element_root ).
gref_worksheet->set_attribute_ns( name = 'Name' prefix = 'ss' value = 'AdditionalDetails' ).
* Table
gref_table = gref_document->create_simple_element( name = 'Table' parent = gref_worksheet ).
gref_table->set_attribute_ns( name = 'FullColumns' prefix = 'x' value = '1' ).
gref_table->set_attribute_ns( name = 'FullRows' prefix = 'x' value = '1' ).
* Excel Column Formatting
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '40' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '140' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '150' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
* Blank Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Column Headers Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Serial No.' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'User Name' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Function
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Function' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Department
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Building' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Floor
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Floor' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Blank Row after Column Headers
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
* Adding Data into excel sheet2
LOOP AT gt_final INTO gs_final.
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = sy-tabix.
CONDENSE gv_value NO-GAPS.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'Number' ). " Cell format
* User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-user_id.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Function
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-function.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Building
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-building.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Floor
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-floor.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
ENDLOOP.
* Creating a Stream Factory for XML
gref_streamfactory = gref_ixml->create_stream_factory( ).
* Connect Internal XML Table to Stream Factory for Excel data
gref_ostream = gref_streamfactory->create_ostream_itable( table = gt_xml_table ).
* Rendering the Document
gref_renderer = gref_ixml->create_renderer( ostream = gref_ostream document = gref_document ).
gref_renderer->render( ).
* Saving the XML Document
gref_ostream->get_num_written_raw( ).
ENDFORM. " create_XML_based_Excel
*& creating excel file with multiple sheets
*& and send as attachment in email
*& Note: Report has no selection screen parameter.
*& Author: Jeetendra Kapase, SAP ABAP consultant, Accenture
*&---------------------------------------------------------------------*
REPORT sy-repid.
*XML Library Types
TYPE-POOLS: ixml.
*-----------------------------------------------------------------------
*
* Data Declarations
*
*-----------------------------------------------------------------------
*
* Structure for final output table
TYPES: BEGIN OF gty_final,
srno(3) TYPE n,
user_id TYPE usr02-bname,
full_name TYPE bapiaddr3-fullname,
dept TYPE bapiaddr3-department,
login(3) TYPE c,
function TYPE ad_fnctn,
building TYPE ad_bldng_p,
floor TYPE ad_floor,
END OF gty_final,
* Structure for USR02
BEGIN OF gty_usr02,
bname TYPE usr02-bname,
trdat TYPE usr02-trdat,
END OF gty_usr02,
* Structure for xml line
BEGIN OF gty_xml_line,
data(255) TYPE x,
END OF gty_xml_line.
* Internal Table & Work Area for Final Internal Table
DATA: gt_final TYPE TABLE OF gty_final,
gs_final TYPE gty_final,
gt_usr02 TYPE TABLE OF gty_usr02,
gs_usr02 TYPE gty_usr02,
gs_addr TYPE bapiaddr3,
gt_return TYPE TABLE OF bapiret2,
gv_date TYPE d,
gref_ixml TYPE REF TO if_ixml,
gref_streamfactory TYPE REF TO if_ixml_stream_factory,
gref_ostream TYPE REF TO if_ixml_ostream,
gref_renderer TYPE REF TO if_ixml_renderer,
gref_document TYPE REF TO if_ixml_document,
gref_element_root TYPE REF TO if_ixml_element,
gref_ns_attribute TYPE REF TO if_ixml_attribute,
gref_element_pro TYPE REF TO if_ixml_element,
gref_worksheet TYPE REF TO if_ixml_element,
gref_table TYPE REF TO if_ixml_element,
gref_column TYPE REF TO if_ixml_element,
gref_row TYPE REF TO if_ixml_element,
gref_cell TYPE REF TO if_ixml_element,
gref_data TYPE REF TO if_ixml_element,
gv_value TYPE string,
gref_styles TYPE REF TO if_ixml_element,
gref_style TYPE REF TO if_ixml_element,
gref_style1 TYPE REF TO if_ixml_element,
gref_format TYPE REF TO if_ixml_element,
gref_border TYPE REF TO if_ixml_element,
gt_xml_table TYPE TABLE OF gty_xml_line,
gs_xml TYPE gty_xml_line.
*-----------------------------------------------------------------------
*
* Initialization
*-----------------------------------------------------------------------
INITIALIZATION.
gv_date = sy-datum - 1.
*-----------------------------------------------------------------------
*
* Start of Selection
*
*-----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM get_user_data.
PERFORM create_xml_based_excel.
PERFORM send_mail.
*-----------------------------------------------------------------------
*
* End of Selection
*
*-----------------------------------------------------------------------
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form get_user_data
*&---------------------------------------------------------------------*
* Fetch User details from USR02
*----------------------------------------------------------------------*
FORM get_user_data.
REFRESH gt_final.
SELECT DISTINCT bname
trdat UP TO 5 ROWS
FROM usr02 INTO TABLE gt_usr02.
IF sy-subrc IS INITIAL.
SORT gt_usr02 BY bname.
LOOP AT gt_usr02 INTO gs_usr02.
* Excel Sheet 1 data
CLEAR gs_final.
gs_final-srno = sy-tabix. " Serial No.
gs_final-user_id = gs_usr02-bname. " User ID
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING
username = gs_usr02-bname
IMPORTING
address = gs_addr
TABLES
return = gt_return
EXCEPTIONS
OTHERS = 4.
IF sy-subrc IS INITIAL.
gs_final-full_name = gs_addr-fullname. " Full Name
gs_final-dept = gs_addr-department. " Department
ENDIF.
IF gs_usr02-trdat EQ gv_date.
gs_final-login = 'YES'. " Login on Previous
ELSE.
gs_final-login = 'NO'.
ENDIF.
* Excel Sheet 2 data
gs_final-function = gs_addr-function. "Function
gs_final-building = gs_addr-building_p. "Building
gs_final-floor = gs_addr-floor_p. "Floor
APPEND gs_final TO gt_final.
ENDLOOP.
ENDIF.
ENDFORM. " get_user_data
*&---------------------------------------------------------------------*
*& Form SEND_MAIL
*&---------------------------------------------------------------------*
* Send Email
*----------------------------------------------------------------------*
FORM send_mail.
DATA: lt_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
lt_objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE,
lt_objbin LIKE solix OCCURS 10 WITH HEADER LINE,
lt_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
lt_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE,
ls_doc_chng LIKE sodocchgi1,
lv_tabix TYPE sy-tabix,
lv_sub_date(10) TYPE c.
* Mail Subject
CONCATENATE gv_date+6(2) '-' gv_date+4(2) '-' gv_date+0(4) INTO lv_sub_date.
CONCATENATE 'SAP EXCEL attach using XML' lv_sub_date INTO ls_doc_chng-obj_descr SEPARATED BY space.
* Mail Contents
lt_objtxt = 'Dear Friend,'.
APPEND lt_objtxt.
* Space in mail body
CLEAR lt_objtxt.
APPEND lt_objtxt.
CLEAR lt_objtxt.
APPEND lt_objtxt.
CLEAR lt_objtxt.
APPEND lt_objtxt.
* Mail Signature
lt_objtxt = 'Thanks & Regards,'.
APPEND lt_objtxt.
lt_objtxt = 'Jeetendra Kapase'.
APPEND lt_objtxt.
lt_objtxt = 'ABAP-Consultant'.
APPEND lt_objtxt.
DESCRIBE TABLE lt_objtxt LINES lv_tabix.
READ TABLE lt_objtxt INDEX lv_tabix.
* Get mail body size
IF sy-subrc IS INITIAL.
ls_doc_chng-doc_size = ( lv_tabix - 1 ) * 255 + strlen( lt_objtxt ).
ENDIF.
* Packing List For the E-mail Body
lt_objpack-head_start = 1.
lt_objpack-head_num = 0.
lt_objpack-body_start = 1.
lt_objpack-body_num = lv_tabix.
lt_objpack-doc_type = 'RAW'.
APPEND lt_objpack.
* Creation of the Excel Document Attachment
LOOP AT gt_xml_table INTO gs_xml.
CLEAR lt_objbin.
lt_objbin-line = gs_xml-data.
APPEND lt_objbin.
ENDLOOP.
DESCRIBE TABLE lt_objbin LINES lv_tabix.
lt_objhead = 'SAP User Details'.
APPEND lt_objhead.
* Packing List For the E-mail Attachment
* Excel File name
lt_objpack-transf_bin = 'X'.
lt_objpack-head_start = 1.
lt_objpack-head_num = 0.
lt_objpack-body_start = 1.
lt_objpack-body_num = lv_tabix.
CONCATENATE 'SAP_User_Details' lv_sub_date INTO lt_objpack-obj_descr SEPARATED BY space.
lt_objpack-doc_type = 'XLS'.
lt_objpack-doc_size = lv_tabix * 255.
APPEND lt_objpack.
* Email Recipent
CLEAR lt_reclist.
lt_reclist-receiver = 'testuser@testsystem.com'.
lt_reclist-rec_type = 'U'.
APPEND lt_reclist.
* Sending the mail with excel document as attachment.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = ls_doc_chng
put_in_outbox = 'X'
TABLES
packing_list = lt_objpack
object_header = lt_objhead
contents_txt = lt_objtxt
contents_hex = lt_objbin
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.
IF sy-subrc IS INITIAL.
*To confirm mail is send sucessfully use commit work.
COMMIT WORK.
MESSAGE i899(f2) WITH 'Mail send with attach successfully (SOST)'.
ELSE.
* Error/ Exception handling messages.
MESSAGE i899(f2) WITH 'Mail was not send!' DISPLAY LIKE 'E'.
ENDIF.
ENDFORM. " SEND_MAIL
*&---------------------------------------------------------------------*
*& Form create_XML_based_Excel
*&---------------------------------------------------------------------*
* Process XML Data
*----------------------------------------------------------------------*
FORM create_xml_based_excel .
* Creating a ixml Factory
gref_ixml = cl_ixml=>create( ).
* Creating the DOM Object Model for Excel file
gref_document = gref_ixml->create_document( ).
* Create Root Node Excel 'Workbook'
gref_element_root = gref_document->create_simple_element( name = 'Workbook' parent = gref_document ).
gref_element_root->set_attribute( name = 'xmlns' value ='urn:schemas-microsoft-com:office:spreadsheet' ).
gref_ns_attribute = gref_document->create_namespace_decl( name = 'ss' prefix = 'xmlns' uri = 'urn:schemas-microsoft-com:office:spreadsheet').
gref_element_root->set_attribute_node( gref_ns_attribute ).
gref_ns_attribute = gref_document->create_namespace_decl( name = 'x' prefix = 'xmlns' uri = 'urn:schemas-microsoft-com:office:excel' ).
gref_element_root->set_attribute_node( gref_ns_attribute ).
* Create node for document properties.
gref_element_pro = gref_document->create_simple_element( name = 'TEST_PROGRAM' parent = gref_element_root ).
gv_value = sy-uname.
* Excel file author
gref_document->create_simple_element( name = 'Author' value = gv_value parent = gref_element_pro ).
* Excel Styles
gref_styles = gref_document->create_simple_element( name = 'Styles' parent = gref_element_root ).
* Style, alignment and font for Header
gref_style = gref_document->create_simple_element( name = 'Style' parent = gref_styles ).
gref_style->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'Header' ).
gref_format = gref_document->create_simple_element( name = 'Font' parent = gref_style ).
gref_format->set_attribute_ns( name = 'Bold' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Interior' parent = gref_style ).
gref_format->set_attribute_ns( name = 'Color' prefix = 'ss' value = '#92D050' ).
gref_format->set_attribute_ns( name = 'Pattern' prefix = 'ss' value = 'Solid' ).
gref_format = gref_document->create_simple_element( name = 'Alignment' parent = gref_style ).
gref_format->set_attribute_ns( name = 'Vertical' prefix = 'ss' value = 'Center' ).
gref_format->set_attribute_ns( name = 'WrapText' prefix = 'ss' value = '1' ).
* Border Setting
gref_border = gref_document->create_simple_element( name = 'Borders' parent = gref_style ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
* Style for Data in Excel file
gref_style1 = gref_document->create_simple_element( name = 'Style' parent = gref_styles ).
gref_style1->set_attribute_ns( name = 'ID' prefix = 'ss' value = 'Data' ).
gref_border = gref_document->create_simple_element( name = 'Borders' parent = gref_style1 ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Bottom' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Left' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Top' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
gref_format = gref_document->create_simple_element( name = 'Border' parent = gref_border ).
gref_format->set_attribute_ns( name = 'Position' prefix = 'ss' value = 'Right' ).
gref_format->set_attribute_ns( name = 'LineStyle' prefix = 'ss' value = 'Continuous' ).
gref_format->set_attribute_ns( name = 'Weight' prefix = 'ss' value = '1' ).
* Excel Worksheet1 Data.
gref_worksheet = gref_document->create_simple_element( name = 'Worksheet' parent = gref_element_root ).
* Worksheet Name
gref_worksheet->set_attribute_ns( name = 'Name' prefix = 'ss' value ='SAPUserID' ).
* Table
gref_table = gref_document->create_simple_element( name = 'Table' parent = gref_worksheet ).
gref_table->set_attribute_ns( name = 'FullColumns' prefix = 'x' value = '1' ).
gref_table->set_attribute_ns( name = 'FullRows' prefix = 'x' value = '1' ).
* Excel Column Formatting
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '40' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '140' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '150' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
* Blank Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Column Headers Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Serial No.' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* SAP User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'User Name' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* User Full Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Full Name' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Department
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Department' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Login
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
CONCATENATE 'Login - ' gv_date+6(2) '/' gv_date+4(2) '/' gv_date+0(4) INTO gv_value.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Blank Row after Headers columns
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
* Adding Data into excel sheet1
LOOP AT gt_final INTO gs_final.
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = sy-tabix.
CONDENSE gv_value NO-GAPS.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ).
* Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'Number' ).
* Cell format
* User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-user_id.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Full Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-full_name.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Department gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-dept.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Login
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-login.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
ENDLOOP.
* Excel Worksheet2 Data.
gref_worksheet = gref_document->create_simple_element( name = 'Worksheet' parent = gref_element_root ).
gref_worksheet->set_attribute_ns( name = 'Name' prefix = 'ss' value = 'AdditionalDetails' ).
* Table
gref_table = gref_document->create_simple_element( name = 'Table' parent = gref_worksheet ).
gref_table->set_attribute_ns( name = 'FullColumns' prefix = 'x' value = '1' ).
gref_table->set_attribute_ns( name = 'FullRows' prefix = 'x' value = '1' ).
* Excel Column Formatting
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '40' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '140' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '150' ).
gref_column = gref_document->create_simple_element( name = 'Column' parent = gref_table ).
gref_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '90' ).
* Blank Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Column Headers Row logic
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Serial No.' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'User Name' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Function
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Function' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Department
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Building' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Floor
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Header' ).
gref_data = gref_document->create_simple_element( name = 'Data' value = 'Floor' parent = gref_cell ).
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
* Blank Row after Column Headers
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
* Adding Data into excel sheet2
LOOP AT gt_final INTO gs_final.
gref_row = gref_document->create_simple_element( name = 'Row' parent = gref_table ).
* Sr. No.
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = sy-tabix.
CONDENSE gv_value NO-GAPS.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'Number' ). " Cell format
* User Name
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-user_id.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Function
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-function.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Building
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-building.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
* Floor
gref_cell = gref_document->create_simple_element( name = 'Cell' parent = gref_row ).
gref_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
gv_value = gs_final-floor.
gref_data = gref_document->create_simple_element( name = 'Data' value = gv_value parent = gref_cell ). " Data
gref_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ). " Cell format
ENDLOOP.
* Creating a Stream Factory for XML
gref_streamfactory = gref_ixml->create_stream_factory( ).
* Connect Internal XML Table to Stream Factory for Excel data
gref_ostream = gref_streamfactory->create_ostream_itable( table = gt_xml_table ).
* Rendering the Document
gref_renderer = gref_ixml->create_renderer( ostream = gref_ostream document = gref_document ).
gref_renderer->render( ).
* Saving the XML Document
gref_ostream->get_num_written_raw( ).
ENDFORM. " create_XML_based_Excel
**********************************************************************************************************************************************************
XLS is broken - any fix?
ReplyDeleteHow to Create Two Tables in Single Sheet
ReplyDeleteThe attachment does not open. Its corrupt.
ReplyDelete