diff --git a/ZA2X/CLAS/ZCL_EXCEL_WRITER_XLSM.slnk b/ZA2X/CLAS/ZCL_EXCEL_WRITER_XLSM.slnk index f8472a4..623baf7 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_WRITER_XLSM.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_WRITER_XLSM.slnk @@ -1,5 +1,5 @@ - + *"* use this source file for the definition and implementation of *"* local helper classes, interface definitions and type *"* declarations @@ -11,7 +11,6 @@ - @@ -28,228 +27,37 @@ ENDMETHOD. - - method CREATE. - - -* Office 2007 file format is a cab of several xml files with extension .xlsx - - DATA: lo_zip TYPE REF TO cl_abap_zip, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_active_worksheet TYPE REF TO zcl_excel_worksheet, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_nested_iterator TYPE REF TO cl_object_collection_iterator, - lo_table TYPE REF TO zcl_excel_table, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_drawings TYPE REF TO zcl_excel_drawings. - - DATA: lv_content TYPE xstring, - lv_active TYPE flag, - lv_xl_sheet TYPE string, - lv_xl_sheet_rels TYPE string, - lv_xl_drawing TYPE string, - lv_xl_drawing_rels TYPE string, - lv_syindex TYPE string, - lv_value TYPE string, - lv_drawing_index TYPE i. - -********************************************************************** -* Start of insertion # issue 139 - Dateretention of cellstyles - me->excel->add_static_styles( ). -* End of insertion # issue 139 - Dateretention of cellstyles - -********************************************************************** -* STEP 1: Create archive object file (ZIP) - CREATE OBJECT lo_zip. - -********************************************************************** -* STEP 2: Add [Content_Types].xml to zip - lv_content = me->create_content_types( ). - lo_zip->add( name = me->c_content_types - content = lv_content ). - -********************************************************************** -* STEP 3: Add _rels/.rels to zip - lv_content = me->create_relationships( ). - lo_zip->add( name = me->c_relationships - content = lv_content ). - -********************************************************************** -* STEP 4: Add docProps/app.xml to zip - lv_content = me->create_docprops_app( ). - lo_zip->add( name = me->c_docprops_app - content = lv_content ). - -********************************************************************** -* STEP 5: Add docProps/core.xml to zip - lv_content = me->create_docprops_core( ). - lo_zip->add( name = me->c_docprops_core - content = lv_content ). - -********************************************************************** -* STEP 6: Add xl/_rels/workbook.xml.rels to zip - lv_content = me->create_xl_relationships( ). - lo_zip->add( name = me->c_xl_relationships - content = lv_content ). - -********************************************************************** -* STEP 6: Add xl/_rels/workbook.xml.rels to zip - lv_content = me->create_xl_theme( ). - lo_zip->add( name = me->c_xl_theme - content = lv_content ). - -********************************************************************** -* STEP 7: Add xl/workbook.xml to zip - lv_content = me->create_xl_workbook( ). - lo_zip->add( name = me->c_xl_workbook - content = lv_content ). - -********************************************************************** -* STEP 8: Add xl/workbook.xml to zip -* lv_content = me->create_xl_styles_static( ). - lv_content = me->create_xl_styles( ). - lo_zip->add( name = me->c_xl_styles - content = lv_content ). - -********************************************************************** -* STEP 9: Add sharedStrings.xml to zip - lv_content = me->create_xl_sharedstrings( ). - lo_zip->add( name = me->c_xl_sharedstrings - content = lv_content ). - -********************************************************************** -* STEP 10: Add sheet#.xml and drawing#.xml to zip - lo_iterator = me->excel->get_worksheets_iterator( ). - lo_active_worksheet = me->excel->get_active_worksheet( ). - lv_drawing_index = 1. - - WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). - IF lo_active_worksheet->get_guid( ) EQ lo_worksheet->get_guid( ). - lv_active = abap_true. - ELSE. - lv_active = abap_false. - ENDIF. - - lv_content = me->create_xl_sheet( io_worksheet = lo_worksheet - iv_active = lv_active ). - lv_xl_sheet = me->c_xl_sheet. - MOVE sy-index TO lv_syindex. - SHIFT lv_syindex RIGHT DELETING TRAILING space. - SHIFT lv_syindex LEFT DELETING LEADING space. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet WITH lv_syindex. - lo_zip->add( name = lv_xl_sheet - content = lv_content ). - - lv_xl_sheet_rels = me->c_xl_sheet_rels. - lv_content = me->create_xl_sheet_rels( io_worksheet = lo_worksheet - iv_drawing_index = lv_drawing_index ). - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet_rels WITH lv_syindex. - lo_zip->add( name = lv_xl_sheet_rels - content = lv_content ). - - lo_nested_iterator = lo_worksheet->get_tables_iterator( ). - - WHILE lo_nested_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. - lo_table ?= lo_nested_iterator->if_object_collection_iterator~get_next( ). - lv_content = me->create_xl_table( lo_table ). - - lv_value = lo_table->get_name( ). - CONCATENATE 'xl/tables/' lv_value '.xml' INTO lv_value. - lo_zip->add( name = lv_value - content = lv_content ). - ENDWHILE. - -* Add drawings ********************************** - lo_drawings = lo_worksheet->get_drawings( ). - IF lo_drawings->is_empty( ) = abap_false. - MOVE lv_drawing_index TO lv_syindex. - SHIFT lv_syindex RIGHT DELETING TRAILING space. - SHIFT lv_syindex LEFT DELETING LEADING space. - - lv_content = me->create_xl_drawings( lo_worksheet ). - lv_xl_drawing = me->c_xl_drawings. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing WITH lv_syindex. - lo_zip->add( name = lv_xl_drawing - content = lv_content ). - - lv_content = me->create_xl_drawings_rels( lo_worksheet ). - lv_xl_drawing_rels = me->c_xl_drawings_rels. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_syindex. - lo_zip->add( name = lv_xl_drawing_rels - content = lv_content ). - ADD 1 TO lv_drawing_index. - ENDIF. - ENDWHILE. - -********************************************************************** -* STEP 11: Add media - lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). - WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. - lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). - - lv_content = lo_drawing->get_media( ). - lv_value = lo_drawing->get_media_name( ). - CONCATENATE 'xl/media/' lv_value INTO lv_value. - lo_zip->add( name = lv_value - content = lv_content ). - ENDWHILE. - -********************************************************************** -* STEP 12: Add charts - lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). - WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. - lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). - - lv_content = lo_drawing->get_media( ). - lv_value = lo_drawing->get_media_name( ). - CONCATENATE 'xl/charts/' lv_value INTO lv_value. - lo_zip->add( name = lv_value - content = lv_content ). - ENDWHILE. - -********************************************************************** -* STEP 9: Add vbaProject.bin to zip - lo_zip->add( name = me->c_xl_vbaproject - content = me->excel->zif_excel_book_vba_project~vbaproject ). - -********************************************************************** -* STEP 12: Create the final zip - ep_excel = lo_zip->save( ). - - endmethod. - - method CREATE_CONTENT_TYPES. + METHOD create_content_types. ** Constant node name - DATA: lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.ms-excel.sheet.macroEnabled.main+xml', - lc_xml_node_default TYPE string VALUE 'Default', + DATA: lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.ms-excel.sheet.macroEnabled.main+xml', + lc_xml_node_default TYPE string VALUE 'Default', " Node attributes - lc_xml_attr_partname TYPE string VALUE 'PartName', - lc_xml_attr_extension TYPE string VALUE 'Extension', - lc_xml_attr_contenttype TYPE string VALUE 'ContentType', - lc_xml_attr_codename TYPE string VALUE 'codeName', - lc_xml_node_workb_pn TYPE string VALUE '/xl/workbook.xml', - lc_xml_node_bin_ext TYPE string VALUE 'bin', - lc_xml_node_bin_ct TYPE string VALUE 'application/vnd.ms-office.vbaProject'. + lc_xml_attr_partname TYPE string VALUE 'PartName', + lc_xml_attr_extension TYPE string VALUE 'Extension', + lc_xml_attr_contenttype TYPE string VALUE 'ContentType', + lc_xml_attr_codename TYPE string VALUE 'codeName', + lc_xml_node_workb_pn TYPE string VALUE '/xl/workbook.xml', + lc_xml_node_bin_ext TYPE string VALUE 'bin', + lc_xml_node_bin_ct TYPE string VALUE 'application/vnd.ms-office.vbaProject'. - DATA: lo_ixml TYPE REF TO if_ixml, - lo_document TYPE REF TO if_ixml_document, - lo_document_xml TYPE REF TO cl_xml_document, - lo_element_root TYPE REF TO if_ixml_node, - lo_element TYPE REF TO if_ixml_element, - lo_collection TYPE REF TO if_ixml_node_collection, - lo_iterator TYPE REF TO if_ixml_node_iterator, - lo_node TYPE REF TO if_ixml_node, - lo_encoding TYPE REF TO if_ixml_encoding, - lo_streamfactory TYPE REF TO if_ixml_stream_factory, - lo_ostream TYPE REF TO if_ixml_ostream, - lo_renderer TYPE REF TO if_ixml_renderer. + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_collection TYPE REF TO if_ixml_node_collection, + lo_iterator TYPE REF TO if_ixml_node_iterator, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. - DATA: lv_subrc TYPE sysubrc, - lv_contenttype TYPE string, - lv_syindex(2) TYPE c. + DATA: lv_subrc TYPE sysubrc, + lv_contenttype TYPE string, + lv_syindex(2) TYPE c. ********************************************************************** * STEP 3: Create standard contentType @@ -299,10 +107,10 @@ ENDMETHOD. lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). lo_renderer->render( ). - endmethod. +ENDMETHOD. - method CREATE_XL_RELATIONSHIPS. + METHOD create_xl_relationships. ** Constant node name DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', @@ -314,26 +122,26 @@ ENDMETHOD. " Node id lc_xml_node_ridx_id TYPE string VALUE 'rId#', " Node type - lc_xml_node_rid_vba_tp TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', + lc_xml_node_rid_vba_tp TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', " Node target - lc_xml_node_rid_vba_tg TYPE string VALUE 'vbaProject.bin'. + lc_xml_node_rid_vba_tg TYPE string VALUE 'vbaProject.bin'. - DATA: lo_ixml TYPE REF TO if_ixml, - lo_document TYPE REF TO if_ixml_document, - lo_document_xml TYPE REF TO cl_xml_document, - lo_element_root TYPE REF TO if_ixml_node, - lo_element TYPE REF TO if_ixml_element, - lo_node TYPE REF TO if_ixml_node, - lo_encoding TYPE REF TO if_ixml_encoding, - lo_streamfactory TYPE REF TO if_ixml_stream_factory, - lo_ostream TYPE REF TO if_ixml_ostream, - lo_renderer TYPE REF TO if_ixml_renderer. + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. - DATA: lv_xml_node_ridx_tg TYPE string, - lv_xml_node_ridx_id TYPE string, - lv_size TYPE i, - lv_subrc TYPE sysubrc, - lv_syindex(2) TYPE c. + DATA: lv_xml_node_ridx_tg TYPE string, + lv_xml_node_ridx_id TYPE string, + lv_size TYPE i, + lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. ********************************************************************** * STEP 3: Create standard relationship @@ -377,29 +185,29 @@ ENDMETHOD. lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). lo_renderer->render( ). - endmethod. +ENDMETHOD. - method CREATE_XL_SHEET. + METHOD create_xl_sheet. ** Constant node name DATA: lc_xml_attr_codename TYPE string VALUE 'codeName'. - DATA: lo_ixml TYPE REF TO if_ixml, - lo_document TYPE REF TO if_ixml_document, - lo_document_xml TYPE REF TO cl_xml_document, - lo_element_root TYPE REF TO if_ixml_node, - lo_element TYPE REF TO if_ixml_element, - lo_collection TYPE REF TO if_ixml_node_collection, - lo_iterator TYPE REF TO if_ixml_node_iterator, - lo_node TYPE REF TO if_ixml_node, - lo_encoding TYPE REF TO if_ixml_encoding, - lo_streamfactory TYPE REF TO if_ixml_stream_factory, - lo_ostream TYPE REF TO if_ixml_ostream, - lo_renderer TYPE REF TO if_ixml_renderer. + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_collection TYPE REF TO if_ixml_node_collection, + lo_iterator TYPE REF TO if_ixml_node_iterator, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. - DATA: lv_subrc TYPE sysubrc, - lv_syindex(2) TYPE c. + DATA: lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. ********************************************************************** * STEP 3: Create standard relationship @@ -415,15 +223,6 @@ ENDMETHOD. lo_document ?= lo_document_xml->m_document. lo_element_root = lo_document->if_ixml_node~get_first_child( ). -* lo_collection = lo_document->get_elements_by_tag_name( 'fileVersion' ). -* lo_iterator = lo_collection->create_iterator( ). -* lo_element ?= lo_iterator->get_next( ). -* WHILE lo_element IS BOUND. -* lo_element->set_attribute_ns( name = lc_xml_attr_codename -* value = me->excel->zif_excel_book_vba_project~codename ). -* lo_element ?= lo_iterator->get_next( ). -* ENDWHILE. - lo_collection = lo_document->get_elements_by_tag_name( 'sheetPr' ). lo_iterator = lo_collection->create_iterator( ). lo_element ?= lo_iterator->get_next( ). @@ -441,29 +240,29 @@ ENDMETHOD. lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). lo_renderer->render( ). - endmethod. +ENDMETHOD. - method CREATE_XL_WORKBOOK. + METHOD create_xl_workbook. ** Constant node name DATA: lc_xml_attr_codename TYPE string VALUE 'codeName'. - DATA: lo_ixml TYPE REF TO if_ixml, - lo_document TYPE REF TO if_ixml_document, - lo_document_xml TYPE REF TO cl_xml_document, - lo_element_root TYPE REF TO if_ixml_node, - lo_element TYPE REF TO if_ixml_element, - lo_collection TYPE REF TO if_ixml_node_collection, - lo_iterator TYPE REF TO if_ixml_node_iterator, - lo_node TYPE REF TO if_ixml_node, - lo_encoding TYPE REF TO if_ixml_encoding, - lo_streamfactory TYPE REF TO if_ixml_stream_factory, - lo_ostream TYPE REF TO if_ixml_ostream, - lo_renderer TYPE REF TO if_ixml_renderer. + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_collection TYPE REF TO if_ixml_node_collection, + lo_iterator TYPE REF TO if_ixml_node_iterator, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. - DATA: lv_subrc TYPE sysubrc, - lv_syindex(2) TYPE c. + DATA: lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. ********************************************************************** * STEP 3: Create standard relationship @@ -504,6 +303,6 @@ ENDMETHOD. lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). lo_renderer->render( ). - endmethod. +ENDMETHOD.