From c31b7117c73aa6b1ce5962e6c3274ee42edf9526 Mon Sep 17 00:00:00 2001 From: Ivan Date: Mon, 29 Sep 2014 22:50:55 -0500 Subject: [PATCH] New Daily Build ABAP2XLSX_V_7_0_1.zip => SAP codata and cofile ABAP2XLSX_V_7_0_1.nugg.zip => SAPlink nugg file --- build/ABAP2XLSX_V_7_0_1.nugg | 39027 ++++++++++++++++ build/ABAP2XLSX_V_7_0_1.nugg.zip | Bin 0 -> 296803 bytes build/ABAP2XLSX_V_7_0_1.zip | Bin 0 -> 1521842 bytes build/{ => old_releases}/ABAP2XLSX_V_7_0.nugg | 0 build/{ => old_releases}/ABAP2XLSX_V_7_0.zip | Bin 5 files changed, 39027 insertions(+) create mode 100644 build/ABAP2XLSX_V_7_0_1.nugg create mode 100644 build/ABAP2XLSX_V_7_0_1.nugg.zip create mode 100644 build/ABAP2XLSX_V_7_0_1.zip rename build/{ => old_releases}/ABAP2XLSX_V_7_0.nugg (100%) rename build/{ => old_releases}/ABAP2XLSX_V_7_0.zip (100%) diff --git a/build/ABAP2XLSX_V_7_0_1.nugg b/build/ABAP2XLSX_V_7_0_1.nugg new file mode 100644 index 0000000..f776ce7 --- /dev/null +++ b/build/ABAP2XLSX_V_7_0_1.nugg @@ -0,0 +1,39027 @@ + + + + + + + + + + + + + + + + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + TYPES: BEGIN OF t_relationship, + id TYPE string, + type TYPE string, + target TYPE string, + END OF t_relationship. + +* + CLASS lcl_abap_zip_archive DEFINITION + INHERITING FROM lcl_zip_archive + CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS create + IMPORTING i_data TYPE xstring + RETURNING value(r_zip) TYPE REF TO lcl_zip_archive + RAISING zcx_excel. + METHODS read REDEFINITION. + PRIVATE SECTION. + DATA: abap_zip TYPE REF TO cl_abap_zip. + METHODS constructor IMPORTING i_data TYPE xstring + RAISING zcx_excel. + ENDCLASS. "lcl_abap_zip_archive DEFINITION + +* + CLASS lcl_alternate_zip_archive DEFINITION + INHERITING FROM lcl_zip_archive + CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS create + IMPORTING i_data TYPE xstring + i_alternate_zip_class TYPE seoclsname + RETURNING value(r_zip) TYPE REF TO lcl_zip_archive + RAISING zcx_excel. + METHODS read REDEFINITION. + PRIVATE SECTION. + DATA: alternate_zip TYPE REF TO object. + METHODS constructor + IMPORTING i_data TYPE xstring + i_alternate_zip_class TYPE seoclsname + RAISING zcx_excel. + ENDCLASS. "lcl_alternate_zip_archive DEFINITION + +* + CLASS lcl_abap_zip_archive IMPLEMENTATION. + METHOD create. + CREATE OBJECT r_zip TYPE lcl_abap_zip_archive + EXPORTING + i_data = i_data. + ENDMETHOD. "create + METHOD constructor. + DATA: lv_errormessage TYPE string. + super->constructor( ). + CREATE OBJECT abap_zip. + abap_zip->load( + EXPORTING + zip = i_data + EXCEPTIONS + zip_parse_error = 1 + OTHERS = 2 ). + IF sy-subrc <> 0. + lv_errormessage = 'ZIP parse error'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "constructor + METHOD read. + DATA: lv_errormessage TYPE string. + CALL METHOD abap_zip->get + EXPORTING + name = i_filename + IMPORTING + content = r_content + EXCEPTIONS + zip_index_error = 1 + zip_decompression_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + lv_errormessage = 'File not found in zip-archive'(003). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "read + ENDCLASS. "lcl_abap_zip_archive IMPLEMENTATION + +* + CLASS lcl_alternate_zip_archive IMPLEMENTATION. + METHOD create. + CREATE OBJECT r_zip TYPE lcl_alternate_zip_archive + EXPORTING + i_alternate_zip_class = i_alternate_zip_class + i_data = i_data. + ENDMETHOD. "create + METHOD constructor. + DATA: lv_errormessage TYPE string. + super->constructor( ). + CREATE OBJECT alternate_zip TYPE (i_alternate_zip_class). + TRY. + CALL METHOD alternate_zip->('LOAD') + EXPORTING + zip = i_data + EXCEPTIONS + zip_parse_error = 1 + OTHERS = 2. + CATCH cx_sy_dyn_call_illegal_method. + lv_errormessage = 'Method LOAD missing in alternative zipclass'. "#EC NOTEXT This is a workaround until class CL_ABAP_ZIP is fixed + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDTRY. + + IF sy-subrc <> 0. + lv_errormessage = 'ZIP parse error'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "constructor + METHOD read. + DATA: lv_errormessage TYPE string. + TRY. + CALL METHOD alternate_zip->('GET') + EXPORTING + name = i_filename + IMPORTING + content = r_content " Contents + EXCEPTIONS + zip_index_error = 1 + zip_decompression_error = 2 + OTHERS = 3. + CATCH cx_sy_dyn_call_illegal_method. + lv_errormessage = 'Method GET missing in alternative zipclass'. "#EC NOTEXT This is a workaround until class CL_ABAP_ZIP is fixed + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDTRY. + IF sy-subrc <> 0. + lv_errormessage = 'File not found in zip-archive'(003). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "read + ENDCLASS. "lcl_alternate_zip_archive IMPLEMENTATION + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + +* +class lcl_zip_archive definition abstract. + public section. + methods read abstract + importing i_filename type csequence + returning value(r_content) type xstring " Remember copy-on-write! + raising zcx_excel. +endclass. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + IXML + + + + + + METHOD zif_excel_reader~load. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Map Document Properties to ZCL_EXCEL +*--------------------------------------------------------------------* + + CONSTANTS: lcv_core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + lcv_office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument'. + + DATA: lo_rels TYPE REF TO if_ixml_document, + lo_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship. + +*--------------------------------------------------------------------* +* §1 Create EXCEL-Object we want to return to caller + +* §2 We need to read the the file "\\_rels\.rels" because it tells +* us where in this folder structure the data for the workbook +* is located in the xlsx zip-archive +* +* The xlsx Zip-archive has generally the following folder structure: +* <root> | +* |--> _rels +* |--> doc_Props +* |--> xl | +* |--> _rels +* |--> theme +* |--> worksheets + +* §3 Extracting from this the path&file where the workbook is located +* Following is an example how this file could be set up +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> +* <Relationship Target="docProps/app.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Id="rId3"/> +* <Relationship Target="docProps/core.xml" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Id="rId2"/> +* <Relationship Target="xl/workbook.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Id="rId1"/> +* </Relationships> +*--------------------------------------------------------------------* + + +*--------------------------------------------------------------------* +* §1 Create EXCEL-Object we want to return to caller +*--------------------------------------------------------------------* + CREATE OBJECT r_excel. + + zip = create_zip_archive( i_xlsx_binary = i_excel2007 + i_use_alternate_zip = i_use_alternate_zip ). + +*--------------------------------------------------------------------* +* §2 Get file in folderstructure +*--------------------------------------------------------------------* + lo_rels = get_ixml_from_zip_archive( '_rels/.rels' ). + +*--------------------------------------------------------------------* +* §3 Cycle through the Relationship Tags and use the ones we need +*--------------------------------------------------------------------* + lo_node ?= lo_rels->find_from_name( 'Relationship' ). "#EC NOTEXT + WHILE lo_node IS BOUND. + + fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_relationship ). + CASE ls_relationship-type. + + WHEN lcv_office_document. +*--------------------------------------------------------------------* +* Parse workbook - main part here +*--------------------------------------------------------------------* + load_workbook( iv_workbook_full_filename = ls_relationship-target + io_excel = r_excel ). + + WHEN lcv_core_properties. + " 2do§1 Map Document Properties to ZCL_EXCEL + + WHEN OTHERS. + + ENDCASE. + lo_node ?= lo_node->get_next( ). + + ENDWHILE. + + +ENDMETHOD. + + + METHOD zif_excel_reader~load_file. + + DATA: lv_excel_data TYPE xstring. + +*--------------------------------------------------------------------* +* Read file into binary string +*--------------------------------------------------------------------* + IF i_from_applserver = abap_true. + lv_excel_data = read_from_applserver( i_filename ). + ELSE. + lv_excel_data = read_from_local_file( i_filename ). + ENDIF. + +*--------------------------------------------------------------------* +* Parse Excel data into ZCL_EXCEL object from binary string +*--------------------------------------------------------------------* + r_excel = zif_excel_reader~load( i_excel2007 = lv_excel_data + i_use_alternate_zip = i_use_alternate_zip ). + +ENDMETHOD. + + + + + + + METHOD create_zip_archive. + CASE i_use_alternate_zip. + WHEN space. + e_zip = lcl_abap_zip_archive=>create( i_xlsx_binary ). + WHEN OTHERS. + e_zip = lcl_alternate_zip_archive=>create( i_data = i_xlsx_binary + i_alternate_zip_class = i_use_alternate_zip ). + ENDCASE. +ENDMETHOD. + + + + + method fill_struct_from_attributes. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-07 +* - ... +* changes: renaming variables to naming conventions +* aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + + data: lv_name type string, + lo_attributes type ref to if_ixml_named_node_map, + lo_attribute type ref to if_ixml_attribute, + lo_iterator type ref to if_ixml_node_iterator. + + field-symbols: <component> type any. + +*--------------------------------------------------------------------* +* The values of named attributes of a tag are being read and moved into corresponding +* fields of given structure +* Behaves like move-corresonding tag to structure + +* Example: +* <Relationship Target="docProps/app.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Id="rId3"/> +* Here the attributes are Target, Type and Id. Thus if the passed +* structure has fieldnames Id and Target these would be filled with +* "rId3" and "docProps/app.xml" respectively +*--------------------------------------------------------------------* + clear cp_structure. + + lo_attributes = ip_element->get_attributes( ). + lo_iterator = lo_attributes->create_iterator( ). + lo_attribute ?= lo_iterator->get_next( ). + while lo_attribute is bound. + + lv_name = lo_attribute->get_name( ). + translate lv_name to upper case. + assign component lv_name of structure cp_structure to <component>. + if sy-subrc = 0. + <component> = lo_attribute->get_value( ). + endif. + lo_attribute ?= lo_iterator->get_next( ). + + endwhile. + + +endmethod. + + + + + + METHOD get_from_zip_archive. + + ASSERT zip IS BOUND. " zip object has to exist at this point + + r_content = zip->read( i_filename ). + +ENDMETHOD. + + + + + + + METHOD get_ixml_from_zip_archive. + + DATA: lv_content TYPE xstring, + lo_ixml TYPE REF TO if_ixml, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_istream TYPE REF TO if_ixml_istream, + lo_parser TYPE REF TO if_ixml_parser. + +*--------------------------------------------------------------------* +* Load XML file from archive into an input stream, +* and parse that stream into an ixml object +*--------------------------------------------------------------------* + lv_content = me->get_from_zip_archive( i_filename ). + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_istream = lo_streamfactory->create_istream_xstring( lv_content ). + r_ixml = lo_ixml->create_document( ). + lo_parser = lo_ixml->create_parser( stream_factory = lo_streamfactory + istream = lo_istream + document = r_ixml ). + lo_parser->set_normalizing( is_normalizing ). + lo_parser->set_validating( mode = if_ixml_parser=>co_no_validation ). + lo_parser->parse( ). + +ENDMETHOD. + + + + + + method LOAD_DRAWING_ANCHOR. + + TYPES: BEGIN OF t_c_nv_pr, + name TYPE string, + id TYPE string, + END OF t_c_nv_pr. + + TYPES: BEGIN OF t_blip, + cstate TYPE string, + embed TYPE string, + END OF t_blip. + + TYPES: BEGIN OF t_chart, + id TYPE string, + END OF t_chart. + + TYPES: BEGIN OF t_ext, + cx TYPE string, + cy TYPE string, + END OF t_ext. + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1'. + CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. + + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + node TYPE REF TO if_ixml_element, + node2 TYPE REF TO if_ixml_element, + node3 TYPE REF TO if_ixml_element, + node4 TYPE REF TO if_ixml_element, + + ls_upper TYPE zexcel_drawing_location, + ls_lower TYPE zexcel_drawing_location, + ls_size TYPE zexcel_drawing_size, + ext TYPE t_ext, + lv_content TYPE xstring, + lv_relation_id TYPE string, + lv_title TYPE zexcel_sheet_title, + + cnvpr TYPE t_c_nv_pr, + blip TYPE t_blip, + chart TYPE t_chart, + drawing_type TYPE zexcel_drawing_type, + + rel_drawing TYPE t_rel_drawing. + + node ?= io_anchor_element->find_from_name( name = 'from' namespace = 'xdr' ). + CHECK node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'col' namespace = 'xdr' ). + ls_upper-col = node2->get_value( ). + node2 ?= node->find_from_name( name = 'row' namespace = 'xdr' ). + ls_upper-row = node2->get_value( ). + node2 ?= node->find_from_name( name = 'colOff' namespace = 'xdr' ). + ls_upper-col_offset = node2->get_value( ). + node2 ?= node->find_from_name( name = 'rowOff' namespace = 'xdr' ). + ls_upper-row_offset = node2->get_value( ). + + node ?= io_anchor_element->find_from_name( name = 'ext' namespace = 'xdr' ). + IF node IS INITIAL. + CLEAR ls_size. + ELSE. + me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = ext ). + ls_size-width = ext-cx. + ls_size-height = ext-cy. + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'to' namespace = 'xdr' ). + IF node IS INITIAL. + CLEAR ls_lower. + ELSE. + node2 ?= node->find_from_name( name = 'col' namespace = 'xdr' ). + ls_lower-col = node2->get_value( ). + node2 ?= node->find_from_name( name = 'row' namespace = 'xdr' ). + ls_lower-row = node2->get_value( ). + node2 ?= node->find_from_name( name = 'colOff' namespace = 'xdr' ). + ls_lower-col_offset = node2->get_value( ). + node2 ?= node->find_from_name( name = 'rowOff' namespace = 'xdr' ). + ls_lower-row_offset = node2->get_value( ). + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'pic' namespace = 'xdr' ). + IF node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'nvPicPr' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). + lv_title = cnvpr-name. + + node2 ?= node->find_from_name( name = 'blipFill' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'blip' namespace = 'a' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = blip ). + lv_relation_id = blip-embed. + + drawing_type = zcl_excel_drawing=>type_image. + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'graphicFrame' namespace = 'xdr' ). + IF node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'nvGraphicFramePr' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). + lv_title = cnvpr-name. + + node2 ?= node->find_from_name( name = 'graphic' namespace = 'a' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'graphicData' namespace = 'a' ). + CHECK node3 IS NOT INITIAL. + node4 ?= node2->find_from_name( name = 'chart' namespace = 'c' ). + CHECK node4 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node4 CHANGING cp_structure = chart ). + lv_relation_id = chart-id. + + drawing_type = zcl_excel_drawing=>type_chart. + ENDIF. + + lo_drawing = io_worksheet->excel->add_new_drawing( + ip_type = drawing_type + ip_title = lv_title ). + io_worksheet->add_drawing( lo_drawing ). + + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + READ TABLE it_related_drawings INTO rel_drawing + WITH KEY id = lv_relation_id. + + lo_drawing->set_media( + EXPORTING + ip_media = rel_drawing-content + ip_media_type = rel_drawing-file_ext + ip_width = ls_size-width + ip_height = ls_size-height ). + + if drawing_type = zcl_excel_drawing=>type_chart. + "-------------Added by Alessandro Iannacci - Should load chart attributes + lo_drawing->load_chart_attributes( rel_drawing-content_xml ). + endif. + + endmethod. + + + + + method LOAD_SHARED_STRINGS. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Support partial formatting of strings in cells +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-11 +* - ... +* changes: renaming variables to naming conventions +* renaming variables to indicate what they are used for +* aligning code +* adding comments to explain what we are trying to achieve +* rewriting code for better readibility +*--------------------------------------------------------------------* + + + + DATA: + lo_shared_strings_xml TYPE REF TO if_ixml_document, + lo_node_si TYPE REF TO if_ixml_element, + lo_node_si_child TYPE REF TO if_ixml_element, + lo_node_r_child_t TYPE REF TO if_ixml_element, + lv_tag_name TYPE string, + lv_node_value TYPE string. + + FIELD-SYMBOLS: <lv_shared_string> LIKE LINE OF me->shared_strings. + +*--------------------------------------------------------------------* + +* §1 Parse shared strings file and get into internal table +* So far I have encountered 2 ways how a string can be represented in the shared strings file +* §1.1 - "simple" strings +* §1.2 - rich text formatted strings + +* Following is an example how this file could be set up; 2 strings in simple formatting, 3rd string rich textformatted + + +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <sst uniqueCount="6" count="6" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> +* <si> +* <t>This is a teststring 1</t> +* </si> +* <si> +* <t>This is a teststring 2</t> +* </si> +* <si> +* <r> +* <t>T</t> +* </r> +* <r> +* <rPr> +* <sz val="11"/> +* <color rgb="FFFF0000"/> +* <rFont val="Calibri"/> +* <family val="2"/> +* <scheme val="minor"/> +* </rPr> +* <t xml:space="preserve">his is a </t> +* </r> +* <r> +* <rPr> +* <sz val="11"/> +* <color theme="1"/> +* <rFont val="Calibri"/> +* <family val="2"/> +* <scheme val="minor"/> +* </rPr> +* <t>teststring 3</t> +* </r> +* </si> +* </sst> +*--------------------------------------------------------------------* + + lo_shared_strings_xml = me->get_ixml_from_zip_archive( i_filename = ip_path + is_normalizing = space ). " NO!!! normalizing - otherwise leading blanks will be omitted and that is not really desired for the stringtable + lo_node_si ?= lo_shared_strings_xml->find_from_name( 'si' ). + WHILE lo_node_si IS BOUND. + + APPEND INITIAL LINE TO me->shared_strings ASSIGNING <lv_shared_string>. " Each <si>-entry in the xml-file must lead to an entry in our stringtable + lo_node_si_child ?= lo_node_si->get_first_child( ). + IF lo_node_si_child IS BOUND. + lv_tag_name = lo_node_si_child->get_name( ). + IF lv_tag_name = 't'. +*--------------------------------------------------------------------* +* §1.1 - "simple" strings +* Example: see above +*--------------------------------------------------------------------* + <lv_shared_string> = lo_node_si_child->get_value( ). + ELSE. +*--------------------------------------------------------------------* +* §1.2 - rich text formatted strings +* it is sufficient to strip the <t>...</t> tag from each <r>-tag and concatenate these +* as long as rich text formatting is not supported (2do§1) ignore all info about formatting +* Example: see above +*--------------------------------------------------------------------* + WHILE lo_node_si_child IS BOUND. " actually these children of <si> are <r>-tags + + lo_node_r_child_t ?= lo_node_si_child->find_from_name( 't' ). " extract the <t>...</t> part of each <r>-tag + IF lo_node_r_child_t IS BOUND. + lv_node_value = lo_node_r_child_t->get_value( ). + CONCATENATE <lv_shared_string> lv_node_value INTO <lv_shared_string> RESPECTING BLANKS. + ENDIF. + + lo_node_si_child ?= lo_node_si_child->get_next( ). + + ENDWHILE. + ENDIF. + ENDIF. + + lo_node_si ?= lo_node_si->get_next( ). + ENDWHILE. + + endmethod. + + + + + + method LOAD_STYLES. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (wip ) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + TYPES: BEGIN OF lty_xf, + applyalignment TYPE string, + applyborder TYPE string, + applyfill TYPE string, + applyfont TYPE string, + applynumberformat TYPE string, + applyprotection TYPE string, + borderid TYPE string, + fillid TYPE string, + fontid TYPE string, + numfmtid TYPE string, + pivotbutton TYPE string, + quoteprefix TYPE string, + xfid TYPE string, + END OF lty_xf. + + TYPES: BEGIN OF lty_alignment, + horizontal TYPE string, + indent TYPE string, + justifylastline TYPE string, + readingorder TYPE string, + relativeindent TYPE string, + shrinktofit TYPE string, + textrotation TYPE string, + vertical TYPE string, + wraptext TYPE string, + END OF lty_alignment. + + TYPES: BEGIN OF lty_protection, + hidden TYPE string, + locked TYPE string, + END OF lty_protection. + + DATA: lo_styles_xml TYPE REF TO if_ixml_document, + lo_style TYPE REF TO zcl_excel_style, + + lt_num_formats TYPE t_num_formats, + lt_fills TYPE t_fills, + lt_borders TYPE t_borders, + lt_fonts TYPE t_fonts, + + ls_num_format TYPE t_num_format, + ls_fill TYPE REF TO zcl_excel_style_fill, + ls_cell_border TYPE REF TO zcl_excel_style_borders, + ls_font TYPE REF TO zcl_excel_style_font, + + lo_node_cellxfs TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf_alignment TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf_protection TYPE REF TO if_ixml_element, + + lo_nodes_xf TYPE REF TO if_ixml_node_collection, + lo_iterator_cellxfs TYPE REF TO if_ixml_node_iterator, + + ls_xf TYPE lty_xf, + ls_alignment TYPE lty_alignment, + ls_protection TYPE lty_protection, + lv_index TYPE i. + +*--------------------------------------------------------------------* +* To build a complete style that fully describes how a cell looks like +* we need the various parts +* §1 - Numberformat +* §2 - Fillstyle +* §3 - Borders +* §4 - Font +* §5 - Alignment +* §6 - Protection + +* Following is an example how this part of a file could be set up +* ... +* parts with various formatinformation - see §1,§2,§3,§4 +* ... +* <cellXfs count="26"> +* <xf numFmtId="0" borderId="0" fillId="0" fontId="0" xfId="0"/> +* <xf numFmtId="0" borderId="0" fillId="2" fontId="0" xfId="0" applyFill="1"/> +* <xf numFmtId="0" borderId="1" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="2" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="3" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="4" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="0" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* ... +* </cellXfs> +*--------------------------------------------------------------------* + + lo_styles_xml = me->get_ixml_from_zip_archive( ip_path ). + +*--------------------------------------------------------------------* +* The styles are build up from +* §1 number formats +* §2 fill styles +* §3 border styles +* §4 fonts +* These need to be read before we can try to build up a complete +* style that describes the look of a cell +*--------------------------------------------------------------------* + lt_num_formats = load_style_num_formats( lo_styles_xml ). " §1 + lt_fills = load_style_fills( lo_styles_xml ). " §2 + lt_borders = load_style_borders( lo_styles_xml ). " §3 + lt_fonts = load_style_fonts( lo_styles_xml ). " §4 + +*--------------------------------------------------------------------* +* Now everything is prepared to build a "full" style +*--------------------------------------------------------------------* + lo_node_cellxfs = lo_styles_xml->find_from_name( name = 'cellXfs' ). + IF lo_node_cellxfs IS BOUND. + lo_nodes_xf = lo_node_cellxfs->get_elements_by_tag_name( name = 'xf' ). + lo_iterator_cellxfs = lo_nodes_xf->create_iterator( ). + lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). + WHILE lo_node_cellxfs_xf IS BOUND. + + lo_style = ip_excel->add_new_style( ). + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf + CHANGING + cp_structure = ls_xf ). +*--------------------------------------------------------------------* +* §2 fill style +*--------------------------------------------------------------------* + IF ls_xf-applyfill = '1' AND ls_xf-fillid IS NOT INITIAL. + lv_index = ls_xf-fillid + 1. + READ TABLE lt_fills INTO ls_fill INDEX lv_index. + IF sy-subrc = 0. + lo_style->fill = ls_fill. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §1 number format +*--------------------------------------------------------------------* + IF ls_xf-numfmtid IS NOT INITIAL. + READ TABLE lt_num_formats INTO ls_num_format WITH TABLE KEY id = ls_xf-numfmtid. + IF sy-subrc = 0. + lo_style->number_format = ls_num_format-format. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §3 border style +*--------------------------------------------------------------------* + IF ls_xf-applyborder = '1' AND ls_xf-borderid IS NOT INITIAL. + lv_index = ls_xf-borderid + 1. + READ TABLE lt_borders INTO ls_cell_border INDEX lv_index. + IF sy-subrc = 0. + lo_style->borders = ls_cell_border. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §4 font +*--------------------------------------------------------------------* + IF ls_xf-applyfont = '1' AND ls_xf-fontid IS NOT INITIAL. + lv_index = ls_xf-fontid + 1. + READ TABLE lt_fonts INTO ls_font INDEX lv_index. + IF sy-subrc = 0. + lo_style->font = ls_font. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §5 - Alignment +*--------------------------------------------------------------------* + lo_node_cellxfs_xf_alignment ?= lo_node_cellxfs_xf->find_from_name( 'alignment' ). + IF lo_node_cellxfs_xf_alignment IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf_alignment + CHANGING + cp_structure = ls_alignment ). + IF ls_alignment-horizontal IS NOT INITIAL. + lo_style->alignment->horizontal = ls_alignment-horizontal. + ENDIF. + + IF ls_alignment-vertical IS NOT INITIAL. + lo_style->alignment->vertical = ls_alignment-vertical. + ENDIF. + + IF ls_alignment-textrotation IS NOT INITIAL. + lo_style->alignment->textrotation = ls_alignment-textrotation. + ENDIF. + + IF ls_alignment-wraptext = '1' OR ls_alignment-wraptext = 'true'. + lo_style->alignment->wraptext = abap_true. + ENDIF. + + IF ls_alignment-shrinktofit = '1' OR ls_alignment-shrinktofit = 'true'. + lo_style->alignment->shrinktofit = abap_true. + ENDIF. + + IF ls_alignment-indent IS NOT INITIAL. + lo_style->alignment->indent = ls_alignment-indent. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §6 - Protection +*--------------------------------------------------------------------* + lo_node_cellxfs_xf_protection ?= lo_node_cellxfs_xf->find_from_name( 'protection' ). + IF lo_node_cellxfs_xf_protection IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf_protection + CHANGING + cp_structure = ls_protection ). + IF ls_protection-locked = '1' OR ls_protection-locked = 'true'. + lo_style->protection->locked = zcl_excel_style_protection=>c_protection_locked. + ELSE. + lo_style->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. + ENDIF. + + IF ls_protection-hidden = '1' OR ls_protection-hidden = 'true'. + lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_hidden. + ELSE. + lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_unhidden. + ENDIF. + + ENDIF. + + INSERT lo_style INTO TABLE me->styles. + + lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). + + ENDWHILE. + ENDIF. + + endmethod. + + + + + method LOAD_STYLE_BORDERS. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* renaming variables to indicate what they are used for +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + DATA: lo_node_border TYPE REF TO if_ixml_element, + lo_node_bordertype TYPE REF TO if_ixml_element, + lo_node_bordercolor TYPE REF TO if_ixml_element, + lo_cell_border TYPE REF TO zcl_excel_style_borders, + lo_border TYPE REF TO zcl_excel_style_border, + ls_color TYPE t_color. + +*--------------------------------------------------------------------* +* We need a table of used borderformats to build up our styles +* §1 A cell has 4 outer borders and 2 diagonal "borders" +* These borders can be formatted separately but the diagonal borders +* are always being formatted the same +* We'll parse through the <border>-tag for each of the bordertypes +* §2 and read the corresponding formatting information + +* Following is an example how this part of a file could be set up +* <border diagonalDown="1"> +* <left style="mediumDashDotDot"> +* <color rgb="FFFF0000"/> +* </left> +* <right/> +* <top style="thick"> +* <color rgb="FFFF0000"/> +* </top> +* <bottom style="thick"> +* <color rgb="FFFF0000"/> +* </bottom> +* <diagonal style="thick"> +* <color rgb="FFFF0000"/> +* </diagonal> +* </border> +*--------------------------------------------------------------------* + lo_node_border ?= ip_xml->find_from_name( 'border' ). + WHILE lo_node_border IS BOUND. + + CREATE OBJECT lo_cell_border. + +*--------------------------------------------------------------------* +* Diagonal borderlines are formatted the equally. Determine what kind of diagonal borders are present if any +*--------------------------------------------------------------------* +* DiagonalNone = 0 +* DiagonalUp = 1 +* DiagonalDown = 2 +* DiagonalBoth = 3 +*--------------------------------------------------------------------* + IF lo_node_border->get_attribute( 'diagonalDown' ) IS NOT INITIAL. + add zcl_excel_style_borders=>c_diagonal_down to lo_cell_border->diagonal_mode. + ENDIF. + + IF lo_node_border->get_attribute( 'diagonalUp' ) IS NOT INITIAL. + add zcl_excel_style_borders=>c_diagonal_up to lo_cell_border->diagonal_mode. + ENDIF. + + lo_node_bordertype ?= lo_node_border->get_first_child( ). + WHILE lo_node_bordertype IS BOUND. +*--------------------------------------------------------------------* +* §1 Determine what kind of border we are talking about +*--------------------------------------------------------------------* +* Up, down, left, right, diagonal +*--------------------------------------------------------------------* + CREATE OBJECT lo_border. + + CASE lo_node_bordertype->get_name( ). + + WHEN 'left'. + lo_cell_border->left = lo_border. + + WHEN 'right'. + lo_cell_border->right = lo_border. + + WHEN 'top'. + lo_cell_border->top = lo_border. + + WHEN 'bottom'. + lo_cell_border->down = lo_border. + + WHEN 'diagonal'. + lo_cell_border->diagonal = lo_border. + + ENDCASE. + +*--------------------------------------------------------------------* +* §2 Read the border-formatting +*--------------------------------------------------------------------* + lo_border->border_style = lo_node_bordertype->get_attribute( 'style' ). + lo_node_bordercolor ?= lo_node_bordertype->find_from_name( 'color' ). + IF lo_node_bordercolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_bordercolor + CHANGING + cp_structure = ls_color ). + + lo_border->border_color-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_border->border_color-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_border->border_color-theme = ls_color-theme. + ENDIF. + lo_border->border_color-tint = ls_color-tint. + ENDIF. + + lo_node_bordertype ?= lo_node_bordertype->get_next( ). + + ENDWHILE. + + INSERT lo_cell_border INTO TABLE ep_borders. + + lo_node_border ?= lo_node_border->get_next( ). + + ENDWHILE. + + + endmethod. + + + + + method LOAD_STYLE_FILLS. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Support gradientFill +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* commenting on problems/future enhancements/todos we already know of or should decide upon +* adding comments to explain what we are trying to achieve +* renaming variables to indicate what they are used for +*--------------------------------------------------------------------* + DATA: lv_value TYPE string, + lo_node_fill TYPE REF TO if_ixml_element, + lo_node_fill_child TYPE REF TO if_ixml_element, + lo_node_bgcolor TYPE REF TO if_ixml_element, + lo_node_fgcolor TYPE REF TO if_ixml_element, + lo_fill TYPE REF TO zcl_excel_style_fill, + ls_color TYPE t_color. + +*--------------------------------------------------------------------* +* We need a table of used fillformats to build up our styles + +* Following is an example how this part of a file could be set up +* <fill> +* <patternFill patternType="gray125"/> +* </fill> +* <fill> +* <patternFill patternType="solid"> +* <fgColor rgb="FFFFFF00"/> +* <bgColor indexed="64"/> +* </patternFill> +* </fill> +*--------------------------------------------------------------------* + + lo_node_fill ?= ip_xml->find_from_name( 'fill' ). + WHILE lo_node_fill IS BOUND. + + CREATE OBJECT lo_fill. + lo_node_fill_child ?= lo_node_fill->get_first_child( ). + lv_value = lo_node_fill_child->get_name( ). + CASE lv_value. + +*--------------------------------------------------------------------* +* Patternfill +*--------------------------------------------------------------------* + WHEN 'patternFill'. + lo_fill->filltype = lo_node_fill_child->get_attribute( 'patternType' ). +*--------------------------------------------------------------------* +* Patternfill - background color +*--------------------------------------------------------------------* + lo_node_bgcolor = lo_node_fill_child->find_from_name( 'bgColor' ). + IF lo_node_bgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_bgcolor + CHANGING + cp_structure = ls_color ). + + lo_fill->bgcolor-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_fill->bgcolor-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_fill->bgcolor-theme = ls_color-theme. + ENDIF. + lo_fill->bgcolor-tint = ls_color-tint. + ENDIF. + +*--------------------------------------------------------------------* +* Patternfill - foreground color +*--------------------------------------------------------------------* + lo_node_fgcolor = lo_node_fill->find_from_name( 'fgColor' ). + IF lo_node_fgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_fgcolor + CHANGING + cp_structure = ls_color ). + + lo_fill->fgcolor-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_fill->fgcolor-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_fill->fgcolor-theme = ls_color-theme. + ENDIF. + lo_fill->fgcolor-tint = ls_color-tint. + ENDIF. + + +*--------------------------------------------------------------------* +* gradientFill +*--------------------------------------------------------------------* + WHEN 'gradientFill'. + " 2do§1 Support gradientFill + + WHEN OTHERS. + + ENDCASE. + + + INSERT lo_fill INTO TABLE ep_fills. + + lo_node_fill ?= lo_node_fill->get_next( ). + + ENDWHILE. + + + endmethod. + + + + + method LOAD_STYLE_FONTS. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* removing unused variables +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + DATA: lo_node_font TYPE REF TO if_ixml_element, + lo_node2 TYPE REF TO if_ixml_element, + lo_font TYPE REF TO zcl_excel_style_font, + ls_color TYPE t_color. + +*--------------------------------------------------------------------* +* We need a table of used fonts to build up our styles + +* Following is an example how this part of a file could be set up +* <font> +* <sz val="11"/> +* <color theme="1"/> +* <name val="Calibri"/> +* <family val="2"/> +* <scheme val="minor"/> +* </font> +*--------------------------------------------------------------------* + lo_node_font ?= ip_xml->find_from_name( 'font' ). + WHILE lo_node_font IS BOUND. + + CREATE OBJECT lo_font. +*--------------------------------------------------------------------* +* Bold +*--------------------------------------------------------------------* + IF lo_node_font->find_from_name( 'b' ) IS BOUND. + lo_font->bold = abap_true. + ENDIF. + +*--------------------------------------------------------------------* +* Italic +*--------------------------------------------------------------------* + IF lo_node_font->find_from_name( 'i' ) IS BOUND. + lo_font->italic = abap_true. + ENDIF. + +*--------------------------------------------------------------------* +* Underline +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'u' ). + IF lo_node2 IS BOUND. + lo_font->underline = abap_true. + lo_font->underline_mode = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* StrikeThrough +*--------------------------------------------------------------------* + IF lo_node_font->find_from_name( 'strike' ) IS BOUND. + lo_font->strikethrough = abap_true. + ENDIF. + +*--------------------------------------------------------------------* +* Fontsize +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'sz' ). + IF lo_node2 IS BOUND. + lo_font->size = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontname +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'name' ). + IF lo_node2 IS BOUND. + lo_font->name = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontfamily +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'family' ). + IF lo_node2 IS BOUND. + lo_font->family = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontscheme +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'scheme' ). + IF lo_node2 IS BOUND. + lo_font->scheme = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontcolor +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'color' ). + IF lo_node2 IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node2 + CHANGING + cp_structure = ls_color ). + lo_font->color-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_font->color-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_font->color-theme = ls_color-theme. + ENDIF. + lo_font->color-tint = ls_color-tint. + ENDIF. + + INSERT lo_font INTO TABLE ep_fonts. + + lo_node_font ?= lo_node_font->get_next( ). + + ENDWHILE. + + + endmethod. + + + + + method LOAD_STYLE_NUM_FORMATS. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Explain gaps in predefined formats +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* adding comments to explain what we are trying to achieve +* aligning code +*--------------------------------------------------------------------* + DATA: lo_node_numfmt TYPE REF TO if_ixml_element, + ls_num_format TYPE t_num_format. + +*--------------------------------------------------------------------* +* We need a table of used numberformats to build up our styles +* there are two kinds of numberformats +* §1 those that have been explicitly added by the createor of the excel-file +* §2 and built-in numberformats +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* §1 Get non-internal numberformats that are found in the file explicitly + +* Following is an example how this part of a file could be set up +* <numFmts count="1"> +* <numFmt formatCode="#,###,###,###,##0.00" numFmtId="164"/> +* </numFmts> +*--------------------------------------------------------------------* + lo_node_numfmt ?= ip_xml->find_from_name( 'numFmt' ). + WHILE lo_node_numfmt IS BOUND. + + CLEAR ls_num_format. + + CREATE OBJECT ls_num_format-format. + ls_num_format-format->format_code = lo_node_numfmt->get_attribute( 'formatCode' ). + ls_num_format-id = lo_node_numfmt->get_attribute( 'numFmtId' ). + INSERT ls_num_format INTO TABLE ep_num_formats. + + lo_node_numfmt ?= lo_node_numfmt->get_next( ). + + ENDWHILE. + + DEFINE predefined_format. + ls_num_format-id = &1. + create object ls_num_format-format. + ls_num_format-format->format_code = &2. + insert ls_num_format into table ep_num_formats. + END-OF-DEFINITION. + +*--------------------------------------------------------------------* +* §1 Get internal predefined numberformats +*--------------------------------------------------------------------* + predefined_format '1' '0'. + predefined_format '2' '0.00'. + predefined_format '3' '#,##0'. + predefined_format '4' '#,##0.00'. + predefined_format '5' '$#,##0_);($#,##0)'. + predefined_format '6' '$#,##0_);[Red]($#,##0)'. + predefined_format '7' '$#,##0.00_);($#,##0.00)'. + predefined_format '8' '$#,##0.00_);[Red]($#,##0.00)'. + predefined_format '9' '0%'. + predefined_format '10' '0.00%'. + predefined_format '11' '0.00E+00'. + predefined_format '12' '# ?/?'. + predefined_format '13' '# ??/??'. + predefined_format '14' 'm/d/yyyy'. + predefined_format '15' 'd-mmm-yy'. + predefined_format '16' 'd-mmm'. + predefined_format '17' 'mmm-yy'. + predefined_format '18' 'h:mm AM/PM'. + predefined_format '19' 'h:mm:ss AM/PM'. + predefined_format '20' 'h:mm'. + predefined_format '21' 'h:mm:ss'. + predefined_format '22' 'm/d/yyyy h:mm'. +* 2do§1 Why is there a gap in here? + + + + + + + + + + + + + + predefined_format '37' '#,##0_);(#,##0)'. + predefined_format '38' '#,##0_);[Red](#,##0)'. + predefined_format '39' '#,##0.00_);(#,##0.00)'. + predefined_format '40' '#,##0.00_);[Red](#,##0.00)'. +* 2do§1 Why is there a gap in here? + + + + predefined_format '45' 'mm:ss'. + predefined_format '46' '[h]:mm:ss'. + predefined_format '47' 'mm:ss.0'. + predefined_format '48' '##0.0E+0'. + predefined_format '49' '@'. +* 2do§1 Is 49 really the last predefined format? + + + endmethod. + + + + + + method LOAD_WORKBOOK. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Move macro-reading from zcl_excel_reader_xlsm to this class +* autodetect existance of macro/vba content +* Allow inputparameter to explicitly tell reader to ignore vba-content +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-10 +* - ... +* changes: renaming variables to naming conventions +* aligning code +* removing unused variables +* adding me-> where possible +* renaming variables to indicate what they are used for +* adding comments to explain what we are trying to achieve +* renaming i/o parameters: previous input-parameter ip_path holds a (full) filename and not a path --> rename to iv_workbook_full_filename +* ip_excel renamed while being at it --> rename to io_excel +*--------------------------------------------------------------------* +* issue #232 - Read worksheetstate hidden/veryHidden +* - Stefan Schmöcker, 2012-11-11 +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +* changes: correction in named ranges to correctly attach +* sheetlocal names/ranges to the correct sheet +*--------------------------------------------------------------------* +* issue#284 - Copied formulae ignored when reading excelfile +* - Stefan Schmöcker, 2013-08-02 +* changes: initialize area to hold referenced formulaedata +* after all worksheets have been read resolve formuae +*--------------------------------------------------------------------* + + CONSTANTS: lcv_shared_strings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + lcv_worksheet TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + lcv_styles TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + lcv_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', "#EC NEEDED for future incorporation of XLSM-reader +*--------------------------------------------------------------------* +* #232: Read worksheetstate hidden/veryHidden - begin data declarations +*--------------------------------------------------------------------* + lcv_worksheet_state_hidden TYPE string VALUE 'hidden', + lcv_worksheet_state_veryhidden TYPE string VALUE 'veryHidden'. +*--------------------------------------------------------------------* +* #232: Read worksheetstate hidden/veryHidden - end data declarations +*--------------------------------------------------------------------* + + DATA: + lv_path TYPE string, + lv_filename TYPE chkfile, + lv_full_filename TYPE string, + + lo_rels_workbook TYPE REF TO if_ixml_document, + lt_worksheets TYPE STANDARD TABLE OF t_relationship WITH NON-UNIQUE DEFAULT KEY, + lo_workbook TYPE REF TO if_ixml_document, + lv_workbook_index TYPE i, + lv_worksheet_path TYPE string, + ls_sheet TYPE t_sheet, + + lo_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lv_worksheet_title TYPE zexcel_sheet_title, + lv_tabix TYPE sytabix, " #235 - repeat rows/cols. Needed to link defined name to correct worksheet + + ls_range TYPE t_range, + lv_range_value TYPE zexcel_range_value, +*--------------------------------------------------------------------* +* #229: Set active worksheet - begin data declarations +*--------------------------------------------------------------------* + lv_active_sheet_string TYPE string, + lv_zexcel_active_worksheet TYPE zexcel_active_worksheet, +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns - added autofilter support while changing this section + lo_autofilter TYPE REF TO zcl_excel_autofilter, + ls_area TYPE zexcel_s_autofilter_area, + lv_col_start_alpha TYPE zexcel_cell_column_alpha, + lv_col_end_alpha TYPE zexcel_cell_column_alpha, + lv_row_start TYPE zexcel_cell_row, + lv_row_end TYPE zexcel_cell_row , + lv_regex TYPE string, + lv_range_value_1 TYPE zexcel_range_value, + lv_range_value_2 TYPE zexcel_range_value. +*--------------------------------------------------------------------* +* #229: Set active worksheet - end data declarations +*--------------------------------------------------------------------* + FIELD-SYMBOLS: <worksheet> TYPE t_relationship. + + +*--------------------------------------------------------------------* + +* §1 Get the position of files related to this workbook +* Usually this will be <root>/xl/workbook.xml +* Thus the workbookroot will be <root>/xl/ +* The position of all related files will be given in file +* <workbookroot>/_rels/<workbookfilename>.rels and their positions +* be be given relative to the workbookroot + +* Following is an example how this file could be set up + +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> +* <Relationship Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Id="rId6"/> +* <Relationship Target="theme/theme1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Id="rId5"/> +* <Relationship Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId1"/> +* <Relationship Target="worksheets/sheet2.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId2"/> +* <Relationship Target="worksheets/sheet3.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId3"/> +* <Relationship Target="worksheets/sheet4.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId4"/> +* <Relationship Target="sharedStrings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Id="rId7"/> +* </Relationships> +* +* §2 Load data that is relevant to the complete workbook +* Currently supported is: +* §2.1 Shared strings - This holds all strings that are used in all worksheets +* §2.2 Styles - This holds all styles that are used in all worksheets +* §2.3 Worksheets - For each worksheet in the workbook one entry appears here to point to the file that holds the content of this worksheet +* §2.4 [Themes] - not supported +* §2.5 [VBA (Macro)] - supported in class zcl_excel_reader_xlsm but should be moved here and autodetect +* ... +* +* §3 Some information is held in the workbookfile as well +* §3.1 Names and order of of worksheets +* §3.2 Active worksheet +* §3.3 Defined names +* ... +* Following is an example how this file could be set up + +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <workbook xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> +* <fileVersion rupBuild="4506" lowestEdited="4" lastEdited="4" appName="xl"/> +* <workbookPr defaultThemeVersion="124226"/> +* <bookViews> +* <workbookView activeTab="1" windowHeight="8445" windowWidth="19035" yWindow="120" xWindow="120"/> +* </bookViews> +* <sheets> +* <sheet r:id="rId1" sheetId="1" name="Sheet1"/> +* <sheet r:id="rId2" sheetId="2" name="Sheet2"/> +* <sheet r:id="rId3" sheetId="3" name="Sheet3" state="hidden"/> +* <sheet r:id="rId4" sheetId="4" name="Sheet4"/> +* </sheets> +* <definedNames/> +* <calcPr calcId="125725"/> +* </workbook> +*--------------------------------------------------------------------* + + CLEAR me->mt_ref_formulae. " ins issue#284 + +*--------------------------------------------------------------------* +* §1 Get the position of files related to this workbook +* Entry into this method is with the filename of the workbook +*--------------------------------------------------------------------* + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = iv_workbook_full_filename + IMPORTING + stripped_name = lv_filename + file_path = lv_path. + + CONCATENATE lv_path '_rels/' lv_filename '.rels' + INTO lv_full_filename. + lo_rels_workbook = me->get_ixml_from_zip_archive( lv_full_filename ). + + lo_node ?= lo_rels_workbook->find_from_name( 'Relationship' ). "#EC NOTEXT + WHILE lo_node IS BOUND. + + me->fill_struct_from_attributes( EXPORTING ip_element = lo_node CHANGING cp_structure = ls_relationship ). + + CASE ls_relationship-type. + +*--------------------------------------------------------------------* +* §2.1 Shared strings - This holds all strings that are used in all worksheets +*--------------------------------------------------------------------* + WHEN lcv_shared_strings. + CONCATENATE lv_path ls_relationship-target + INTO lv_full_filename. + me->load_shared_strings( lv_full_filename ). + +*--------------------------------------------------------------------* +* §2.3 Worksheets +* For each worksheet in the workbook one entry appears here to point to the file that holds the content of this worksheet +* Shared strings and styles have to be present before we can start with creating the worksheets +* thus we only store this information for use when parsing the workbookfile for sheetinformations +*--------------------------------------------------------------------* + WHEN lcv_worksheet. + APPEND ls_relationship TO lt_worksheets. + +*--------------------------------------------------------------------* +* §2.2 Styles - This holds the styles that are used in all worksheets +*--------------------------------------------------------------------* + WHEN lcv_styles. + CONCATENATE lv_path ls_relationship-target + INTO lv_full_filename. + me->load_styles( ip_path = lv_full_filename + ip_excel = io_excel ). + + WHEN OTHERS. + + ENDCASE. + + lo_node ?= lo_node->get_next( ). + + ENDWHILE. + +*--------------------------------------------------------------------* +* §3 Some information held in the workbookfile +*--------------------------------------------------------------------* + lo_workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + +*--------------------------------------------------------------------* +* §3.1 Names and order of of worksheets +*--------------------------------------------------------------------* + lo_node ?= lo_workbook->find_from_name( 'sheet' ). + lv_workbook_index = 1. + WHILE lo_node IS BOUND. + + me->fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_sheet ). +*--------------------------------------------------------------------* +* Create new worksheet in workbook with correct name +*--------------------------------------------------------------------* + lv_worksheet_title = ls_sheet-name. + IF lv_workbook_index = 1. " First sheet has been added automatically by creating io_excel + lo_worksheet = io_excel->get_active_worksheet( ). + lo_worksheet->set_title( lv_worksheet_title ). + ELSE. + lo_worksheet = io_excel->add_new_worksheet( lv_worksheet_title ). + ENDIF. +*--------------------------------------------------------------------* +* #232 - Read worksheetstate hidden/veryHidden - begin of coding +* Set status hidden if necessary +*--------------------------------------------------------------------* + CASE ls_sheet-state. + + WHEN lcv_worksheet_state_hidden. + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_hidden. + + WHEN lcv_worksheet_state_veryhidden. + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_veryhidden. + + ENDCASE. +*--------------------------------------------------------------------* +* #232 - Read worksheetstate hidden/veryHidden - end of coding +*--------------------------------------------------------------------* +*--------------------------------------------------------------------* +* Load worksheetdata +*--------------------------------------------------------------------* + READ TABLE lt_worksheets ASSIGNING <worksheet> WITH KEY id = ls_sheet-id. + IF sy-subrc = 0. + <worksheet>-sheetid = ls_sheet-sheetid. "ins #235 - repeat rows/cols - needed to identify correct sheet + CONCATENATE lv_path <worksheet>-target + INTO lv_worksheet_path. + me->load_worksheet( ip_path = lv_worksheet_path + io_worksheet = lo_worksheet ). + <worksheet>-worksheet = lo_worksheet. + ENDIF. + + lo_node ?= lo_node->get_next( ). + ADD 1 TO lv_workbook_index. + + ENDWHILE. + SORT lt_worksheets BY sheetid. " needed for localSheetid -referencing + +*--------------------------------------------------------------------* +* #284: Set active worksheet - Resolve referenced formulae to +* explicit formulae those cells +*--------------------------------------------------------------------* + me->resolve_referenced_formulae( ). + " ins issue#284 +*--------------------------------------------------------------------* +* #229: Set active worksheet - begin coding +* §3.2 Active worksheet +*--------------------------------------------------------------------* + lv_zexcel_active_worksheet = 1. " First sheet = active sheet if nothing else specified. + lo_node ?= lo_workbook->find_from_name( 'workbookView' ). + IF lo_node IS BOUND. + lv_active_sheet_string = lo_node->get_attribute( 'activeTab' ). + TRY. + lv_zexcel_active_worksheet = lv_active_sheet_string + 1. " EXCEL numbers the sheets from 0 onwards --> index into worksheettable is increased by one + CATCH cx_sy_conversion_error. "#EC NO_HANDLER - error here --> just use the default 1st sheet + ENDTRY. + ENDIF. + io_excel->set_active_sheet_index( lv_zexcel_active_worksheet ). +*--------------------------------------------------------------------* +* #229: Set active worksheet - end coding +*--------------------------------------------------------------------* + + +*--------------------------------------------------------------------* +* §3.3 Defined names +* So far I have encountered these +* - named ranges - sheetlocal +* - named ranges - workbookglobal +* - autofilters - sheetlocal ( special range ) +* - repeat rows/cols - sheetlocal ( special range ) +* +*--------------------------------------------------------------------* + lo_node ?= lo_workbook->find_from_name( 'definedName' ). + WHILE lo_node IS BOUND. + + CLEAR lo_range. "ins issue #235 - repeat rows/cols + me->fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_range ). + lv_range_value = lo_node->get_value( ). + + IF ls_range-localsheetid IS NOT INITIAL. " issue #163+ +* READ TABLE lt_worksheets ASSIGNING <worksheet> WITH KEY id = ls_range-localsheetid. "del issue #235 - repeat rows/cols " issue #163+ +* lo_range = <worksheet>-worksheet->add_new_range( ). "del issue #235 - repeat rows/cols " issue #163+ +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns - begin +*--------------------------------------------------------------------* + lv_tabix = ls_range-localsheetid + 1. + READ TABLE lt_worksheets ASSIGNING <worksheet> INDEX lv_tabix. + IF sy-subrc = 0. + CASE ls_range-name. + +*--------------------------------------------------------------------* +* insert autofilters +*--------------------------------------------------------------------* + WHEN zcl_excel_autofilters=>c_autofilter. + lo_autofilter = io_excel->add_new_autofilter( io_sheet = <worksheet>-worksheet ) . + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = ls_area-row_start ). + ls_area-col_start = zcl_excel_common=>convert_column2int( lv_col_start_alpha ). + ls_area-col_end = zcl_excel_common=>convert_column2int( lv_col_end_alpha ). + lo_autofilter->set_filter_area( is_area = ls_area ). + +*--------------------------------------------------------------------* +* repeat print rows/columns +*--------------------------------------------------------------------* + WHEN zif_excel_sheet_printsettings=>gcv_print_title_name. + lo_range = <worksheet>-worksheet->add_new_range( ). +*--------------------------------------------------------------------* +* This might be a temporary solution. Maybe ranges get be reworked +* to support areas consisting of multiple rectangles +* But for now just split the range into row and columnpart +*--------------------------------------------------------------------* + CLEAR:lv_range_value_1, + lv_range_value_2. + IF lv_range_value IS INITIAL. +* Empty --> nothing to do + ELSE. + IF lv_range_value(1) = `'`. " Escaped + lv_regex = `^('[^']*')+![^,]*,`. + ELSE. + lv_regex = `^[^!]*![^,]*,`. + ENDIF. +* Split into two ranges if necessary + FIND REGEX lv_regex IN lv_range_value MATCH LENGTH sy-fdpos. + IF sy-subrc = 0 AND sy-fdpos > 0. + lv_range_value_2 = lv_range_value+sy-fdpos. + SUBTRACT 1 FROM sy-fdpos. + lv_range_value_1 = lv_range_value(sy-fdpos). + ELSE. + lv_range_value_1 = lv_range_value. + ENDIF. + ENDIF. +* 1st range + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1 + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). + IF lv_col_start_alpha IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha + iv_columns_to = lv_col_end_alpha ). + ENDIF. + IF lv_row_start IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start + iv_rows_to = lv_row_end ). + ENDIF. + +* 2nd range + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2 + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). + IF lv_col_start_alpha IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha + iv_columns_to = lv_col_end_alpha ). + ENDIF. + IF lv_row_start IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start + iv_rows_to = lv_row_end ). + ENDIF. + + WHEN OTHERS. + + ENDCASE. + ENDIF. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns - end +*--------------------------------------------------------------------* + ELSE. " issue #163+ + lo_range = io_excel->add_new_range( ). " issue #163+ + ENDIF. " issue #163+ +* lo_range = ip_excel->add_new_range( ). " issue #163- + IF lo_range IS BOUND. "ins issue #235 - repeat rows/cols + lo_range->name = ls_range-name. + lo_range->set_range_value( lv_range_value ). + ENDIF. "ins issue #235 - repeat rows/cols + lo_node ?= lo_node->get_next( ). + + ENDWHILE. + + endmethod. + + + + + + method LOAD_WORKSHEET. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Header/footer +* +* Please don't just delete these ToDos if they are not +* needed but leave a comment that states this +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, +* - ... +* changes: renaming variables to naming conventions +* aligning code (started) +* add a list of open ToDos here +* adding comments to explain what we are trying to achieve (started) +*--------------------------------------------------------------------* + TYPES: BEGIN OF lty_cell, + r TYPE string, + t TYPE string, + s TYPE string, + END OF lty_cell. + + TYPES: BEGIN OF lty_column, + min TYPE string, + max TYPE string, + width TYPE float, + customwidth TYPE string, + style TYPE string, + bestfit TYPE string, + collapsed TYPE string, + hidden TYPE string, + outlinelevel TYPE string, + END OF lty_column. + + TYPES: BEGIN OF lty_sheetview, + showgridlines TYPE zexcel_show_gridlines, + tabselected TYPE string, + zoomscalenormal TYPE string, + workbookviewid TYPE string, + showrowcolheaders TYPE string, + END OF lty_sheetview. + + TYPES: BEGIN OF lty_mergecell, + ref TYPE string, + END OF lty_mergecell. + + TYPES: BEGIN OF lty_row, + r TYPE string, + customheight TYPE string, + ht TYPE float, + spans TYPE string, + thickbot TYPE string, + customformat TYPE string, + thicktop TYPE string, + collapsed TYPE string, + hidden TYPE string, + outlinelevel TYPE string, + END OF lty_row. + + TYPES: BEGIN OF lty_page_setup, + id TYPE string, + orientation TYPE string, + scale TYPE string, + END OF lty_page_setup. + + TYPES: BEGIN OF lty_page_margins, + footer TYPE string, + header TYPE string, + bottom TYPE string, + top TYPE string, + right TYPE string, + left TYPE string, + END OF lty_page_margins. + + TYPES: BEGIN OF lty_sheetformatpr, + customheight TYPE string, + defaultrowheight TYPE string, + customwidth TYPE string, + defaultcolwidth TYPE string, + END OF lty_sheetformatpr. + + TYPES: BEGIN OF lty_headerfooter, + alignwithmargins TYPE string, + differentoddeven TYPE string, + END OF lty_headerfooter. + + TYPES: BEGIN OF lty_tabcolor, + rgb TYPE string, + theme TYPE string, + END OF lty_tabcolor. + + TYPES: BEGIN OF lty_datavalidation, + type TYPE zexcel_data_val_type, + allowblank TYPE flag, + showinputmessage TYPE flag, + showerrormessage TYPE flag, + showdropdown TYPE flag, + operator TYPE zexcel_data_val_operator, + formula1 TYPE zexcel_validation_formula1, + formula2 TYPE zexcel_validation_formula1, + sqref TYPE string, + cell_column TYPE zexcel_cell_column_alpha, + cell_column_to TYPE zexcel_cell_column_alpha, + cell_row TYPE zexcel_cell_row, + cell_row_to TYPE zexcel_cell_row, + error TYPE string, + errortitle TYPE string, + prompt TYPE string, + prompttitle TYPE string, + errorstyle TYPE zexcel_data_val_error_style, + END OF lty_datavalidation. + + + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1', + lc_rel_drawing TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + lc_rel_printer TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings'. + + DATA: lo_ixml_worksheet TYPE REF TO if_ixml_document, + lo_ixml_cells TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml_iterator2 TYPE REF TO if_ixml_node_iterator, + lo_ixml_row_elem TYPE REF TO if_ixml_element, + lo_ixml_cell_elem TYPE REF TO if_ixml_element, + ls_cell TYPE lty_cell, + lv_index TYPE i, + lo_ixml_value_elem TYPE REF TO if_ixml_element, + lo_ixml_formula_elem TYPE REF TO if_ixml_element, + lv_cell_value TYPE zexcel_cell_value, + lv_cell_formula TYPE zexcel_cell_formula, + lv_cell_column TYPE zexcel_cell_column_alpha, + lv_cell_row TYPE zexcel_cell_row, + lo_excel_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style, + + lo_ixml_imension_elem TYPE REF TO if_ixml_element, "#+234 + lv_dimension_range TYPE string, "#+234 + + lo_ixml_sheetview_elem TYPE REF TO if_ixml_element, + ls_sheetview TYPE lty_sheetview, + lo_ixml_pane_elem TYPE REF TO if_ixml_element, + ls_excel_pane TYPE zexcel_pane, + lv_pane_cell_row TYPE zexcel_cell_row, + lv_pane_cell_col_a TYPE zexcel_cell_column_alpha, + lv_pane_cell_col TYPE zexcel_cell_column, + + lo_ixml_mergecells TYPE REF TO if_ixml_node_collection, + lo_ixml_mergecell_elem TYPE REF TO if_ixml_element, + ls_mergecell TYPE lty_mergecell, + lv_merge_column_start TYPE zexcel_cell_column_alpha, + lv_merge_column_end TYPE zexcel_cell_column_alpha, + lv_merge_row_start TYPE zexcel_cell_row, + lv_merge_row_end TYPE zexcel_cell_row, + + lo_ixml_sheetformatpr_elem TYPE REF TO if_ixml_element, + ls_sheetformatpr TYPE lty_sheetformatpr, + lv_height TYPE float, + + lo_ixml_headerfooter_elem TYPE REF TO if_ixml_element, + ls_headerfooter TYPE lty_headerfooter, + ls_odd_header TYPE zexcel_s_worksheet_head_foot, + ls_odd_footer TYPE zexcel_s_worksheet_head_foot, + ls_even_header TYPE zexcel_s_worksheet_head_foot, + ls_even_footer TYPE zexcel_s_worksheet_head_foot, + lo_ixml_hf_value_elem TYPE REF TO if_ixml_element, + + lo_ixml_pagemargins_elem TYPE REF TO if_ixml_element, + ls_pagemargins TYPE lty_page_margins, + lo_ixml_pagesetup_elem TYPE REF TO if_ixml_element, + ls_pagesetup TYPE lty_page_setup, + + lo_ixml_columns TYPE REF TO if_ixml_node_collection, + lo_ixml_column_elem TYPE REF TO if_ixml_element, + ls_column TYPE lty_column, + lv_column_alpha TYPE zexcel_cell_column_alpha, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lv_outline_level TYPE int4, + + lo_ixml_tabcolor TYPE REF TO if_ixml_element, + ls_tabcolor TYPE lty_tabcolor, + ls_excel_s_tabcolor TYPE zexcel_s_tabcolor, + + lo_ixml_rows TYPE REF TO if_ixml_node_collection, + ls_row TYPE lty_row, + lv_max_col TYPE i, "for use with SPANS element +* lv_min_col TYPE i, "for use with SPANS element " not in use currently + lv_max_col_s TYPE char10, "for use with SPANS element + lv_min_col_s TYPE char10, "for use with SPANS element + lo_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, +*--- End of current code aligning --------------------------------------------------------------- + + lv_path TYPE string, + lo_ixml_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship, + lo_ixml_rels_worksheet TYPE REF TO if_ixml_document, + lv_rels_worksheet_path TYPE string, + lv_stripped_name TYPE chkfile, + lv_dirname TYPE string, + + lo_ixml_datavalidations TYPE REF TO if_ixml_node_collection, + lo_ixml_datavalidation_elem TYPE REF TO if_ixml_element, + ls_datavalidation TYPE lty_datavalidation, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lv_datavalidation_range TYPE string, + lt_datavalidation_range TYPE TABLE OF string. + +*--------------------------------------------------------------------* +* §2 We need to read the the file "\\_rels\.rels" because it tells +* us where in this folder structure the data for the workbook +* is located in the xlsx zip-archive +* +* The xlsx Zip-archive has generally the following folder structure: +* <root> | +* |--> _rels +* |--> doc_Props +* |--> xl | +* |--> _rels +* |--> theme +* |--> worksheets +*--------------------------------------------------------------------* + + " Read Workbook Relationships + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = ip_path + IMPORTING + stripped_name = lv_stripped_name + file_path = lv_dirname. + CONCATENATE lv_dirname '_rels/' lv_stripped_name '.rels' + INTO lv_rels_worksheet_path. + TRY. " +#222 _rels/xxx.rels might not be present. If not found there can be no drawings --> just ignore this section + lo_ixml_rels_worksheet = me->get_ixml_from_zip_archive( lv_rels_worksheet_path ). + lo_ixml_node ?= lo_ixml_rels_worksheet->find_from_name( 'Relationship' ). + CATCH zcx_excel. "#EC NO_HANDLER +#222 + " +#222 No errorhandling necessary - node will be unbound if error occurs + ENDTRY. " +#222 + WHILE lo_ixml_node IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_node + CHANGING + cp_structure = ls_relationship ). + CONCATENATE lv_dirname ls_relationship-target INTO lv_path. + lv_path = resolve_path( lv_path ). + + CASE ls_relationship-type. + WHEN lc_rel_drawing. + " Read Drawings + me->load_worksheet_drawing( ip_path = lv_path + io_worksheet = io_worksheet ). + + WHEN lc_rel_printer. + " Read Printer settings + + WHEN OTHERS. + ENDCASE. + + lo_ixml_node ?= lo_ixml_node->get_next( ). + ENDWHILE. + + + lo_ixml_worksheet = me->get_ixml_from_zip_archive( ip_path ). + + + lo_ixml_tabcolor ?= lo_ixml_worksheet->find_from_name( 'tabColor' ). + IF lo_ixml_tabcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_tabcolor + CHANGING + cp_structure = ls_tabcolor ). +* Theme not supported yet + IF ls_tabcolor-rgb IS NOT INITIAL. + ls_excel_s_tabcolor-rgb = ls_tabcolor-rgb. + io_worksheet->set_tabcolor( ls_excel_s_tabcolor ). + ENDIF. + ENDIF. + + lo_ixml_rows = lo_ixml_worksheet->get_elements_by_tag_name( name = 'row' ). + lo_ixml_iterator = lo_ixml_rows->create_iterator( ). + lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_row_elem IS BOUND. + + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_row_elem + CHANGING + cp_structure = ls_row ). + SPLIT ls_row-spans AT ':' INTO lv_min_col_s lv_max_col_s. + lv_index = lv_max_col_s. + IF lv_index > lv_max_col. + lv_max_col = lv_index. + ENDIF. + lv_cell_row = ls_row-r. + IF ls_row-customheight = '1' + OR ls_row-collapsed = lc_xml_attr_true + OR ls_row-collapsed = lc_xml_attr_true_int + OR ls_row-hidden = lc_xml_attr_true + OR ls_row-hidden = lc_xml_attr_true_int + OR ls_row-outlinelevel > '0'. + lo_row_dimension = io_worksheet->get_row_dimension( lv_cell_row ). + IF ls_row-customheight = '1'. + lo_row_dimension->set_row_height( ls_row-ht ). + ENDIF. + + IF ls_row-collapsed = lc_xml_attr_true + OR ls_row-collapsed = lc_xml_attr_true_int. + lo_row_dimension->set_collapsed( abap_true ). + ENDIF. + + IF ls_row-hidden = lc_xml_attr_true + OR ls_row-hidden = lc_xml_attr_true_int. + lo_row_dimension->set_visible( abap_false ). + ENDIF. + + IF ls_row-outlinelevel > ''. +* outline_level = condense( row-outlineLevel ). "For basis 7.02 and higher + CONDENSE ls_row-outlinelevel. + lv_outline_level = ls_row-outlinelevel. + IF lv_outline_level > 0. + lo_row_dimension->set_outline_level( lv_outline_level ). + ENDIF. + ENDIF. + ENDIF. + + lo_ixml_cells = lo_ixml_row_elem->get_elements_by_tag_name( name = 'c' ). + lo_ixml_iterator2 = lo_ixml_cells->create_iterator( ). + lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). + WHILE lo_ixml_cell_elem IS BOUND. + CLEAR: lv_cell_value, + lv_cell_formula, + lv_style_guid. + + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_cell_elem CHANGING cp_structure = ls_cell ). + + lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'v' ). + + CASE ls_cell-t. + WHEN 's'. " String values are stored as index in shared string table + lv_index = lo_ixml_value_elem->get_value( ) + 1. + READ TABLE shared_strings INTO lv_cell_value INDEX lv_index. + WHEN 'inlineStr'. " inlineStr values are kept in special node + lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'is' ). + IF lo_ixml_value_elem IS BOUND. + lv_cell_value = lo_ixml_value_elem->get_value( ). + ENDIF. + WHEN OTHERS. "other types are stored directly + IF lo_ixml_value_elem IS BOUND. + lv_cell_value = lo_ixml_value_elem->get_value( ). + ENDIF. + ENDCASE. + + CLEAR lv_style_guid. + "read style based on index + IF ls_cell-s IS NOT INITIAL. + lv_index = ls_cell-s + 1. + READ TABLE styles INTO lo_excel_style INDEX lv_index. + IF sy-subrc = 0. + lv_style_guid = lo_excel_style->get_guid( ). + ENDIF. + ENDIF. + + lo_ixml_formula_elem = lo_ixml_cell_elem->find_from_name( name = 'f' ). + IF lo_ixml_formula_elem IS BOUND. + lv_cell_formula = lo_ixml_formula_elem->get_value( ). +*--------------------------------------------------------------------* +* Begin of insertion issue#284 - Copied formulae not +*--------------------------------------------------------------------* + DATA: BEGIN OF ls_formula_attributes, + ref TYPE string, + si TYPE i, + t TYPE string, + END OF ls_formula_attributes, + ls_ref_formula TYPE ty_ref_formulae. + + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_formula_elem CHANGING cp_structure = ls_formula_attributes ). + IF ls_formula_attributes-t = 'shared'. + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_cell-r + IMPORTING + e_column = lv_cell_column + e_row = lv_cell_row ). + + TRY. + CLEAR ls_ref_formula. + ls_ref_formula-sheet = io_worksheet. + ls_ref_formula-row = lv_cell_row. + ls_ref_formula-column = zcl_excel_common=>convert_column2int( lv_cell_column ). + ls_ref_formula-si = ls_formula_attributes-si. + ls_ref_formula-ref = ls_formula_attributes-ref. + ls_ref_formula-formula = lv_cell_formula. + INSERT ls_ref_formula INTO TABLE me->mt_ref_formulae. + CATCH cx_root. + BREAK-POINT. + ENDTRY. + ENDIF. +*--------------------------------------------------------------------* +* End of insertion issue#284 - Copied formulae not +*--------------------------------------------------------------------* + ENDIF. + + IF lv_cell_value IS NOT INITIAL + OR lv_cell_formula IS NOT INITIAL + OR lv_style_guid IS NOT INITIAL. + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_cell-r + IMPORTING + e_column = lv_cell_column + e_row = lv_cell_row ). + io_worksheet->set_cell( ip_column = lv_cell_column " cell_elem Column + ip_row = lv_cell_row " cell_elem row_elem + ip_value = lv_cell_value " cell_elem Value + ip_formula = lv_cell_formula + ip_data_type = ls_cell-t + ip_style = lv_style_guid ). + ENDIF. + lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). + ENDWHILE. + lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + +*--------------------------------------------------------------------* +*#234 - column width not read correctly - begin of coding +* reason - libre office doesn't use SPAN in row - definitions +*--------------------------------------------------------------------* + IF lv_max_col = 0. + lo_ixml_imension_elem = lo_ixml_worksheet->find_from_name( name = 'dimension' ). + IF lo_ixml_imension_elem IS BOUND. + lv_dimension_range = lo_ixml_imension_elem->get_attribute( 'ref' ). + IF lv_dimension_range CS ':'. + REPLACE REGEX '\D+\d+:(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column + ELSE. + REPLACE REGEX '(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column + ENDIF. + lv_max_col = zcl_excel_common=>convert_column2int( lv_dimension_range ). + ENDIF. + ENDIF. +*--------------------------------------------------------------------* +*#234 - column width not read correctly - end of coding +*--------------------------------------------------------------------* + + "Get the customized column width + lo_ixml_columns = lo_ixml_worksheet->get_elements_by_tag_name( name = 'col' ). + lo_ixml_iterator = lo_ixml_columns->create_iterator( ). + lo_ixml_column_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_column_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_column_elem + CHANGING + cp_structure = ls_column ). + lo_ixml_column_elem ?= lo_ixml_iterator->get_next( ). + IF ls_column-customwidth = lc_xml_attr_true + OR ls_column-customwidth = lc_xml_attr_true_int + OR ls_column-bestfit = lc_xml_attr_true + OR ls_column-bestfit = lc_xml_attr_true_int + OR ls_column-collapsed = lc_xml_attr_true + OR ls_column-collapsed = lc_xml_attr_true_int + OR ls_column-hidden = lc_xml_attr_true + OR ls_column-hidden = lc_xml_attr_true_int + OR ls_column-outlinelevel > '' + OR ls_column-style > ''. + lv_index = ls_column-min. + WHILE lv_index <= ls_column-max AND lv_index <= lv_max_col. + + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_index ). + lo_column_dimension = io_worksheet->get_column_dimension( lv_column_alpha ). + + IF ls_column-customwidth = lc_xml_attr_true + OR ls_column-customwidth = lc_xml_attr_true_int + OR ls_column-width IS NOT INITIAL. "+#234 + lo_column_dimension->set_width( ls_column-width ). + ENDIF. + + IF ls_column-bestfit = lc_xml_attr_true + OR ls_column-bestfit = lc_xml_attr_true_int. + lo_column_dimension->set_auto_size( abap_true ). + ENDIF. + + IF ls_column-collapsed = lc_xml_attr_true + OR ls_column-collapsed = lc_xml_attr_true_int. + lo_column_dimension->set_collapsed( abap_true ). + ENDIF. + + IF ls_column-hidden = lc_xml_attr_true + OR ls_column-hidden = lc_xml_attr_true_int. + lo_column_dimension->set_visible( abap_false ). + ENDIF. + + IF ls_column-outlinelevel > ''. +* outline_level = condense( column-outlineLevel ). + CONDENSE ls_column-outlinelevel. + lv_outline_level = ls_column-outlinelevel. + IF lv_outline_level > 0. + lo_column_dimension->set_outline_level( lv_outline_level ). + ENDIF. + ENDIF. + + IF ls_column-style > ''. + sy-index = ls_column-style + 1. + READ TABLE styles INTO lo_excel_style INDEX sy-index. + DATA: dummy_zexcel_cell_style TYPE zexcel_cell_style. + dummy_zexcel_cell_style = lo_excel_style->get_guid( ). + lo_column_dimension->set_column_style_by_guid( dummy_zexcel_cell_style ). + ENDIF. + + ADD 1 TO lv_index. + ENDWHILE. + ENDIF. +* Fix 207 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 +* IF column-hidden = lc_xml_attr_true OR +* column-hidden = lc_xml_attr_true_int. +* index = column-min. +* WHILE index <= column-max. +* column_alpha = zcl_excel_common=>convert_column2alpha( index ). +* column_dimension = io_worksheet->get_column_dimension( column_alpha ). +* column_dimension->set_visible( abap_false ). +* ADD 1 TO index. +* ENDWHILE. +* ENDIF. + ENDWHILE. + + "Now we need to get information from the sheetView node + lo_ixml_sheetview_elem = lo_ixml_worksheet->find_from_name( name = 'sheetView' ). + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetview_elem CHANGING cp_structure = ls_sheetview ). + IF ls_sheetview-showgridlines IS INITIAL OR + ls_sheetview-showgridlines = lc_xml_attr_true OR + ls_sheetview-showgridlines = lc_xml_attr_true_int. + "If the attribute is not specified or set to true, we will show grid lines + ls_sheetview-showgridlines = abap_true. + ELSE. + ls_sheetview-showgridlines = abap_false. + ENDIF. + io_worksheet->set_show_gridlines( ls_sheetview-showgridlines ). + + + "Add merge cell information + lo_ixml_mergecells = lo_ixml_worksheet->get_elements_by_tag_name( name = 'mergeCell' ). + lo_ixml_iterator = lo_ixml_mergecells->create_iterator( ). + lo_ixml_mergecell_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_mergecell_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_mergecell_elem + CHANGING + cp_structure = ls_mergecell ). + zcl_excel_common=>convert_range2column_a_row( EXPORTING + i_range = ls_mergecell-ref + IMPORTING + e_column_start = lv_merge_column_start + e_column_end = lv_merge_column_end + e_row_start = lv_merge_row_start + e_row_end = lv_merge_row_end ). + lo_ixml_mergecell_elem ?= lo_ixml_iterator->get_next( ). + io_worksheet->set_merge( EXPORTING + ip_column_start = lv_merge_column_start + ip_column_end = lv_merge_column_end + ip_row = lv_merge_row_start + ip_row_to = lv_merge_row_end ). + ENDWHILE. + + " read sheet format properties + lo_ixml_sheetformatpr_elem = lo_ixml_worksheet->find_from_name( 'sheetFormatPr' ). + IF lo_ixml_sheetformatpr_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetformatpr_elem CHANGING cp_structure = ls_sheetformatpr ). + IF ls_sheetformatpr-customheight = '1'. + lv_height = ls_sheetformatpr-defaultrowheight. + lo_row_dimension = io_worksheet->get_default_row_dimension( ). + lo_row_dimension->set_row_height( lv_height ). + ENDIF. + + " TODO... column + ENDIF. + + " Read in page margins + lo_ixml_pagemargins_elem = lo_ixml_worksheet->find_from_name( 'pageMargins' ). + IF lo_ixml_pagemargins_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_pagemargins_elem + CHANGING + cp_structure = ls_pagemargins ). + io_worksheet->sheet_setup->margin_bottom = ls_pagemargins-bottom. + io_worksheet->sheet_setup->margin_footer = ls_pagemargins-footer. + io_worksheet->sheet_setup->margin_header = ls_pagemargins-header. + io_worksheet->sheet_setup->margin_left = ls_pagemargins-left. + io_worksheet->sheet_setup->margin_right = ls_pagemargins-right. + io_worksheet->sheet_setup->margin_top = ls_pagemargins-top. + ENDIF. + + " Read in page setup + lo_ixml_pagesetup_elem = lo_ixml_worksheet->find_from_name( 'pageSetup' ). + IF lo_ixml_pagesetup_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_pagesetup_elem + CHANGING + cp_structure = ls_pagesetup ). + io_worksheet->sheet_setup->orientation = ls_pagesetup-orientation. + io_worksheet->sheet_setup->scale = ls_pagesetup-scale. + ENDIF. + + " Read header footer + lo_ixml_headerfooter_elem = lo_ixml_worksheet->find_from_name( 'headerFooter' ). + IF lo_ixml_headerfooter_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_headerfooter_elem CHANGING cp_structure = ls_headerfooter ). + io_worksheet->sheet_setup->diff_oddeven_headerfooter = ls_headerfooter-differentoddeven. + + lo_ixml_hf_value_elem = lo_ixml_headerfooter_elem->find_from_name( 'oddFooter' ). + IF lo_ixml_hf_value_elem IS NOT INITIAL. + ls_odd_footer-left_value = lo_ixml_hf_value_elem->get_value( ). + ENDIF. + +* 2do§1 Header/footer + " TODO.. get the rest. + + io_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_odd_header + ip_odd_footer = ls_odd_footer + ip_even_header = ls_even_header + ip_even_footer = ls_even_footer ). + + ENDIF. + + " Start fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + " Read pane + lo_ixml_pane_elem = lo_ixml_sheetview_elem->find_from_name( name = 'pane' ). + IF lo_ixml_pane_elem IS BOUND. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_pane_elem CHANGING cp_structure = ls_excel_pane ). + " Issue #194 + " Replace REGEX with method from the common class + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_excel_pane-topleftcell + IMPORTING + e_column = lv_pane_cell_col_a " Cell Column + e_row = lv_pane_cell_row ). " Natural number + lv_pane_cell_col = zcl_excel_common=>convert_column2int( lv_pane_cell_col_a ). + SUBTRACT 1 FROM: lv_pane_cell_col, + lv_pane_cell_row. + IF lv_pane_cell_col > 0 + AND lv_pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row + ip_num_columns = lv_pane_cell_col ). + ELSEIF lv_pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row ). + ELSE. + io_worksheet->freeze_panes( ip_num_columns = lv_pane_cell_col ). + ENDIF. + ENDIF. + " End fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + + " Start fix 276 Read data validations + lo_ixml_datavalidations = lo_ixml_worksheet->get_elements_by_tag_name( name = 'dataValidation' ). + lo_ixml_iterator = lo_ixml_datavalidations->create_iterator( ). + lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_datavalidation_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_datavalidation_elem + CHANGING + cp_structure = ls_datavalidation ). + clear lo_ixml_formula_elem. + lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula1' ). + if lo_ixml_formula_elem is bound. + ls_datavalidation-formula1 = lo_ixml_formula_elem->get_value( ). + endif. + clear lo_ixml_formula_elem. + lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula2' ). + if lo_ixml_formula_elem is bound. + ls_datavalidation-formula2 = lo_ixml_formula_elem->get_value( ). + endif. + SPLIT ls_datavalidation-sqref AT space INTO TABLE lt_datavalidation_range. + LOOP AT lt_datavalidation_range INTO lv_datavalidation_range. + zcl_excel_common=>convert_range2column_a_row( EXPORTING + i_range = lv_datavalidation_range + IMPORTING + e_column_start = ls_datavalidation-cell_column + e_column_end = ls_datavalidation-cell_column_to + e_row_start = ls_datavalidation-cell_row + e_row_end = ls_datavalidation-cell_row_to ). + lo_data_validation = io_worksheet->add_new_data_validation( ). + lo_data_validation->type = ls_datavalidation-type. + lo_data_validation->allowblank = ls_datavalidation-allowblank. + lo_data_validation->showinputmessage = ls_datavalidation-showinputmessage. + lo_data_validation->showerrormessage = ls_datavalidation-showerrormessage. + lo_data_validation->showdropdown = ls_datavalidation-showdropdown. + lo_data_validation->operator = ls_datavalidation-operator. + lo_data_validation->formula1 = ls_datavalidation-formula1. + lo_data_validation->formula2 = ls_datavalidation-formula2. + lo_data_validation->prompttitle = ls_datavalidation-prompttitle. + lo_data_validation->prompt = ls_datavalidation-prompt. + lo_data_validation->errortitle = ls_datavalidation-errortitle. + lo_data_validation->error = ls_datavalidation-error. + lo_data_validation->errorstyle = ls_datavalidation-errorstyle. + lo_data_validation->cell_row = ls_datavalidation-cell_row. + lo_data_validation->cell_row_to = ls_datavalidation-cell_row_to. + lo_data_validation->cell_column = ls_datavalidation-cell_column. + lo_data_validation->cell_column_to = ls_datavalidation-cell_column_to. + endloop. + lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + " End fix 276 Read data validations + + endmethod. + + + + + + method LOAD_WORKSHEET_DRAWING. + + TYPES: BEGIN OF t_c_nv_pr, + name TYPE string, + id TYPE string, + END OF t_c_nv_pr. + + TYPES: BEGIN OF t_blip, + cstate TYPE string, + embed TYPE string, + END OF t_blip. + + TYPES: BEGIN OF t_chart, + id TYPE string, + END OF t_chart. + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1'. + CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. + + DATA: drawing TYPE REF TO if_ixml_document, + anchors TYPE REF TO if_ixml_node_collection, + node TYPE REF TO if_ixml_element, + coll_length TYPE i, + iterator TYPE REF TO if_ixml_node_iterator, + anchor_elem TYPE REF TO if_ixml_element, + + relationship TYPE t_relationship, + rel_drawings TYPE t_rel_drawings, + rel_drawing TYPE t_rel_drawing, + rels_drawing TYPE REF TO if_ixml_document, + rels_drawing_path TYPE string, + stripped_name TYPE chkfile, + dirname TYPE string, + + path TYPE string, + path2 TYPE text255, + file_ext2 TYPE char10. + + " Read Workbook Relationships + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = ip_path + IMPORTING + stripped_name = stripped_name + file_path = dirname. + CONCATENATE dirname '_rels/' stripped_name '.rels' + INTO rels_drawing_path. + rels_drawing_path = resolve_path( rels_drawing_path ). + rels_drawing = me->get_ixml_from_zip_archive( rels_drawing_path ). + node ?= rels_drawing->find_from_name( 'Relationship' ). + WHILE node IS BOUND. + fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). + + rel_drawing-id = relationship-id. + + CONCATENATE dirname relationship-target INTO path. + path = resolve_path( path ). + rel_drawing-content = me->get_from_zip_archive( path ). "------------> This is for template usage + + path2 = path. + zcl_excel_common=>split_file( EXPORTING ip_file = path2 + IMPORTING ep_extension = file_ext2 ). + rel_drawing-file_ext = file_ext2. + + "-------------Added by Alessandro Iannacci - Should load graph xml + CASE relationship-type. + WHEN lc_rel_chart. + "Read chart xml + rel_drawing-content_xml = me->get_ixml_from_zip_archive( path ). + WHEN OTHERS. + ENDCASE. + "---------------------------- + + + APPEND rel_drawing TO rel_drawings. + + node ?= node->get_next( ). + ENDWHILE. + + drawing = me->get_ixml_from_zip_archive( ip_path ). + +* one-cell anchor ************** + anchors = drawing->get_elements_by_tag_name( name = 'oneCellAnchor' namespace = 'xdr' ). + coll_length = anchors->get_length( ). + iterator = anchors->create_iterator( ). + DO coll_length TIMES. + anchor_elem ?= iterator->get_next( ). + + CALL METHOD me->load_drawing_anchor + EXPORTING + io_anchor_element = anchor_elem + io_worksheet = io_worksheet + it_related_drawings = rel_drawings. + + ENDDO. + +* two-cell anchor ****************** + anchors = drawing->get_elements_by_tag_name( name = 'twoCellAnchor' namespace = 'xdr' ). + coll_length = anchors->get_length( ). + iterator = anchors->create_iterator( ). + DO coll_length TIMES. + anchor_elem ?= iterator->get_next( ). + + CALL METHOD me->load_drawing_anchor + EXPORTING + io_anchor_element = anchor_elem + io_worksheet = io_worksheet + it_related_drawings = rel_drawings. + + ENDDO. + + endmethod. + + + + + METHOD read_from_applserver. + + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_max_length_line TYPE i, + lv_actual_length_line TYPE i, + lv_errormessage TYPE string. + + MOVE i_filename TO lv_filename. + + DESCRIBE FIELD ls_binary_data LENGTH lv_max_length_line IN BYTE MODE. + OPEN DATASET lv_filename FOR INPUT IN BINARY MODE. + IF sy-subrc <> 0. + lv_errormessage = 'A problem occured when reading the file'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + WHILE sy-subrc = 0. + + READ DATASET lv_filename INTO ls_binary_data MAXIMUM LENGTH lv_max_length_line ACTUAL LENGTH lv_actual_length_line. + APPEND ls_binary_data TO lt_binary_data. + lv_filelength = lv_filelength + lv_actual_length_line. + + ENDWHILE. + CLOSE DATASET lv_filename. + +*--------------------------------------------------------------------* +* Binary data needs to be provided as XSTRING for further processing +*--------------------------------------------------------------------* + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filelength + IMPORTING + buffer = r_excel_data + TABLES + binary_tab = lt_binary_data. + ENDMETHOD. + + + + + METHOD read_from_local_file. + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_errormessage TYPE string. + + MOVE i_filename TO lv_filename. + + cl_gui_frontend_services=>gui_upload( EXPORTING + filename = lv_filename + filetype = 'BIN' " We are basically working with zipped directories --> force binary read + IMPORTING + filelength = lv_filelength + CHANGING + data_tab = lt_binary_data + 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 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19 ). + IF sy-subrc <> 0. + lv_errormessage = 'A problem occured when reading the file'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* Binary data needs to be provided as XSTRING for further processing +*--------------------------------------------------------------------* + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filelength + IMPORTING + buffer = r_excel_data + TABLES + binary_tab = lt_binary_data. + + ENDMETHOD. + + + + + method RESOLVE_PATH. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Determine whether the replacement should be done +* iterative to allow /../../.. or something alike +* 2do§2 Determine whether /./ has to be supported as well +* 2do§3 Create unit-test for this method +* +* Please don't just delete these ToDos if they are not +* needed but leave a comment that states this +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-11 +* - ... +* changes: replaced previous coding by regular expression +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* §1 This routine will receive a path, that may have a relative pathname (/../) included somewhere +* The output should be a resolved path without relative references +* Example: Input xl/worksheets/../drawings/drawing1.xml +* Output xl/drawings/drawing1.xml +*--------------------------------------------------------------------* + + rp_result = ip_path. +*--------------------------------------------------------------------* +* §1 Remove relative pathnames +*--------------------------------------------------------------------* +* Regular expression [^/]*/\.\./ +* [^/]* --> any number of characters other than / +* followed by /\.\./ --> the sequence /../ +* ==> worksheets/../ will be found in the example +*--------------------------------------------------------------------* + REPLACE REGEX '[^/]*/\.\./' IN rp_result WITH ``. + + + endmethod. + + + method RESOLVE_REFERENCED_FORMULAE. + TYPES: BEGIN OF ty_referenced_cells, + sheet TYPE REF TO zcl_excel_worksheet, + si TYPE i, + row_from TYPE i, + row_to TYPE i, + col_from TYPE i, + col_to TYPE i, + formula TYPE string, + ref_cell TYPE char10, + END OF ty_referenced_cells. + + DATA: ls_ref_formula LIKE LINE OF me->mt_ref_formulae, + lts_referenced_cells TYPE SORTED TABLE OF ty_referenced_cells WITH NON-UNIQUE KEY sheet si row_from row_to col_from col_to, + ls_referenced_cell LIKE LINE OF lts_referenced_cells, + lv_col_from TYPE zexcel_cell_column_alpha, + lv_col_to TYPE zexcel_cell_column_alpha, + lv_resulting_formula TYPE string, + lv_current_cell TYPE char10. + + + me->mt_ref_formulae = me->mt_ref_formulae. + +*--------------------------------------------------------------------* +* Get referenced Cells, Build ranges for easy lookup +*--------------------------------------------------------------------* + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref <> space. + + CLEAR ls_referenced_cell. + ls_referenced_cell-sheet = ls_ref_formula-sheet. + ls_referenced_cell-si = ls_ref_formula-si. + ls_referenced_cell-formula = ls_ref_formula-formula. + + TRY. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = ls_ref_formula-ref + IMPORTING e_column_start = lv_col_from + e_column_end = lv_col_to + e_row_start = ls_referenced_cell-row_from + e_row_end = ls_referenced_cell-row_to ). + ls_referenced_cell-col_from = zcl_excel_common=>convert_column2int( lv_col_from ). + ls_referenced_cell-col_to = zcl_excel_common=>convert_column2int( lv_col_to ). + + + CLEAR ls_referenced_cell-ref_cell. + TRY. + ls_referenced_cell-ref_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). + ls_referenced_cell-ref_cell+3 = ls_ref_formula-row. + CONDENSE ls_referenced_cell-ref_cell NO-GAPS. + CATCH zcx_excel. + ENDTRY. + + INSERT ls_referenced_cell INTO TABLE lts_referenced_cells. + CATCH zcx_excel. + ENDTRY. + + ENDLOOP. + +* break x0009004. +*--------------------------------------------------------------------* +* For each referencing cell determine the referenced cell +* and resolve the formula +*--------------------------------------------------------------------* + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref = space. + + + CLEAR lv_current_cell. + TRY. + lv_current_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). + lv_current_cell+3 = ls_ref_formula-row. + CONDENSE lv_current_cell NO-GAPS. + CATCH zcx_excel. + ENDTRY. + + LOOP AT lts_referenced_cells INTO ls_referenced_cell WHERE sheet = ls_ref_formula-sheet + AND si = ls_ref_formula-si + AND row_from <= ls_ref_formula-row + AND row_to >= ls_ref_formula-row + AND col_from <= ls_ref_formula-column + AND col_to >= ls_ref_formula-column. + + TRY. + + lv_resulting_formula = zcl_excel_common=>determine_resulting_formula( iv_reference_cell = ls_referenced_cell-ref_cell + iv_reference_formula = ls_referenced_cell-formula + iv_current_cell = lv_current_cell ). + + ls_referenced_cell-sheet->set_cell_formula( ip_column = ls_ref_formula-column + ip_row = ls_ref_formula-row + ip_formula = lv_resulting_formula ). + CATCH zcx_excel. + ENDTRY. + EXIT. + + ENDLOOP. + + ENDLOOP. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + METHOD load_vbaproject. + + DATA lv_content TYPE xstring. + + lv_content = me->get_from_zip_archive( ip_path ). + + ip_excel->zif_excel_book_vba_project~set_vbaproject( lv_content ). + + ENDMETHOD. + + + method LOAD_WORKBOOK. + super->load_workbook( EXPORTING iv_workbook_full_filename = iv_workbook_full_filename + io_excel = io_excel ). + + CONSTANTS: lc_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject'. + + DATA: rels_workbook_path TYPE string, + rels_workbook TYPE REF TO if_ixml_document, + path TYPE string, + node TYPE REF TO if_ixml_element, + workbook TYPE REF TO if_ixml_document, + stripped_name TYPE chkfile, + dirname TYPE string, + relationship TYPE t_relationship, + fileversion TYPE t_fileversion, + workbookpr TYPE t_workbookpr. + + FIELD-SYMBOLS: <worksheet> TYPE t_relationship. + + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = iv_workbook_full_filename + IMPORTING + stripped_name = stripped_name + file_path = dirname. + + " Read Workbook Relationships + CONCATENATE dirname '_rels/' stripped_name '.rels' + INTO rels_workbook_path. + + rels_workbook = me->get_ixml_from_zip_archive( rels_workbook_path ). + + node ?= rels_workbook->find_from_name( 'Relationship' ). + WHILE node IS BOUND. + me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). + + CASE relationship-type. + WHEN lc_vba_project. + " Read VBA binary + CONCATENATE dirname relationship-target INTO path. + me->load_vbaproject( ip_path = path + ip_excel = io_excel ). + WHEN OTHERS. + ENDCASE. + + node ?= node->get_next( ). + ENDWHILE. + + " Read Workbook codeName + workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + node ?= workbook->find_from_name( 'fileVersion' ). + IF node IS BOUND. + + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = fileversion ). + + io_excel->zif_excel_book_vba_project~set_codename( fileversion-codename ). + ENDIF. + + " Read Workbook codeName + workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + node ?= workbook->find_from_name( 'workbookPr' ). + IF node IS BOUND. + + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = workbookpr ). + + io_excel->zif_excel_book_vba_project~set_codename_pr( workbookpr-codename ). + ENDIF. + + endmethod. + + + method LOAD_WORKSHEET. + + super->load_worksheet( EXPORTING ip_path = ip_path + io_worksheet = io_worksheet ). + + DATA: path TYPE string, + node TYPE REF TO if_ixml_element, + worksheet TYPE REF TO if_ixml_document, + sheetpr TYPE t_sheetpr. + + +* " Read Workbook codeName +* workbook = me->get_ixml_from_zip_archive( ip_path ). +* node ?= workbook->find_from_name( 'fileVersion' ). +* IF node IS BOUND. +* +* fill_struct_from_attributes( EXPORTING ip_element = node +* CHANGING cp_structure = fileversion ). +* +* IO_WORKSHEET->zif_excel_book_vba_project~set_codename( fileversion-codename ). +* ENDIF. + + " Read Workbook codeName + worksheet = me->get_ixml_from_zip_archive( ip_path ). + node ?= worksheet->find_from_name( 'sheetPr' ). + IF node IS BOUND. + + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = sheetpr ). + + io_worksheet->zif_excel_sheet_vba_project~set_codename_pr( sheetpr-codename ). + ENDIF. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + METHOD is_security_enabled. + IF lockrevision EQ abap_true OR lockstructure EQ abap_true OR lockwindows EQ abap_true. + ep_security_enabled = abap_true. + ENDIF. +ENDMETHOD. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + orientation = me->c_orientation_default. + +* default margins + margin_bottom = '0.75'. + margin_footer = '0.3'. + margin_header = '0.3'. + margin_left = '0.7'. + margin_right = '0.7'. + margin_top = '0.75'. + +* clear page settings + CLEAR: black_and_white, + cell_comments, + copies, + draft, + errors, + first_page_number, + fit_to_page, + fit_to_height, + fit_to_width, + horizontal_dpi, + orientation, + page_order, + paper_height, + paper_size, + paper_width, + scale, + use_first_page_num, + use_printer_defaults, + vertical_dpi. + endmethod. + + + + + + + method GET_HEADER_FOOTER_STRING. +* ---------------------------------------------------------------------- + DATA: lc_marker_left(2) TYPE c VALUE '&L' + , lc_marker_right(2) TYPE c VALUE '&R' + , lc_marker_center(2) TYPE c VALUE '&C' + , lv_value TYPE string + . +* ---------------------------------------------------------------------- + IF ep_odd_header IS SUPPLIED. + + IF me->odd_header-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_odd_header. + ENDIF. + + IF me->odd_header-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'CENTER' ). + CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_header. + ENDIF. + + IF me->odd_header-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'RIGHT' ). + CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_header. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + IF ep_odd_footer IS SUPPLIED. + + IF me->odd_footer-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_odd_footer. + ENDIF. + + IF me->odd_footer-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'CENTER' ). + CONCATENATE ep_odd_footer lc_marker_center lv_value INTO ep_odd_footer. + ENDIF. + + IF me->odd_footer-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'RIGHT' ). + CONCATENATE ep_odd_footer lc_marker_right lv_value INTO ep_odd_footer. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + IF ep_even_header IS SUPPLIED. + + IF me->even_header-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_even_header. + ENDIF. + + IF me->even_header-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'CENTER' ). + CONCATENATE ep_even_header lc_marker_center lv_value INTO ep_even_header. + ENDIF. + + IF me->even_header-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'RIGHT' ). + CONCATENATE ep_even_header lc_marker_right lv_value INTO ep_even_header. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + IF ep_even_footer IS SUPPLIED. + + IF me->even_footer-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_even_footer. + ENDIF. + + IF me->even_footer-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'CENTER' ). + CONCATENATE ep_even_footer lc_marker_center lv_value INTO ep_even_footer. + ENDIF. + + IF me->even_footer-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'RIGHT' ). + CONCATENATE ep_even_footer lc_marker_right lv_value INTO ep_even_footer. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + endmethod. + + + + + + method PROCESS_HEADER_FOOTER. + +* ---------------------------------------------------------------------- +* Only Basic font/text formatting possible: +* Bold (yes / no), Font Type, Font Size + + DATA: lv_fname(12) TYPE c + , lv_string TYPE string + . + + FIELD-SYMBOLS: <lv_value> TYPE string + , <ls_font> TYPE zexcel_s_style_font + . + +* ---------------------------------------------------------------------- + CONCATENATE ip_side '_VALUE' INTO lv_fname. + ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO <lv_value>. + + CONCATENATE ip_side '_FONT' INTO lv_fname. + ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO <ls_font>. + + IF <ls_font> IS ASSIGNED AND <lv_value> IS ASSIGNED. + + IF <ls_font>-name IS NOT INITIAL. + CONCATENATE '&"' <ls_font>-name ',' INTO rv_processed_string. + ELSE. + rv_processed_string = '&"-,'. + ENDIF. + + IF <ls_font>-bold = abap_true. + CONCATENATE rv_processed_string 'Bold"' INTO rv_processed_string. + ELSE. + CONCATENATE rv_processed_string 'Standard"' INTO rv_processed_string. + ENDIF. + + IF <ls_font>-size IS NOT INITIAL. + lv_string = <ls_font>-size. + CONCATENATE rv_processed_string '&' lv_string INTO rv_processed_string. + ENDIF. + + CONCATENATE rv_processed_string <lv_value> INTO rv_processed_string. + + ENDIF. +* ---------------------------------------------------------------------- + + endmethod. + + + + + + + method SET_HEADER_FOOTER. + +* Only Basic font/text formatting possible: +* Bold (yes / no), Font Type, Font Size +* +* usefull placeholders, which can be used in header/footer value strings +* '&P' - page number +* '&N' - total number of pages +* '&D' - Date +* '&T' - Time +* '&F' - File Name +* '&Z' - Path +* '&A' - Sheet name +* new line via class constant CL_ABAP_CHAR_UTILITIES=>newline +* +* Example Value String 'page &P of &N' +* +* DO NOT USE &L , &C or &R which automatically created as position markers + + me->odd_header = ip_odd_header. + me->odd_footer = ip_odd_footer. + me->even_header = ip_even_header. + me->even_footer = ip_even_footer. + + IF me->even_header IS NOT INITIAL OR me->even_footer IS NOT INITIAL. + me->diff_oddeven_headerfooter = abap_true. + ENDIF. + + + endmethod. + + + + + + + + + + method SET_PAGE_MARGINS. + DATA: lv_coef TYPE f, + lv_unit TYPE string. + + lv_unit = ip_unit. + TRANSLATE lv_unit TO UPPER CASE. + + CASE lv_unit. + WHEN 'IN'. lv_coef = 1. + WHEN 'CM'. lv_coef = '0.393700787'. + WHEN 'MM'. lv_coef = '0.0393700787'. + ENDCASE. + + IF ip_bottom IS SUPPLIED. margin_bottom = lv_coef * ip_bottom. ENDIF. + IF ip_footer IS SUPPLIED. margin_footer = lv_coef * ip_footer. ENDIF. + IF ip_header IS SUPPLIED. margin_header = lv_coef * ip_header. ENDIF. + IF ip_left IS SUPPLIED. margin_left = lv_coef * ip_left. ENDIF. + IF ip_right IS SUPPLIED. margin_right = lv_coef * ip_right. ENDIF. + IF ip_top IS SUPPLIED. margin_top = lv_coef * ip_top. ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + method CONSTRUCTOR. + + + CREATE OBJECT font. + CREATE OBJECT fill. + CREATE OBJECT borders. + CREATE OBJECT alignment. + CREATE OBJECT number_format. + CREATE OBJECT protection. + +* Start of insertion # issue 139 - Dateretention of cellstyles + IF ip_guid IS NOT INITIAL. + me->guid = ip_guid. + ELSE. +* End of insertion # issue 139 - Dateretention of cellstyles + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = me->guid. +* Start of insertion # issue 139 - Dateretention of cellstyles + ENDIF. +* End of insertion # issue 139 - Dateretention of cellstyles + + endmethod. + + + + method GET_GUID. + + + ep_guid = me->guid. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + method ADD. + + + styles->add( ip_style ). + endmethod. + + + method CLEAR. + + + styles->clear( ). + endmethod. + + + method CONSTRUCTOR. + + + CREATE OBJECT styles. + endmethod. + + + + + method GET. + + + eo_style ?= styles->if_object_collection~get( ip_index ). + endmethod. + + + + method GET_ITERATOR. + + + eo_iterator ?= styles->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + + + is_empty = styles->if_object_collection~is_empty( ). + endmethod. + + + + + method REGISTER_NEW_STYLE. + + + me->add( io_style ). + ep_style_code = me->size( ) - 1. "style count starts from 0 + endmethod. + + + + method REMOVE. + + + styles->remove( ip_style ). + endmethod. + + + + method SIZE. + + + ep_size = styles->if_object_collection~size( ). + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + method ADD. + styles_conditional->add( ip_style_conditional ). + endmethod. + + + method CLEAR. + styles_conditional->clear( ). + endmethod. + + + method CONSTRUCTOR. + + CREATE OBJECT styles_conditional. + + endmethod. + + + + + method GET. + DATA lv_index TYPE i. + lv_index = ip_index. + eo_style_conditional ?= styles_conditional->if_object_collection~get( lv_index ). + endmethod. + + + + method GET_ITERATOR. + eo_iterator ?= styles_conditional->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + is_empty = styles_conditional->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + styles_conditional->remove( ip_style_conditional ). + endmethod. + + + + method SIZE. + ep_size = styles_conditional->if_object_collection~size( ). + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + horizontal = me->c_horizontal_general. + vertical = me->c_vertical_bottom. + wrapText = abap_false. + shrinkToFit = abap_false. + endmethod. + + + + method GET_STRUCTURE. + + es_alignment-horizontal = me->horizontal. + es_alignment-vertical = me->vertical. + es_alignment-textrotation = me->textrotation. + es_alignment-wraptext = me->wraptext. + es_alignment-shrinktofit = me->shrinktofit. + es_alignment-indent = me->indent. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + border_style = zcl_excel_style_border=>c_border_none. + border_color-theme = zcl_excel_style_color=>c_theme_not_set. + border_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + method GET_STRUCTURE. +*initialize colors to 'not set' + es_fill-left_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-left_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-right_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-right_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-top_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-top_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-bottom_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-bottom_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-diagonal_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-diagonal_color-theme = zcl_excel_style_color=>c_theme_not_set. + +* Check if all borders is set otherwise check single border + IF me->allborders IS BOUND. + es_fill-left_color = me->allborders->border_color. + es_fill-left_style = me->allborders->border_style. + es_fill-right_color = me->allborders->border_color. + es_fill-right_style = me->allborders->border_style. + es_fill-top_color = me->allborders->border_color. + es_fill-top_style = me->allborders->border_style. + es_fill-bottom_color = me->allborders->border_color. + es_fill-bottom_style = me->allborders->border_style. + ELSE. + IF me->left IS BOUND. + es_fill-left_color = me->left->border_color. + es_fill-left_style = me->left->border_style. + ENDIF. + IF me->right IS BOUND. + es_fill-right_color = me->right->border_color. + es_fill-right_style = me->right->border_style. + ENDIF. + IF me->top IS BOUND. + es_fill-top_color = me->top->border_color. + es_fill-top_style = me->top->border_style. + ENDIF. + IF me->down IS BOUND. + es_fill-bottom_color = me->down->border_color. + es_fill-bottom_style = me->down->border_style. + ENDIF. + ENDIF. + +* Check if diagonal is set + IF me->diagonal IS BOUND. + es_fill-diagonal_color = me->diagonal->border_color. + es_fill-diagonal_style = me->diagonal->border_style. + CASE me->diagonal_mode. + WHEN 1. + es_fill-diagonalup = 1. + es_fill-diagonaldown = 0. + WHEN 2. + es_fill-diagonalup = 0. + es_fill-diagonaldown = 1. + WHEN 3. + es_fill-diagonalup = 1. + es_fill-diagonaldown = 1. + WHEN OTHERS. + es_fill-diagonalup = 0. + es_fill-diagonaldown = 0. + ENDCASE. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CREATE_NEW_ARGB. + + + CONCATENATE zcl_excel_style_color=>c_alpha ip_red ip_green ip_blu INTO ep_color_argb. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + + DATA: ls_iconset TYPE zexcel_conditional_iconset. + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights. + ls_iconset-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo1_value = '0'. + ls_iconset-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo2_value = '20'. + ls_iconset-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo3_value = '40'. + ls_iconset-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo4_value = '60'. + ls_iconset-cfvo5_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo5_value = '80'. + + + me->rule = zcl_excel_style_conditional=>c_rule_none. +* me->iconset->operator = zcl_excel_style_conditional=>c_operator_none. + me->mode_iconset = ls_iconset. + me->priority = 1. + +* inizialize dimension range + me->stop_cell-cell_row = 1. + me->stop_cell-cell_column = 1. + me->start_cell-cell_row = 1. + me->start_cell-cell_column = 1. + endmethod. + + + + method GET_DIMENSION_RANGE. + IF stop_cell EQ start_cell. "only one cell + ep_dimension_range = start_cell-cell_coords. + ELSE. + CONCATENATE start_cell-cell_coords ':' stop_cell-cell_coords INTO ep_dimension_range. + ENDIF. + endmethod. + + + + + + + method SET_RANGE. + DATA: lv_column TYPE zexcel_cell_column, + lv_row_alpha TYPE string. + + lv_column = zcl_excel_common=>convert_column2int( ip_stop_column ). + stop_cell-cell_row = 1. + stop_cell-cell_column = lv_column. + lv_row_alpha = ip_stop_row. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_stop_column lv_row_alpha INTO stop_cell-cell_coords. + + lv_column = zcl_excel_common=>convert_column2int( ip_start_column ). + start_cell-cell_row = 1. + start_cell-cell_column = lv_column. + lv_row_alpha = ip_start_row. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_start_column lv_row_alpha INTO start_cell-cell_coords. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + filltype = zcl_excel_style_fill=>c_fill_none. + fgcolor-theme = zcl_excel_style_color=>c_theme_not_set. + fgcolor-indexed = zcl_excel_style_color=>c_indexed_not_set. + bgcolor-theme = zcl_excel_style_color=>c_theme_not_set. + bgcolor-indexed = zcl_excel_style_color=>c_indexed_sys_foreground. + rotation = 0. + endmethod. + + + + method GET_STRUCTURE. + es_fill-rotation = me->rotation. + es_fill-filltype = me->filltype. + es_fill-fgColor = me->fgColor. + es_fill-bgColor = me->bgColor. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CALCULATE_TEXT_WIDTH. + " Addition to solve issue #120, contribution by Stefan Schmöcker + r_width = strlen( i_text ). + " use scale factor based on default 11 + " ( don't know where defaultsetting is stored currently ) + r_width = r_width * me->size / 11. + endmethod. + + + method CONSTRUCTOR. + me->color-rgb = zcl_excel_style_color=>c_black. + me->color-theme = zcl_excel_style_color=>c_theme_not_set. + me->color-indexed = zcl_excel_style_color=>c_indexed_not_set. + me->scheme = zcl_excel_style_font=>c_scheme_minor. + me->underline_mode = zcl_excel_style_font=>c_underline_single. + endmethod. + + + + method GET_STRUCTURE. + + es_font-bold = me->bold. + es_font-italic = me->italic. + es_font-underline = me->underline. + es_font-underline_mode = me->underline_mode. + es_font-strikethrough = me->strikethrough. + es_font-size = me->size. + es_font-color = me->color. + es_font-name = me->name. + es_font-family = me->family. + es_font-scheme = me->scheme. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + format_code = me->c_format_general. + endmethod. + + + + method GET_STRUCTURE. + ep_number_format-numfmt = me->format_code. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + method CONSTRUCTOR. + locked = me->c_protection_locked. + hidden = me->c_protection_unhidden. + endmethod. + + + + method GET_STRUCTURE. + ep_protection-locked = me->locked. + ep_protection-hidden = me->hidden. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method GET_BOTTOM_ROW_INTEGER. + DATA: lv_table_lines TYPE i. + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + + IF settings-bottom_right_row IS NOT INITIAL. +* ev_row = zcl_excel_common=>convert_column2int( settings-bottom_right_row ). " del issue #246 + ev_row = settings-bottom_right_row . " ins issue #246 + EXIT. + ENDIF. + + ASSIGN table_data->* TO <fs_table>. + DESCRIBE TABLE <fs_table> LINES lv_table_lines. + IF lv_table_lines = 0. + lv_table_lines = 1. "table needs at least 1 data row + ENDIF. + + ev_row = settings-top_left_row + lv_table_lines. + + IF me->has_totals( ) = abap_true." ???? AND ip_include_totals_row = abap_true. + ADD 1 TO ev_row. + ENDIF. + endmethod. + + + + method GET_ID. + ov_id = id. + endmethod. + + + + method GET_NAME. + + IF me->name IS INITIAL. + me->name = zcl_excel_common=>number_to_excel_string( ip_value = me->id ). + CONCATENATE 'table' me->name INTO me->name. + ENDIF. + + ov_name = me->name. + endmethod. + + + + + method GET_REFERENCE. + DATA: lv_column TYPE zexcel_cell_column, + lv_table_lines TYPE i, + lv_right_column TYPE zexcel_cell_column_alpha, + ls_field_catalog TYPE zexcel_s_fieldcatalog, + lv_bottom_row TYPE zexcel_cell_row, + lv_top_row_string(10) TYPE c, + lv_bottom_row_string(10) TYPE c. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + +*column + lv_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). + lv_table_lines = 0. + LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. + ADD 1 TO lv_table_lines. + ENDLOOP. + lv_column = lv_column + lv_table_lines - 1. + lv_right_column = zcl_excel_common=>convert_column2alpha( lv_column ). + +*row + ASSIGN table_data->* TO <fs_table>. + DESCRIBE TABLE <fs_table> LINES lv_table_lines. + IF lv_table_lines = 0. + lv_table_lines = 1. "table needs at least 1 data row + ENDIF. + lv_bottom_row = settings-top_left_row + lv_table_lines . + + IF me->has_totals( ) = abap_true AND ip_include_totals_row = abap_true. + ADD 1 TO lv_bottom_row. + ENDIF. + + lv_top_row_string = zcl_excel_common=>number_to_excel_string( settings-top_left_row ). + lv_bottom_row_string = zcl_excel_common=>number_to_excel_string( lv_bottom_row ). + + CONCATENATE settings-top_left_column lv_top_row_string + ':' + lv_right_column lv_bottom_row_string INTO ov_reference. + + endmethod. + + + + + method GET_RIGHT_COLUMN_INTEGER. + DATA: lv_column TYPE zexcel_cell_column, + lv_table_lines TYPE i, + ls_field_catalog TYPE zexcel_s_fieldcatalog. + + IF settings-bottom_right_column IS NOT INITIAL. + ev_column = zcl_excel_common=>convert_column2int( settings-bottom_right_column ). + EXIT. + ENDIF. + + ev_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). + LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. + ADD 1 TO ev_column. + ENDLOOP. + + endmethod. + + + + + + method GET_TOTALS_FORMULA. + CONSTANTS: lc_function_id_sum TYPE string VALUE '109', + lc_function_id_min TYPE string VALUE '105', + lc_function_id_max TYPE string VALUE '104', + lc_function_id_count TYPE string VALUE '103', + lc_function_id_average TYPE string VALUE '101'. + + DATA: lv_function_id TYPE string. + + CASE ip_function. + WHEN zcl_excel_table=>totals_function_sum. + lv_function_id = lc_function_id_sum. + + WHEN zcl_excel_table=>totals_function_min. + lv_function_id = lc_function_id_min. + + WHEN zcl_excel_table=>totals_function_max. + lv_function_id = lc_function_id_max. + + WHEN zcl_excel_table=>totals_function_count. + lv_function_id = lc_function_id_count. + + WHEN zcl_excel_table=>totals_function_average. + lv_function_id = lc_function_id_average. + + WHEN zcl_excel_table=>totals_function_custom. " issue #292 + RETURN. + + WHEN OTHERS. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid totals formula. See ZCL_ for possible values'. + ENDCASE. + + CONCATENATE 'SUBTOTAL(' lv_function_id ',[' ip_column '])' INTO ep_formula. + endmethod. + + + + method HAS_TOTALS. + DATA: ls_field_catalog TYPE zexcel_s_fieldcatalog. + + ep_result = abap_false. + + LOOP AT fieldcat INTO ls_field_catalog. + IF ls_field_catalog-totals_function IS NOT INITIAL. + ep_result = abap_true. + EXIT. + ENDIF. + ENDLOOP. + + endmethod. + + + + METHOD set_data. + + DATA lr_temp TYPE REF TO data. + + FIELD-SYMBOLS: <lt_table_temp> TYPE ANY TABLE, + <lt_table> TYPE ANY TABLE. + + GET REFERENCE OF ir_data INTO lr_temp. + ASSIGN lr_temp->* TO <lt_table_temp>. + CREATE DATA table_data LIKE <lt_table_temp>. + ASSIGN me->table_data->* TO <lt_table>. + <lt_table> = <lt_table_temp>. + +ENDMETHOD. + + + + method SET_ID. + id = iv_id. + endmethod. + + + + + + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + +*&---------------------------------------------------------------------* +*& Class (Implementation) C_OI_PROXY_ERROR +*&---------------------------------------------------------------------* +CLASS c_oi_proxy_error IMPLEMENTATION. + METHOD constructor. +* IMPORTING object_name TYPE c +* method_name TYPE c. + error_nr = ret_call_not_flushed. + me->i_oi_error~error_code = c_oi_errors=>ret_call_not_flushed. + me->i_oi_error~is_flushed = ' '. + me->i_oi_error~has_failed = 'X'. + me->i_oi_error~has_succeeded = ' '. + me->message_id = 'SOFFICEINTEGRATION'. + me->message_nr = '899'. + me->param1 = object_name. + me->param2 = method_name. + ENDMETHOD. "constructor + + METHOD i_oi_error~flush_error. + IF error_nr EQ 0. + me->i_oi_error~error_code = c_oi_errors=>ret_ok. + me->i_oi_error~is_flushed = 'X'. + me->i_oi_error~has_failed = ' '. + me->i_oi_error~has_succeeded = 'X'. + me->message_id = ''. + me->message_nr = '000'. + CALL METHOD c_oi_errors=>translate_proxy_error_code + EXPORTING + errorcode = error_nr + IMPORTING + retcode = me->i_oi_error~error_code. + ELSEIF error_nr EQ ret_call_not_flushed. + "call still not flushed + CALL METHOD c_oi_errors=>translate_proxy_error_code + EXPORTING + errorcode = error_nr + errorstring = me->param2 "method name + objectname = me->param1 + IMPORTING + retcode = me->i_oi_error~error_code. + ELSE. + me->i_oi_error~is_flushed = 'X'. + me->i_oi_error~has_succeeded = ' '. + me->i_oi_error~has_failed = 'X'. + CALL METHOD c_oi_errors=>translate_proxy_error_code + EXPORTING + errorcode = error_nr + errorstring = error_string + IMPORTING + retcode = me->i_oi_error~error_code. + CALL METHOD c_oi_errors=>get_message + IMPORTING + message_id = me->message_id + message_number = me->message_nr + param1 = me->param1 + param2 = me->param2 + param3 = me->param3 + param4 = me->param4. + ENDIF. + ENDMETHOD. "i_oi_error~flush_error + + METHOD i_oi_error~raise_message. +* IMPORTING type TYPE c. +* EXCEPTIONS message_raised flush_failed. + IF me->i_oi_error~has_succeeded IS INITIAL. + IF NOT me->i_oi_error~is_flushed IS INITIAL. + MESSAGE ID message_id TYPE type + NUMBER message_nr WITH param1 param2 param3 param4 + RAISING message_raised. + ELSE. + RAISE flush_failed. + ENDIF. + ENDIF. + ENDMETHOD. "i_oi_error~raise_message + + METHOD i_oi_error~get_message. +* EXPORTING message_id TYPE c +* message_number TYPE c +* param1 TYPE c +* param2 TYPE c +* param3 TYPE c +* param4 TYPE c. + param1 = me->param1. param2 = me->param2. + param3 = me->param3. param4 = me->param4. + + message_id = me->message_id. + message_number = me->message_nr. + ENDMETHOD. "i_oi_error~get_message +ENDCLASS. "C_OI_PROXY_ERROR + +*&---------------------------------------------------------------------* +*& Class (Implementation) CL_GRID_ACCESSION +*&---------------------------------------------------------------------* +CLASS lcl_gui_alv_grid IMPLEMENTATION. + + METHOD get_alv_attributes. + CREATE DATA et_table LIKE io_grid->mt_outtab. + et_table = io_grid->mt_outtab. + ENDMETHOD. "get_data + +ENDCLASS. "CL_GRID_ACCESSION + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature +TYPE-POOLS: sydes. +TYPE-POOLS: slis. +*--------------------------------------------------------------------* +* CLASS c_oi_proxy_error +*--------------------------------------------------------------------* +* use for method bind_ALV +*--------------------------------------------------------------------* +CLASS c_oi_proxy_error DEFINITION. + PUBLIC SECTION. + INTERFACES: i_oi_error. + DATA: error_nr TYPE i. + DATA: error_string TYPE sy-msgv1. + + METHODS: constructor IMPORTING object_name TYPE c + method_name TYPE c. + PRIVATE SECTION. + CONSTANTS: + ret_call_not_flushed TYPE i VALUE -999999. + + DATA: message_id TYPE sy-msgid, + message_nr TYPE sy-msgno, + param1 TYPE sy-msgv1, + param2 TYPE sy-msgv2, + param3 TYPE sy-msgv3, + param4 TYPE sy-msgv4. +ENDCLASS. "c_oi_proxy_error DEFINITION + +*--------------------------------------------------------------------* +* CLASS lcl_gui_alv_grid +*--------------------------------------------------------------------* +* to get protected attribute and method of cl_gui_alv_grid +* use for method bind_ALV +*--------------------------------------------------------------------* +CLASS lcl_gui_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid. + + PUBLIC SECTION. +* get ALV grid data + METHODS: get_alv_attributes + IMPORTING + io_grid TYPE REF TO cl_gui_alv_grid " ALV grid + EXPORTING + et_table TYPE REF TO data. " dta table + +ENDCLASS. "lcl_gui_alv_grid DEFINITION + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABAP + SLIS + SOI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_COLUMNS. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + CLEAR: me->print_title_col_from, + me->print_title_col_to . + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_ROWS. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + CLEAR: me->print_title_row_from, + me->print_title_row_to . + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_COLUMNS. + ev_columns_from = me->print_title_col_from. + ev_columns_to = me->print_title_col_to. + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_ROWS. + ev_rows_from = me->print_title_row_from. + ev_rows_to = me->print_title_row_to. + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_COLUMNS. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +*--------------------------------------------------------------------* + + DATA: lv_col_from_int TYPE i, + lv_col_to_int TYPE i, + lv_errormessage TYPE string. + + DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range. + + + lv_col_from_int = zcl_excel_common=>convert_column2int( iv_columns_from ). + lv_col_to_int = zcl_excel_common=>convert_column2int( iv_columns_to ). + +*--------------------------------------------------------------------* +* Check if valid range is supplied +*--------------------------------------------------------------------* + IF lv_col_from_int < 1. + lv_errormessage = 'Invalid range supplied for print-title repeatable columns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + IF lv_col_from_int > lv_col_to_int. + lv_errormessage = 'Invalid range supplied for print-title repeatable columns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + me->print_title_col_from = iv_columns_from. + me->print_title_col_to = iv_columns_to. + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_ROWS. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +*--------------------------------------------------------------------* + + DATA: lv_errormessage TYPE string. + + DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range. + + + +*--------------------------------------------------------------------* +* Check if valid range is supplied +*--------------------------------------------------------------------* + IF iv_rows_from < 1. + lv_errormessage = 'Invalid range supplied for print-title repeatable rowumns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + IF iv_rows_from > iv_rows_to. + lv_errormessage = 'Invalid range supplied for print-title repeatable rowumns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + me->print_title_row_from = iv_rows_from. + me->print_title_row_to = iv_rows_to. + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + + endmethod. + + + method ZIF_EXCEL_SHEET_PROPERTIES~GET_STYLE. + IF zif_excel_sheet_properties~style IS NOT INITIAL. + ep_style = zif_excel_sheet_properties~style. + ELSE. + ep_style = me->excel->get_default_style( ). + ENDIF. + endmethod. + + + method ZIF_EXCEL_SHEET_PROPERTIES~INITIALIZE. + + zif_excel_sheet_properties~show_zeros = zif_excel_sheet_properties=>c_showzero. + zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_on. + zif_excel_sheet_properties~summaryright = zif_excel_sheet_properties=>c_right_on. + +* inizialize zoomscale values + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale = 100. + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_normal = 100. + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_pagelayoutview = 100 . + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_sheetlayoutview = 100 . + endmethod. + + + method ZIF_EXCEL_SHEET_PROPERTIES~SET_STYLE. + zif_excel_sheet_properties~style = ip_style. + endmethod. + + + method ZIF_EXCEL_SHEET_PROTECTION~INITIALIZE. + + me->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_unprotected. + CLEAR me->zif_excel_sheet_protection~password. + me->zif_excel_sheet_protection~auto_filter = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~delete_columns = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~delete_rows = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~format_cells = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~format_columns = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~format_rows = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~insert_columns = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~insert_hyperlinks = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~insert_rows = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~objects = zif_excel_sheet_protection=>c_noactive. +* me->zif_excel_sheet_protection~password = zif_excel_sheet_protection=>c_noactive. "issue #68 + me->zif_excel_sheet_protection~pivot_tables = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~select_locked_cells = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~select_unlocked_cells = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~sort = zif_excel_sheet_protection=>c_noactive. + + endmethod. + + + method ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME. + me->zif_excel_sheet_vba_project~codename = ip_codename. + endmethod. + + + method ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME_PR. + me->zif_excel_sheet_vba_project~codename_pr = ip_codename_pr. + endmethod. + + + + method ADD_DRAWING. + CASE ip_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. + drawings->include( ip_drawing ). + WHEN zcl_excel_drawing=>type_chart. + charts->include( ip_drawing ). + ENDCASE. + endmethod. + + + + method ADD_NEW_CONDITIONAL_STYLE. + + CREATE OBJECT eo_conditional_style. + conditional_styles->add( eo_conditional_style ). + endmethod. + + + + method ADD_NEW_DATA_VALIDATION. + + CREATE OBJECT eo_data_validation. + data_validations->add( eo_data_validation ). + endmethod. + + + + method ADD_NEW_RANGE. +* Create default blank range + CREATE OBJECT eo_range. + ranges->add( eo_range ). + endmethod. + + + + + + + + + method BIND_ALV. + data: lo_converter type ref to zcl_excel_converter. + + create object lo_converter. + + try. + lo_converter->convert( + exporting + io_alv = io_alv + it_table = it_table + i_row_int = i_top + i_column_int = i_left + i_table = abap_true + i_style_table = table_style + io_worksheet = me + changing + co_excel = excel ). + catch zcx_excel . + endtry. + + endmethod. + + + + + + + + + + + + + + + + + + + + + + method BIND_ALV_OLE2. +*--------------------------------------------------------------------* +* Method description: +* Method use to export a CL_GUI_ALV_GRID object to xlsx/xls file +* with list header and characteristics of ALV field catalog such as: +* + Total, group's subtotal +* + Quantity fields, amount fields (dependent fields) +* + No_out, no_zero, ... +* Technique use in method: +* SAP Desktop Office Integration (DOI) +*--------------------------------------------------------------------* + +* Data for session 0: DOI constructor +* ------------------------------------------ + + data: lo_control type ref to I_OI_CONTAINER_CONTROL. + data: lo_proxy type ref to I_OI_DOCUMENT_PROXY. + data: lo_spreadsheet type ref to I_OI_SPREADSHEET. + data: lo_error type ref to I_OI_ERROR. + data: lc_retcode type SOI_RET_STRING. + data: li_has type i. "Proxy has spreadsheet interface? + data: l_is_closed type i. + +* Data for session 1: Get LVC data from ALV object +* ------------------------------------------ + + data: l_has_activex, + l_doctype_excel_sheet(11) type c. + data: wa_DOC_HANDLE Type CNTL_HANDLE. + +* LVC + data: lt_fieldcat_lvc type LVC_T_FCAT. + data: wa_fieldcat_lvc type lvc_s_fcat. + data: lt_sort_lvc type LVC_T_SORT. + data: lt_filter_idx_lvc type LVC_T_FIDX. + data: lt_GROUPLEVELS_LVC type LVC_T_GRPL. + +* KKBLO + DATA: LT_FIELDCAT_KKBLO Type KKBLO_T_FIELDCAT. + DATA: LT_SORT_KKBLO Type KKBLO_T_SORTINFO. + DATA: LT_GROUPLEVELS_KKBLO Type KKBLO_T_GROUPLEVELS. + DATA: LT_FILTER_IDX_KKBLO Type KKBLO_T_SFINFO. + data: wa_listheader like line of it_listheader. + +* Subtotal + data: lt_collect00 type ref to data. + data: lt_collect01 type ref to data. + data: lt_collect02 type ref to data. + data: lt_collect03 type ref to data. + data: lt_collect04 type ref to data. + data: lt_collect05 type ref to data. + data: lt_collect06 type ref to data. + data: lt_collect07 type ref to data. + data: lt_collect08 type ref to data. + data: lt_collect09 type ref to data. + +* data table name + data: l_tabname type kkblo_tabname. + +* local object + data: lo_grid type ref to lcl_gui_alv_grid. + +* data table get from ALV + data: lt_alv type ref to data. + +* total / subtotal data + field-symbols: <f_collect00> type standard table. + field-symbols: <f_collect01> type standard table. + field-symbols: <f_collect02> type standard table. + field-symbols: <f_collect03> type standard table. + field-symbols: <f_collect04> type standard table. + field-symbols: <f_collect05> type standard table. + field-symbols: <f_collect06> type standard table. + field-symbols: <f_collect07> type standard table. + field-symbols: <f_collect08> type standard table. + field-symbols: <f_collect09> type standard table. + +* table before append subtotal lines + field-symbols: <f_alv_tab> type standard table. + +* data for session 2: sort, filter and calculate total/subtotal +* ------------------------------------------ + +* table to save index of subotal / total line in excel tanle +* this ideal to control index of subtotal / total line later +* for ex, when get subtotal / total line to format + types: begin of st_subtot_indexs, + index type i, + end of st_subtot_indexs. + data: lt_subtot_indexs type table of st_subtot_indexs. + data: wa_subtot_indexs like line of lt_subtot_indexs. + +* data table after append subtotal + data: lt_excel type ref to data. + + data: l_tabix type i. + data: l_save_index type i. + +* dyn subtotal table name + data: l_collect type string. + +* subtotal range, to format subtotal (and total) + data: subranges type soi_range_list. + data: subrangeitem type soi_range_item. + data: l_sub_index type i. + + +* table after append subtotal lines + field-symbols: <f_excel_tab> type standard table. + field-symbols: <f_excel_line> type any. + +* dyn subtotal tables + field-symbols: <f_collect_tab> type standard table. + field-symbols: <f_collect_line> type any. + + field-symbols: <f_filter_idx_line> like line of LT_FILTER_IDX_KKBLO. + field-symbols: <f_fieldcat_line> like line of LT_FIELDCAT_KKBLO. + field-symbols: <f_grouplevels_line> like line of LT_GROUPLEVELS_KKBLO. + field-symbols: <f_line> type any. + +* Data for session 3: map data to semantic table +* ------------------------------------------ + + types: begin of st_column_index, + fieldname type kkblo_fieldname, + tabname type kkblo_tabname, + col like sy-index, + end of st_column_index. + +* columns index + data: lt_column_index type table of st_column_index. + data: wa_column_index like line of lt_column_index. + +* table of dependent field ( currency and quantity unit field) + data: lt_fieldcat_depf type kkblo_t_fieldcat. + data: wa_fieldcat_depf type kkblo_fieldcat. + +* XXL interface: +* -XXL: contain exporting columns characteristic + data: lt_sema type table of gxxlt_s initial size 0. + data: wa_sema like line of lt_sema. + +* -XXL interface: header + data: lt_hkey type table of gxxlt_h initial size 0. + data: wa_hkey like line of lt_hkey. + +* -XXL interface: header keys + data: lt_vkey type table of gxxlt_v initial size 0. + data: wa_vkey like line of lt_vkey. + +* Number of H Keys: number of key columns + data: l_n_hrz_keys type i. +* Number of data columns in the list object: non-key columns no + data: l_n_att_cols type i. +* Number of V Keys: number of header row + data: l_n_vrt_keys type i. + +* curency to format amount + data: lt_tcurx type table of tcurx. + data: wa_tcurx like line of lt_tcurx. + data: l_def type flag. " currency / quantity flag + data: wa_t006 type t006. " decimal place of unit + + data: l_num type i. " table columns number + data: l_typ type c. " table type + data: wa type ref to data. + data: l_int type i. + data: l_counter type i. + + field-symbols: <f_excel_column> type any. + field-symbols: <f_fcat_column> type any. + +* Data for session 4: write to excel +* ------------------------------------------ + + data: data_starting_at type i value 1. + data: data_ending_at type i value -1. + data: sema_type type c. + + data l_error type ref to c_oi_proxy_error. + data count type i. + data datac type i. + data datareal type i. " exporting column number + data vkeycount type i. + data all type i. + data mit type i value 1. " index of recent row? + data li_col_pos type i value 1. " column position + data li_col_num type i. " table columns number + field-symbols: <line> type any. + field-symbols: <item> type any. + + data td type sydes_desc. + + data: typ. + data: ranges type soi_range_list. + data: rangeitem type soi_range_item. + data: contents type soi_generic_table. + data: contentsitem type soi_generic_item. + data: semaitem type gxxlt_s. + data: hkeyitem type gxxlt_h. + data: vkeyitem type gxxlt_v. + data: li_commentary_rows type i. "row number of title lines + 1 + data: lo_error_w type ref to i_oi_error. + data: l_retcode type soi_ret_string. + data: no_flush type c value 'X'. + data: li_head_top type i. "header rows position + +* Data for session 5: Save and clode document +* ------------------------------------------ + + data: li_document_size type i. + data: ls_path type RLGRAP-FILENAME. + +* MACRO: Close_document +*------------------------------------------- + + DEFINE close_document. + clear: l_is_closed. + IF lo_proxy is not initial. + +* check proxy detroyed adi + + call method lo_proxy->is_destroyed + IMPORTING + ret_value = l_is_closed. + +* if dun detroyed yet: close -> release proxy + + IF l_is_closed is initial. + call method lo_proxy->close_document +* EXPORTING +* do_save = do_save + IMPORTING + error = lo_error + retcode = lc_retcode. + ENDIF. + + call method lo_proxy->release_document + IMPORTING + error = lo_error + retcode = lC_retcode. + + else. + lc_retcode = c_oi_errors=>ret_document_not_open. + ENDIF. + +* Detroy control container + + IF lo_control is not initial. + CALL METHOD lo_control->destroy_control. + ENDIF. + + clear: + lo_spreadsheet, + lo_proxy, + lo_control. + +* free local + + clear: l_is_closed. + + END-OF-DEFINITION. + +* Macro to catch DOI error +*------------------------------------------- + + DEFINE error_doi. + if lc_retcode ne c_oi_errors=>ret_ok. + close_document. + call method lo_error->raise_message + EXPORTING + type = 'E'. + clear: lo_error. + endif. + END-OF-DEFINITION. + +*--------------------------------------------------------------------* +* SESSION 0: DOI CONSTRUCTOR +*--------------------------------------------------------------------* + +* check active windown + + call function 'GUI_HAS_ACTIVEX' + IMPORTING + return = l_has_activex. + + if l_has_activex is initial. + raise MISS_GUIDE. + endif. + +* Get Container Object of Screen + + call method c_oi_container_control_creator=>get_container_control + IMPORTING + control = lo_control + retcode = lC_retcode. + + error_doi. + +* Initialize Container control + + CALL METHOD lo_control->init_control + EXPORTING + parent = CL_GUI_CONTAINER=>DEFAULT_SCREEN + r3_application_name = '' + inplace_enabled = 'X' + no_flush = 'X' + register_on_close_event = 'X' + register_on_custom_event = 'X' + IMPORTING + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + +* Get Proxy Document: +* check exist of document proxy, if exist -> close first + + if not lo_proxy is initial. + close_document. + endif. + + IF i_xls is not initial. +* xls format, doctype = soi_doctype_excel97_sheet + l_doctype_excel_sheet = 'Excel.Sheet.8'. + else. +* xlsx format, doctype = soi_doctype_excel_sheet + l_doctype_excel_sheet = 'Excel.Sheet'. + ENDIF. + + CALL METHOD lo_control->get_document_proxy + EXPORTING + document_type = l_doctype_excel_sheet + register_container = 'X' + IMPORTING + document_proxy = lo_proxy + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + + IF I_DOCUMENT_URL is initial. + +* create new excel document + + call method lo_proxy->create_document + EXPORTING + create_view_data = 'X' + open_inplace = 'X' + no_flush = 'X' + IMPORTING + ERROR = lO_ERROR + retcode = lc_retcode. + + error_doi. + + else. + +* Read excel template for i_DOCUMENT_URL +* this excel template can be store in local or server + + CALL METHOD lo_proxy->open_document + EXPORTING + document_url = i_document_url + open_inplace = 'X' + no_flush = 'X' + IMPORTING + error = lo_error + retcode = lc_retcode. + + error_doi. + + endif. + +* Check Spreadsheet Interface of Document Proxy + + CALL METHOD lo_proxy->has_spreadsheet_interface + IMPORTING + is_available = li_has + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + +* create Spreadsheet object + + CHECK li_has IS NOT INITIAL. + + CALL METHOD lo_proxy->get_spreadsheet_interface + IMPORTING + sheet_interface = lo_spreadsheet + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + +*--------------------------------------------------------------------* +* SESSION 1: GET LVC DATA FROM ALV OBJECT +*--------------------------------------------------------------------* + +* data table + + create object lo_grid + EXPORTING + i_parent = CL_GUI_CONTAINER=>SCREEN0. + + call method lo_grid->get_alv_attributes + EXPORTING + io_grid = io_alv + IMPORTING + Et_table = lt_alv. + + assign lt_alv->* to <f_alv_tab>. + +* fieldcat + + CALL METHOD iO_alv->GET_FRONTEND_FIELDCATALOG + IMPORTING + ET_FIELDCATALOG = lt_fieldcat_LVC. + +* table name + + loop at lt_fieldcat_LVC into wa_fieldcat_lvc + where not tabname is initial. + l_tabname = wa_fieldcat_lvc-tabname. + exit. + endloop. + + if sy-subrc ne 0. + l_tabname = '1'. + endif. + clear: wa_fieldcat_lvc. + +* sort table + + CALL METHOD IO_ALV->GET_SORT_CRITERIA + IMPORTING + ET_SORT = lt_sort_lvc. + + +* filter index + + CALL METHOD IO_ALV->GET_FILTERED_ENTRIES + IMPORTING + ET_FILTERED_ENTRIES = lt_filter_idx_lvc. + +* group level + subtotal + + CALL METHOD IO_ALV->GET_SUBTOTALS + IMPORTING + EP_COLLECT00 = lt_collect00 + EP_COLLECT01 = lt_collect01 + EP_COLLECT02 = lt_collect02 + EP_COLLECT03 = lt_collect03 + EP_COLLECT04 = lt_collect04 + EP_COLLECT05 = lt_collect05 + EP_COLLECT06 = lt_collect06 + EP_COLLECT07 = lt_collect07 + EP_COLLECT08 = lt_collect08 + EP_COLLECT09 = lt_collect09 + ET_GROUPLEVELS = lt_GROUPLEVELS_LVC. + + assign lt_collect00->* to <f_collect00>. + assign lt_collect01->* to <f_collect01>. + assign lt_collect02->* to <f_collect02>. + assign lt_collect03->* to <f_collect03>. + assign lt_collect04->* to <f_collect04>. + assign lt_collect05->* to <f_collect05>. + assign lt_collect06->* to <f_collect06>. + assign lt_collect07->* to <f_collect07>. + assign lt_collect08->* to <f_collect08>. + assign lt_collect09->* to <f_collect09>. + +* transfer to KKBLO struct + + CALL FUNCTION 'LVC_TRANSFER_TO_KKBLO' + EXPORTING + IT_FIELDCAT_LVC = lt_fieldcat_lvc + IT_SORT_LVC = lt_sort_lvc + IT_FILTER_INDEX_LVC = lt_filter_idx_lvc + IT_GROUPLEVELS_LVC = lt_grouplevels_lvc + IMPORTING + ET_FIELDCAT_KKBLO = lt_fieldcat_kkblo + ET_SORT_KKBLO = lt_sort_kkblo + ET_FILTERED_ENTRIES_KKBLO = lt_filter_idx_kkblo + ET_GROUPLEVELS_KKBLO = lt_grouplevels_kkblo + TABLES + IT_DATA = <f_alv_tab> + EXCEPTIONS + IT_DATA_MISSING = 1 + IT_FIELDCAT_LVC_MISSING = 2 + OTHERS = 3. + IF SY-SUBRC <> 0. + raise ex_transfer_KKBLO_ERROR. + ENDIF. + + clear: + wa_fieldcat_lvc, + lt_fieldcat_lvc, + lt_sort_lvc, + lt_filter_idx_lvc, + lt_GROUPLEVELS_LVC. + + clear: + lo_grid. + + +*--------------------------------------------------------------------* +* SESSION 2: SORT, FILTER AND CALCULATE TOTAL / SUBTOTAL +*--------------------------------------------------------------------* + +* append subtotal & total line + + create data lt_excel like <f_ALV_TAB>. + assign lt_excel->* to <f_excel_tab>. + + loop at <f_alv_tab> assigning <f_line>. + l_save_index = sy-tabix. + +* filter base on filter index table + + read table LT_FILTER_IDX_KKBLO assigning <f_filter_idx_line> + with key index = l_save_index + binary search. + if sy-subrc ne 0. + append <f_line> to <f_excel_tab>. + endif. + +* append subtotal lines + + read table LT_GROUPLEVELS_KKBLO assigning <f_grouplevels_line> + with key index_to = l_save_index + binary search. + if sy-subrc = 0. + l_tabix = sy-tabix. + do. + if <f_grouplevels_line>-subtot eq 'X' and + <f_grouplevels_line>-hide_level is initial and + <f_grouplevels_line>-cindex_from ne 0. + +* dynamic append subtotal line to excel table base on grouplevel table +* ex <f_GROUPLEVELS_line>-level = 1 +* then <f_collect_tab> = '<F_COLLECT01>' + + l_collect = <f_grouplevels_line>-level. + condense l_collect. + concatenate '<F_COLLECT0' + l_collect '>' +* '->*' + into l_collect. + + assign (l_collect) to <f_collect_tab>. + +* incase there're more than 1 total line of group, at the same level +* for example: subtotal of multi currency + + LOOP AT <f_collect_tab> assigning <f_collect_line>. + IF sy-tabix between <f_grouplevels_line>-cindex_from + and <f_grouplevels_line>-cindex_to. + + + append <f_collect_line> to <f_excel_tab>. + +* save subtotal lines index + + wa_subtot_indexs-index = sy-tabix. + append wa_subtot_indexs to lt_subtot_indexs. + +* append sub total ranges table for format later + + add 1 to l_sub_index. + subrangeitem-name = l_sub_index. + condense subrangeitem-name. + concatenate 'SUBTOT' + subrangeitem-name + into subrangeitem-name. + + subrangeitem-rows = wa_subtot_indexs-index. + subrangeitem-columns = 1. " start col + append subrangeitem to subranges. + clear: subrangeitem. + + ENDIF. + ENDLOOP. + unassign: <f_collect_tab>. + unassign: <f_collect_line>. + clear: l_collect. + endif. + +* check next subtotal level of group + + unassign: <f_grouplevels_line>. + add 1 to l_tabix. + + read table LT_GROUPLEVELS_KKBLO assigning <f_grouplevels_line> + index l_tabix. + if sy-subrc ne 0 + or <f_grouplevels_line>-index_to ne l_save_index. + exit. + endif. + + unassign: + <f_collect_tab>, + <f_collect_line>. + + enddo. + endif. + + clear: + l_tabix, + l_save_index. + + unassign: + <f_filter_idx_line>, + <f_grouplevels_line>. + + endloop. + +* free local data + + unassign: + <f_line>, + <f_collect_tab>, + <f_collect_line>, + <f_fieldcat_line>. + +* append grand total line + + IF <f_collect00> is assigned. + assign <f_collect00> to <f_collect_tab>. + if <f_collect_tab> is not initial. + LOOP AT <f_collect_tab> assigning <f_collect_line>. + + append <f_collect_line> to <f_excel_tab>. + +* save total line index + + wa_subtot_indexs-index = sy-tabix. + append wa_subtot_indexs to lt_subtot_indexs. + +* append grand total range (to format) + + add 1 to l_sub_index. + subrangeitem-name = l_sub_index. + condense subrangeitem-name. + concatenate 'TOTAL' + subrangeitem-name + into subrangeitem-name. + + subrangeitem-rows = wa_subtot_indexs-index. + subrangeitem-columns = 1. " start col + append subrangeitem to subranges. + ENDLOOP. + endif. + ENDIF. + + clear: + subrangeitem, + LT_SORT_KKBLO, + <f_collect00>, + <f_collect01>, + <f_collect02>, + <f_collect03>, + <f_collect04>, + <f_collect05>, + <f_collect06>, + <f_collect07>, + <f_collect08>, + <f_collect09>. + + unassign: + <f_collect00>, + <f_collect01>, + <f_collect02>, + <f_collect03>, + <f_collect04>, + <f_collect05>, + <f_collect06>, + <f_collect07>, + <f_collect08>, + <f_collect09>, + <f_collect_tab>, + <f_collect_line>. + +*--------------------------------------------------------------------* +* SESSION 3: MAP DATA TO SEMANTIC TABLE +*--------------------------------------------------------------------* + +* get dependent field field: currency and quantity + + create data wa like line of <f_excel_tab>. + assign wa->* to <f_excel_line>. + + describe field <f_excel_line> type l_typ components l_num. + + do l_num times. + l_save_index = sy-index. + assign component l_save_index of structure <f_excel_line> + to <f_excel_column>. + if sy-subrc ne 0. + message e059(0k) with 'FATAL ERROR' raising fatal_error. + endif. + + loop at LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + where tabname = l_tabname. + assign component <f_fieldcat_line>-fieldname + of structure <f_excel_line> to <f_fcat_column>. + + describe distance between <f_excel_column> and <f_fcat_column> + into l_int in byte mode. + +* append column index +* this columns index is of table, not fieldcat + + if l_int = 0. + wa_column_index-fieldname = <f_fieldcat_line>-fieldname. + wa_column_index-tabname = <f_fieldcat_line>-tabname. + wa_column_index-col = l_save_index. + append wa_column_index to lt_column_index. + endif. + +* append dependent fields (currency and quantity unit) + + if <f_fieldcat_line>-cfieldname is not initial. + clear wa_fieldcat_depf. + wa_fieldcat_depf-fieldname = <f_fieldcat_line>-cfieldname. + wa_fieldcat_depf-tabname = <f_fieldcat_line>-ctabname. + collect wa_fieldcat_depf into lt_fieldcat_depf. + endif. + + if <f_fieldcat_line>-qfieldname is not initial. + clear wa_fieldcat_depf. + wa_fieldcat_depf-fieldname = <f_fieldcat_line>-qfieldname. + wa_fieldcat_depf-tabname = <f_fieldcat_line>-qtabname. + collect wa_fieldcat_depf into lt_fieldcat_depf. + endif. + +* rewrite field data type + + if <f_fieldcat_line>-inttype = 'X' + and <f_fieldcat_line>-datatype(3) = 'INT'. + <f_fieldcat_line>-inttype = 'I'. + endif. + + endloop. + + clear: l_save_index. + unassign: <f_fieldcat_line>. + + enddo. + +* build semantic tables + + l_n_hrz_keys = 1. + +* Get keyfigures + + loop at LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + where tabname = l_tabname + and tech ne 'X' + and no_out ne 'X'. + + clear wa_sema. + clear wa_hkey. + +* Units belong to keyfigures -> display as str + + read table lt_fieldcat_depf into wa_fieldcat_depf with key + fieldname = <f_fieldcat_line>-fieldname + tabname = <f_fieldcat_line>-tabname. + + if sy-subrc = 0. + wa_sema-col_typ = 'STR'. + wa_sema-col_ops = 'DFT'. + +* Keyfigures + + else. + case <f_fieldcat_line>-datatype. + when 'QUAN'. + wa_sema-col_typ = 'N03'. + + if <f_fieldcat_line>-no_sum ne 'X'. + wa_sema-col_ops = 'ADD'. + else. + wa_sema-col_ops = 'NOP'. " no dependent field + endif. + + when 'DATS'. + wa_sema-col_typ = 'DAT'. + wa_sema-col_ops = 'NOP'. + + when 'CHAR' OR 'UNIT' OR 'CUKY'. " Added fieldformats UNIT and CUKY - dd. 26-10-2012 Wouter Heuvelmans + wa_sema-col_typ = 'STR'. + wa_sema-col_ops = 'DFT'. " dependent field + +* incase numeric, ex '00120' -> display as '12' + + when 'NUMC'. + wa_sema-col_typ = 'STR'. + wa_sema-col_ops = 'DFT'. + + when others. + wa_sema-col_typ = 'NUM'. + + if <f_fieldcat_line>-no_sum ne 'X'. + wa_sema-col_ops = 'ADD'. + else. + wa_sema-col_ops = 'NOP'. + endif. + endcase. + endif. + + l_counter = l_counter + 1. + l_n_att_cols = l_n_att_cols + 1. + + wa_sema-col_no = l_counter. + + read table lt_column_index into wa_column_index with key + fieldname = <f_fieldcat_line>-fieldname + tabname = <f_fieldcat_line>-tabname. + + if sy-subrc = 0. + wa_sema-col_src = wa_column_index-col. + else. + raise fatal_error. + endif. + +* columns index of ref currency field in table + + if not <f_fieldcat_line>-cfieldname is initial. + read table lt_column_index into wa_column_index with key + fieldname = <f_fieldcat_line>-cfieldname + tabname = <f_fieldcat_line>-ctabname. + + if sy-subrc = 0. + wa_sema-col_cur = wa_column_index-col. + endif. + +* quantities fields +* treat as currency when display on excel + + elseif not <f_fieldcat_line>-qfieldname is initial. + read table lt_column_index into wa_column_index with key + fieldname = <f_fieldcat_line>-qfieldname + tabname = <f_fieldcat_line>-qtabname. + if sy-subrc = 0. + wa_sema-col_cur = wa_column_index-col. + endif. + + endif. + +* Treat of fixed currency in the fieldcatalog for column + + data: l_num_help(2) type n. + + if not <f_fieldcat_line>-currency is initial. + + select * from tcurx into table lt_tcurx. + sort lt_tcurx. + read table lt_tcurx into wa_tcurx + with key currkey = <f_fieldcat_line>-currency. + if sy-subrc = 0. + l_num_help = wa_tcurx-currdec. + concatenate 'N' l_num_help into wa_sema-col_typ. + wa_sema-col_cur = sy-tabix * ( -1 ). + endif. + + endif. + + wa_hkey-col_no = l_n_att_cols. + wa_hkey-row_no = l_n_hrz_keys. + wa_hkey-col_name = <f_fieldcat_line>-reptext. + append wa_hkey to lt_hkey. + append wa_sema to lt_sema. + + endloop. + +* free local data + + clear: + lt_column_index, + wa_column_index, + lt_fieldcat_depf, + wa_fieldcat_depf, + lt_tcurx, + wa_tcurx, + l_num, + l_typ, + wa, + l_int, + l_counter. + + unassign: + <f_fieldcat_line>, + <f_excel_line>, + <f_excel_column>, + <f_fcat_column>. + +*--------------------------------------------------------------------* +* SESSION 4: WRITE TO EXCEL +*--------------------------------------------------------------------* + + clear: wa_tcurx. + refresh: lt_tcurx. + +* if spreadsheet dun have proxy yet + + if li_has is initial. + l_retcode = c_oi_errors=>ret_interface_not_supported. + call method c_oi_errors=>create_error_for_retcode + EXPORTING + retcode = l_retcode + no_flush = no_flush + IMPORTING + error = lo_error_w. + exit. + endif. + + create object l_error + EXPORTING + object_name = 'OLE_DOCUMENT_PROXY' + method_name = 'get_ranges_names'. + + call method c_oi_errors=>add_error + EXPORTING + error = l_error. + + + describe table lt_sema lines datareal. + describe table <f_excel_tab> lines datac. + describe table lt_vkey lines vkeycount. + + if datac = 0. + raise inv_data_range. + endif. + + + if vkeycount ne l_n_vrt_keys. + raise dim_mismatch_vkey. + endif. + + all = l_n_vrt_keys + l_n_att_cols. + + if datareal ne all. + raise dim_mismatch_sema. + endif. + + data: decimal type c. + +* get decimal separator format ('.', ',', ...) in Office config + + call method lo_proxy->get_application_property + EXPORTING + property_name = 'INTERNATIONAL' + subproperty_name = 'DECIMAL_SEPARATOR' + CHANGING + retvalue = decimal. + + data: wa_usr type usr01. + select * from usr01 into wa_usr where bname = sy-uname. + endselect. + + data: comma_elim(4) type c. + data: help6 type i. + field-symbols <g> type any. + data search_item(4) value ' #'. + + concatenate ',' decimal '.' decimal into comma_elim. + + data help type i. " table (with subtotal) line number + + help = datac. + + data: rowmax type i value 1. " header row number + data: columnmax type i value 0. " header columns number + + loop at lt_hkey into hkeyitem. + if hkeyitem-col_no > columnmax. + columnmax = hkeyitem-col_no. + endif. + + if hkeyitem-row_no > rowmax. + rowmax = hkeyitem-row_no. + endif. + endloop. + + data: hkeycolumns type i. " header columns no + + hkeycolumns = columnmax. + + if hkeycolumns < l_n_att_cols. + hkeycolumns = l_n_att_cols. + endif. + + columnmax = 0. + + loop at lt_vkey into vkeyitem. + if vkeyitem-col_no > columnmax. + columnmax = vkeyitem-col_no. + endif. + endloop. + + data overflow type i value 1. + data testname(10) type c. + data temp2 type i. " 1st item row position in excel + data realmit type i value 1. + data realoverflow type i value 1. " row index in content + + call method lo_spreadsheet->screen_update + EXPORTING + updating = ''. + + call method lo_spreadsheet->load_lib. + + data: str(40) type c. " range names of columns range (w/o col header) + data: rows type i. " row postion of 1st item line in ecxel + +* calculate row position of data table + + describe table iT_LISTHEADER lines li_commentary_rows. + +* if grid had title, add 1 empy line between title and table + + if li_commentary_rows ne 0. + add 1 to li_commentary_rows. + endif. + +* add top position of block data + + li_commentary_rows = li_commentary_rows + i_top - 1. + +* write header (commentary rows) + + data: li_commentary_row_index type i value 1. + data: li_content_index type i value 1. + data: ls_index(10) type c. + data ls_commentary_range(40) type c value 'TITLE'. + data: li_font_bold type i. + data: li_font_italic type i. + data: li_font_size type i. + + loop at iT_LISTHEADER into wa_listheader. + li_commentary_row_index = i_top + li_content_index - 1. + ls_index = li_content_index. + condense ls_index. + concatenate ls_commentary_range(5) ls_index + into ls_commentary_range. + condense ls_commentary_range. + +* insert title range + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = ls_commentary_range + top = li_commentary_row_index + left = i_left + rows = 1 + columns = 1 + no_flush = no_flush. + +* format range + + case wa_listheader-typ. + when 'H'. "title + li_font_size = 16. + li_font_bold = 1. + li_font_italic = -1. + when 'S'. "subtile + li_font_size = -1. + li_font_bold = 1. + li_font_italic = -1. + when others. "'A' comment + li_font_size = -1. + li_font_bold = -1. + li_font_italic = 1. + endcase. + + call method lo_spreadsheet->set_font + EXPORTING + rangename = ls_commentary_range + family = '' + size = li_font_size + bold = li_font_bold + italic = li_font_italic + align = 0 + no_flush = no_flush. + +* title: range content + + rangeitem-name = ls_commentary_range. + rangeitem-columns = 1. + rangeitem-rows = 1. + append rangeitem to ranges. + + contentsitem-row = li_content_index. + contentsitem-column = 1. + concatenate wa_listheader-key + wa_listheader-info + into contentsitem-value + separated by space. + condense contentsitem-value. + append contentsitem to contents. + + add 1 to li_content_index. + + clear: + rangeitem, + contentsitem, + ls_index. + + endloop. + +* set range data title + + call method lo_spreadsheet->set_ranges_data + EXPORTING + ranges = ranges + contents = contents + no_flush = no_flush. + + refresh: + ranges, + contents. + + rows = rowmax + li_commentary_rows + 1. + + all = wa_usr-datfm. + all = all + 3. + + loop at lt_sema into semaitem. + if semaitem-col_typ = 'DAT' or semaitem-col_typ = 'MON' or + semaitem-col_typ = 'N00' or semaitem-col_typ = 'N01' or + semaitem-col_typ = 'N01' or semaitem-col_typ = 'N02' or + semaitem-col_typ = 'N03' or semaitem-col_typ = 'PCT' or + semaitem-col_typ = 'STR' or semaitem-col_typ = 'NUM'. + clear str. + str = semaitem-col_no. + condense str. + concatenate 'DATA' str into str. + mit = semaitem-col_no. + li_col_pos = semaitem-col_no + i_left - 1. + +* range from data1 to data(n), for each columns of table + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = str + top = rows + left = li_col_pos + rows = help + columns = 1 + no_flush = no_flush. + + data dec type i value -1. + data typeinfo type sydes_typeinfo. + loop at <f_excel_tab> assigning <line>. + assign component semaitem-col_no of structure <line> to <item>. + describe field <item> into td. + read table td-types index 1 into typeinfo. + if typeinfo-type = 'P'. + dec = typeinfo-decimals. + elseif typeinfo-type = 'I'. + dec = 0. + endif. + + describe field <line> type typ components count. + mit = 1. + do count times. + if mit = semaitem-col_src. + assign component sy-index of structure <line> to <item>. + describe field <item> into td. + read table td-types index 1 into typeinfo. + if typeinfo-type = 'P'. + dec = typeinfo-decimals. + endif. + exit. + endif. + mit = mit + 1. + enddo. + exit. + endloop. + +* format for each columns of table (w/o columns headers) + + if semaitem-col_typ = 'DAT'. + if semaitem-col_no > vkeycount. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = all + no_flush = no_flush. + else. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 0 + no_flush = no_flush. + endif. + elseif semaitem-col_typ = 'STR'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 0 + no_flush = no_flush. + elseif semaitem-col_typ = 'MON'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 10 + no_flush = no_flush. + elseif semaitem-col_typ = 'N00'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 0 + no_flush = no_flush. + elseif semaitem-col_typ = 'N01'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 1 + no_flush = no_flush. + elseif semaitem-col_typ = 'N02'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 2 + no_flush = no_flush. + elseif semaitem-col_typ = 'N03'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 3 + no_flush = no_flush. + elseif semaitem-col_typ = 'N04'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 4 + no_flush = no_flush. + elseif semaitem-col_typ = 'NUM'. + if dec eq -1. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 2 + no_flush = no_flush. + else. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = dec + no_flush = no_flush. + endif. + elseif semaitem-col_typ = 'PCT'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 3 + decimals = 0 + no_flush = no_flush. + endif. + + endif. + endloop. + +* get item contents for set_range_data method +* get currency cell also + + mit = 1. + + data: currcells type soi_cell_table. + data: curritem type soi_cell_item. + + curritem-rows = 1. + curritem-columns = 1. + curritem-front = -1. + curritem-back = -1. + curritem-font = ''. + curritem-size = -1. + curritem-bold = -1. + curritem-italic = -1. + curritem-align = -1. + curritem-frametyp = -1. + curritem-framecolor = -1. + curritem-currency = ''. + curritem-number = 1. + curritem-input = -1. + + data: conv_exit(10) type c. + data: const type i. + +* Change for Correction request +* Initial 10000 lines are missing in Excel Export +* if there are only 2 columns in exported List object. + + if datareal gt 2. + const = 20000 / datareal. + else. + const = 20000 / ( datareal + 2 ). + endif. + + data: lines type i. + data: innerlines type i. + data: counter type i. + data: curritem2 like curritem. + data: curritem3 like curritem. + data: length type i. + data: found. + +* append content table (for method set_range_content) + + loop at <f_excel_tab> assigning <line>. + +* save line index to compare with lt_subtot_indexs, +* to discover line is a subtotal / totale line or not +* ex use to set 'dun display zero in subtotal / total line' + + l_save_index = sy-tabix. + + do datareal times. + read table lt_sema into semaitem with key col_no = sy-index. + if semaitem-col_src ne 0. + assign component semaitem-col_src + of structure <line> to <item>. + else. + assign component sy-index + of structure <line> to <item>. + endif. + + contentsitem-row = realoverflow. + + if sy-subrc = 0. + move semaitem-col_ops to search_item(3). + search 'ADD#CNT#MIN#MAX#AVG#NOP#DFT#' + for search_item. + if sy-subrc ne 0. + raise error_in_sema. + endif. + move semaitem-col_typ to search_item(3). + search 'NUM#N00#N01#N02#N03#N04#PCT#DAT#MON#STR#' + for search_item. + if sy-subrc ne 0. + raise error_in_sema. + endif. + contentsitem-column = sy-index. + if semaitem-col_typ eq 'DAT' or semaitem-col_typ eq 'MON'. + if semaitem-col_no > vkeycount. + + " Hinweis 512418 + " EXCEL bezieht Datumsangaben + " auf den 31.12.1899, behandelt + " aber 1900 als ein Schaltjahr + " d.h. ab 1.3.1900 korrekt + " 1.3.1900 als Zahl = 61 + + data: genesis type d value '18991230'. + data: number_of_days type p. +* change for date in char format & sema_type = X + data: temp_date type d. + + if not <item> is initial and not <item> co ' ' and not + <item> co '0'. +* change for date in char format & sema_type = X starts + if sema_type = 'X'. + describe field <item> type typ. + if typ = 'C'. + temp_date = <item>. + number_of_days = temp_date - genesis. + else. + number_of_days = <item> - genesis. + endif. + else. + number_of_days = <item> - genesis. + endif. +* change for date in char format & sema_type = X ends + if number_of_days < 61. + number_of_days = number_of_days - 1. + endif. + + set country 'DE'. + write number_of_days to contentsitem-value + no-grouping + left-justified. + set country space. + translate contentsitem-value using comma_elim. + else. + clear contentsitem-value. + endif. + else. + move <item> to contentsitem-value. + endif. + elseif semaitem-col_typ eq 'NUM' or + semaitem-col_typ eq 'N00' or + semaitem-col_typ eq 'N01' or + semaitem-col_typ eq 'N02' or + semaitem-col_typ eq 'N03' or + semaitem-col_typ eq 'N04' or + semaitem-col_typ eq 'PCT'. + set country 'DE'. + describe field <item> type typ. + + if semaitem-col_cur is initial. + if typ ne 'F'. + write <item> to contentsitem-value no-grouping + no-sign decimals 14. + else. + write <item> to contentsitem-value no-grouping + no-sign. + endif. + else. +* Treat of fixed curreny for column >>Y9CK007319 + if semaitem-col_cur < 0. + semaitem-col_cur = semaitem-col_cur * ( -1 ). + select * from tcurx into table lt_tcurx. + sort lt_tcurx. + read table lt_tcurx into + wa_tcurx index semaitem-col_cur. + if sy-subrc = 0. + if typ ne 'F'. + write <item> to contentsitem-value no-grouping + currency wa_tcurx-currkey no-sign decimals 14. + else. + write <item> to contentsitem-value no-grouping + currency wa_tcurx-currkey no-sign. + endif. + endif. + else. + assign component semaitem-col_cur + of structure <line> to <g>. +* mit = index of recent row + curritem-top = rowmax + mit + li_commentary_rows. + + li_col_pos = sy-index + i_left - 1. + curritem-left = li_col_pos. + +* if filed is quantity field (qfieldname ne space) +* or amount field (cfieldname ne space), then format decimal place +* corresponding with config + + clear: l_def. + read table LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + with key tabname = l_tabname + tech = space + no_out = space + col_pos = semaitem-col_no. + IF sy-subrc = 0. + IF <f_fieldcat_line>-cfieldname is not initial. + l_def = 'C'. + else."if <f_fieldcat_line>-qfieldname is not initial. + l_def = 'Q'. + ENDIF. + ENDIF. + +* if field is amount field +* exporting of amount field base on currency decimal table: TCURX + IF l_def = 'C'. "field is amount field + select single * from tcurx into wa_tcurx + where currkey = <g>. +* if amount ref to un-know currency -> default decimal = 2 + if sy-subrc eq 0. + curritem-decimals = wa_tcurx-currdec. + else. + curritem-decimals = 2. + endif. + + append curritem to currcells. + if typ ne 'F'. + write <item> to contentsitem-value + currency <g> + no-sign no-grouping. + else. + write <item> to contentsitem-value + decimals 14 currency <g> + no-sign no-grouping. + endif. + +* if field is quantity field +* exporting of quantity field base on quantity decimal table: T006 + + else."if l_def = 'Q'. " field is quantity field + clear: wa_t006. + select single * from t006 into wa_t006 + where MSEHI = <g>. +* if quantity ref to un-know unit-> default decimal = 2 + if sy-subrc eq 0. + curritem-decimals = wa_t006-decan. + else. + curritem-decimals = 2. + endif. + append curritem to currcells. + + write <item> to contentsitem-value + unit <g> + no-sign no-grouping. + condense contentsitem-value. + + ENDIF. + + endif. "Y9CK007319 + endif. + condense contentsitem-value. + +* add function fieldcat-no zero display + + loop at LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + where tabname = l_tabname + and tech ne 'X' + and no_out ne 'X'. + if <f_fieldcat_line>-col_pos = semaitem-col_no. + if <f_fieldcat_line>-no_zero = 'X'. + if <item> = '0'. + clear: contentsitem-value. + endif. + +* dun display zero in total/subtotal line too + + else. + clear: wa_subtot_indexs. + read table lt_subtot_indexs into wa_subtot_indexs + with key index = l_save_index. + IF sy-subrc = 0. + if <item> = '0'. + clear: contentsitem-value. + endif. + ENDIF. + endif. + endif. + endloop. + unassign: <f_fieldcat_line>. + + if <item> lt 0. + search contentsitem-value for 'E'. + if sy-fdpos eq 0. + +* bring negative sign to front of amount + + translate contentsitem-value using '- '. + condense contentsitem-value no-gaps. + concatenate '-' contentsitem-value + into contentsitem-value. + else. + concatenate '-' contentsitem-value + into contentsitem-value. + endif. + endif. + set country space. +* Hier wird nur die korrekte Kommaseparatierung gemacht, wenn die +* Zeichen einer +* Zahl enthalten sind. Das ist f#ƒÂ#r Timestamps, die auch ":" enthalten. +* F#ƒÂ#r die +* darf keine Kommaseparierung stattfinden. +* Changing for correction request - Y6BK041073 + if contentsitem-value co '0123456789.,-+E '. + translate contentsitem-value using comma_elim. + endif. + else. + clear contentsitem-value. + +* if type is not numeric -> dun display with zero + + write <item> to contentsitem-value no-zero. + + shift contentsitem-value left deleting leading space. + + endif. + append contentsitem to contents. + endif. + enddo. + + realmit = realmit + 1. + realoverflow = realoverflow + 1. + + mit = mit + 1. +* overflow = current row index in content table + overflow = overflow + 1. + endloop. + + unassign: <f_fieldcat_line>. + +* set item range for set_range_data method + + testname = mit / const. + condense testname. + + concatenate 'TEST' testname into testname. + + realoverflow = realoverflow - 1. + realmit = realmit - 1. + help = realoverflow. + + rangeitem-name = testname. + rangeitem-columns = datareal. + rangeitem-rows = help. + append rangeitem to ranges. + +* insert item range dim + + temp2 = rowmax + 1 + li_commentary_rows + realmit - realoverflow. + +* items data + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = testname + top = temp2 + left = i_left + rows = help + columns = datareal + no_flush = no_flush. + +* get columns header contents for set_range_data method +* export columns header only if no columns header option = space + + data: rowcount type i. + data: columncount type i. + + if i_columns_header = 'X'. + +* append columns header to contents: hkey + + rowcount = 1. + do rowmax times. + columncount = 1. + do hkeycolumns times. + loop at lt_hkey into hkeyitem where col_no = columncount + and row_no = rowcount. + endloop. + if sy-subrc = 0. + str = hkeyitem-col_name. + contentsitem-value = hkeyitem-col_name. + else. + contentsitem-value = str. + endif. + contentsitem-column = columncount. + contentsitem-row = rowcount. + append contentsitem to contents. + columncount = columncount + 1. + enddo. + rowcount = rowcount + 1. + enddo. + +* incase columns header in multiline + + data: rowmaxtemp type i. + if rowmax > 1. + rowmaxtemp = rowmax - 1. + rowcount = 1. + do rowmaxtemp times. + columncount = 1. + do columnmax times. + contentsitem-column = columncount. + contentsitem-row = rowcount. + contentsitem-value = ''. + append contentsitem to contents. + columncount = columncount + 1. + enddo. + rowcount = rowcount + 1. + enddo. + endif. + +* append columns header to contents: vkey + + columncount = 1. + do columnmax times. + loop at lt_vkey into vkeyitem where col_no = columncount. + endloop. + contentsitem-value = vkeyitem-col_name. + contentsitem-row = rowmax. + contentsitem-column = columncount. + append contentsitem to contents. + columncount = columncount + 1. + enddo. +*--------------------------------------------------------------------* +* set header range for method set_range_data +* insert header keys range dim + + li_head_top = li_commentary_rows + 1. + li_col_pos = i_left. + +* insert range headers + + if hkeycolumns ne 0. + rangeitem-name = 'TESTHKEY'. + rangeitem-rows = rowmax. + rangeitem-columns = hkeycolumns. + append rangeitem to ranges. + clear: rangeitem. + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = 'TESTHKEY' + top = li_head_top + left = li_col_pos + rows = rowmax + columns = hkeycolumns + no_flush = no_flush. + endif. + endif. + +* format for columns header + total + subtotal +* ------------------------------------------ + + help = rowmax + realmit. " table + header lines + + data: item type colxxl_t. + data: lt_format type soi_format_table. + data: wa_format like line of lt_format. + data: wa_format_temp like line of lt_format. + + field-symbols: <f_source> type any. + field-symbols: <f_des> type any. + +* columns header format + + wa_format-front = -1. + wa_format-back = 15. "grey + wa_format-font = space. + wa_format-size = -1. + wa_format-bold = 1. + wa_format-align = 0. + wa_format-frametyp = -1. + wa_format-framecolor = -1. + +* get column header format from input record +* -> map input format + + if i_columns_header = 'X'. + wa_format-name = 'TESTHKEY'. + if i_format_col_header is not initial. + describe field i_format_col_header type l_typ components + li_col_num. + do li_col_num times. + if sy-index ne 1. " dun map range name + assign component sy-index of structure i_format_col_header + to <f_source>. + if <f_source> is not initial. + assign component sy-index of structure wa_format to <f_des>. + <f_des> = <f_source>. + unassign: <f_des>. + endif. + unassign: <f_source>. + endif. + enddo. + + clear: li_col_num. + endif. + + append wa_format to lt_format. + endif. + +* Zusammenfassen der Spalten mit gleicher Nachkommastellenzahl +* collect vertical cells (col) with the same number of decimal places +* to increase perfomance in currency cell format + + describe table currcells lines lines. + lines = lines - 1. + do lines times. + describe table currcells lines innerlines. + innerlines = innerlines - 1. + sort currcells by left top. + clear found. + do innerlines times. + read table currcells index sy-index into curritem. + counter = sy-index + 1. + read table currcells index counter into curritem2. + if curritem-left eq curritem2-left. + length = curritem-top + curritem-rows. + if length eq curritem2-top. + if curritem-decimals eq curritem2-decimals. + move curritem to curritem3. + curritem3-rows = curritem3-rows + curritem2-rows. + curritem-left = -1. + modify currcells index sy-index from curritem. + curritem2-left = -1. + modify currcells index counter from curritem2. + append curritem3 to currcells. + found = 'X'. + endif. + endif. + endif. + enddo. + if found is initial. + exit. + endif. + delete currcells where left = -1. + enddo. + +* Zusammenfassen der Zeilen mit gleicher Nachkommastellenzahl +* collect horizontal cells (row) with the same number of decimal places +* to increase perfomance in currency cell format + + describe table currcells lines lines. + lines = lines - 1. + do lines times. + describe table currcells lines innerlines. + innerlines = innerlines - 1. + sort currcells by top left. + clear found. + do innerlines times. + read table currcells index sy-index into curritem. + counter = sy-index + 1. + read table currcells index counter into curritem2. + if curritem-top eq curritem2-top and curritem-rows eq + curritem2-rows. + length = curritem-left + curritem-columns. + if length eq curritem2-left. + if curritem-decimals eq curritem2-decimals. + move curritem to curritem3. + curritem3-columns = curritem3-columns + curritem2-columns. + curritem-left = -1. + modify currcells index sy-index from curritem. + curritem2-left = -1. + modify currcells index counter from curritem2. + append curritem3 to currcells. + found = 'X'. + endif. + endif. + endif. + enddo. + if found is initial. + exit. + endif. + delete currcells where left = -1. + enddo. +* Ende der Zusammenfassung + + +* item data: format for currency cell, corresponding with currency + + call method lo_spreadsheet->cell_format + EXPORTING + cells = currcells + no_flush = no_flush. + +* item data: write item table content + + call method lo_spreadsheet->set_ranges_data + EXPORTING + ranges = ranges + contents = contents + no_flush = no_flush. + +* whole table range to format all table + + if i_columns_header = 'X'. + li_head_top = li_commentary_rows + 1. + else. + li_head_top = li_commentary_rows + 2. + help = help - 1. + endif. + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = 'WHOLE_TABLE' + top = li_head_top + left = i_left + rows = help + columns = datareal + no_flush = no_flush. + +* columns width auto fix +* this parameter = space in case use with exist template + + IF i_columns_autofit = 'X'. + call method lo_spreadsheet->fit_widest + EXPORTING + name = 'WHOLE_TABLE' + no_flush = no_flush. + ENDIF. + +* frame +* The parameter has 8 bits +*0 Left margin +*1 Top marginT +*2 Bottom margin +*3 Right margin +*4 Horizontal line +*5 Vertical line +*6 Thinness +*7 Thickness +* here 127 = 1111111 6-5-4-3-2-1 mean Thin-ver-hor-right-bot-top-left + +* ( final DOI method call, set no_flush = space +* equal to call method CL_GUI_CFW=>FLUSH ) + + call method lo_spreadsheet->set_frame + EXPORTING + rangename = 'WHOLE_TABLE' + typ = 127 + color = 1 + no_flush = space + IMPORTING + error = lo_error + retcode = lc_retcode. + + error_doi. + +* reformat subtotal / total line after format wholw table + + loop at subranges into subrangeitem. + l_sub_index = subrangeitem-rows + li_commentary_rows + rowmax. + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = subrangeitem-name + left = i_left + top = l_sub_index + rows = 1 + columns = datareal + no_flush = no_flush. + + wa_format-name = subrangeitem-name. + +* default format: +* - clolor: subtotal = light yellow, subtotal = yellow +* - frame: box + + IF subrangeitem-name(3) = 'SUB'. + wa_format-back = 36. "subtotal line + wa_format_temp = i_format_subtotal. + else. + wa_format-back = 27. "total line + wa_format_temp = i_format_total. + endif. + wa_format-FRAMETYP = 79. + wa_format-FRAMEcolor = 1. + wa_format-number = -1. + wa_format-align = -1. + +* get subtoal + total format from intput parameter +* overwrite default format + + if wa_format_temp is not initial. + describe field wa_format_temp type l_typ components li_col_num. + do li_col_num times. + if sy-index ne 1. " dun map range name + assign component sy-index of structure wa_format_temp + to <f_source>. + if <f_source> is not initial. + assign component sy-index of structure wa_format to <f_des>. + <f_des> = <f_source>. + unassign: <f_des>. + endif. + unassign: <f_source>. + endif. + enddo. + + clear: li_col_num. + endif. + + append wa_format to lt_format. + clear: wa_format-name. + clear: l_sub_index. + clear: wa_format_temp. + + endloop. + + if lt_format[] is not initial. + call method lo_spreadsheet->set_ranges_format + EXPORTING + formattable = lt_format + no_flush = no_flush. + refresh: lt_format. + endif. +*--------------------------------------------------------------------* + call method lo_spreadsheet->screen_update + EXPORTING + updating = 'X'. + + call method c_oi_errors=>flush_errors. + + lo_error_w = l_error. + lc_retcode = lo_error_w->error_code. + +** catch no_flush -> led to dump ( optional ) +* go_error = l_error. +* gc_retcode = go_error->error_code. +* error_doi. + + clear: + lt_sema, + wa_sema, + lt_hkey, + wa_hkey, + lt_vkey, + wa_vkey, + l_n_hrz_keys, + l_n_att_cols, + l_n_vrt_keys, + count, + datac, + datareal, + vkeycount, + all, + mit, + li_col_pos, + li_col_num, + ranges, + rangeitem, + contents, + contentsitem, + semaitem, + hkeyitem, + vkeyitem, + li_commentary_rows, + l_retcode, + li_head_top, + <f_excel_tab>. + + clear: + lo_error_w. + + unassign: + <line>, + <item>, + <f_excel_tab>. + +*--------------------------------------------------------------------* +* SESSION 5: SAVE AND CLOSE FILE +*--------------------------------------------------------------------* + +* ex of save path: 'FILE://C:\temp\test.xlsx' + concatenate 'FILE://' I_save_path + into ls_path. + + call method lo_proxy->save_document_to_url + EXPORTING + no_flush = 'X' + url = ls_path + IMPORTING + error = lo_error + retcode = lc_retcode + CHANGING + document_size = li_document_size. + + error_doi. + +* if save successfully -> raise successful message +* message i499(sy) with 'Document is Exported to ' p_path. + message i499(sy) with 'Data has been exported successfully'. + + clear: + ls_path, + li_document_size. + + close_document. + endmethod. + + + + + + + + method BIND_TABLE. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (wi p) 2012-12-01 +* - ... +* aligning code +* message made to support multilinguality +*--------------------------------------------------------------------* +* issue #237 - Check if overlapping areas exist +* - Alessandro Iannacci 2012-12-01 +* changes: - Added raise if overlaps are detected +*--------------------------------------------------------------------* + + CONSTANTS: + lc_top_left_column TYPE zexcel_cell_column_alpha VALUE 'B', + lc_top_left_row TYPE zexcel_cell_row VALUE 3. + + DATA: + lv_row_int TYPE zexcel_cell_row, + lv_first_row TYPE zexcel_cell_row, + lv_last_row TYPE zexcel_cell_row, + lv_column_int TYPE zexcel_cell_column, + lv_column_alpha TYPE zexcel_cell_column_alpha, + lt_field_catalog TYPE zexcel_t_fieldcatalog, + lv_id TYPE i, + lv_rows TYPE i, + lv_formula TYPE string, + ls_settings TYPE zexcel_s_table_settings, + lo_table TYPE REF TO zcl_excel_table, + lt_column_name_buffer TYPE SORTED TABLE OF string WITH UNIQUE KEY table_line, + lv_value TYPE string, + lv_syindex TYPE char3, + lv_errormessage TYPE string, "ins issue #237 + + lv_columns TYPE i, + lt_columns TYPE zexcel_t_fieldcatalog, + lv_maxcol TYPE i, + lv_maxrow TYPE i, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_curtable TYPE REF TO zcl_excel_table. + + FIELD-SYMBOLS: + <ls_field_catalog> TYPE zexcel_s_fieldcatalog, + <ls_field_catalog_custom> TYPE zexcel_s_fieldcatalog, + <fs_table_line> TYPE ANY, + <fs_fldval> TYPE ANY. + + ls_settings = is_table_settings. + + IF ls_settings-top_left_column IS INITIAL. + ls_settings-top_left_column = lc_top_left_column. + ENDIF. + + IF ls_settings-table_style IS INITIAL. + ls_settings-table_style = zcl_excel_table=>builtinstyle_medium2. + ENDIF. + + IF ls_settings-top_left_row IS INITIAL. + ls_settings-top_left_row = lc_top_left_row. + ENDIF. + + IF it_field_catalog IS NOT SUPPLIED. + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = ip_table ). + ELSE. + lt_field_catalog = it_field_catalog. + ENDIF. + + SORT lt_field_catalog BY position. + +*--------------------------------------------------------------------* +* issue #237 Check if overlapping areas exist Start +*--------------------------------------------------------------------* + "Get the number of columns for the current table + lt_columns = lt_field_catalog. + DELETE lt_columns WHERE dynpfld NE abap_true. + DESCRIBE TABLE lt_columns LINES lv_columns. + + "Calculate the top left row of the current table + lv_column_int = zcl_excel_common=>convert_column2int( ls_settings-top_left_column ). + lv_row_int = ls_settings-top_left_row. + + "Get number of row for the current table + DESCRIBE TABLE ip_table LINES lv_rows. + + "Calculate the bottom right row for the current table + lv_maxcol = lv_column_int + lv_columns - 1. + lv_maxrow = lv_row_int + lv_rows - 1. + ls_settings-bottom_right_column = zcl_excel_common=>convert_column2alpha( lv_maxcol ). + ls_settings-bottom_right_row = lv_maxrow. + + lv_column_int = zcl_excel_common=>convert_column2int( ls_settings-top_left_column ). + + lo_iterator = me->tables->if_object_collection~get_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + + lo_curtable ?= lo_iterator->if_object_collection_iterator~get_next( ). + IF ( ( ls_settings-top_left_row GE lo_curtable->settings-top_left_row AND ls_settings-top_left_row LE lo_curtable->settings-bottom_right_row ) + OR + ( ls_settings-bottom_right_row GE lo_curtable->settings-top_left_row AND ls_settings-bottom_right_row LE lo_curtable->settings-bottom_right_row ) + ) + AND + ( ( lv_column_int GE zcl_excel_common=>convert_column2int( lo_curtable->settings-top_left_column ) AND lv_column_int LE zcl_excel_common=>convert_column2int( lo_curtable->settings-bottom_right_column ) ) + OR + ( lv_maxcol GE zcl_excel_common=>convert_column2int( lo_curtable->settings-top_left_column ) AND lv_maxcol LE zcl_excel_common=>convert_column2int( lo_curtable->settings-bottom_right_column ) ) + ). + lv_errormessage = 'Table overlaps with previously bound table and will not be added to worksheet.'(400). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDWHILE. +*--------------------------------------------------------------------* +* issue #237 Check if overlapping areas exist End +*--------------------------------------------------------------------* + + CREATE OBJECT lo_table. + lo_table->settings = ls_settings. + lo_table->set_data( ir_data = ip_table ). + lv_id = me->excel->get_next_table_id( ). + lo_table->set_id( iv_id = lv_id ). +* lo_table->fieldcat = lt_field_catalog[]. + + me->tables->add( lo_table ). + +* It is better to loop column by column (only visible column) + LOOP AT lt_field_catalog ASSIGNING <ls_field_catalog> WHERE dynpfld EQ abap_true. + + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column_int ). + + " Due restrinction of new table object we cannot have two column with the same name + " Check if a column with the same name exists, if exists add a counter + " If no medium description is provided we try to use small or long +* lv_value = <ls_field_catalog>-scrtext_m. + IF <ls_field_catalog>-scrtext_m IS NOT INITIAL. + lv_value = <ls_field_catalog>-scrtext_m. + <ls_field_catalog>-scrtext_l = lv_value. + ELSEIF <ls_field_catalog>-scrtext_s IS NOT INITIAL. + lv_value = <ls_field_catalog>-scrtext_s. + <ls_field_catalog>-scrtext_l = lv_value. + ELSEIF <ls_field_catalog>-scrtext_l IS NOT INITIAL. + lv_value = <ls_field_catalog>-scrtext_l. + ELSE. + lv_value = 'Column'. " default value as Excel does + <ls_field_catalog>-scrtext_l = lv_value. + ENDIF. + WHILE 1 = 1. + + READ TABLE lt_column_name_buffer TRANSPORTING NO FIELDS WITH KEY table_line = lv_value BINARY SEARCH. + IF sy-subrc <> 0. + <ls_field_catalog>-scrtext_l = lv_value. + INSERT lv_value INTO TABLE lt_column_name_buffer. + EXIT. + ELSE. + lv_syindex = sy-index. + CONCATENATE <ls_field_catalog>-scrtext_l lv_syindex INTO lv_value. + ENDIF. + + ENDWHILE. + " First of all write column header + IF <ls_field_catalog>-style_header IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = lv_value + ip_style = <ls_field_catalog>-style_header ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = lv_value ). + ENDIF. + + ADD 1 TO lv_row_int. + LOOP AT ip_table ASSIGNING <fs_table_line>. + + ASSIGN COMPONENT <ls_field_catalog>-fieldname OF STRUCTURE <fs_table_line> TO <fs_fldval>. + " issue #290 Add formula support in table + IF <ls_field_catalog>-formula EQ abap_true. + IF <ls_field_catalog>-style IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = <fs_fldval> + ip_style = <ls_field_catalog>-style ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = <fs_fldval> ). + ENDIF. + ELSE. + IF <ls_field_catalog>-style IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = <fs_fldval> + ip_style = <ls_field_catalog>-style ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = <fs_fldval> ). + ENDIF. + ENDIF. + ADD 1 TO lv_row_int. + + ENDLOOP. + IF sy-subrc <> 0. "create empty row if table has no data + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = space ). + ADD 1 TO lv_row_int. + ENDIF. + +*--------------------------------------------------------------------* + " totals +*--------------------------------------------------------------------* + IF <ls_field_catalog>-totals_function IS NOT INITIAL. + lv_formula = lo_table->get_totals_formula( ip_column = <ls_field_catalog>-scrtext_l ip_function = <ls_field_catalog>-totals_function ). + IF <ls_field_catalog>-style_total IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = lv_formula + ip_style = <ls_field_catalog>-style_total ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = lv_formula ). + ENDIF. + ENDIF. + + lv_row_int = ls_settings-top_left_row. + ADD 1 TO lv_column_int. + +*--------------------------------------------------------------------* + " conditional formatting +*--------------------------------------------------------------------* + IF <ls_field_catalog>-cond_style IS NOT INITIAL. + lv_first_row = ls_settings-top_left_row + 1. " +1 to exclude header + lv_last_row = ls_settings-top_left_row + lv_rows. + <ls_field_catalog>-cond_style->set_range( ip_start_column = lv_column_alpha + ip_start_row = lv_first_row + ip_stop_column = lv_column_alpha + ip_stop_row = lv_last_row ). + ENDIF. + + ENDLOOP. + +*--------------------------------------------------------------------* + " Set field catalog +*--------------------------------------------------------------------* + lo_table->fieldcat = lt_field_catalog[]. + + es_table_settings = ls_settings. + es_table_settings-bottom_right_column = lv_column_alpha. + " >> Issue #291 + IF ip_table IS INITIAL. + es_table_settings-bottom_right_row = ls_settings-top_left_row + 2. "Last rows + ELSE. + es_table_settings-bottom_right_row = ls_settings-top_left_row + lv_rows + 1. "Last rows + ENDIF. + " << Issue #291 + + endmethod. + + + + + + + *--------------------------------------------------------------------* +* issue #293 - Roberto Bianco +* - Christian Assig 2014-03-14 +* +* changes: - Calculate widths using SAPscript font metrics +* (transaction SE73) +* - Calculate the width of dates +* - Add additional width for auto filter buttons +* - Add cell padding to simulate Excel behavior +*--------------------------------------------------------------------* +METHOD calculate_cell_width. + + CONSTANTS: + lc_default_font_name TYPE zexcel_style_font_name VALUE 'Calibri', "#EC NOTEXT + lc_default_font_height TYPE tdfontsize VALUE '110', + lc_excel_cell_padding TYPE float VALUE '0.75'. + + DATA: ld_cell_value TYPE zexcel_cell_value, + ld_current_character TYPE c LENGTH 1, + ld_style_guid TYPE zexcel_cell_style, + ls_stylemapping TYPE zexcel_s_stylemapping, + lo_table_object TYPE REF TO object, + lo_table TYPE REF TO zcl_excel_table, + ld_table_top_left_column TYPE zexcel_cell_column, + ld_table_bottom_right_column TYPE zexcel_cell_column, + ld_flag_contains_auto_filter TYPE abap_bool VALUE abap_false, + ld_flag_bold TYPE abap_bool VALUE abap_false, + ld_flag_italic TYPE abap_bool VALUE abap_false, + ld_date TYPE d, + ld_date_char TYPE c LENGTH 50, + ld_font_height TYPE tdfontsize VALUE lc_default_font_height, + lt_itcfc TYPE STANDARD TABLE OF itcfc, + ld_offset TYPE i, + ld_uccp TYPE i, + ls_font_metric TYPE mty_s_font_metric, + ld_width_from_font_metrics TYPE i, + ld_font_family TYPE itcfh-tdfamily, + ld_font_name TYPE zexcel_style_font_name VALUE lc_default_font_name, + lt_font_families LIKE STANDARD TABLE OF ld_font_family, + ls_font_cache TYPE mty_s_font_cache. + + FIELD-SYMBOLS: <ls_font_cache> TYPE mty_s_font_cache, + <ls_font_metric> TYPE mty_s_font_metric, + <ls_itcfc> TYPE itcfc. + + " Determine cell content and cell style + me->get_cell( EXPORTING ip_column = ip_column + ip_row = ip_row + IMPORTING ep_value = ld_cell_value + ep_guid = ld_style_guid ). + + " ABAP2XLSX uses tables to define areas containing headers and + " auto-filters. Find out if the current cell is in the header + " of one of these tables. + LOOP AT me->tables->collection INTO lo_table_object. + " Downcast: OBJECT -> ZCL_EXCEL_TABLE + lo_table ?= lo_table_object. + + " Convert column letters to corresponding integer values + ld_table_top_left_column = + zcl_excel_common=>convert_column2int( + lo_table->settings-top_left_column ). + + ld_table_bottom_right_column = + zcl_excel_common=>convert_column2int( + lo_table->settings-bottom_right_column ). + + " Is the current cell part of the table header? + IF ip_column BETWEEN ld_table_top_left_column AND + ld_table_bottom_right_column AND + ip_row EQ lo_table->settings-top_left_row. + " Current cell is part of the table header + " -> Assume that an auto filter is present and that the font is + " bold + ld_flag_contains_auto_filter = abap_true. + ld_flag_bold = abap_true. + ENDIF. + ENDLOOP. + + " If a style GUID is present, read style attributes + IF ld_style_guid IS NOT INITIAL. + TRY. + " Read style attributes + ls_stylemapping = me->excel->get_style_to_guid( ld_style_guid ). + + " If the current cell contains the default date format, + " convert the cell value to a date and calculate its length + IF ls_stylemapping-complete_style-number_format-format_code = + zcl_excel_style_number_format=>c_format_date_std. + + " Convert excel date to ABAP date + ld_date = + zcl_excel_common=>excel_string_to_date( ld_cell_value ). + + " Format ABAP date using user's formatting settings + WRITE ld_date TO ld_date_char. + + " Remember the formatted date to calculate the cell size + ld_cell_value = ld_date_char. + + ENDIF. + + " Read the font size and convert it to the font height + " used by SAPscript (multiplication by 10) + IF ls_stylemapping-complete_stylex-font-size = abap_true. + ld_font_height = ls_stylemapping-complete_style-font-size * 10. + ENDIF. + + " If set, remember the font name + IF ls_stylemapping-complete_stylex-font-name = abap_true. + ld_font_name = ls_stylemapping-complete_style-font-name. + ENDIF. + + " If set, remember whether font is bold and italic. + IF ls_stylemapping-complete_stylex-font-bold = abap_true. + ld_flag_bold = ls_stylemapping-complete_style-font-bold. + ENDIF. + + IF ls_stylemapping-complete_stylex-font-italic = abap_true. + ld_flag_italic = ls_stylemapping-complete_style-font-italic. + ENDIF. + + CATCH zcx_excel ##NO_HANDLER. + " Style GUID is present, but style was not found + " Continue with default values + + ENDTRY. + ENDIF. + + " Check if the same font (font name and font attributes) was already + " used before + READ TABLE mth_font_cache + WITH TABLE KEY + font_name = ld_font_name + font_height = ld_font_height + flag_bold = ld_flag_bold + flag_italic = ld_flag_italic + ASSIGNING <ls_font_cache>. + + IF sy-subrc <> 0. + " Font is used for the first time + " Add the font to our local font cache + ls_font_cache-font_name = ld_font_name. + ls_font_cache-font_height = ld_font_height. + ls_font_cache-flag_bold = ld_flag_bold. + ls_font_cache-flag_italic = ld_flag_italic. + INSERT ls_font_cache INTO TABLE mth_font_cache + ASSIGNING <ls_font_cache>. + + " Determine the SAPscript font family name from the Excel + " font name + SELECT tdfamily + FROM tfo01 + INTO TABLE lt_font_families + UP TO 1 ROWS + WHERE tdtext = ld_font_name. + + " Check if a matching font family was found + " Fonts can be uploaded from TTF files using transaction SE73 + IF lines( lt_font_families ) > 0. + READ TABLE lt_font_families INDEX 1 INTO ld_font_family. + + " Load font metrics (returns a table with the size of each letter + " in the font) + CALL FUNCTION 'LOAD_FONT' + EXPORTING + family = ld_font_family + height = ld_font_height + printer = 'SWIN' + bold = ld_flag_bold + italic = ld_flag_italic + TABLES + metric = lt_itcfc + EXCEPTIONS + font_family = 1 + codepage = 2 + device_type = 3 + OTHERS = 4. + IF sy-subrc <> 0. + CLEAR lt_itcfc. + ENDIF. + + " For faster access, convert each character number to the actual + " character, and store the characters and their sizes in a hash + " table + LOOP AT lt_itcfc ASSIGNING <ls_itcfc>. + ld_uccp = <ls_itcfc>-cpcharno. + ls_font_metric-char = + cl_abap_conv_in_ce=>uccpi( ld_uccp ). + ls_font_metric-char_width = <ls_itcfc>-tdcwidths. + INSERT ls_font_metric + INTO TABLE <ls_font_cache>-th_font_metrics. + ENDLOOP. + + ENDIF. + ENDIF. + + " Calculate the cell width + " If available, use font metrics + IF lines( <ls_font_cache>-th_font_metrics ) = 0. + " Font metrics are not available + " -> Calculate the cell width using only the font size + ep_width = + strlen( ld_cell_value ) * ld_font_height / lc_default_font_height + + lc_excel_cell_padding. + + ELSE. + " Font metrics are available + + " Calculate the size of the text by adding the sizes of each + " letter + DO strlen( ld_cell_value ) TIMES. + " Subtract 1, because the first character is at offset 0 + ld_offset = sy-index - 1. + + " Read the current character from the cell value + ld_current_character = ld_cell_value+ld_offset(1). + + " Look up the size of the current letter + READ TABLE <ls_font_cache>-th_font_metrics + WITH TABLE KEY char = ld_current_character + ASSIGNING <ls_font_metric>. + IF sy-subrc = 0. + " The size of the letter is known + " -> Add the actual size of the letter + ADD <ls_font_metric>-char_width TO ld_width_from_font_metrics. + ELSE. + " The size of the letter is unknown + " -> Add the font height as the default letter size + ADD ld_font_height TO ld_width_from_font_metrics. + ENDIF. + ENDDO. + + " Add cell padding (Excel makes columns a bit wider than the space + " that is needed for the text itself) and convert unit + " (division by 100) + ep_width = ld_width_from_font_metrics / 100 + lc_excel_cell_padding. + ENDIF. + + " If the current cell contains an auto filter, make it a bit wider. + " The size used by the auto filter button does not depend on the font + " size. + IF ld_flag_contains_auto_filter = abap_true. + ADD 2 TO ep_width. + ENDIF. + +ENDMETHOD. + + + + method CALCULATE_COLUMN_WIDTHS. + TYPES: + BEGIN OF t_auto_size, + col_index TYPE int4, + width TYPE float, + END OF t_auto_size. + TYPES: tt_auto_size TYPE TABLE OF t_auto_size. + + DATA: column_dimensions TYPE zexcel_t_worksheet_columndime. + DATA: column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + + DATA: auto_size TYPE flag. + DATA: auto_sizes TYPE tt_auto_size. +* DATA: col_alpha TYPE zexcel_cell_column_alpha." issue #155 - less restrictive typing for ip_column + DATA: cell_value TYPE zexcel_cell_value. + DATA: cell_style TYPE REF TO zcl_excel_style. + DATA: count TYPE int4. + DATA: highest_row TYPE int4. + DATA: width TYPE float. + + FIELD-SYMBOLS: <column_dimension> LIKE LINE OF column_dimensions. + FIELD-SYMBOLS: <auto_size> LIKE LINE OF auto_sizes. + + column_dimensions[] = me->get_column_dimensions( ). + LOOP AT column_dimensions ASSIGNING <column_dimension>. + auto_size = <column_dimension>-column_dimension->get_auto_size( ). + IF auto_size = abap_true. + APPEND INITIAL LINE TO auto_sizes ASSIGNING <auto_size>. + <auto_size>-col_index = <column_dimension>-column_dimension->get_column_index( ). + <auto_size>-width = -1. + ENDIF. + ENDLOOP. + + " There is only something to do if there are some auto-size columns + IF NOT auto_sizes IS INITIAL. + highest_row = me->get_highest_row( ). + LOOP AT auto_sizes ASSIGNING <auto_size>. +* col_alpha = zcl_excel_common=>convert_column2alpha( <auto_size>-col_index )." issue #155 - less restrictive typing for ip_column + count = 1. + WHILE count <= highest_row. +* Start of change # issue 139 - Dateretention of cellstyles +* IF cell_style IS BOUND. +* CREATE OBJECT cell_style. +* ENDIF. +* me->get_cell( +* EXPORTING +* ip_column = col_alpha " Cell Column +* ip_row = count " Cell Row +* IMPORTING +* ep_value = cell_value " Cell Value +* ep_style = cell_style " Request Cell Style as well +* ). +* " For an easy start we just take the number of characters as the width +* width = strlen( cell_value ). +* " Addition to solve issue #120, contribution by Stefan Schm#ƒÂ#cker +* " Calculate width using Font Size and Font Type +* IF cell_style IS BOUND +* AND cell_style->font IS BOUND. +* width = cell_style->font->calculate_text_width( cell_value ). +* ENDIF. +* width = calculate_cell_width( ip_column = col_alpha " issue #155 - less restrictive typing for ip_column + width = calculate_cell_width( ip_column = <auto_size>-col_index " issue #155 - less restrictive typing for ip_column + ip_row = count ). +* End of change # issue 139 - Dateretention of cellstyles + IF width > <auto_size>-width. + <auto_size>-width = width. + ENDIF. + count = count + 1. + ENDWHILE. +* column_dimension = me->get_column_dimension( col_alpha ). " issue #155 - less restrictive typing for ip_column + column_dimension = me->get_column_dimension( <auto_size>-col_index ). " issue #155 - less restrictive typing for ip_column + column_dimension->set_width( <auto_size>-width ). + ENDLOOP. + ENDIF. + + endmethod. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + METHOD change_cell_style. + " issue # 139 + DATA: stylemapping TYPE zexcel_s_stylemapping, + + complete_style TYPE zexcel_s_cstyle_complete, + complete_stylex TYPE zexcel_s_cstylex_complete, + + borderx TYPE zexcel_s_cstylex_border, + l_guid TYPE zexcel_cell_style. "issue # 177 + +* We have a lot of parameters. Use some macros to make the coding more structured + + DEFINE clear_initial_colorxfields. + if &1-rgb is initial. + clear &2-rgb. + endif. + if &1-indexed is initial. + clear &2-indexed. + endif. + if &1-theme is initial. + clear &2-theme. + endif. + if &1-tint is initial. + clear &2-tint. + endif. + END-OF-DEFINITION. + + DEFINE move_supplied_borders. + if ip_&1 is supplied. " only act if parameter was supplied + if ip_x&1 is supplied. " + borderx = ip_x&1. " use supplied x-parameter + else. + clear borderx with 'X'. +* clear in a way that would be expected to work easily + if ip_&1-border_style is initial. + clear borderx-border_style. + endif. + clear_initial_colorxfields ip_&1-border_color borderx-border_color. + endif. + move-corresponding ip_&1 to complete_style-&2. + move-corresponding borderx to complete_stylex-&2. + endif. + END-OF-DEFINITION. + +* First get current stylsettings + TRY. + me->get_cell( EXPORTING ip_column = ip_column " Cell Column + ip_row = ip_row " Cell Row + IMPORTING ep_guid = l_guid )." Cell Value ). "issue # 177 + + + stylemapping = me->excel->get_style_to_guid( l_guid ). "issue # 177 + complete_style = stylemapping-complete_style. + complete_stylex = stylemapping-complete_stylex. + CATCH zcx_excel. +* Error --> use submitted style + ENDTRY. + +* move_supplied_multistyles: complete. + IF ip_complete IS SUPPLIED. + IF ip_xcomplete IS NOT SUPPLIED. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Complete styleinfo has to be supplied with corresponding X-field'. + ENDIF. + MOVE-CORRESPONDING ip_complete TO complete_style. + MOVE-CORRESPONDING ip_xcomplete TO complete_stylex. + ENDIF. + + + + IF ip_font IS SUPPLIED. + DATA: fontx LIKE ip_xfont. + IF ip_xfont IS SUPPLIED. + fontx = ip_xfont. + ELSE. +* Only supplied values should be used - exception: Flags bold and italic strikethrough underline + MOVE 'X' TO: fontx-bold, + fontx-italic, + fontx-strikethrough, + fontx-underline_mode. + CLEAR fontx-color WITH 'X'. + clear_initial_colorxfields ip_font-color fontx-color. + IF ip_font-family IS NOT INITIAL. + fontx-family = 'X'. + ENDIF. + IF ip_font-name IS NOT INITIAL. + fontx-name = 'X'. + ENDIF. + IF ip_font-scheme IS NOT INITIAL. + fontx-scheme = 'X'. + ENDIF. + IF ip_font-size IS NOT INITIAL. + fontx-size = 'X'. + ENDIF. + IF ip_font-underline_mode IS NOT INITIAL. + fontx-underline_mode = 'X'. + ENDIF. + ENDIF. + MOVE-CORRESPONDING ip_font TO complete_style-font. + MOVE-CORRESPONDING fontx TO complete_stylex-font. +* Correction for undeline mode + ENDIF. + + IF ip_fill IS SUPPLIED. + DATA: fillx LIKE ip_xfill. + IF ip_xfill IS SUPPLIED. + fillx = ip_xfill. + ELSE. + CLEAR fillx WITH 'X'. + IF ip_fill-filltype IS INITIAL. + CLEAR fillx-filltype. + ENDIF. + clear_initial_colorxfields ip_fill-fgcolor fillx-fgcolor. + clear_initial_colorxfields ip_fill-bgcolor fillx-bgcolor. + + ENDIF. + MOVE-CORRESPONDING ip_fill TO complete_style-fill. + MOVE-CORRESPONDING fillx TO complete_stylex-fill. + ENDIF. + + + IF ip_borders IS SUPPLIED. + DATA: bordersx LIKE ip_xborders. + IF ip_xborders IS SUPPLIED. + bordersx = ip_xborders. + ELSE. + CLEAR bordersx WITH 'X'. + IF ip_borders-allborders-border_style IS INITIAL. + CLEAR bordersx-allborders-border_style. + ENDIF. + IF ip_borders-diagonal-border_style IS INITIAL. + CLEAR bordersx-diagonal-border_style. + ENDIF. + IF ip_borders-down-border_style IS INITIAL. + CLEAR bordersx-down-border_style. + ENDIF. + IF ip_borders-left-border_style IS INITIAL. + CLEAR bordersx-left-border_style. + ENDIF. + IF ip_borders-right-border_style IS INITIAL. + CLEAR bordersx-right-border_style. + ENDIF. + IF ip_borders-top-border_style IS INITIAL. + CLEAR bordersx-top-border_style. + ENDIF. + clear_initial_colorxfields ip_borders-allborders-border_color bordersx-allborders-border_color. + clear_initial_colorxfields ip_borders-diagonal-border_color bordersx-diagonal-border_color. + clear_initial_colorxfields ip_borders-down-border_color bordersx-down-border_color. + clear_initial_colorxfields ip_borders-left-border_color bordersx-left-border_color. + clear_initial_colorxfields ip_borders-right-border_color bordersx-right-border_color. + clear_initial_colorxfields ip_borders-top-border_color bordersx-top-border_color. + + ENDIF. + MOVE-CORRESPONDING ip_borders TO complete_style-borders. + MOVE-CORRESPONDING bordersx TO complete_stylex-borders. + ENDIF. + + IF ip_alignment IS SUPPLIED. + DATA: alignmentx LIKE ip_xalignment. + IF ip_xalignment IS SUPPLIED. + alignmentx = ip_xalignment. + ELSE. + CLEAR alignmentx WITH 'X'. + IF ip_alignment-horizontal IS INITIAL. + CLEAR alignmentx-horizontal. + ENDIF. + IF ip_alignment-vertical IS INITIAL. + CLEAR alignmentx-vertical. + ENDIF. + ENDIF. + MOVE-CORRESPONDING ip_alignment TO complete_style-alignment. + MOVE-CORRESPONDING alignmentx TO complete_stylex-alignment. + ENDIF. + + IF ip_protection IS SUPPLIED. + MOVE-CORRESPONDING ip_protection TO complete_style-protection. + IF ip_xprotection IS SUPPLIED. + MOVE-CORRESPONDING ip_xprotection TO complete_stylex-protection. + ELSE. + IF ip_protection-hidden IS NOT INITIAL. + complete_stylex-protection-hidden = 'X'. + ENDIF. + IF ip_protection-locked IS NOT INITIAL. + complete_stylex-protection-locked = 'X'. + ENDIF. + ENDIF. + ENDIF. + + + move_supplied_borders : borders_allborders borders-allborders, + borders_diagonal borders-diagonal , + borders_down borders-down , + borders_left borders-left , + borders_right borders-right , + borders_top borders-top . + + DEFINE move_supplied_singlestyles. + if ip_&1 is supplied. + complete_style-&2 = ip_&1. + complete_stylex-&2 = 'X'. + endif. + END-OF-DEFINITION. + + move_supplied_singlestyles: number_format_format_code number_format-format_code, + font_bold font-bold, + font_color font-color, + font_color_rgb font-color-rgb, + font_color_indexed font-color-indexed, + font_color_theme font-color-theme, + font_color_tint font-color-tint, + + font_family font-family, + font_italic font-italic, + font_name font-name, + font_scheme font-scheme, + font_size font-size, + font_strikethrough font-strikethrough, + font_underline font-underline, + font_underline_mode font-underline_mode, + fill_filltype fill-filltype, + fill_rotation fill-rotation, + fill_fgcolor fill-fgcolor, + fill_fgcolor_rgb fill-fgcolor-rgb, + fill_fgcolor_indexed fill-fgcolor-indexed, + fill_fgcolor_theme fill-fgcolor-theme, + fill_fgcolor_tint fill-fgcolor-tint, + + fill_bgcolor fill-bgcolor, + fill_bgcolor_rgb fill-bgcolor-rgb, + fill_bgcolor_indexed fill-bgcolor-indexed, + fill_bgcolor_theme fill-bgcolor-theme, + fill_bgcolor_tint fill-bgcolor-tint, + + borders_diagonal_mode borders-diagonal_mode, + alignment_horizontal alignment-horizontal, + alignment_vertical alignment-vertical, + alignment_textrotation alignment-textrotation, + alignment_wraptext alignment-wraptext, + alignment_shrinktofit alignment-shrinktofit, + alignment_indent alignment-indent, + protection_hidden protection-hidden, + protection_locked protection-locked, + + borders_allborders_style borders-allborders-border_style, + borders_allborders_color borders-allborders-border_color, + borders_allbo_color_rgb borders-allborders-border_color-rgb, + borders_allbo_color_indexed borders-allborders-border_color-indexed, + borders_allbo_color_theme borders-allborders-border_color-theme, + borders_allbo_color_tint borders-allborders-border_color-tint, + + borders_diagonal_style borders-diagonal-border_style, + borders_diagonal_color borders-diagonal-border_color, + borders_diagonal_color_rgb borders-diagonal-border_color-rgb, + borders_diagonal_color_inde borders-diagonal-border_color-indexed, + borders_diagonal_color_them borders-diagonal-border_color-theme, + borders_diagonal_color_tint borders-diagonal-border_color-tint, + + borders_down_style borders-down-border_style, + borders_down_color borders-down-border_color, + borders_down_color_rgb borders-down-border_color-rgb, + borders_down_color_indexed borders-down-border_color-indexed, + borders_down_color_theme borders-down-border_color-theme, + borders_down_color_tint borders-down-border_color-tint, + + borders_left_style borders-left-border_style, + borders_left_color borders-left-border_color, + borders_left_color_rgb borders-left-border_color-rgb, + borders_left_color_indexed borders-left-border_color-indexed, + borders_left_color_theme borders-left-border_color-theme, + borders_left_color_tint borders-left-border_color-tint, + + borders_right_style borders-right-border_style, + borders_right_color borders-right-border_color, + borders_right_color_rgb borders-right-border_color-rgb, + borders_right_color_indexed borders-right-border_color-indexed, + borders_right_color_theme borders-right-border_color-theme, + borders_right_color_tint borders-right-border_color-tint, + + borders_top_style borders-top-border_style, + borders_top_color borders-top-border_color, + borders_top_color_rgb borders-top-border_color-rgb, + borders_top_color_indexed borders-top-border_color-indexed, + borders_top_color_theme borders-top-border_color-theme, + borders_top_color_tint borders-top-border_color-tint. + + +* Now we have a completly filled styles. +* This can be used to get the guid +* Return guid if requested. Might be used if copy&paste of styles is requested + ep_guid = me->excel->get_static_cellstyle_guid( ip_cstyle_complete = complete_style + ip_cstylex_complete = complete_stylex ). + me->set_cell_style( ip_column = ip_column + ip_row = ip_row + ip_style = ep_guid ). + +ENDMETHOD. + + + + + + method CONSTRUCTOR. + DATA: lv_title TYPE zexcel_sheet_title. + + me->excel = ip_excel. + + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = me->guid. + + IF ip_title IS NOT INITIAL. + lv_title = ip_title. + ELSE. +* lv_title = me->guid. " del issue #154 - Names of worksheets + lv_title = me->generate_title( ). " ins issue #154 - Names of worksheets + ENDIF. + + me->set_title( ip_title = lv_title ). + + CREATE OBJECT sheet_setup. + CREATE OBJECT conditional_styles. + CREATE OBJECT data_validations. + CREATE OBJECT tables. + CREATE OBJECT ranges. " issue #163 + CREATE OBJECT drawings + EXPORTING + ip_type = zcl_excel_drawing=>type_image. + CREATE OBJECT charts + EXPORTING + ip_type = zcl_excel_drawing=>type_chart. + me->zif_excel_sheet_protection~initialize( ). + me->zif_excel_sheet_properties~initialize( ). + CREATE OBJECT hyperlinks. + +* initialize active cell coordinates + active_cell-cell_row = 1. + active_cell-cell_column = 1. + +* inizialize dimension range + lower_cell-cell_row = 1. + lower_cell-cell_column = 1. + upper_cell-cell_row = 1. + upper_cell-cell_column = 1. + + endmethod. + + + method DELETE_MERGE. + + DELETE sheet_content_merge INDEX 1. + DELETE sheet_content_merge INDEX 1. + + endmethod. + + + + + + method FREEZE_PANES. + data: lv_xsplit type i, + lv_ysplit type i. + + IF ip_num_columns IS NOT SUPPLIED AND ip_num_rows IS NOT SUPPLIED. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Pleas provide number of rows and/or columns to freeze'. + ENDIF. + + IF ip_num_columns IS SUPPLIED AND ip_num_columns <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Number of columns to freeze should be positive'. + ENDIF. + + IF ip_num_rows IS SUPPLIED AND ip_num_rows <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Number of rows to freeze should be positive'. + ENDIF. + + freeze_pane_cell_column = ip_num_columns + 1. + freeze_pane_cell_row = ip_num_rows + 1. + endmethod. + + + + method GENERATE_TITLE. + DATA: lo_worksheets_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + errormessage TYPE string. + + DATA: t_titles TYPE HASHED TABLE OF zexcel_sheet_title WITH UNIQUE KEY table_line, + title TYPE zexcel_sheet_title, + sheetnumber TYPE i. + +* Get list of currently used titles + lo_worksheets_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_worksheets_iterator->has_next( ) = abap_true. + lo_worksheet ?= lo_worksheets_iterator->get_next( ). + title = lo_worksheet->get_title( ). + INSERT title INTO TABLE t_titles. + ADD 1 TO sheetnumber. + ENDWHILE. + +* Now build sheetnumber. Increase counter until we hit a number that is not used so far + ADD 1 TO sheetnumber. " Start counting with next number + DO. + title = sheetnumber. + SHIFT title LEFT DELETING LEADING space. + CONCATENATE 'Sheet'(001) title INTO ep_title. + INSERT ep_title INTO TABLE t_titles. + IF sy-subrc = 0. " Title not used so far --> take it + EXIT. + ENDIF. + + ADD 1 TO sheetnumber. + ENDDO. + endmethod. + + + + + method GET_ACTIVE_CELL. + + DATA: lv_active_column TYPE zexcel_cell_column_alpha, + lv_active_row TYPE string. + + lv_active_column = zcl_excel_common=>convert_column2alpha( active_cell-cell_column ). + lv_active_row = active_cell-cell_row. + SHIFT lv_active_row RIGHT DELETING TRAILING space. + SHIFT lv_active_row LEFT DELETING LEADING space. + CONCATENATE lv_active_column lv_active_row INTO ep_active_cell. + + endmethod. + + + + + + + + + + method GET_CELL. + + DATA: lv_column TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + + READ TABLE sheet_content INTO ls_sheet_content WITH TABLE KEY cell_row = ip_row + cell_column = lv_column. + + ep_rc = sy-subrc. + ep_value = ls_sheet_content-cell_value. + ep_guid = ls_sheet_content-cell_style. " issue 139 - added this to be used for columnwidth calculation + + " Addition to solve issue #120, contribution by Stefan Schm#ƒÂ#cker + DATA: style_iterator TYPE REF TO cl_object_collection_iterator, + style TYPE REF TO zcl_excel_style. + IF ep_style IS REQUESTED. + style_iterator = me->excel->get_styles_iterator( ). + WHILE style_iterator->has_next( ) = 'X'. + style ?= style_iterator->get_next( ). + IF style->get_guid( ) = ls_sheet_content-cell_style. + ep_style = style. + EXIT. + ENDIF. + ENDWHILE. + ENDIF. + endmethod. + + + + + + method GET_COLUMN_DIMENSION. + FIELD-SYMBOLS: <fs_column_dimension> LIKE LINE OF column_dimensions. + DATA: lv_column_alpha TYPE zexcel_cell_column_alpha. " issue #155 - less restrictive typing for ip_column + + lv_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column )." issue #155 - less restrictive typing for ip_column + READ TABLE me->column_dimensions ASSIGNING <fs_column_dimension> + WITH KEY column = lv_column_alpha. " issue #155 - less restrictive typing for ip_column + + IF NOT <fs_column_dimension> IS ASSIGNED. + CREATE OBJECT r_column_dimension + EXPORTING + ip_index = lv_column_alpha " issue #155 - less restrictive typing for ip_column + ip_excel = me->excel " issue #157 - Allow style for columns + ip_worksheet = me. " issue #157 - Allow style for columns + APPEND INITIAL LINE TO me->column_dimensions ASSIGNING <fs_column_dimension>. + <fs_column_dimension>-column = lv_column_alpha. " issue #155 - less restrictive typing for ip_column + <fs_column_dimension>-column_dimension = r_column_dimension. + ELSE. + r_column_dimension = <fs_column_dimension>-column_dimension. + ENDIF. + + endmethod. + + + + method GET_COLUMN_DIMENSIONS. + r_column_dimension[] = me->column_dimensions[]. + endmethod. + + + + method GET_COND_STYLES_ITERATOR. + + eo_iterator = me->conditional_styles->get_iterator( ). + endmethod. + + + + method GET_DATA_VALIDATIONS_ITERATOR. + + eo_iterator = me->data_validations->get_iterator( ). + endmethod. + + + + method GET_DATA_VALIDATIONS_SIZE. + ep_size = me->data_validations->size( ). + endmethod. + + + + method GET_DEFAULT_COLUMN_DIMENSION. + IF me->default_column_dimension IS NOT BOUND. + CREATE OBJECT me->default_column_dimension + EXPORTING + ip_index = 'A' " ???? + ip_worksheet = me + ip_excel = me->excel. + ENDIF. + + r_column_dimension = me->default_column_dimension. + endmethod. + + + + method GET_DEFAULT_EXCEL_DATE_FORMAT. + CONSTANTS: c_lang_e TYPE lang VALUE 'E'. + + IF default_excel_date_format IS NOT INITIAL. + ep_default_excel_date_format = default_excel_date_format. + RETURN. + ENDIF. + + "try to get defaults + TRY. + cl_abap_datfm=>get_date_format_des( EXPORTING im_langu = c_lang_e + IMPORTING ex_dateformat = default_excel_date_format ). + CATCH cx_abap_datfm_format_unknown. + + ENDTRY. + + " and fallback to fixed format + IF default_excel_date_format IS INITIAL. + default_excel_date_format = zcl_excel_style_number_format=>c_format_date_ddmmyyyydot. + ENDIF. + + ep_default_excel_date_format = default_excel_date_format. + endmethod. + + + + method GET_DEFAULT_EXCEL_TIME_FORMAT. + DATA: l_timefm TYPE xutimefm. + + IF default_excel_time_format IS NOT INITIAL. + ep_default_excel_time_format = default_excel_time_format. + RETURN. + ENDIF. + +* Let's get default + l_timefm = cl_abap_timefm=>get_environment_timefm( ). + CASE l_timefm. + WHEN 0. +*0 24 Hour Format (Example: 12:05:10) + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time6. + WHEN 1. +*1 12 Hour Format (Example: 12:05:10 PM) + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN 2. +*2 12 Hour Format (Example: 12:05:10 pm) for now all the same. no chnage upper lower + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN 3. +*3 Hours from 0 to 11 (Example: 00:05:10 PM) for now all the same. no chnage upper lower + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN 4. +*4 Hours from 0 to 11 (Example: 00:05:10 pm) for now all the same. no chnage upper lower + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN OTHERS. + " and fallback to fixed format + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time6. + ENDCASE. + + ep_default_excel_time_format = default_excel_time_format. + endmethod. + + + + method GET_DEFAULT_ROW_DIMENSION. + IF me->default_row_dimension IS NOT BOUND. + CREATE OBJECT me->default_row_dimension. + ENDIF. + + r_row_dimension = me->default_row_dimension. + endmethod. + + + + + method GET_DIMENSION_RANGE. + + me->update_dimension_range( ). + IF upper_cell EQ lower_cell. "only one cell + " Worksheet not filled +* IF upper_cell-cell_coords = '0'. + IF upper_cell-cell_coords IS INITIAL. + ep_dimension_range = 'A1'. + ELSE. + ep_dimension_range = upper_cell-cell_coords. + ENDIF. + ELSE. + CONCATENATE upper_cell-cell_coords ':' lower_cell-cell_coords INTO ep_dimension_range. + ENDIF. + + endmethod. + + + + + method GET_DRAWINGS. + + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + lo_iterator TYPE REF TO cl_object_collection_iterator. + + CASE ip_type. + WHEN zcl_excel_drawing=>type_image. + r_drawings = drawings. + WHEN zcl_excel_drawing=>type_chart. + r_drawings = charts. + WHEN space. + CREATE OBJECT r_drawings + EXPORTING + ip_type = ''. + + lo_iterator = drawings->get_iterator( ). + WHILE lo_iterator->has_next( ) = abap_true. + lo_drawing ?= lo_iterator->get_next( ). + r_drawings->include( lo_drawing ). + ENDWHILE. + lo_iterator = charts->get_iterator( ). + WHILE lo_iterator->has_next( ) = abap_true. + lo_drawing ?= lo_iterator->get_next( ). + r_drawings->include( lo_drawing ). + ENDWHILE. + WHEN OTHERS. + ENDCASE. + endmethod. + + + + + method GET_DRAWINGS_ITERATOR. + CASE ip_type. + WHEN zcl_excel_drawing=>type_image. + eo_iterator = drawings->get_iterator( ). + WHEN zcl_excel_drawing=>type_chart. + eo_iterator = charts->get_iterator( ). + ENDCASE. + endmethod. + + + + + method GET_FREEZE_CELL. + ep_row = me->freeze_pane_cell_row. + ep_column = me->freeze_pane_cell_column. + endmethod. + + + + method GET_GUID. + + ep_guid = me->guid. + + endmethod. + + + + + method GET_HIGHEST_COLUMN. + me->update_dimension_range( ). + r_highest_column = me->lower_cell-cell_column. + endmethod. + + + + + method GET_HIGHEST_ROW. + me->update_dimension_range( ). + r_highest_row = me->lower_cell-cell_row. + endmethod. + + + + method GET_HYPERLINKS_ITERATOR. + eo_iterator = hyperlinks->get_iterator( ). + endmethod. + + + + method GET_HYPERLINKS_SIZE. + ep_size = hyperlinks->size( ). + endmethod. + + + + + method GET_MERGE. + + DATA: lv_column_start TYPE string, + lv_column_end TYPE string, + lv_row TYPE string, + lv_index TYPE sy-tabix, + ls_sheet_content TYPE zexcel_s_cell_data, + range_from TYPE string, + range_to TYPE string, + lv_merge_range TYPE string, + lv_count TYPE string. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + DESCRIBE TABLE sheet_content_merge LINES lv_count. + + WHILE lv_count GT lv_index. +* LOOP AT sheet_content_merge ASSIGNING <fs_sheet_content>. + lv_index = lv_index + 1. + READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX lv_index. + lv_column_start = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). + lv_row = <fs_sheet_content>-cell_row. + SHIFT lv_column_start RIGHT DELETING TRAILING space. + SHIFT lv_column_start LEFT DELETING LEADING space. + SHIFT lv_row RIGHT DELETING TRAILING space. + SHIFT lv_row LEFT DELETING LEADING space. + CONCATENATE lv_column_start lv_row + INTO range_from. + + lv_index = lv_index + 1. + READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX lv_index. + lv_column_end = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). + lv_row = <fs_sheet_content>-cell_row. + SHIFT lv_column_end RIGHT DELETING TRAILING space. + SHIFT lv_column_end LEFT DELETING LEADING space. + SHIFT lv_row RIGHT DELETING TRAILING space. + SHIFT lv_row LEFT DELETING LEADING space. + CONCATENATE lv_column_end lv_row + INTO range_to. + + CONCATENATE range_from range_to INTO lv_merge_range + SEPARATED BY ':'. + APPEND lv_merge_range TO merge_range. + ENDWHILE. +* ENDLOOP. + +* READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX 1. +* IF sy-subrc EQ 0 AND <fs_sheet_content> IS ASSIGNED. +* lv_column_start = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). +* lv_row = <fs_sheet_content>-cell_row. +* SHIFT lv_column_start RIGHT DELETING TRAILING space. +* SHIFT lv_column_start LEFT DELETING LEADING space. +* SHIFT lv_row RIGHT DELETING TRAILING space. +* SHIFT lv_row LEFT DELETING LEADING space. +* CONCATENATE lv_column_start lv_row +* INTO range_from. +* ENDIF. +* READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX 2. +* IF sy-subrc EQ 0 AND <fs_sheet_content> IS ASSIGNED. +* lv_column_end = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). +* SHIFT lv_column_end RIGHT DELETING TRAILING space. +* SHIFT lv_column_end LEFT DELETING LEADING space. +* CONCATENATE lv_column_end lv_row +* INTO range_to. +* ENDIF. + +* IF range_from NE space AND range_to NE space. +* CONCATENATE range_from range_to INTO ep_merge_range +* SEPARATED BY ':'. +* ENDIF. + + endmethod. + + + + method GET_RANGES_ITERATOR. + + eo_iterator = me->ranges->get_iterator( ). + + endmethod. + + + + + method GET_ROW_DIMENSION. + FIELD-SYMBOLS: <fs_row_dimension> LIKE LINE OF row_dimensions. + + READ TABLE me->row_dimensions ASSIGNING <fs_row_dimension> + WITH KEY row = ip_row. + + IF NOT <fs_row_dimension> IS ASSIGNED. + CREATE OBJECT r_row_dimension + EXPORTING + ip_index = ip_row. + APPEND INITIAL LINE TO me->row_dimensions ASSIGNING <fs_row_dimension>. + <fs_row_dimension>-row = ip_row. + <fs_row_dimension>-row_dimension = r_row_dimension. + ELSE. + r_row_dimension = <fs_row_dimension>-row_dimension. + ENDIF. + + endmethod. + + + + method GET_ROW_DIMENSIONS. + r_row_dimension[] = me->row_dimensions[]. + endmethod. + + + + method GET_TABCOLOR. + ev_tabcolor = me->tabcolor. + endmethod. + + + + method GET_TABLES_ITERATOR. + eo_iterator = tables->if_object_collection~get_iterator( ). + endmethod. + + + + method GET_TABLES_SIZE. + ep_size = tables->if_object_collection~size( ). + endmethod. + + + + + method GET_TITLE. + DATA lv_value TYPE string. + IF ip_escaped EQ abap_true. + lv_value = me->title. + ep_title = zcl_excel_common=>escape_string( lv_value ). + ELSE. + ep_title = me->title. + ENDIF. + endmethod. + + + + + + method GET_VALUE_TYPE. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + ls_dfies TYPE dfies, + l_function TYPE funcname, + l_value(50) TYPE c. + + ep_value = ip_value. + ep_value_type = cl_abap_typedescr=>typekind_string. " Thats our default if something goes wrong. + + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ip_value ). + CATCH cx_sy_move_cast_error. + CLEAR lo_addit. + ENDTRY. + IF lo_addit IS BOUND. + lo_addit->get_ddic_field( RECEIVING p_flddescr = ls_dfies + EXCEPTIONS not_found = 1 + no_ddic_type = 2 + OTHERS = 3 ) . + IF sy-subrc = 0. + ep_value_type = ls_dfies-inttype. + + IF ls_dfies-convexit IS NOT INITIAL. +* We need to convert with output conversion function + CONCATENATE 'CONVERSION_EXIT_' ls_dfies-convexit '_OUTPUT' INTO l_function. + SELECT SINGLE funcname INTO l_function + FROM tfdir + WHERE funcname = l_function. + IF sy-subrc = 0. + CALL FUNCTION l_function + EXPORTING + input = ip_value + IMPORTING +* LONG_TEXT = + output = l_value +* SHORT_TEXT = + EXCEPTIONS + OTHERS = 1. + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ELSE. + ep_value = l_value. + ENDIF. + ENDIF. + ENDIF. + ELSE. + ep_value_type = lo_addit->get_data_type_kind( ip_value ). + ENDIF. + ENDIF. + + endmethod. + + + method PRINT_TITLE_SET_RANGE. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +*--------------------------------------------------------------------* + + + DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range, + lv_repeat_range_sheetname TYPE string, + lv_repeat_range_col TYPE string, + lv_row_char_from TYPE char10, + lv_row_char_to TYPE char10, + lv_repeat_range_row TYPE string, + lv_repeat_range TYPE string. + + +*--------------------------------------------------------------------* +* Get range that represents printarea +* if non-existant, create it +*--------------------------------------------------------------------* + lo_range_iterator = me->get_ranges_iterator( ). + WHILE lo_range_iterator->has_next( ) = abap_true. + + lo_range ?= lo_range_iterator->get_next( ). + IF lo_range->name = zif_excel_sheet_printsettings=>gcv_print_title_name. + EXIT. " Found it + ENDIF. + CLEAR lo_range. + + ENDWHILE. + + + IF me->print_title_col_from IS INITIAL AND + me->print_title_row_from IS INITIAL. +*--------------------------------------------------------------------* +* No print titles are present, +*--------------------------------------------------------------------* + IF lo_range IS BOUND. + me->ranges->remove( lo_range ). + ENDIF. + ELSE. +*--------------------------------------------------------------------* +* Print titles are present, +*--------------------------------------------------------------------* + IF lo_range IS NOT BOUND. + lo_range = me->add_new_range( ). + lo_range->name = zif_excel_sheet_printsettings=>gcv_print_title_name. + ENDIF. + + lv_repeat_range_sheetname = me->get_title( ). + lv_repeat_range_sheetname = zcl_excel_common=>escape_string( lv_repeat_range_sheetname ). + +*--------------------------------------------------------------------* +* Repeat-columns +*--------------------------------------------------------------------* + IF me->print_title_col_from IS NOT INITIAL. + CONCATENATE lv_repeat_range_sheetname + '!$' me->print_title_col_from + ':$' me->print_title_col_to + INTO lv_repeat_range_col. + ENDIF. + +*--------------------------------------------------------------------* +* Repeat-rows +*--------------------------------------------------------------------* + IF me->print_title_row_from IS NOT INITIAL. + lv_row_char_from = me->print_title_row_from. + lv_row_char_to = me->print_title_row_to. + CONCATENATE '!$' lv_row_char_from + ':$' lv_row_char_to + INTO lv_repeat_range_row. + CONDENSE lv_repeat_range_row NO-GAPS. + CONCATENATE lv_repeat_range_sheetname + lv_repeat_range_row + INTO lv_repeat_range_row. + ENDIF. + +*--------------------------------------------------------------------* +* Concatenate repeat-rows and columns +*--------------------------------------------------------------------* + IF lv_repeat_range_col IS INITIAL. + lv_repeat_range = lv_repeat_range_row. + ELSEIF lv_repeat_range_row IS INITIAL. + lv_repeat_range = lv_repeat_range_col. + ELSE. + CONCATENATE lv_repeat_range_col lv_repeat_range_row + INTO lv_repeat_range SEPARATED BY ','. + ENDIF. + + + lo_range->set_range_value( lv_repeat_range ). + ENDIF. + + + + endmethod. + + + + + + + + + + + + method SET_CELL. + + DATA: lv_column TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data, + lv_row_alpha TYPE string, + lv_col_alpha TYPE zexcel_cell_column_alpha, + lv_value TYPE zexcel_cell_value, + lv_data_type TYPE zexcel_cell_data_type, + lv_value_type TYPE abap_typekind, + lo_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style, + lo_addit TYPE REF TO cl_abap_elemdescr, + lo_value TYPE REF TO data, + lo_value_new TYPE REF TO data. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data, + <fs_numeric> TYPE numeric, + <fs_date> TYPE d, + <fs_time> TYPE t, + <fs_value> TYPE simple. + + IF ip_value IS NOT SUPPLIED AND ip_formula IS NOT SUPPLIED. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Please provide the value or formula'. + ENDIF. + +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* lv_style_guid = ip_style. + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH TABLE KEY cell_row = ip_row " Changed to access via table key , Stefan Schmöcker, 2013-08-03 + cell_column = lv_column. + IF sy-subrc = 0. + IF ip_style IS INITIAL. + " If no style is provided as method-parameter and cell is found use cell's current style + lv_style_guid = <fs_sheet_content>-cell_style. + ELSE. + " Style provided as method-parameter --> use this + lv_style_guid = ip_style. + ENDIF. + ELSE. + " No cell found --> use supplied style even if empty + lv_style_guid = ip_style. + ENDIF. +* End of change issue #152 - don't touch exisiting style if only value is passed + + IF ip_value IS SUPPLIED. + "if data type is passed just write the value. Otherwise map abap type to excel and perform conversion + "IP_DATA_TYPE is passed by excel reader so source types are preserved +*First we get reference into local var. + CREATE DATA lo_value LIKE ip_value. + ASSIGN lo_value->* TO <fs_value>. + <fs_value> = ip_value. + IF ip_data_type IS SUPPLIED. + IF ip_abap_type IS NOT SUPPLIED. + get_value_type( EXPORTING ip_value = ip_value + IMPORTING ep_value = <fs_value> ) . + ENDIF. + lv_value = <fs_value>. + lv_data_type = ip_data_type. + ELSE. + IF ip_abap_type IS SUPPLIED. + lv_value_type = ip_abap_type. + ELSE. + get_value_type( EXPORTING ip_value = ip_value + IMPORTING ep_value = <fs_value> + ep_value_type = lv_value_type ). + ENDIF. + CASE lv_value_type. + WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2. + lo_addit = cl_abap_elemdescr=>get_i( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_numeric>. + IF sy-subrc = 0. + <fs_numeric> = <fs_value>. + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ). + ENDIF. + + WHEN cl_abap_typedescr=>typekind_float OR cl_abap_typedescr=>typekind_packed. + lo_addit = cl_abap_elemdescr=>get_f( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_numeric>. + IF sy-subrc = 0. + <fs_numeric> = <fs_value>. + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ). + ENDIF. + + WHEN cl_abap_typedescr=>typekind_char OR cl_abap_typedescr=>typekind_string OR cl_abap_typedescr=>typekind_num OR + cl_abap_typedescr=>typekind_hex. + lv_value = <fs_value>. + lv_data_type = 's'. + + WHEN cl_abap_typedescr=>typekind_date. + lo_addit = cl_abap_elemdescr=>get_d( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_date>. + IF sy-subrc = 0. + <fs_date> = <fs_value>. + lv_value = zcl_excel_common=>date_to_excel_string( ip_value = <fs_date> ) . + ENDIF. +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* Moved to end of routine - apply date-format even if other styleinformation is passed +* IF ip_style IS NOT SUPPLIED. "get default date format in case parameter is initial +* lo_style = excel->add_new_style( ). +* lo_style->number_format->format_code = get_default_excel_date_format( ). +* lv_style_guid = lo_style->get_guid( ). +* ENDIF. +* End of change issue #152 - don't touch exisiting style if only value is passed + + WHEN cl_abap_typedescr=>typekind_time. + lo_addit = cl_abap_elemdescr=>get_t( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_time>. + IF sy-subrc = 0. + <fs_time> = <fs_value>. + lv_value = zcl_excel_common=>time_to_excel_string( ip_value = <fs_time> ). + ENDIF. +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* Moved to end of routine - apply time-format even if other styleinformation is passed +* IF ip_style IS NOT SUPPLIED. "get default time format for user in case parameter is initial +* lo_style = excel->add_new_style( ). +* lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_date_time6. +* lv_style_guid = lo_style->get_guid( ). +* ENDIF. +* End of change issue #152 - don't touch exisiting style if only value is passed + + WHEN OTHERS. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid data type of input value'. + ENDCASE. + ENDIF. + + ENDIF. + + IF ip_hyperlink IS BOUND. + ip_hyperlink->set_cell_reference( ip_column = ip_column + ip_row = ip_row ). + me->hyperlinks->add( ip_hyperlink ). + ENDIF. + +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* Read table moved up, so that current style may be evaluated +* lv_column = zcl_excel_common=>convert_column2int( ip_column ). + +* READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH KEY cell_row = ip_row +* cell_column = lv_column. +* +* IF sy-subrc EQ 0. + IF <fs_sheet_content> IS ASSIGNED. +* End of change issue #152 - don't touch exisiting style if only value is passed + <fs_sheet_content>-cell_value = lv_value. + <fs_sheet_content>-cell_formula = ip_formula. + <fs_sheet_content>-cell_style = lv_style_guid. + <fs_sheet_content>-data_type = lv_data_type. + ELSE. + ls_sheet_content-cell_row = ip_row. + ls_sheet_content-cell_column = lv_column. + ls_sheet_content-cell_value = lv_value. + ls_sheet_content-cell_formula = ip_formula. + ls_sheet_content-cell_style = lv_style_guid. + ls_sheet_content-data_type = lv_data_type. + lv_row_alpha = ip_row. +* SHIFT lv_row_alpha RIGHT DELETING TRAILING space."del #152 - replaced with condense - should be faster +* SHIFT lv_row_alpha LEFT DELETING LEADING space. "del #152 - replaced with condense - should be faster + CONDENSE lv_row_alpha NO-GAPS. "ins #152 - replaced 2 shifts - should be faster + lv_col_alpha = zcl_excel_common=>convert_column2alpha( ip_column ). " issue #155 - less restrictive typing for ip_column + CONCATENATE lv_col_alpha lv_row_alpha INTO ls_sheet_content-cell_coords. " issue #155 - less restrictive typing for ip_column + INSERT ls_sheet_content INTO TABLE sheet_content ASSIGNING <fs_sheet_content>. "ins #152 - Now <fs_sheet_content> always holds the data +* APPEND ls_sheet_content TO sheet_content. +* SORT sheet_content BY cell_row cell_column. + " me->update_dimension_range( ). + + ENDIF. + +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* For Date- or Timefields change the formatcode if nothing is set yet +* Enhancement option: Check if existing formatcode is a date/ or timeformat +* If not, use default + DATA: lo_format_code_datetime TYPE zexcel_number_format. + DATA: stylemapping TYPE zexcel_s_stylemapping. + CASE lv_value_type. + WHEN cl_abap_typedescr=>typekind_date. + TRY. + stylemapping = me->excel->get_style_to_guid( <fs_sheet_content>-cell_style ). + CATCH zcx_excel . + ENDTRY. + IF stylemapping-complete_stylex-number_format-format_code IS INITIAL OR + stylemapping-complete_style-number_format-format_code IS INITIAL. + lo_format_code_datetime = zcl_excel_style_number_format=>c_format_date_std. + ELSE. + lo_format_code_datetime = stylemapping-complete_style-number_format-format_code. + ENDIF. + me->change_cell_style( ip_column = ip_column + ip_row = ip_row + ip_number_format_format_code = lo_format_code_datetime ). + + WHEN cl_abap_typedescr=>typekind_time. + TRY. + stylemapping = me->excel->get_style_to_guid( <fs_sheet_content>-cell_style ). + CATCH zcx_excel . + ENDTRY. + IF stylemapping-complete_stylex-number_format-format_code IS INITIAL OR + stylemapping-complete_style-number_format-format_code IS INITIAL. + lo_format_code_datetime = zcl_excel_style_number_format=>c_format_date_time6. + ELSE. + lo_format_code_datetime = stylemapping-complete_style-number_format-format_code. + ENDIF. + me->change_cell_style( ip_column = ip_column + ip_row = ip_row + ip_number_format_format_code = lo_format_code_datetime ). + + ENDCASE. +* End of change issue #152 - don't touch exisiting style if only value is passed + +* Fix issue #162 + lv_value = ip_value. + IF lv_value CS cl_abap_char_utilities=>cr_lf. + me->change_cell_style( ip_column = ip_column + ip_row = ip_row + ip_alignment_wraptext = abap_true ). + ENDIF. +* End of Fix issue #162 + + endmethod. + + + + + + + method SET_CELL_FORMULA. + DATA: + lv_column TYPE zexcel_cell_column, + ls_sheet_content LIKE LINE OF me->sheet_content. + + FIELD-SYMBOLS: + <sheet_content> LIKE LINE OF me->sheet_content. + +*--------------------------------------------------------------------* +* Get cell to set formula into +*--------------------------------------------------------------------* + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + READ TABLE me->sheet_content ASSIGNING <sheet_content> WITH TABLE KEY cell_row = ip_row + cell_column = lv_column. + IF sy-subrc <> 0. " Create new entry in sheet_content if necessary + CHECK ip_formula IS INITIAL. " no need to create new entry in sheet_content when no formula is passed + ls_sheet_content-cell_row = ip_row. + ls_sheet_content-cell_column = lv_column. + INSERT ls_sheet_content INTO TABLE me->sheet_content ASSIGNING <sheet_content>. + ENDIF. + +*--------------------------------------------------------------------* +* Fieldsymbol now holds the relevant cell +*--------------------------------------------------------------------* + <sheet_content>-cell_formula = ip_formula. + + + endmethod. + + + + + + + method SET_CELL_STYLE. + + DATA: lv_column TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data, + lv_row_alpha TYPE string, + lo_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + lv_style_guid = ip_style. + + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + + READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH KEY cell_row = ip_row + cell_column = lv_column. + + IF sy-subrc EQ 0. + <fs_sheet_content>-cell_style = lv_style_guid. + ELSE. + set_cell( ip_column = ip_column ip_row = ip_row ip_value = '' ip_style = ip_style ). + ENDIF. + + endmethod. + + + + + + + method SET_COLUMN_WIDTH. + DATA: column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + DATA: width TYPE float. + + column_dimension = me->get_column_dimension( ip_column ). + +* if a fix size is supplied use this + IF ip_width_fix IS SUPPLIED. + TRY. + width = ip_width_fix. + IF width <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Please supply a positive number as column-width'. + ENDIF. + column_dimension->set_width( width ). + EXIT. + CATCH cx_sy_conversion_no_number. +* Strange stuff passed --> raise error + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret supplied input as number'. + ENDTRY. + ENDIF. + +* If we get down to here, we have to use whatever is found in autosize. + column_dimension->set_auto_size( ip_width_autosize ). + + + endmethod. + + + + + method SET_DEFAULT_EXCEL_DATE_FORMAT. + + IF ip_default_excel_date_format IS INITIAL. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Default date format cannot be blank'. + ENDIF. + + default_excel_date_format = ip_default_excel_date_format. + endmethod. + + + + + + + + method SET_MERGE. + + DATA: lv_column_start TYPE zexcel_cell_column, + lv_column_end TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data, + lv_row_alpha TYPE string. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + lv_column_start = zcl_excel_common=>convert_column2int( ip_column_start ). + lv_column_end = zcl_excel_common=>convert_column2int( ip_column_end ). + + ls_sheet_content-cell_row = ip_row. + ls_sheet_content-cell_column = lv_column_start. + lv_row_alpha = ip_row. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_column_start lv_row_alpha INTO ls_sheet_content-cell_coords. + INSERT ls_sheet_content INTO TABLE sheet_content_merge. + + ls_sheet_content-cell_column = lv_column_end. + IF ip_row_to IS SUPPLIED. + ls_sheet_content-cell_row = ip_row_to. + lv_row_alpha = ip_row_to. + ELSE. + lv_row_alpha = ip_row. + ls_sheet_content-cell_row = ip_row. + ENDIF. + + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_column_end lv_row_alpha INTO ls_sheet_content-cell_coords. + INSERT ls_sheet_content INTO TABLE sheet_content_merge. + + endmethod. + + + + method SET_PRINT_GRIDLINES. + me->print_gridlines = i_print_gridlines. + endmethod. + + + + + + method SET_ROW_HEIGHT. + DATA: row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + DATA: height TYPE float. + + row_dimension = me->get_row_dimension( ip_row ). + +* if a fix size is supplied use this + TRY. + height = ip_height_fix. + IF height <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Please supply a positive number as row-height'. + ENDIF. + row_dimension->set_row_height( height ). + EXIT. + CATCH cx_sy_conversion_no_number. +* Strange stuff passed --> raise error + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret supplied input as number'. + ENDTRY. + + + + endmethod. + + + + method SET_SHOW_GRIDLINES. + me->show_gridlines = i_show_gridlines. + endmethod. + + + + method SET_SHOW_ROWCOLHEADERS. + me->show_rowcolheaders = i_show_rowcolheaders. + endmethod. + + + + method SET_TABCOLOR. + me->tabcolor = iv_tabcolor. + endmethod. + + + + + + + + + + + + method SET_TABLE. + + DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr, + lr_data TYPE REF TO data, + ls_newline TYPE REF TO data, + ls_header TYPE x030l, + lt_dfies TYPE ddfields, + lv_row_header TYPE zexcel_cell_row VALUE 2, + lv_col_header TYPE zexcel_cell_column_alpha VALUE 'B', + lv_row_int TYPE zexcel_cell_row, + lv_column_int TYPE zexcel_cell_column, + lv_column_alpha TYPE zexcel_cell_column_alpha, + lv_cell_value TYPE zexcel_cell_value. + + + FIELD-SYMBOLS: <fs_table_line> TYPE ANY, + <fs_fldval> TYPE ANY, + <fs_dfies> TYPE dfies, + <fs_cell_value> TYPE zexcel_cell_value. + + lv_column_int = zcl_excel_common=>convert_column2int( ip_top_left_column ). + lv_row_int = ip_top_left_row. + + CREATE DATA lr_data LIKE LINE OF ip_table. + + lo_tabdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + + ls_header = lo_tabdescr->get_ddic_header( ). + + lt_dfies = lo_tabdescr->get_ddic_field_list( ). + +* It is better to loop column by column + LOOP AT lt_dfies ASSIGNING <fs_dfies>. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column_int ). + + IF ip_no_header = abap_false. + " First of all write column header + lv_cell_value = <fs_dfies>-scrtext_m. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = lv_cell_value + ip_style = ip_hdr_style ). + IF ip_transpose = abap_true. + ADD 1 TO lv_column_int. + ELSE. + ADD 1 TO lv_row_int. + ENDIF. + ENDIF. + + LOOP AT ip_table ASSIGNING <fs_table_line>. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column_int ). + ASSIGN COMPONENT <fs_dfies>-fieldname OF STRUCTURE <fs_table_line> TO <fs_fldval>. + MOVE <fs_fldval> TO lv_cell_value. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = <fs_fldval> "lv_cell_value + ip_style = ip_body_style ). + IF ip_transpose = abap_true. + ADD 1 TO lv_column_int. + ELSE. + ADD 1 TO lv_row_int. + ENDIF. + ENDLOOP. + IF ip_transpose = abap_true. + lv_column_int = zcl_excel_common=>convert_column2int( ip_top_left_column ). + ADD 1 TO lv_row_int. + ELSE. + lv_row_int = ip_top_left_row. + ADD 1 TO lv_column_int. + ENDIF. + ENDLOOP. + + endmethod. + + + + + method SET_TITLE. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 The current coding for replacing a named ranges name +* after renaming a sheet should be checked if it is +* really working if sheetname should be escaped +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (wip ) 2012-12-08 +* - ... +* changes: aligning code +* message made to support multilinguality +*--------------------------------------------------------------------* +* issue#243 - ' is not allowed as first character in sheet title +* - Stefan Schmöcker, 2012-12-02 +* changes: added additional check for ' as first character +*--------------------------------------------------------------------* + DATA: lo_worksheets_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + errormessage TYPE string, + lv_rangesheetname_old TYPE string, + lv_rangesheetname_new TYPE string, + lo_ranges_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range, + lv_range_value TYPE zexcel_range_value, + lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + + +*--------------------------------------------------------------------* +* Check whether title consists only of allowed characters +* Illegal characters are: / \ [ ] * ? : --> http://msdn.microsoft.com/en-us/library/ff837411.aspx +* Illegal characters not in documentation: ' as first character +*--------------------------------------------------------------------* + IF ip_title CA '/\[]*?:'. + lv_errormessage = 'Found illegal character in sheetname. List of forbidden characters: /\[]*?:'(402). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + IF ip_title IS NOT INITIAL AND ip_title(1) = `'`. + lv_errormessage = 'Sheetname may not start with &'(403). " & used instead of ' to allow fallbacklanguage + REPLACE '&' IN lv_errormessage WITH `'`. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + +*--------------------------------------------------------------------* +* Check whether title is unique in workbook +*--------------------------------------------------------------------* + lo_worksheets_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_worksheets_iterator->has_next( ) = 'X'. + + lo_worksheet ?= lo_worksheets_iterator->get_next( ). + CHECK me->guid <> lo_worksheet->get_guid( ). " Don't check against itself + IF ip_title = lo_worksheet->get_title( ). " Not unique --> raise exception + errormessage = 'Duplicate sheetname &'. + REPLACE '&' IN errormessage WITH ip_title. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = errormessage. + ENDIF. + + ENDWHILE. + +*--------------------------------------------------------------------* +* Remember old sheetname and rename sheet to desired name +*--------------------------------------------------------------------* + CONCATENATE me->title '!' INTO lv_rangesheetname_old. + me->title = ip_title. + +*--------------------------------------------------------------------* +* After changing this worksheet's title we have to adjust +* all ranges that are referring to this worksheet. +*--------------------------------------------------------------------* +* 2do§1 - Check if the following quickfix is solid +* I fear it isn't - but this implementation is better then +* nothing at all since it handles a supposed majority of cases +*--------------------------------------------------------------------* + CONCATENATE me->title '!' INTO lv_rangesheetname_new. + + lo_ranges_iterator = me->excel->get_ranges_iterator( ). + WHILE lo_ranges_iterator->has_next( ) = 'X'. + + lo_range ?= lo_ranges_iterator->get_next( ). + lv_range_value = lo_range->get_value( ). + REPLACE ALL OCCURRENCES OF lv_rangesheetname_old IN lv_range_value WITH lv_rangesheetname_new. + IF sy-subrc = 0. + lo_range->set_range_value( lv_range_value ). + ENDIF. + + ENDWHILE. + + + endmethod. + + + + method UPDATE_DIMENSION_RANGE. + + DATA: ls_sheet_content TYPE zexcel_s_cell_data, + lt_sheet_content TYPE zexcel_t_cell_data_unsorted, + lv_row_alpha TYPE string, + lv_column_alpha TYPE zexcel_cell_column_alpha. + + CHECK sheet_content IS NOT INITIAL. + +* update dimension range + lt_sheet_content = sheet_content. + "upper left corner + SORT lt_sheet_content BY cell_row. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + upper_cell-cell_row = ls_sheet_content-cell_row. + SORT lt_sheet_content BY cell_column. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + upper_cell-cell_column = ls_sheet_content-cell_column. + + lv_row_alpha = upper_cell-cell_row. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( upper_cell-cell_column ). + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE lv_column_alpha lv_row_alpha INTO upper_cell-cell_coords. + + "bottom right corner + SORT lt_sheet_content BY cell_row DESCENDING. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + lower_cell-cell_row = ls_sheet_content-cell_row. + SORT lt_sheet_content BY cell_column DESCENDING. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + lower_cell-cell_column = ls_sheet_content-cell_column. + + lv_row_alpha = lower_cell-cell_row. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lower_cell-cell_column ). + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE lv_column_alpha lv_row_alpha INTO lower_cell-cell_coords. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + method ADD. + + worksheets->add( ip_worksheet ). + + endmethod. + + + method CLEAR. + + worksheets->clear( ). + + endmethod. + + + method CONSTRUCTOR. + + CREATE OBJECT worksheets. + + endmethod. + + + + + method GET. + + DATA lv_index TYPE i. + lv_index = ip_index. + eo_worksheet ?= worksheets->if_object_collection~get( lv_index ). + + endmethod. + + + + method GET_ITERATOR. + + eo_iterator ?= worksheets->if_object_collection~get_iterator( ). + + endmethod. + + + + method IS_EMPTY. + + is_empty = worksheets->if_object_collection~is_empty( ). + + endmethod. + + + + method REMOVE. + + worksheets->remove( ip_worksheet ). + + endmethod. + + + + method SIZE. + + ep_size = worksheets->if_object_collection~size( ). + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + method CONSTRUCTOR. + me->column_index = zcl_excel_common=>convert_column2int( ip_index ). + me->width = -1. + me->auto_size = abap_false. + me->visible = abap_true. + me->outline_level = 0. + me->collapsed = abap_false. + me->excel = ip_excel. "ins issue #157 - Allow Style for columns + me->worksheet = ip_worksheet. "ins issue #157 - Allow Style for columns + + " set default index to cellXf + me->xf_index = 0. + + endmethod. + + + + method GET_AUTO_SIZE. + r_auto_size = me->auto_size. + endmethod. + + + + method GET_COLLAPSED. + r_Collapsed = me->Collapsed. + endmethod. + + + + method GET_COLUMN_INDEX. + r_column_index = me->column_index. + endmethod. + + + + + method GET_COLUMN_STYLE_GUID. + IF me->style_guid IS NOT INITIAL. + ep_style_guid = me->style_guid. + ELSE. + ep_style_guid = me->worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. + endmethod. + + + + method GET_OUTLINE_LEVEL. + r_outline_level = me->outline_level. + endmethod. + + + + method GET_VISIBLE. + r_Visible = me->Visible. + endmethod. + + + + method GET_WIDTH. + r_WIDTH = me->WIDTH. + endmethod. + + + + method GET_XF_INDEX. + r_xf_index = me->xf_index. + endmethod. + + + + + method SET_AUTO_SIZE. + me->auto_size = ip_auto_size. + r_worksheet_columndime = me. + endmethod. + + + + + method SET_COLLAPSED. + me->Collapsed = ip_Collapsed. + r_worksheet_columndime = me. + endmethod. + + + + + method SET_COLUMN_INDEX. + me->column_index = zcl_excel_common=>convert_column2int( ip_index ). + r_worksheet_columndime = me. + endmethod. + + + + + method SET_COLUMN_STYLE_BY_GUID. + DATA: stylemapping TYPE zexcel_s_stylemapping. + + IF me->excel IS NOT BOUND. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Internal error - reference to ZCL_EXCEL not bound'. + ENDIF. + TRY. + stylemapping = me->excel->get_style_to_guid( ip_style_guid ). + me->style_guid = stylemapping-guid. + + CATCH zcx_excel . + EXIT. " leave as is in case of error + ENDTRY. + + endmethod. + + + + method SET_OUTLINE_LEVEL. + me->outline_level = ip_outline_level. + endmethod. + + + + + method SET_VISIBLE. + me->Visible = ip_Visible. + r_worksheet_columndime = me. + endmethod. + + + + + + method SET_WIDTH. + TRY. + me->width = ip_width. + r_worksheet_columndime = me. + CATCH cx_sy_conversion_no_number. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret width as number'. + ENDTRY. + endmethod. + + + + + method SET_XF_INDEX. + me->XF_INDEX = ip_XF_INDEX. + r_worksheet_columndime = me. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + method CONSTRUCTOR. + " Initialise values + me->row_index = ip_index. + me->row_height = -1. + me->visible = abap_true. + me->outline_level = 0. + me->collapsed = abap_false. + + " set row dimension as unformatted by default + me->xf_index = 0. + endmethod. + + + + method GET_COLLAPSED. + r_collapsed = me->collapsed. + endmethod. + + + + method GET_OUTLINE_LEVEL. + r_outline_level = me->outline_level. + endmethod. + + + + method GET_ROW_HEIGHT. + r_row_height = me->row_height. + endmethod. + + + + method GET_ROW_INDEX. + r_row_index = me->row_index. + endmethod. + + + + method GET_VISIBLE. + r_visible = me->visible. + endmethod. + + + + method GET_XF_INDEX. + r_xf_index = me->xf_index. + endmethod. + + + + method SET_COLLAPSED. + me->collapsed = ip_collapsed. + endmethod. + + + + + method SET_OUTLINE_LEVEL. + IF ip_outline_level < 0 + OR ip_outline_level > 7. + + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Outline level must range between 0 and 7.'. + + ENDIF. + me->outline_level = ip_outline_level. + endmethod. + + + + + method SET_ROW_HEIGHT. + TRY. + me->row_height = ip_row_height. + CATCH cx_sy_conversion_no_number. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret ip_row_height as number'. + ENDTRY. + endmethod. + + + + method SET_ROW_INDEX. + me->row_index = ip_index. + endmethod. + + + + method SET_VISIBLE. + me->visible = ip_visible. + endmethod. + + + + method SET_XF_INDEX. + me->XF_INDEX = ip_XF_INDEX. + endmethod. + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + method ZIF_EXCEL_WRITER~WRITE_FILE. + me->excel = io_excel. + + ep_file = me->create( ). + 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( ). + + "-------------Added by Alessandro Iannacci - Only if template exist + IF lv_content IS NOT INITIAL AND me->excel->use_template EQ abap_true. + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/charts/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ELSE. "ADD CUSTOM CHART!!!! + lv_content = me->create_xl_charts( lo_drawing ). + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/charts/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDIF. + "------------------------------------------------- + ENDWHILE. + +********************************************************************** +* STEP 12: Create the final zip + ep_excel = lo_zip->save( ). + + endmethod. + + + + method CREATE_CONTENT_TYPES. + + +** Constant node name + DATA: lc_xml_node_types TYPE string VALUE 'Types', + lc_xml_node_override TYPE string VALUE 'Override', + 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', + " Node namespace + lc_xml_node_types_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/content-types', + " Node extension + lc_xml_node_rels_ext TYPE string VALUE 'rels', + lc_xml_node_xml_ext TYPE string VALUE 'xml', + " Node partnumber + lc_xml_node_theme_pn TYPE string VALUE '/xl/theme/theme1.xml', + lc_xml_node_styles_pn TYPE string VALUE '/xl/styles.xml', + lc_xml_node_workb_pn TYPE string VALUE '/xl/workbook.xml', + lc_xml_node_props_pn TYPE string VALUE '/docProps/app.xml', + lc_xml_node_worksheet_pn TYPE string VALUE '/xl/worksheets/sheet#.xml', + lc_xml_node_strings_pn TYPE string VALUE '/xl/sharedStrings.xml', + lc_xml_node_core_pn TYPE string VALUE '/docProps/core.xml', + lc_xml_node_chart_pn TYPE string VALUE '/xl/charts/chart#.xml', + " Node contentType + lc_xml_node_theme_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.theme+xml', + lc_xml_node_styles_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml', + lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml', + lc_xml_node_rels_ct TYPE string VALUE 'application/vnd.openxmlformats-package.relationships+xml', + lc_xml_node_xml_ct TYPE string VALUE 'application/xml', + lc_xml_node_props_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.extended-properties+xml', + lc_xml_node_worksheet_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml', + lc_xml_node_strings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml', + lc_xml_node_core_ct TYPE string VALUE 'application/vnd.openxmlformats-package.core-properties+xml', + lc_xml_node_table_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml', + lc_xml_node_drawings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawing+xml', + lc_xml_node_chart_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + 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, + lo_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. + + DATA: lv_worksheets_num TYPE i, + lv_worksheets_numc TYPE numc3, + lv_xml_node_worksheet_pn TYPE string, + lv_xml_size TYPE i, + lv_value TYPE string, + lv_drawing_index TYPE i VALUE 1, + lv_index_str TYPE string. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'UTF-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node types + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_types + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_types_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + " rels node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_rels_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_rels_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " extension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_xml_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_xml_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Theme node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_theme_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_theme_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Styles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_styles_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_styles_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Workbook node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_workb_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_workb_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Properties node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_props_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_props_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Worksheet node + lv_worksheets_num = excel->get_worksheets_size( ). + DO lv_worksheets_num TIMES. + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + + MOVE sy-index TO lv_worksheets_numc. + SHIFT lv_worksheets_numc LEFT DELETING LEADING '0'. + lv_xml_node_worksheet_pn = lc_xml_node_worksheet_pn. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_worksheet_pn WITH lv_worksheets_numc. + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_xml_node_worksheet_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_worksheet_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDDO. + + lo_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + + 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_value = lo_table->get_name( ). + CONCATENATE '/xl/tables/' lv_value '.xml' INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_table_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + + " Drawings + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + + lo_drawings = lo_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lv_index_str = lv_drawing_index. + CONDENSE lv_index_str NO-GAPS. + CONCATENATE '/' me->c_xl_drawings INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_drawings_ct ). + lo_element_root->append_child( new_child = lo_element ). + + ADD 1 TO lv_drawing_index. + ENDIF. + ENDWHILE. + + " media mimes + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + lt_media_type TYPE TABLE OF mimetypes-extension, + lv_media_type TYPE mimetypes-extension, + lv_mime_type TYPE mimetypes-type. + + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) = abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_media_type = lo_drawing->get_media_type( ). + COLLECT lv_media_type INTO lt_media_type. + ENDWHILE. + + LOOP AT lt_media_type INTO lv_media_type. + CALL FUNCTION 'SDOK_MIMETYPE_GET' + EXPORTING + extension = lv_media_type + IMPORTING + mimetype = lv_mime_type. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lv_value = lv_media_type. + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lv_value ). + lv_value = lv_mime_type. + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDLOOP. + + " Charts + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) = abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lv_index_str = lo_drawing->get_index( ). + CONDENSE lv_index_str. + lv_value = lc_xml_node_chart_pn. + REPLACE ALL OCCURRENCES OF '#' IN lv_value WITH lv_index_str. + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_chart_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + + " Strings node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_strings_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_strings_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Strings node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_core_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_core_ct ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + method CREATE_DOCPROPS_APP. + + +** Constant node name + DATA: lc_xml_node_properties TYPE string VALUE 'Properties', + lc_xml_node_application TYPE string VALUE 'Application', + lc_xml_node_docsecurity TYPE string VALUE 'DocSecurity', + lc_xml_node_scalecrop TYPE string VALUE 'ScaleCrop', + lc_xml_node_headingpairs TYPE string VALUE 'HeadingPairs', + lc_xml_node_vector TYPE string VALUE 'vector', + lc_xml_node_variant TYPE string VALUE 'variant', + lc_xml_node_lpstr TYPE string VALUE 'lpstr', + lc_xml_node_i4 TYPE string VALUE 'i4', + lc_xml_node_titlesofparts TYPE string VALUE 'TitlesOfParts', + lc_xml_node_company TYPE string VALUE 'Company', + lc_xml_node_linksuptodate TYPE string VALUE 'LinksUpToDate', + lc_xml_node_shareddoc TYPE string VALUE 'SharedDoc', + lc_xml_node_hyperlinkschanged TYPE string VALUE 'HyperlinksChanged', + lc_xml_node_appversion TYPE string VALUE 'AppVersion', + " Namespace prefix + lc_vt_ns TYPE string VALUE 'vt', + lc_xml_node_props_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties', + lc_xml_node_props_vt_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes', + " Node attributes + lc_xml_attr_size TYPE string VALUE 'size', + lc_xml_attr_basetype TYPE string VALUE 'baseType'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element_vector TYPE REF TO if_ixml_element, + lo_sub_element_variant TYPE REF TO if_ixml_element, + lo_sub_element_lpstr TYPE REF TO if_ixml_element, + lo_sub_element_i4 TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lv_value TYPE string. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node properties + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_properties + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_props_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:vt' + value = lc_xml_node_props_vt_ns ). + +********************************************************************** +* STEP 4: Create subnodes + " Application + lo_element = lo_document->create_simple_element( name = lc_xml_node_application + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~application. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " DocSecurity + lo_element = lo_document->create_simple_element( name = lc_xml_node_docsecurity + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~docsecurity. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " ScaleCrop + lo_element = lo_document->create_simple_element( name = lc_xml_node_scalecrop + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~scalecrop ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " HeadingPairs + lo_element = lo_document->create_simple_element( name = lc_xml_node_headingpairs + parent = lo_document ). + + + " * vector node + lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector + prefix = lc_vt_ns + parent = lo_document ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size + value = '2' ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype + value = lc_xml_node_variant ). + + " ** variant node + lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant + prefix = lc_vt_ns + parent = lo_document ). + + " *** lpstr node + lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_name( ). + lo_sub_element_lpstr->set_value( value = lv_value ). + lo_sub_element_variant->append_child( new_child = lo_sub_element_lpstr ). " lpstr node + + lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node + + " ** variant node + lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant + prefix = lc_vt_ns + parent = lo_document ). + + " *** i4 node + lo_sub_element_i4 = lo_document->create_simple_element_ns( name = lc_xml_node_i4 + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_size( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_i4->set_value( value = lv_value ). + lo_sub_element_variant->append_child( new_child = lo_sub_element_i4 ). " lpstr node + + lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node + + lo_element->append_child( new_child = lo_sub_element_vector ). " vector node + + lo_element_root->append_child( new_child = lo_element ). " HeadingPairs + + + " TitlesOfParts + lo_element = lo_document->create_simple_element( name = lc_xml_node_titlesofparts + parent = lo_document ). + + + " * vector node + lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_size( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size + value = lv_value ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype + value = lc_xml_node_lpstr ). + + lo_iterator = excel->get_worksheets_iterator( ). + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + " ** lpstr node + lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr + prefix = lc_vt_ns + parent = lo_document ). + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_value = lo_worksheet->get_title( ). + lo_sub_element_lpstr->set_value( value = lv_value ). + lo_sub_element_vector->append_child( new_child = lo_sub_element_lpstr ). " lpstr node + ENDWHILE. + + lo_element->append_child( new_child = lo_sub_element_vector ). " vector node + + lo_element_root->append_child( new_child = lo_element ). " TitlesOfParts + + + + " Company + IF excel->zif_excel_book_properties~company IS NOT INITIAL. + lo_element = lo_document->create_simple_element( name = lc_xml_node_company + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~company. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + " LinksUpToDate + lo_element = lo_document->create_simple_element( name = lc_xml_node_linksuptodate + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~linksuptodate ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " SharedDoc + lo_element = lo_document->create_simple_element( name = lc_xml_node_shareddoc + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~shareddoc ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " HyperlinksChanged + lo_element = lo_document->create_simple_element( name = lc_xml_node_hyperlinkschanged + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~hyperlinkschanged ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " AppVersion + lo_element = lo_document->create_simple_element( name = lc_xml_node_appversion + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~appversion. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + method CREATE_DOCPROPS_CORE. + + +** Constant node name + DATA: lc_xml_node_coreproperties TYPE string VALUE 'coreProperties', + lc_xml_node_creator TYPE string VALUE 'creator', + lc_xml_node_description TYPE string VALUE 'description', + lc_xml_node_lastmodifiedby TYPE string VALUE 'lastModifiedBy', + lc_xml_node_created TYPE string VALUE 'created', + lc_xml_node_modified TYPE string VALUE 'modified', + " Node attributes + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_target TYPE string VALUE 'dcterms:W3CDTF', + " Node namespace + lc_cp_ns TYPE string VALUE 'cp', + lc_dc_ns TYPE string VALUE 'dc', + lc_dcterms_ns TYPE string VALUE 'dcterms', +* lc_dcmitype_ns TYPE string VALUE 'dcmitype', + lc_xsi_ns TYPE string VALUE 'xsi', + lc_xml_node_cp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties', + lc_xml_node_dc_ns TYPE string VALUE 'http://purl.org/dc/elements/1.1/', + lc_xml_node_dcterms_ns TYPE string VALUE 'http://purl.org/dc/terms/', + lc_xml_node_dcmitype_ns TYPE string VALUE 'http://purl.org/dc/dcmitype/', + lc_xml_node_xsi_ns TYPE string VALUE 'http://www.w3.org/2001/XMLSchema-instance'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + 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_value TYPE string, + lv_date TYPE sydatum, + lv_time TYPE syuzeit. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node coreProperties + lo_element_root = lo_document->create_simple_element_ns( name = lc_xml_node_coreproperties + prefix = lc_cp_ns + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:cp' + value = lc_xml_node_cp_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dc' + value = lc_xml_node_dc_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dcterms' + value = lc_xml_node_dcterms_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dcmitype' + value = lc_xml_node_dcmitype_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:xsi' + value = lc_xml_node_xsi_ns ). + +********************************************************************** +* STEP 4: Create subnodes + " Creator node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_creator + prefix = lc_dc_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~creator. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Description node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_description + prefix = lc_dc_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~description. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " lastModifiedBy node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_lastmodifiedby + prefix = lc_cp_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~lastmodifiedby. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Created node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_created + prefix = lc_dcterms_ns + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + prefix = lc_xsi_ns + value = lc_xml_attr_target ). + + CONVERT TIME STAMP excel->zif_excel_book_properties~created TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. + CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. + REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. +* lv_value = excel->zif_excel_book_properties~created. +* lv_value = '2010-07-04T14:58:53Z'. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Modified node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_modified + prefix = lc_dcterms_ns + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + prefix = lc_xsi_ns + value = lc_xml_attr_target ). + CONVERT TIME STAMP excel->zif_excel_book_properties~modified TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. + CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. + REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. +* lv_value = excel->zif_excel_book_properties~modified. +* lv_value = '2010-07-04T14:58:53Z'. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + method CREATE_RELATIONSHIPS. + + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + " Node id + lc_xml_node_rId1_id TYPE string VALUE 'rId1', + lc_xml_node_rId2_id TYPE string VALUE 'rId2', + lc_xml_node_rId3_id TYPE string VALUE 'rId3', + " Node type + lc_xml_node_rId1_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + lc_xml_node_rId2_tp TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + lc_xml_node_rId3_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + " Node target + lc_xml_node_rId1_tg TYPE string VALUE 'xl/workbook.xml', + lc_xml_node_rId2_tg TYPE string VALUE 'docProps/core.xml', + lc_xml_node_rId3_tg TYPE string VALUE 'docProps/app.xml'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + 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. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + " Theme node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rId3_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rId3_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rId3_tg ). + lo_element_root->append_child( new_child = lo_element ). + + " Styles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rId2_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rId2_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rId2_tg ). + lo_element_root->append_child( new_child = lo_element ). + + " rels node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rId1_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rId1_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rId1_tg ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + method CREATE_XL_CHARTS. + + +** Constant node name + CONSTANTS: lc_xml_node_chartspace TYPE string VALUE 'c:chartSpace', + lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', + lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main', + lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + lc_xml_node_date1904 TYPE string VALUE 'c:date1904', + lc_xml_node_lang TYPE string VALUE 'c:lang', + lc_xml_node_roundedcorners TYPE string VALUE 'c:roundedCorners', + lc_xml_node_altcont TYPE string VALUE 'mc:AlternateContent', + lc_xml_node_altcont_ns_mc TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + lc_xml_node_choice TYPE string VALUE 'mc:Choice', + lc_xml_node_choice_ns_requires TYPE string VALUE 'c14', + lc_xml_node_choice_ns_c14 TYPE string VALUE 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart', + lc_xml_node_style TYPE string VALUE 'c14:style', + lc_xml_node_fallback TYPE string VALUE 'mc:Fallback', + lc_xml_node_style2 TYPE string VALUE 'c:style', + + "---------------------------CHART + lc_xml_node_chart TYPE string VALUE 'c:chart', + lc_xml_node_autotitledeleted TYPE string VALUE 'c:autoTitleDeleted', + "plotArea + lc_xml_node_plotarea TYPE string VALUE 'c:plotArea', + lc_xml_node_layout TYPE string VALUE 'c:layout', + lc_xml_node_varycolors TYPE string VALUE 'c:varyColors', + lc_xml_node_ser TYPE string VALUE 'c:ser', + lc_xml_node_idx TYPE string VALUE 'c:idx', + lc_xml_node_order TYPE string VALUE 'c:order', + lc_xml_node_tx TYPE string VALUE 'c:tx', + lc_xml_node_v TYPE string VALUE 'c:v', + lc_xml_node_val TYPE string VALUE 'c:val', + lc_xml_node_cat TYPE string VALUE 'c:cat', + lc_xml_node_numref TYPE string VALUE 'c:numRef', + lc_xml_node_strref TYPE string VALUE 'c:strRef', + lc_xml_node_f TYPE string VALUE 'c:f', "this is the range + "note: numcache avoided + lc_xml_node_dlbls TYPE string VALUE 'c:dLbls', + lc_xml_node_showlegendkey TYPE string VALUE 'c:showLegendKey', + lc_xml_node_showval TYPE string VALUE 'c:showVal', + lc_xml_node_showcatname TYPE string VALUE 'c:showCatName', + lc_xml_node_showsername TYPE string VALUE 'c:showSerName', + lc_xml_node_showpercent TYPE string VALUE 'c:showPercent', + lc_xml_node_showbubblesize TYPE string VALUE 'c:showBubbleSize', + "plotArea->pie + lc_xml_node_piechart TYPE string VALUE 'c:pieChart', + lc_xml_node_showleaderlines TYPE string VALUE 'c:showLeaderLines', + lc_xml_node_firstsliceang TYPE string VALUE 'c:firstSliceAng', + "plotArea->line + lc_xml_node_linechart TYPE string VALUE 'c:lineChart', + lc_xml_node_symbol TYPE string VALUE 'c:symbol', + lc_xml_node_marker TYPE string VALUE 'c:marker', + lc_xml_node_smooth TYPE string VALUE 'c:smooth', + "plotArea->bar + lc_xml_node_invertifnegative TYPE string VALUE 'c:invertIfNegative', + lc_xml_node_barchart TYPE string VALUE 'c:barChart', + lc_xml_node_bardir TYPE string VALUE 'c:barDir', + lc_xml_node_gapwidth TYPE string VALUE 'c:gapWidth', + "plotArea->line + plotArea->bar + lc_xml_node_grouping TYPE string VALUE 'c:grouping', + lc_xml_node_axid TYPE string VALUE 'c:axId', + lc_xml_node_catax TYPE string VALUE 'c:catAx', + lc_xml_node_valax TYPE string VALUE 'c:valAx', + lc_xml_node_scaling TYPE string VALUE 'c:scaling', + lc_xml_node_orientation TYPE string VALUE 'c:orientation', + lc_xml_node_delete TYPE string VALUE 'c:delete', + lc_xml_node_axpos TYPE string VALUE 'c:axPos', + lc_xml_node_numfmt TYPE string VALUE 'c:numFmt', + lc_xml_node_majorgridlines TYPE string VALUE 'c:majorGridlines', + lc_xml_node_majortickmark TYPE string VALUE 'c:majorTickMark', + lc_xml_node_minortickmark TYPE string VALUE 'c:minorTickMark', + lc_xml_node_ticklblpos TYPE string VALUE 'c:tickLblPos', + lc_xml_node_crossax TYPE string VALUE 'c:crossAx', + lc_xml_node_crosses TYPE string VALUE 'c:crosses', + lc_xml_node_auto TYPE string VALUE 'c:auto', + lc_xml_node_lblalgn TYPE string VALUE 'c:lblAlgn', + lc_xml_node_lbloffset TYPE string VALUE 'c:lblOffset', + lc_xml_node_nomultilvllbl TYPE string VALUE 'c:noMultiLvlLbl', + lc_xml_node_crossbetween TYPE string VALUE 'c:crossBetween', + "legend + lc_xml_node_legend TYPE string VALUE 'c:legend', + "legend->pie + lc_xml_node_legendpos TYPE string VALUE 'c:legendPos', +* lc_xml_node_layout TYPE string VALUE 'c:layout', "already exist + lc_xml_node_overlay TYPE string VALUE 'c:overlay', + lc_xml_node_txpr TYPE string VALUE 'c:txPr', + lc_xml_node_bodypr TYPE string VALUE 'a:bodyPr', + lc_xml_node_lststyle TYPE string VALUE 'a:lstStyle', + lc_xml_node_p TYPE string VALUE 'a:p', + lc_xml_node_ppr TYPE string VALUE 'a:pPr', + lc_xml_node_defrpr TYPE string VALUE 'a:defRPr', + lc_xml_node_endpararpr TYPE string VALUE 'a:endParaRPr', + "legend->bar + legend->line + lc_xml_node_plotvisonly TYPE string VALUE 'c:plotVisOnly', + lc_xml_node_dispblanksas TYPE string VALUE 'c:dispBlanksAs', + lc_xml_node_showdlblsovermax TYPE string VALUE 'c:showDLblsOverMax', + "---------------------------END OF CHART + + lc_xml_node_printsettings TYPE string VALUE 'c:printSettings', + lc_xml_node_headerfooter TYPE string VALUE 'c:headerFooter', + lc_xml_node_pagemargins TYPE string VALUE 'c:pageMargins', + lc_xml_node_pagesetup TYPE string VALUE 'c:pageSetup'. + + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_cellanchor TYPE REF TO if_ixml_element, + 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_rel_id TYPE i. + + DATA lo_element TYPE REF TO if_ixml_element. + DATA lo_element2 TYPE REF TO if_ixml_element. + DATA lo_element3 TYPE REF TO if_ixml_element. + DATA lo_el_rootchart TYPE REF TO if_ixml_element. + DATA lo_element4 TYPE REF TO if_ixml_element. + DATA lo_element5 TYPE REF TO if_ixml_element. + DATA lo_element6 TYPE REF TO if_ixml_element. + DATA lo_element7 TYPE REF TO if_ixml_element. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_chartspace + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:c' + value = lc_xml_node_ns_c ). + lo_element_root->set_attribute_ns( name = 'xmlns:a' + value = lc_xml_node_ns_a ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + +********************************************************************** +* STEP 4: Create chart + + DATA lo_chartb TYPE REF TO zcl_excel_graph_bars. + DATA lo_chartp TYPE REF TO zcl_excel_graph_pie. + DATA lo_chartl TYPE REF TO zcl_excel_graph_line. + DATA lo_chart TYPE REF TO zcl_excel_graph. + + DATA ls_serie TYPE zcl_excel_graph=>s_series. + DATA ls_ax TYPE zcl_excel_graph_bars=>s_ax. + DATA lv_str TYPE string. + + "Identify chart type + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + lo_chartb ?= io_drawing->graph. + WHEN zcl_excel_drawing=>c_graph_pie. + lo_chartp ?= io_drawing->graph. + WHEN zcl_excel_drawing=>c_graph_line. + lo_chartl ?= io_drawing->graph. + WHEN OTHERS. + ENDCASE. + + + lo_chart = io_drawing->graph. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_date1904 + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_1904val ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_lang + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_langval ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_roundedcorners + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_roundedcornersval ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_altcont + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'xmlns:mc' + value = lc_xml_node_altcont_ns_mc ). + + "Choice + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_choice + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'Requires' + value = lc_xml_node_choice_ns_requires ). + lo_element2->set_attribute_ns( name = 'xmlns:c14' + value = lc_xml_node_choice_ns_c14 ). + + "C14:style + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chart->ns_c14styleval ). + + "Fallback + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_fallback + parent = lo_element ). + + "C:style + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style2 + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chart->ns_styleval ). + + "---------------------------CHART + lo_element = lo_document->create_simple_element( name = lc_xml_node_chart + parent = lo_element_root ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_autotitledeleted + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_autotitledeletedval ). + + "plotArea + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotarea + parent = lo_element ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + "----bar + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_barchart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bardir + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_bardirval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_groupingval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_varycolorsval ). + + "series + LOOP AT lo_chartb->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_invertifnegative + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_serie-invertifnegative ). + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showbubblesizeval ). + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_gapwidth + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_gapwidthval ). + + "axes + lo_el_rootchart = lo_element3. + LOOP AT lo_chartb->axes INTO ls_ax. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_el_rootchart ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + CASE ls_ax-type. + WHEN zcl_excel_graph_bars=>c_catax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-auto ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lblalgn ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lbloffset ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-nomultilvllbl ). + WHEN zcl_excel_graph_bars=>c_valax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossbetween ). + WHEN OTHERS. + ENDCASE. + ENDLOOP. + "endaxes + + WHEN zcl_excel_drawing=>c_graph_pie. + "----pie + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_piechart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartp->ns_varycolorsval ). + + "series + LOOP AT lo_chartp->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showbubblesizeval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showleaderlines + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showleaderlinesval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_firstsliceang + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartp->ns_firstsliceangval ). + WHEN zcl_excel_drawing=>c_graph_line. + "----line + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_linechart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_groupingval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_varycolorsval ). + + "series + LOOP AT lo_chartl->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_marker + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_symbol + parent = lo_element5 ). + lo_element6->set_attribute_ns( name = 'val' + value = ls_serie-symbol ). + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_smooth + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_serie-smooth ). + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showbubblesizeval ). + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_marker + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->NS_MARKERVAL ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_smooth + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->NS_SMOOTHVAL ). + + "axes + lo_el_rootchart = lo_element3. + LOOP AT lo_chartl->axes INTO ls_ax. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_el_rootchart ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + CASE ls_ax-type. + WHEN zcl_excel_graph_line=>c_catax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). +* lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt +* parent = lo_element3 ). +* lo_element4->set_attribute_ns( name = 'formatCode' +* value = ls_ax-formatcode ). +* lo_element4->set_attribute_ns( name = 'sourceLinked' +* value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-auto ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lblalgn ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lbloffset ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-nomultilvllbl ). + WHEN zcl_excel_graph_line=>c_valax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossbetween ). + WHEN OTHERS. + ENDCASE. + ENDLOOP. + "endaxes + + WHEN OTHERS. + ENDCASE. + + "legend + IF lo_chart->print_label EQ abap_true. + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_legend + parent = lo_element ). + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + "----bar + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartb->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartb->ns_overlayval ). + WHEN zcl_excel_drawing=>c_graph_line. + "----line + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartl->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartl->ns_overlayval ). + WHEN zcl_excel_drawing=>c_graph_pie. + "----pie + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartp->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartp->ns_overlayval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_txpr + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bodypr + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lststyle + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_p + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_ppr + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'rtl' + value = lo_chartp->ns_pprrtl ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_defrpr + parent = lo_element5 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_endpararpr + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'lang' + value = lo_chartp->ns_endpararprlang ). + WHEN OTHERS. + ENDCASE. + ENDIF. + + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotvisonly + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_plotvisonlyval ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_dispblanksas + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_dispblanksasval ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_showdlblsovermax + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_showdlblsovermaxval ). + "---------------------------END OF CHART + + "printSettings + lo_element = lo_document->create_simple_element( name = lc_xml_node_printsettings + parent = lo_element_root ). + "headerFooter + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_headerfooter + parent = lo_element ). + "pageMargins + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagemargins + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'b' + value = lo_chart->pagemargins-b ). + lo_element2->set_attribute_ns( name = 'l' + value = lo_chart->pagemargins-l ). + lo_element2->set_attribute_ns( name = 'r' + value = lo_chart->pagemargins-r ). + lo_element2->set_attribute_ns( name = 't' + value = lo_chart->pagemargins-t ). + lo_element2->set_attribute_ns( name = 'header' + value = lo_chart->pagemargins-header ). + lo_element2->set_attribute_ns( name = 'footer' + value = lo_chart->pagemargins-footer ). + "pageSetup + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagesetup + parent = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + method CREATE_XL_DRAWINGS. + + +** Constant node name + CONSTANTS: lc_xml_node_wsdr TYPE string VALUE 'xdr:wsDr', + lc_xml_node_ns_xdr TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', + lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main'. + + CONSTANTS: lc_on TYPE string VALUE '1', + lc_off TYPE string VALUE '0'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_cellanchor TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawings TYPE REF TO zcl_excel_drawings, + lo_drawing TYPE REF TO zcl_excel_drawing. + DATA: lv_rel_id TYPE i. + + + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_wsdr + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:xdr' + value = lc_xml_node_ns_xdr ). + lo_element_root->set_attribute_ns( name = 'xmlns:a' + value = lc_xml_node_ns_a ). + +********************************************************************** +* STEP 4: Create drawings + + CLEAR: lv_rel_id. + + lo_drawings = io_worksheet->get_drawings( ). + + lo_iterator = lo_drawings->get_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + ADD 1 TO lv_rel_id. + lo_element_cellanchor = me->create_xl_drawing_anchor( + io_drawing = lo_drawing + io_document = lo_document + ip_index = lv_rel_id ). + + lo_element_root->append_child( new_child = lo_element_cellanchor ). + + ENDWHILE. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + method CREATE_XL_DRAWINGS_RELS. + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawings TYPE REF TO zcl_excel_drawings, + lo_drawing TYPE REF TO zcl_excel_drawing. + + DATA: lv_value TYPE string, + lv_counter TYPE i. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + " Add sheet Relationship nodes here + lv_counter = 0. + lo_drawings = io_worksheet->get_drawings( ). + lo_iterator = lo_drawings->get_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_counter. + + lv_value = lv_counter. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + + lv_value = lo_drawing->get_media_name( ). + CASE lo_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. + CONCATENATE '../media/' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_image_tp ). + + WHEN zcl_excel_drawing=>type_chart. + CONCATENATE '../charts/' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_chart_tp ). + + ENDCASE. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + + + method CREATE_XL_DRAWING_ANCHOR. + +** Constant node name + CONSTANTS: lc_xml_node_onecellanchor TYPE string VALUE 'xdr:oneCellAnchor', + lc_xml_node_twocellanchor TYPE string VALUE 'xdr:twoCellAnchor', + lc_xml_node_from TYPE string VALUE 'xdr:from', + lc_xml_node_to TYPE string VALUE 'xdr:to', + lc_xml_node_pic TYPE string VALUE 'xdr:pic', + lc_xml_node_ext TYPE string VALUE 'xdr:ext', + lc_xml_node_clientdata TYPE string VALUE 'xdr:clientData', + + lc_xml_node_col TYPE string VALUE 'xdr:col', + lc_xml_node_coloff TYPE string VALUE 'xdr:colOff', + lc_xml_node_row TYPE string VALUE 'xdr:row', + lc_xml_node_rowoff TYPE string VALUE 'xdr:rowOff', + + lc_xml_node_nvpicpr TYPE string VALUE 'xdr:nvPicPr', + lc_xml_node_cnvpr TYPE string VALUE 'xdr:cNvPr', + lc_xml_node_cnvpicpr TYPE string VALUE 'xdr:cNvPicPr', + lc_xml_node_piclocks TYPE string VALUE 'a:picLocks', + + lc_xml_node_sppr TYPE string VALUE 'xdr:spPr', + lc_xml_node_apgeom TYPE string VALUE 'a:prstGeom', + lc_xml_node_aavlst TYPE string VALUE 'a:avLst', + + lc_xml_node_graphicframe TYPE string VALUE 'xdr:graphicFrame', + lc_xml_node_nvgraphicframepr TYPE string VALUE 'xdr:nvGraphicFramePr', + lc_xml_node_cnvgraphicframepr TYPE string VALUE 'xdr:cNvGraphicFramePr', + lc_xml_node_graphicframelocks TYPE string VALUE 'a:graphicFrameLocks', + lc_xml_node_xfrm TYPE string VALUE 'xdr:xfrm', + lc_xml_node_aoff TYPE string VALUE 'a:off', + lc_xml_node_aext TYPE string VALUE 'a:ext', + lc_xml_node_agraphic TYPE string VALUE 'a:graphic', + lc_xml_node_agraphicdata TYPE string VALUE 'a:graphicData', + + lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', + lc_xml_node_cchart TYPE string VALUE 'c:chart', + + lc_xml_node_blipfill TYPE string VALUE 'xdr:blipFill', + lc_xml_node_ablip TYPE string VALUE 'a:blip', + lc_xml_node_astretch TYPE string VALUE 'a:stretch', + lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'. + + + CONSTANTS: lc_on TYPE string VALUE '1', + lc_off TYPE string VALUE '0'. + + DATA: lo_element_graphicframe TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element2 TYPE REF TO if_ixml_element, + lo_element3 TYPE REF TO if_ixml_element, + lo_element_from TYPE REF TO if_ixml_element, + lo_element_to TYPE REF TO if_ixml_element, + lo_element_ext TYPE REF TO if_ixml_element, + lo_element_pic TYPE REF TO if_ixml_element, + lo_element_clientdata TYPE REF TO if_ixml_element, + + ls_position TYPE zexcel_drawing_position, + + lv_col TYPE string, " zexcel_cell_column, + lv_row TYPE string, " zexcel_cell_row. + lv_col_offset TYPE string, + lv_row_offset TYPE string, + lv_value TYPE string. + + ls_position = io_drawing->get_position( ). + + IF ls_position-anchor = 'ONE'. + ep_anchor = io_document->create_simple_element( name = lc_xml_node_onecellanchor + parent = io_document ). + ELSE. + ep_anchor = io_document->create_simple_element( name = lc_xml_node_twocellanchor + parent = io_document ). + ENDIF. + +* from cell ****************************** + lo_element_from = io_document->create_simple_element( name = lc_xml_node_from + parent = io_document ). + + lv_col = ls_position-from-col. + lv_row = ls_position-from-row. + lv_col_offset = ls_position-from-col_offset. + lv_row_offset = ls_position-from-row_offset. + CONDENSE lv_col NO-GAPS. + CONDENSE lv_row NO-GAPS. + CONDENSE lv_col_offset NO-GAPS. + CONDENSE lv_row_offset NO-GAPS. + + lo_element = io_document->create_simple_element( name = lc_xml_node_col + parent = io_document ). + lo_element->set_value( value = lv_col ). + lo_element_from->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_coloff + parent = io_document ). + lo_element->set_value( value = lv_col_offset ). + lo_element_from->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_row + parent = io_document ). + lo_element->set_value( value = lv_row ). + lo_element_from->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_rowoff + parent = io_document ). + lo_element->set_value( value = lv_row_offset ). + lo_element_from->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_from ). + + IF ls_position-anchor = 'ONE'. + +* ext ****************************** + lo_element_ext = io_document->create_simple_element( name = lc_xml_node_ext + parent = io_document ). + + lv_value = io_drawing->get_width_emu_str( ). + lo_element_ext->set_attribute_ns( name = 'cx' + value = lv_value ). + lv_value = io_drawing->get_height_emu_str( ). + lo_element_ext->set_attribute_ns( name = 'cy' + value = lv_value ). + ep_anchor->append_child( new_child = lo_element_ext ). + + ELSEIF ls_position-anchor = 'TWO'. + +* to cell ****************************** + lo_element_to = io_document->create_simple_element( name = lc_xml_node_to + parent = io_document ). + + lv_col = ls_position-to-col. + lv_row = ls_position-to-row. + lv_col_offset = ls_position-to-col_offset. + lv_row_offset = ls_position-to-row_offset. + CONDENSE lv_col NO-GAPS. + CONDENSE lv_row NO-GAPS. + CONDENSE lv_col_offset NO-GAPS. + CONDENSE lv_row_offset NO-GAPS. + + lo_element = io_document->create_simple_element( name = lc_xml_node_col + parent = io_document ). + lo_element->set_value( value = lv_col ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_coloff + parent = io_document ). + lo_element->set_value( value = lv_col_offset ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_row + parent = io_document ). + lo_element->set_value( value = lv_row ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_rowoff + parent = io_document ). + lo_element->set_value( value = lv_row_offset ). + lo_element_to->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_to ). + + ENDIF. + + CASE io_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. +* pic ********************************** + lo_element_pic = io_document->create_simple_element( name = lc_xml_node_pic + parent = io_document ). +* nvPicPr + lo_element = io_document->create_simple_element( name = lc_xml_node_nvpicpr + parent = io_document ). +* cNvPr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr + parent = io_document ). + lv_value = sy-index. + CONDENSE lv_value. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lo_element2->set_attribute_ns( name = 'name' + value = io_drawing->title ). + lo_element->append_child( new_child = lo_element2 ). + +* cNvPicPr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpicpr + parent = io_document ). + +* picLocks + lo_element3 = io_document->create_simple_element( name = lc_xml_node_piclocks + parent = io_document ). + lo_element3->set_attribute_ns( name = 'noChangeAspect' + value = '1' ). + + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_pic->append_child( new_child = lo_element ). + +* blipFill + lv_value = ip_index. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = io_document->create_simple_element( name = lc_xml_node_blipfill + parent = io_document ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_ablip + parent = io_document ). + lo_element2->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + lo_element2->set_attribute_ns( name = 'r:embed' + value = lv_value ). + lo_element->append_child( new_child = lo_element2 ). + + lo_element2 = io_document->create_simple_element( name = lc_xml_node_astretch + parent = io_document ). + lo_element->append_child( new_child = lo_element2 ). + + lo_element_pic->append_child( new_child = lo_element ). + +* spPr + lo_element = io_document->create_simple_element( name = lc_xml_node_sppr + parent = io_document ). + + lo_element2 = io_document->create_simple_element( name = lc_xml_node_apgeom + parent = io_document ). + lo_element2->set_attribute_ns( name = 'prst' + value = 'rect' ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_aavlst + parent = io_document ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + + lo_element_pic->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_pic ). + WHEN zcl_excel_drawing=>type_chart. +* graphicFrame ********************************** + lo_element_graphicframe = io_document->create_simple_element( name = lc_xml_node_graphicframe + parent = io_document ). +* nvGraphicFramePr + lo_element = io_document->create_simple_element( name = lc_xml_node_nvgraphicframepr + parent = io_document ). +* cNvPr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr + parent = io_document ). + lv_value = sy-index. + CONDENSE lv_value. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lo_element2->set_attribute_ns( name = 'name' + value = io_drawing->title ). + lo_element->append_child( new_child = lo_element2 ). +* cNvGraphicFramePr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvgraphicframepr + parent = io_document ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_graphicframelocks + parent = io_document ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). + +* xfrm + lo_element = io_document->create_simple_element( name = lc_xml_node_xfrm + parent = io_document ). +* off + lo_element2 = io_document->create_simple_element( name = lc_xml_node_aoff + parent = io_document ). + lo_element2->set_attribute_ns( name = 'y' value = '0' ). + lo_element2->set_attribute_ns( name = 'x' value = '0' ). + lo_element->append_child( new_child = lo_element2 ). +* ext + lo_element2 = io_document->create_simple_element( name = lc_xml_node_aext + parent = io_document ). + lo_element2->set_attribute_ns( name = 'cy' value = '0' ). + lo_element2->set_attribute_ns( name = 'cx' value = '0' ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). + +* graphic + lo_element = io_document->create_simple_element( name = lc_xml_node_agraphic + parent = io_document ). +* graphicData + lo_element2 = io_document->create_simple_element( name = lc_xml_node_agraphicdata + parent = io_document ). + lo_element2->set_attribute_ns( name = 'uri' value = lc_xml_node_ns_c ). + +* chart + lo_element3 = io_document->create_simple_element( name = lc_xml_node_cchart + parent = io_document ). + + lo_element3->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + lo_element3->set_attribute_ns( name = 'xmlns:c' + value = lc_xml_node_ns_c ). + + lv_value = ip_index. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element3->set_attribute_ns( name = 'r:id' + value = lv_value ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_graphicframe ). + + ENDCASE. + +* client data *************************** + lo_element_clientdata = io_document->create_simple_element( name = lc_xml_node_clientdata + parent = io_document ). + ep_anchor->append_child( new_child = lo_element_clientdata ). + + endmethod. + + + + method CREATE_XL_RELATIONSHIPS. + + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#', + " Node type + lc_xml_node_rid_sheet_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + lc_xml_node_rid_theme_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + lc_xml_node_rid_styles_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + lc_xml_node_rid_shared_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + " Node target + lc_xml_node_ridx_tg TYPE string VALUE 'worksheets/sheet#.xml', + lc_xml_node_rid_shared_tg TYPE string VALUE 'sharedStrings.xml', + lc_xml_node_rid_styles_tg TYPE string VALUE 'styles.xml', + lc_xml_node_rid_theme_tg TYPE string VALUE 'theme/theme1.xml'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + 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_syindex(3) TYPE c. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + lv_size = excel->get_worksheets_size( ). + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_size = lv_size + 2. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_styles_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_styles_tg ). + lo_element_root->append_child( new_child = lo_element ). + + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_size = lv_size - 1. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_theme_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_theme_tg ). + lo_element_root->append_child( new_child = lo_element ). + + lv_size = excel->get_worksheets_size( ). + + DO lv_size TIMES. + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + lv_xml_node_ridx_tg = lc_xml_node_ridx_tg. + lv_syindex = sy-index. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_tg WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_sheet_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_xml_node_ridx_tg ). + lo_element_root->append_child( new_child = lo_element ). + ENDDO. + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 3 TO lv_size. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_shared_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_shared_tg ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + method CREATE_XL_SHAREDSTRINGS. + + +** Constant node name + DATA: lc_xml_node_sst TYPE string VALUE 'sst', + lc_xml_node_si TYPE string VALUE 'si', + lc_xml_node_t TYPE string VALUE 't', + " Node attributes + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_uniquecount TYPE string VALUE 'uniqueCount', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, + ls_shared_string TYPE zexcel_s_shared_string, + lv_value TYPE string, + lv_count_str TYPE string, + lv_uniquecount_str TYPE string, + lv_sytabix TYPE sytabix, + lv_count TYPE i, + lv_uniquecount TYPE i. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data, + <fs_sheet_string> TYPE zexcel_s_shared_string. + +********************************************************************** +* STEP 1: Collect strings from each worksheet + lo_iterator = excel->get_worksheets_iterator( ). + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. + ENDWHILE. + + DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content + + DESCRIBE TABLE lt_cell_data LINES lv_count. + MOVE lv_count TO lv_count_str. + + SHIFT lv_count_str RIGHT DELETING TRAILING space. + SHIFT lv_count_str LEFT DELETING LEADING space. + + SORT lt_cell_data BY cell_value. + DELETE ADJACENT DUPLICATES FROM lt_cell_data COMPARING cell_value. + + DESCRIBE TABLE lt_cell_data LINES lv_uniquecount. + MOVE lv_uniquecount TO lv_uniquecount_str. + + SHIFT lv_uniquecount_str RIGHT DELETING TRAILING space. + SHIFT lv_uniquecount_str LEFT DELETING LEADING space. + + LOOP AT lt_cell_data ASSIGNING <fs_sheet_content>. + lv_sytabix = sy-tabix - 1. + MOVE lv_sytabix TO ls_shared_string-string_no. + MOVE <fs_sheet_content>-cell_value TO ls_shared_string-string_value. + APPEND ls_shared_string TO shared_strings. + ENDLOOP. + + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_sst + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_count + value = lv_count_str ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_uniquecount + value = lv_uniquecount_str ). + +********************************************************************** +* STEP 4: Create subnode + LOOP AT shared_strings ASSIGNING <fs_sheet_string>. + lo_element = lo_document->create_simple_element( name = lc_xml_node_si + parent = lo_document ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_t + parent = lo_document ). + lo_sub_element->set_value( value = <fs_sheet_string>-string_value ). + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + ENDLOOP. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + + + METHOD create_xl_sheet. +*--------------------------------------------------------------------* +* issue #330 - Adding ColorScale conditional formatting +* - Ivan Femia, 2014-08-25 +*--------------------------------------------------------------------* + + TYPES: BEGIN OF colors, + colorrgb TYPE zexcel_color, + END OF colors. + +*--------------------------------------------------------------------* +* issue #237 - Error writing column-style +* - Stefan Schmöcker, 2012-11-01 +*--------------------------------------------------------------------* + + TYPES: BEGIN OF cfvo, + value TYPE zexcel_conditional_value, + type TYPE zexcel_conditional_type, + END OF cfvo. + +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 1 - start +*--------------------------------------------------------------------* + TYPES: BEGIN OF lty_table_area, + left TYPE i, + right TYPE i, + top TYPE i, + bottom TYPE i, + END OF lty_table_area. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 1 - end +*--------------------------------------------------------------------* + + +** Constant node name + DATA: lc_xml_node_worksheet TYPE string VALUE 'worksheet', + lc_xml_node_sheetpr TYPE string VALUE 'sheetPr', + lc_xml_node_tabcolor TYPE string VALUE 'tabColor', + lc_xml_node_outlinepr TYPE string VALUE 'outlinePr', + lc_xml_node_dimension TYPE string VALUE 'dimension', + lc_xml_node_sheetviews TYPE string VALUE 'sheetViews', + lc_xml_node_sheetview TYPE string VALUE 'sheetView', + lc_xml_node_selection TYPE string VALUE 'selection', + lc_xml_node_pane TYPE string VALUE 'pane', + lc_xml_node_sheetformatpr TYPE string VALUE 'sheetFormatPr', + lc_xml_node_cols TYPE string VALUE 'cols', + lc_xml_node_col TYPE string VALUE 'col', + lc_xml_node_sheetdata TYPE string VALUE 'sheetData', + lc_xml_node_row TYPE string VALUE 'row', + lc_xml_node_c TYPE string VALUE 'c', + lc_xml_node_v TYPE string VALUE 'v', + lc_xml_node_f TYPE string VALUE 'f', + lc_xml_node_sheetprotection TYPE string VALUE 'sheetProtection', + lc_xml_node_pagemargins TYPE string VALUE 'pageMargins', + lc_xml_node_pagesetup TYPE string VALUE 'pageSetup', + lc_xml_node_pagesetuppr TYPE string VALUE 'pageSetUpPr', + lc_xml_node_condformatting TYPE string VALUE 'conditionalFormatting', + lc_xml_node_cfrule TYPE string VALUE 'cfRule', + lc_xml_node_color TYPE string VALUE 'color', " Databar by Albert Lladanosa + lc_xml_node_databar TYPE string VALUE 'dataBar', " Databar by Albert Lladanosa + lc_xml_node_colorscale TYPE string VALUE 'colorScale', + lc_xml_node_iconset TYPE string VALUE 'iconSet', + lc_xml_node_cfvo TYPE string VALUE 'cfvo', + lc_xml_node_formula TYPE string VALUE 'formula', + lc_xml_node_datavalidations TYPE string VALUE 'dataValidations', + lc_xml_node_datavalidation TYPE string VALUE 'dataValidation', + lc_xml_node_formula1 TYPE string VALUE 'formula1', + lc_xml_node_formula2 TYPE string VALUE 'formula2', + lc_xml_node_mergecell TYPE string VALUE 'mergeCell', + lc_xml_node_mergecells TYPE string VALUE 'mergeCells', + lc_xml_node_drawing TYPE string VALUE 'drawing', + lc_xml_node_headerfooter TYPE string VALUE 'headerFooter', + lc_xml_node_oddheader TYPE string VALUE 'oddHeader', + lc_xml_node_oddfooter TYPE string VALUE 'oddFooter', + lc_xml_node_evenheader TYPE string VALUE 'evenHeader', + lc_xml_node_evenfooter TYPE string VALUE 'evenFooter', + lc_xml_node_autofilter TYPE string VALUE 'autoFilter', + lc_xml_node_filtercolumn TYPE string VALUE 'filterColumn', + lc_xml_node_filters TYPE string VALUE 'filters', + lc_xml_node_filter TYPE string VALUE 'filter', + " Node attributes + lc_xml_attr_ref TYPE string VALUE 'ref', + lc_xml_attr_summarybelow TYPE string VALUE 'summaryBelow', + lc_xml_attr_summaryright TYPE string VALUE 'summaryRight', + lc_xml_attr_tabselected TYPE string VALUE 'tabSelected', + lc_xml_attr_showzeros TYPE string VALUE 'showZeros', + lc_xml_attr_zoomscale TYPE string VALUE 'zoomScale', + lc_xml_attr_zoomscalenormal TYPE string VALUE 'zoomScaleNormal', + lc_xml_attr_zoomscalepageview TYPE string VALUE 'zoomScalePageLayoutView', + lc_xml_attr_zoomscalesheetview TYPE string VALUE 'zoomScaleSheetLayoutView', + lc_xml_attr_workbookviewid TYPE string VALUE 'workbookViewId', + lc_xml_attr_showgridlines TYPE string VALUE 'showGridLines', + lc_xml_attr_gridlines TYPE string VALUE 'gridLines', + lc_xml_attr_showrowcolheaders TYPE string VALUE 'showRowColHeaders', + lc_xml_attr_activecell TYPE string VALUE 'activeCell', + lc_xml_attr_sqref TYPE string VALUE 'sqref', + lc_xml_attr_min TYPE string VALUE 'min', + lc_xml_attr_max TYPE string VALUE 'max', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_width TYPE string VALUE 'width', + lc_xml_attr_defaultwidth TYPE string VALUE '9.10', + lc_xml_attr_style TYPE string VALUE 'style', + lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_bestfit TYPE string VALUE 'bestFit', + lc_xml_attr_customheight TYPE string VALUE 'customHeight', + lc_xml_attr_customwidth TYPE string VALUE 'customWidth', + lc_xml_attr_collapsed TYPE string VALUE 'collapsed', + lc_xml_attr_defaultrowheight TYPE string VALUE 'defaultRowHeight', + lc_xml_attr_defaultcolwidth TYPE string VALUE 'defaultColWidth', + lc_xml_attr_outlinelevelrow TYPE string VALUE 'x14ac:outlineLevelRow', + lc_xml_attr_outlinelevelcol TYPE string VALUE 'x14ac:outlineLevelCol', + lc_xml_attr_outlinelevel TYPE string VALUE 'outlineLevel', + lc_xml_attr_r TYPE string VALUE 'r', + lc_xml_attr_s TYPE string VALUE 's', + lc_xml_attr_spans TYPE string VALUE 'spans', + lc_xml_attr_t TYPE string VALUE 't', + lc_xml_attr_password TYPE string VALUE 'password', + lc_xml_attr_sheet TYPE string VALUE 'sheet', + lc_xml_attr_objects TYPE string VALUE 'objects', + lc_xml_attr_scenarios TYPE string VALUE 'scenarios', + lc_xml_attr_autofilter TYPE string VALUE 'autoFilter', + lc_xml_attr_deletecolumns TYPE string VALUE 'deleteColumns', + lc_xml_attr_deleterows TYPE string VALUE 'deleteRows', + lc_xml_attr_formatcells TYPE string VALUE 'formatCells', + lc_xml_attr_formatcolumns TYPE string VALUE 'formatColumns', + lc_xml_attr_formatrows TYPE string VALUE 'formatRows', + lc_xml_attr_insertcolumns TYPE string VALUE 'insertColumns', + lc_xml_attr_inserthyperlinks TYPE string VALUE 'insertHyperlinks', + lc_xml_attr_insertrows TYPE string VALUE 'insertRows', + lc_xml_attr_pivottables TYPE string VALUE 'pivotTables', + lc_xml_attr_selectlockedcells TYPE string VALUE 'selectLockedCells', + lc_xml_attr_selectunlockedcell TYPE string VALUE 'selectUnlockedCells', + lc_xml_attr_sort TYPE string VALUE 'sort', + lc_xml_attr_left TYPE string VALUE 'left', + lc_xml_attr_right TYPE string VALUE 'right', + lc_xml_attr_top TYPE string VALUE 'top', + lc_xml_attr_bottom TYPE string VALUE 'bottom', + lc_xml_attr_header TYPE string VALUE 'header', + lc_xml_attr_footer TYPE string VALUE 'footer', + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_iconset TYPE string VALUE 'iconSet', + lc_xml_attr_showvalue TYPE string VALUE 'showValue', + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_attr_dxfid TYPE string VALUE 'dxfId', + lc_xml_attr_priority TYPE string VALUE 'priority', + lc_xml_attr_operator TYPE string VALUE 'operator', + lc_xml_attr_allowblank TYPE string VALUE 'allowBlank', + lc_xml_attr_showinputmessage TYPE string VALUE 'showInputMessage', + lc_xml_attr_showerrormessage TYPE string VALUE 'showErrorMessage', + lc_xml_attr_errortitle TYPE string VALUE 'errorTitle', + lc_xml_attr_error TYPE string VALUE 'error', + lc_xml_attr_prompttitle TYPE string VALUE 'promptTitle', + lc_xml_attr_prompt TYPE string VALUE 'prompt', + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_blackandwhite TYPE string VALUE 'blackAndWhite', + lc_xml_attr_cellcomments TYPE string VALUE 'cellComments', + lc_xml_attr_copies TYPE string VALUE 'copies', + lc_xml_attr_draft TYPE string VALUE 'draft', + lc_xml_attr_errors TYPE string VALUE 'errors', + lc_xml_attr_firstpagenumber TYPE string VALUE 'firstPageNumber', + lc_xml_attr_fittopage TYPE string VALUE 'fitToPage', + lc_xml_attr_fittoheight TYPE string VALUE 'fitToHeight', + lc_xml_attr_fittowidth TYPE string VALUE 'fitToWidth', + lc_xml_attr_horizontaldpi TYPE string VALUE 'horizontalDpi', + lc_xml_attr_orientation TYPE string VALUE 'orientation', + lc_xml_attr_pageorder TYPE string VALUE 'pageOrder', + lc_xml_attr_paperheight TYPE string VALUE 'paperHeight', + lc_xml_attr_papersize TYPE string VALUE 'paperSize', + lc_xml_attr_paperwidth TYPE string VALUE 'paperWidth', + lc_xml_attr_scale TYPE string VALUE 'scale', + lc_xml_attr_usefirstpagenumber TYPE string VALUE 'useFirstPageNumber', + lc_xml_attr_useprinterdefaults TYPE string VALUE 'usePrinterDefaults', + lc_xml_attr_verticaldpi TYPE string VALUE 'verticalDpi', + lc_xml_attr_differentoddeven TYPE string VALUE 'differentOddEven', + lc_xml_attr_colid TYPE string VALUE 'colId', + lc_xml_attr_filtermode TYPE string VALUE 'filterMode', + lc_xml_attr_tabcolor_rgb TYPE string VALUE 'rgb', + lc_xml_attr_tabcolor_theme TYPE string VALUE 'theme', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + lc_xml_node_comp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + lc_xml_node_comp_pref TYPE string VALUE 'x14ac', + lc_xml_node_ig_ns TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element_2 TYPE REF TO if_ixml_element, + lo_element_3 TYPE REF TO if_ixml_element, + lo_element_4 TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_table TYPE REF TO zcl_excel_table, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, + default_col_dimension TYPE REF TO zcl_excel_worksheet_columndime, + default_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + + DATA: lv_value TYPE string, + lt_range_merge TYPE string_table, + lv_merge TYPE string, + lv_column_p TYPE zexcel_cell_column_alpha, + lv_column TYPE zexcel_cell_column, + lv_cell_value TYPE zexcel_cell_value, + lv_style_guid TYPE zexcel_cell_style, + lv_flag TYPE c, + ls_databar TYPE zexcel_conditional_databar, " Databar by Albert Lladanosa + ls_colorscale TYPE zexcel_conditional_colorscale, + ls_iconset TYPE zexcel_conditional_iconset, + ls_cellis TYPE zexcel_conditional_cellis, + ls_expression TYPE zexcel_conditional_expression, + lt_cfvo TYPE TABLE OF cfvo, + ls_cfvo TYPE cfvo, + lt_colors TYPE TABLE OF colors, + ls_colors TYPE colors, + lv_cell_row_s TYPE string, + ls_last_row TYPE zexcel_s_cell_data, + ls_style_mapping TYPE zexcel_s_styles_mapping, + lv_freeze_cell_row TYPE zexcel_cell_row, + lv_freeze_cell_column TYPE zexcel_cell_column, + lv_freeze_cell_column_alpha TYPE zexcel_cell_column_alpha, + column_dimensions TYPE zexcel_t_worksheet_columndime, + row_dimensions TYPE zexcel_t_worksheet_rowdimensio, + ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, + lv_relation_id TYPE i VALUE 0, + outline_level_row TYPE i VALUE 0, + outline_level_col TYPE i VALUE 0, + col_count TYPE int4, + merge_count TYPE int4, + write_current_row TYPE boolean, + lt_values TYPE zexcel_t_autofilter_values, + ls_values TYPE zexcel_s_autofilter_values, + lv_guid TYPE uuid, + lo_autofilters TYPE REF TO zcl_excel_autofilters, + lo_autofilter TYPE REF TO zcl_excel_autofilter, + l_autofilter_hidden TYPE flag, + ls_area TYPE zexcel_s_autofilter_area, + lv_ref TYPE string, + lv_style_index TYPE i. " issue #237 + + + FIELD-SYMBOLS: <ls_sheet_content> TYPE zexcel_s_cell_data, + <fs_range_merge> LIKE LINE OF lt_range_merge, + <column_dimension> TYPE zexcel_s_worksheet_columndime, + <row_dimension> TYPE zexcel_s_worksheet_rowdimensio. + +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 2 - start +*--------------------------------------------------------------------* + DATA: lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom, + ls_table_area LIKE LINE OF lt_table_areas. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 2 - end +*--------------------------------------------------------------------* + + + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_worksheet + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_r_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:mc' + value = lc_xml_node_comp_ns ). + lo_element_root->set_attribute_ns( name = 'mc:Ignorable' + value = lc_xml_node_comp_pref ). + lo_element_root->set_attribute_ns( name = 'xmlns:x14ac' + value = lc_xml_node_ig_ns ). + + +********************************************************************** +* STEP 4: Create subnodes + " sheetPr + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetpr + parent = lo_document ). + " TODO tabColor + IF io_worksheet->tabcolor IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_tabcolor + parent = lo_element ). +* Theme not supported yet - start with RGB + lv_value = io_worksheet->tabcolor-rgb. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). + ENDIF. + + " outlinePr + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_outlinepr + parent = lo_document ). + + lv_value = io_worksheet->zif_excel_sheet_properties~summarybelow. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_summarybelow + value = lv_value ). + + lv_value = io_worksheet->zif_excel_sheet_properties~summaryright. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_summaryright + value = lv_value ). + + lo_element->append_child( new_child = lo_element_2 ). + + IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_pagesetuppr + parent = lo_document ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_fittopage + value = `1` ). + lo_element->append_child( new_child = lo_element_2 ). " pageSetupPr node + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). + + " dimension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_dimension + parent = lo_document ). + lv_value = io_worksheet->get_dimension_range( ). + lo_element->set_attribute_ns( name = lc_xml_attr_ref + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " sheetViews node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetviews + parent = lo_document ). + " sheetView node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_sheetview + parent = lo_document ). + IF io_worksheet->zif_excel_sheet_properties~show_zeros EQ abap_false. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showzeros + value = '0' ). + ENDIF. + IF iv_active = abap_true + OR io_worksheet->zif_excel_sheet_properties~selected EQ abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected + value = '0' ). + ENDIF. + " Zoom scale + IF io_worksheet->zif_excel_sheet_properties~zoomscale GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscale + value = lv_value ). + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_normal LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_normal. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalenormal + value = lv_value ). + ENDIF. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalepageview + value = lv_value ). + ENDIF. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalesheetview + value = lv_value ). + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_workbookviewid + value = '0' ). + " showGridLines attribute + IF io_worksheet->show_gridlines = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines + value = '0' ). + ENDIF. + + " showRowColHeaders attribute + IF io_worksheet->show_rowcolheaders = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders + value = '0' ). + ENDIF. + + + " freeze panes + io_worksheet->get_freeze_cell( IMPORTING ep_row = lv_freeze_cell_row + ep_column = lv_freeze_cell_column ). + + IF lv_freeze_cell_row IS NOT INITIAL AND lv_freeze_cell_column IS NOT INITIAL. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_pane + parent = lo_element_2 ). + + IF lv_freeze_cell_row > 1. + lv_value = lv_freeze_cell_row - 1. + CONDENSE lv_value. + lo_element_3->set_attribute_ns( name = 'ySplit' + value = lv_value ). + ENDIF. + + IF lv_freeze_cell_column > 1. + lv_value = lv_freeze_cell_column - 1. + CONDENSE lv_value. + lo_element_3->set_attribute_ns( name = 'xSplit' + value = lv_value ). + ENDIF. + + lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ). + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ). + CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value. + lo_element_3->set_attribute_ns( name = 'topLeftCell' + value = lv_value ). + + lo_element_3->set_attribute_ns( name = 'activePane' + value = 'bottomRight' ). + + lo_element_3->set_attribute_ns( name = 'state' + value = 'frozen' ). + + lo_element_2->append_child( new_child = lo_element_3 ). + ENDIF. + " selection node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_selection + parent = lo_document ). + lv_value = io_worksheet->get_active_cell( ). + lo_element_3->set_attribute_ns( name = lc_xml_attr_activecell + value = lv_value ). + + lo_element_3->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). + + lo_element_2->append_child( new_child = lo_element_3 ). " sheetView node + + lo_element->append_child( new_child = lo_element_2 ). " sheetView node + + lo_element_root->append_child( new_child = lo_element ). " sheetViews node + + + column_dimensions[] = io_worksheet->get_column_dimensions( ). + " Calculate col + IF NOT column_dimensions IS INITIAL. + io_worksheet->calculate_column_widths( ). + column_dimensions[] = io_worksheet->get_column_dimensions( ). + ENDIF. + row_dimensions[] = io_worksheet->get_row_dimensions( ). + " sheetFormatPr node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetformatpr + parent = lo_document ). + " defaultRowHeight + default_row_dimension = io_worksheet->get_default_row_dimension( ). + IF default_row_dimension IS BOUND. + IF default_row_dimension->get_row_height( ) >= 0. + lo_element->set_attribute_ns( name = lc_xml_attr_customheight + value = lc_xml_attr_true ). + lv_value = default_row_dimension->get_row_height( ). + ELSE. + lv_value = '12.75'. + ENDIF. + ELSE. + lv_value = '12.75'. + ENDIF. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_defaultrowheight + value = lv_value ). + " defaultColWidth + default_col_dimension = io_worksheet->get_default_column_dimension( ). + IF default_col_dimension IS BOUND. + IF default_col_dimension->get_width( ) >= 0. + lv_value = default_col_dimension->get_width( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_defaultcolwidth + value = lv_value ). + ENDIF. + ENDIF. + " outlineLevelRow + LOOP AT row_dimensions ASSIGNING <row_dimension>. + IF <row_dimension>-row_dimension->get_outline_level( ) > outline_level_row. + outline_level_row = <row_dimension>-row_dimension->get_outline_level( ). + ENDIF. + ENDLOOP. + lv_value = outline_level_row. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_outlinelevelrow + value = lv_value ). + " outlineLevelCol + LOOP AT column_dimensions ASSIGNING <column_dimension>. + IF <column_dimension>-column_dimension->get_outline_level( ) > outline_level_col. + outline_level_col = <column_dimension>-column_dimension->get_outline_level( ). + ENDIF. + ENDLOOP. + lv_value = outline_level_col. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_outlinelevelcol + value = lv_value ). +* lv_value = 0. +* SHIFT lv_value RIGHT DELETING TRAILING space. +* SHIFT lv_value LEFT DELETING LEADING space. +* lo_element->set_attribute_ns( name = lc_xml_attr_dydescent +* value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). " sheetFormatPr node + + IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL OR NOT column_dimensions IS INITIAL. + " cols node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cols + parent = lo_document ). + " This code have to be enhanced in order to manage also column style properties + " Now it is an out/out + IF NOT column_dimensions IS INITIAL. + LOOP AT column_dimensions ASSIGNING <column_dimension>. + " col node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col + parent = lo_document ). + lv_value = <column_dimension>-column_dimension->get_column_index( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_min + value = lv_value ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_max + value = lv_value ). + " Width + IF <column_dimension>-column_dimension->get_width( ) < 0. + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lc_xml_attr_defaultwidth ). + ELSE. + lv_value = <column_dimension>-column_dimension->get_width( ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lv_value ). + ENDIF. + " Column visibility + IF <column_dimension>-column_dimension->get_visible( ) = abap_false. + lo_element_2->set_attribute_ns( name = lc_xml_attr_hidden + value = lc_xml_attr_true ). + ENDIF. + " Auto size? + IF <column_dimension>-column_dimension->get_auto_size( ) = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_bestfit + value = lc_xml_attr_true ). + ENDIF. + " Custom width? + IF default_col_dimension IS BOUND. + IF <column_dimension>-column_dimension->get_width( ) + <> default_col_dimension->get_width( ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth + value = lc_xml_attr_true ). + + ENDIF. + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth + value = lc_xml_attr_true ). + ENDIF. + " Collapsed + IF <column_dimension>-column_dimension->get_collapsed( ) = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_collapsed + value = lc_xml_attr_true ). + ENDIF. + " outlineLevel + IF <column_dimension>-column_dimension->get_outline_level( ) > 0. + lv_value = <column_dimension>-column_dimension->get_outline_level( ). + + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_outlinelevel + value = lv_value ). + ENDIF. + " Style +* lv_value = <column_dimension>-column_dimension->get_xf_index( ). "del issue #157 - set column style + lv_style_guid = <column_dimension>-column_dimension->get_column_style_guid( ). "ins issue #157 - set column style +* lv_value = me->excel->get_style_index_in_styles( lv_style_guid ). "del issue #237 + CLEAR ls_style_mapping. + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. + lv_style_index = ls_style_mapping-style. + IF lv_style_index > 0. "ins issue #237 + lv_value = lv_style_index - 1. "ins issue #237 + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. "ins issue #237 + + lo_element->append_child( new_child = lo_element_2 ). " col node + ENDLOOP. +* ELSE. "del issue #157 - set sheet style ( add missing columns +* IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL. "del issue #157 - set sheet style ( add missing columns +* Begin of insertion issue #157 - set sheet style ( add missing columns + ENDIF. +* Always pass through this coding + IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL. + DATA: lts_sorted_columns TYPE SORTED TABLE OF zexcel_cell_column WITH UNIQUE KEY table_line. + TYPES: BEGIN OF ty_missing_columns, + first_column TYPE zexcel_cell_column, + last_column TYPE zexcel_cell_column, + END OF ty_missing_columns. + DATA: t_missing_columns TYPE STANDARD TABLE OF ty_missing_columns WITH NON-UNIQUE DEFAULT KEY, + missing_column LIKE LINE OF t_missing_columns. + +* First collect columns that were already handled before. The rest has to be inserted now + LOOP AT column_dimensions ASSIGNING <column_dimension>. + lv_column = zcl_excel_common=>convert_column2int( <column_dimension>-column ). + INSERT lv_column INTO TABLE lts_sorted_columns. + ENDLOOP. + +* Now find all columns that were missing so far + missing_column-first_column = 1. + LOOP AT lts_sorted_columns INTO lv_column. + IF lv_column > missing_column-first_column. + missing_column-last_column = lv_column - 1. + APPEND missing_column TO t_missing_columns. + ENDIF. + missing_column-first_column = lv_column + 1. + ENDLOOP. + missing_column-last_column = zcl_excel_common=>c_excel_sheet_max_col. + APPEND missing_column TO t_missing_columns. +* Now apply stylesetting ( and other defaults - I copy it from above. Whoever programmed that seems to know what to do :o) + LOOP AT t_missing_columns INTO missing_column. +* End of insertion issue #157 - set column style + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col + parent = lo_document ). +* lv_value = zcl_excel_common=>c_excel_sheet_min_col."del issue #157 - set sheet style ( add missing columns + lv_value = missing_column-first_column. "ins issue #157 - set sheet style ( add missing columns + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_min + value = lv_value ). +* lv_value = zcl_excel_common=>c_excel_sheet_max_col."del issue #157 - set sheet style ( add missing columns + lv_value = missing_column-last_column. "ins issue #157 - set sheet style ( add missing columns + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_max + value = lv_value ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lc_xml_attr_defaultwidth ). + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. + lv_value = ls_style_mapping-style. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). " col node + ENDLOOP. "ins issue #157 - set sheet style ( add missing columns + + ENDIF. + lo_element_root->append_child( new_child = lo_element ). " cols node + ENDIF. + " sheetData node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetdata + parent = lo_document ). + " Get column count + col_count = io_worksheet->get_highest_column( ). + " Get autofilter + lv_guid = io_worksheet->get_guid( ) . + lo_autofilters = excel->get_autofilters_reference( ). + lo_autofilter = lo_autofilters->get( i_sheet_guid = lv_guid ) . + IF lo_autofilter IS BOUND. + lt_values = lo_autofilter->get_values( ) . + ls_area = lo_autofilter->get_filter_area( ) . + l_autofilter_hidden = abap_true. " First defautl is not showing + ENDIF. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 1 - start +*--------------------------------------------------------------------* +* Build table to hold all table-areas attached to this sheet + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_iterator->if_object_collection_iterator~get_next( ). + ls_table_area-left = zcl_excel_common=>convert_column2int( lo_table->settings-top_left_column ). + ls_table_area-right = lo_table->get_right_column_integer( ). + ls_table_area-top = lo_table->settings-top_left_row. + ls_table_area-bottom = lo_table->get_bottom_row_integer( ). + INSERT ls_table_area INTO TABLE lt_table_areas. + ENDWHILE. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 1 - end +*--------------------------------------------------------------------* + + LOOP AT io_worksheet->sheet_content ASSIGNING <ls_sheet_content>. + READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. + IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. + CLEAR l_autofilter_hidden. + ENDIF. + CLEAR ls_style_mapping. + IF ls_last_row-cell_row NE <ls_sheet_content>-cell_row. + IF lo_autofilter IS BOUND. + IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header + ls_area-row_end < ls_last_row-cell_row . + CLEAR l_autofilter_hidden. + ENDIF. + ELSE. + CLEAR l_autofilter_hidden. + ENDIF. + IF ls_last_row-cell_row IS NOT INITIAL. + " Row visibility of previos row. + IF row_dimension->get_visible( ) = abap_false OR + l_autofilter_hidden = abap_true. + lo_element_2->set_attribute_ns( name = 'hidden' value = 'true'). + ENDIF. + lo_element->append_child( new_child = lo_element_2 ). " row node + ENDIF. + " Add new row + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_row + parent = lo_document ). + " r + lv_value = <ls_sheet_content>-cell_row. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + + lo_element_2->set_attribute_ns( name = lc_xml_attr_r + value = lv_value ). + " Spans + lv_value = col_count. + CONCATENATE '1:' lv_value INTO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_spans + value = lv_value ). + row_dimension = io_worksheet->get_row_dimension( <ls_sheet_content>-cell_row ). + " Do we need the row dimension attributes? + IF row_dimension->get_row_height( ) >= 0 OR + row_dimension->get_collapsed( ) = abap_true OR + row_dimension->get_outline_level( ) > 0 OR + row_dimension->get_xf_index( ) <> 0 OR + l_autofilter_hidden = abap_true. + " Row dimensions + IF row_dimension->get_row_height( ) >= 0. + lo_element_2->set_attribute_ns( name = 'customHeight' value = '1'). + lv_value = row_dimension->get_row_height( ). + lo_element_2->set_attribute_ns( name = 'ht' value = lv_value ). + ENDIF. + " Collapsed + IF row_dimension->get_collapsed( ) = abap_true. + lo_element_2->set_attribute_ns( name = 'collapsed' value = 'true'). + ENDIF. + " Outline level + IF row_dimension->get_outline_level( ) > 0. + lv_value = row_dimension->get_outline_level( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = 'outlineLevel' value = lv_value ). + ENDIF. + " Style + IF row_dimension->get_xf_index( ) <> 0. + lv_value = row_dimension->get_xf_index( ). + lo_element_2->set_attribute_ns( name = 's' value = lv_value ). + lo_element_2->set_attribute_ns( name = 'customFormat' value = '1'). + ENDIF. + ENDIF. + l_autofilter_hidden = abap_true. " First default is not showing + ENDIF. + + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_c + parent = lo_document ). + + lo_element_3->set_attribute_ns( name = lc_xml_attr_r + value = <ls_sheet_content>-cell_coords ). + +* begin of change issue #157 - allow column cellstyle +* if no cellstyle is set, look into column, then into sheet + IF <ls_sheet_content>-cell_style IS NOT INITIAL. + lv_style_guid = <ls_sheet_content>-cell_style. + ELSE. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 2 - start +*--------------------------------------------------------------------* +* Check if cell in any of the table areas + LOOP AT lt_table_areas TRANSPORTING NO FIELDS WHERE top <= <ls_sheet_content>-cell_row + AND bottom >= <ls_sheet_content>-cell_row + AND left <= <ls_sheet_content>-cell_column + AND right >= <ls_sheet_content>-cell_column. + EXIT. + ENDLOOP. + IF sy-subrc = 0. + CLEAR lv_style_guid. " No style --> EXCEL will use built-in-styles as declared in the tables-section + ELSE. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 2 - end +*--------------------------------------------------------------------* + lv_column_p = zcl_excel_common=>convert_column2alpha( <ls_sheet_content>-cell_column ). + READ TABLE column_dimensions WITH KEY column = lv_column_p ASSIGNING <column_dimension>. + IF sy-subrc = 0. + lv_style_guid = <column_dimension>-column_dimension->get_column_style_guid( ). + IF lv_style_guid IS INITIAL. + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. + ELSE. + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 3 - start +*--------------------------------------------------------------------* + ENDIF. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 3 - end +*--------------------------------------------------------------------* + ENDIF. +* IF <ls_sheet_content>-cell_style IS NOT INITIAL. +* READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = <ls_sheet_content>-cell_style. + IF lv_style_guid IS NOT INITIAL. + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. +* end of change issue #157 - allow column cellstyles + lv_value = ls_style_mapping-style. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_3->set_attribute_ns( name = lc_xml_attr_s + value = lv_value ). + ENDIF. + + " For cells with formula ignore the value - Excel will calculate it + IF <ls_sheet_content>-cell_formula IS NOT INITIAL. + " fomula node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_document ). + lv_value = <ls_sheet_content>-cell_formula. + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " fomula node + ELSEIF <ls_sheet_content>-cell_value IS NOT INITIAL. "cell can have just style or formula + IF <ls_sheet_content>-data_type IS NOT INITIAL. + lo_element_3->set_attribute_ns( name = lc_xml_attr_t + value = <ls_sheet_content>-data_type ). + ENDIF. + + " value node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_document ). + + IF <ls_sheet_content>-data_type EQ 's'. + lv_value = me->get_shared_string_index( <ls_sheet_content>-cell_value ). + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + ELSE. + lv_value = <ls_sheet_content>-cell_value. + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + ENDIF. + + lo_element_3->append_child( new_child = lo_element_4 ). " value node + ENDIF. + + lo_element_2->append_child( new_child = lo_element_3 ). " column node + ls_last_row = <ls_sheet_content>. + ENDLOOP. + IF sy-subrc = 0. + READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. + IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. + CLEAR l_autofilter_hidden. + ENDIF. + IF lo_autofilter IS BOUND. + IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header + ls_area-row_end < ls_last_row-cell_row . + CLEAR l_autofilter_hidden. + ENDIF. + ELSE. + CLEAR l_autofilter_hidden. + ENDIF. + " Row visibility of previos row. + IF row_dimension->get_visible( ) = abap_false OR + l_autofilter_hidden = abap_true. + lo_element_2->set_attribute_ns( name = 'hidden' value = 'true'). + ENDIF. + lo_element->append_child( new_child = lo_element_2 ). " row node + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). " sheetData node + + IF lo_autofilter IS BOUND. +* Create node autofilter + lo_element = lo_document->create_simple_element( name = lc_xml_node_autofilter + parent = lo_document ). + lv_ref = lo_autofilter->get_filter_range( ) . + CONDENSE lv_ref NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_ref + value = lv_ref ). + lt_values = lo_autofilter->get_values( ) . + IF lt_values IS NOT INITIAL. +* If we filter we need to set the filter mode to 1. + lo_element_2 = lo_document->find_from_name( name = lc_xml_node_sheetpr ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_filtermode + value = '1' ). +* Create node filtercolumn + CLEAR lv_column. + LOOP AT lt_values INTO ls_values. + IF ls_values-column <> lv_column. + IF lv_column IS NOT INITIAL. + lo_element_2->append_child( new_child = lo_element_3 ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_filtercolumn + parent = lo_element ). + lv_column = ls_values-column - lo_autofilter->filter_area-col_start. + lv_value = lv_column. + CONDENSE lv_value NO-GAPS. + lo_element_2->set_attribute_ns( name = lc_xml_attr_colid + value = lv_value ). + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_filters + parent = lo_element_2 ). + lv_column = ls_values-column. + ENDIF. + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_filter + parent = lo_element_3 ). + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = ls_values-value ). + lo_element_3->append_child( new_child = lo_element_4 ). " value node + ENDLOOP. + lo_element_2->append_child( new_child = lo_element_3 ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + IF io_worksheet->zif_excel_sheet_protection~protected EQ abap_true. + " sheetProtection node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetprotection + parent = lo_document ). + MOVE io_worksheet->zif_excel_sheet_protection~password TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_password + value = lv_value ). + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_protection~auto_filter. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_autofilter + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~delete_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_deletecolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~delete_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_deleterows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatcells + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatcolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatrows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_insertcolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_hyperlinks. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_inserthyperlinks + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_insertrows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~objects. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_objects + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~pivot_tables. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_pivottables + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~scenarios. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_scenarios + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~select_locked_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_selectlockedcells + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~select_unlocked_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_selectunlockedcell + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~sheet. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_sheet + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~sort. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_sort + value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + " Merged cells + lt_range_merge = io_worksheet->get_merge( ). + IF lt_range_merge IS NOT INITIAL. + lo_element = lo_document->create_simple_element( name = lc_xml_node_mergecells + parent = lo_document ). + DESCRIBE TABLE lt_range_merge LINES merge_count. + lv_value = merge_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + LOOP AT lt_range_merge ASSIGNING <fs_range_merge>. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_mergecell + parent = lo_document ). + + lo_element_2->set_attribute_ns( name = lc_xml_attr_ref + value = <fs_range_merge> ). + lo_element->append_child( new_child = lo_element_2 ). + lo_element_root->append_child( new_child = lo_element ). + io_worksheet->delete_merge( ). + ENDLOOP. + ENDIF. + + " Conditional formatting node + lo_iterator = io_worksheet->get_cond_styles_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style_conditional ?= lo_iterator->if_object_collection_iterator~get_next( ). + IF lo_style_conditional->rule IS INITIAL. + CONTINUE. + ENDIF. + lo_element = lo_document->create_simple_element( name = lc_xml_node_condformatting + parent = lo_document ). + lv_value = lo_style_conditional->get_dimension_range( ) . + lo_element->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). + + " cfRule node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_cfrule + parent = lo_document ). + lv_value = lo_style_conditional->rule. + lo_element_2->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = lo_style_conditional->priority. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_priority + value = lv_value ). + + CASE lo_style_conditional->rule. + " Start >> Databar by Albert Lladanosa + WHEN zcl_excel_style_conditional=>c_rule_databar. + + ls_databar = lo_style_conditional->mode_databar. + + CLEAR lt_cfvo. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_databar + parent = lo_document ). + + MOVE ls_databar-cfvo1_value TO ls_cfvo-value. + MOVE ls_databar-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + MOVE ls_databar-cfvo2_value TO ls_cfvo-value. + MOVE ls_databar-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + LOOP AT lt_cfvo INTO ls_cfvo. + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color + parent = lo_document ). + lv_value = ls_databar-colorrgb. + lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). + + lo_element_3->append_child( new_child = lo_element_4 ). " color node + + lo_element_2->append_child( new_child = lo_element_3 ). " databar node + " End << Databar by Albert Lladanosa + WHEN zcl_excel_style_conditional=>c_rule_colorscale. + + ls_colorscale = lo_style_conditional->mode_colorscale. + + CLEAR: lt_cfvo, lt_colors. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_colorscale + parent = lo_document ). + + MOVE ls_colorscale-cfvo1_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + MOVE ls_colorscale-cfvo2_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + MOVE ls_colorscale-cfvo3_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + APPEND ls_colorscale-colorrgb1 TO lt_colors. + APPEND ls_colorscale-colorrgb2 TO lt_colors. + APPEND ls_colorscale-colorrgb3 TO lt_colors. + + LOOP AT lt_cfvo INTO ls_cfvo. + + IF ls_cfvo IS INITIAL. + CONTINUE. + ENDIF. + + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + LOOP AT lt_colors INTO ls_colors. + + IF ls_colors IS INITIAL. + CONTINUE. + ENDIF. + + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color + parent = lo_document ). + lv_value = ls_colors-colorrgb. + lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). + + lo_element_3->append_child( new_child = lo_element_4 ). " color node + ENDLOOP. + + lo_element_2->append_child( new_child = lo_element_3 ). " databar node + WHEN zcl_excel_style_conditional=>c_rule_iconset. + + ls_iconset = lo_style_conditional->mode_iconset. + + CLEAR lt_cfvo. + " iconset node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_iconset + parent = lo_document ). + IF ls_iconset-iconset NE zcl_excel_style_conditional=>c_iconset_3trafficlights. + lv_value = ls_iconset-iconset. + lo_element_3->set_attribute_ns( name = lc_xml_attr_iconset + value = lv_value ). + ENDIF. + + " Set the showValue attribute + lv_value = ls_iconset-showvalue. + lo_element_3->set_attribute_ns( name = lc_xml_attr_showvalue + value = lv_value ). + + CASE ls_iconset-iconset. + WHEN zcl_excel_style_conditional=>c_iconset_3trafficlights2 OR + zcl_excel_style_conditional=>c_iconset_3arrows OR + zcl_excel_style_conditional=>c_iconset_3arrowsgray OR + zcl_excel_style_conditional=>c_iconset_3flags OR + zcl_excel_style_conditional=>c_iconset_3signs OR + zcl_excel_style_conditional=>c_iconset_3symbols OR + zcl_excel_style_conditional=>c_iconset_3symbols2 OR + zcl_excel_style_conditional=>c_iconset_3trafficlights OR + zcl_excel_style_conditional=>c_iconset_3trafficlights2. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN zcl_excel_style_conditional=>c_iconset_4arrows OR + zcl_excel_style_conditional=>c_iconset_4arrowsgray OR + zcl_excel_style_conditional=>c_iconset_4rating OR + zcl_excel_style_conditional=>c_iconset_4redtoblack OR + zcl_excel_style_conditional=>c_iconset_4trafficlights. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN zcl_excel_style_conditional=>c_iconset_5arrows OR + zcl_excel_style_conditional=>c_iconset_5arrowsgray OR + zcl_excel_style_conditional=>c_iconset_5quarters OR + zcl_excel_style_conditional=>c_iconset_5rating. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo5_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo5_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN OTHERS. + CLEAR lt_cfvo. + ENDCASE. + + LOOP AT lt_cfvo INTO ls_cfvo. + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + + + lo_element_2->append_child( new_child = lo_element_3 ). " iconset node + WHEN zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis = lo_style_conditional->mode_cellis. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_cellis-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid + value = lv_value ). + lv_value = ls_cellis-operator. + lo_element_2->set_attribute_ns( name = lc_xml_attr_operator + value = lv_value ). + " formula node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula + parent = lo_document ). + lv_value = ls_cellis-formula. + lo_element_3->set_value( value = lv_value ). + lo_element_2->append_child( new_child = lo_element_3 ). " formula node + WHEN zcl_excel_style_conditional=>c_rule_expression. + ls_expression = lo_style_conditional->mode_expression. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_expression-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid + value = lv_value ). + " formula node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula + parent = lo_document ). + lv_value = ls_expression-formula. + lo_element_3->set_value( value = lv_value ). + lo_element_2->append_child( new_child = lo_element_3 ). " formula node + ENDCASE. + + lo_element->append_child( new_child = lo_element_2 ). " cfRule node + + lo_element_root->append_child( new_child = lo_element ). " Conditional formatting node + ENDWHILE. + + IF io_worksheet->get_data_validations_size( ) GT 0. + " dataValidations node + lo_element = lo_document->create_simple_element( name = lc_xml_node_datavalidations + parent = lo_document ). + " Conditional formatting node + lo_iterator = io_worksheet->get_data_validations_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_data_validation ?= lo_iterator->if_object_collection_iterator~get_next( ). + " dataValidation node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_datavalidation + parent = lo_document ). + lv_value = lo_data_validation->type. + lo_element_2->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + IF NOT lo_data_validation->operator IS INITIAL. + lv_value = lo_data_validation->operator. + lo_element_2->set_attribute_ns( name = lc_xml_attr_operator + value = lv_value ). + ENDIF. + IF lo_data_validation->allowblank EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_allowblank + value = lv_value ). + IF lo_data_validation->showinputmessage EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showinputmessage + value = lv_value ). + IF lo_data_validation->showerrormessage EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showerrormessage + value = lv_value ). + IF NOT lo_data_validation->errortitle IS INITIAL. + lv_value = lo_data_validation->errortitle. + lo_element_2->set_attribute_ns( name = lc_xml_attr_errortitle + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->error IS INITIAL. + lv_value = lo_data_validation->error. + lo_element_2->set_attribute_ns( name = lc_xml_attr_error + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->prompttitle IS INITIAL. + lv_value = lo_data_validation->prompttitle. + lo_element_2->set_attribute_ns( name = lc_xml_attr_prompttitle + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->prompt IS INITIAL. + lv_value = lo_data_validation->prompt. + lo_element_2->set_attribute_ns( name = lc_xml_attr_prompt + value = lv_value ). + ENDIF. + lv_cell_row_s = lo_data_validation->cell_row. + CONDENSE lv_cell_row_s. + CONCATENATE lo_data_validation->cell_column lv_cell_row_s INTO lv_value. + IF lo_data_validation->cell_row_to IS NOT INITIAL. + lv_cell_row_s = lo_data_validation->cell_row_to. + CONDENSE lv_cell_row_s. + CONCATENATE lv_value ':' lo_data_validation->cell_column_to lv_cell_row_s INTO lv_value. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). + " formula1 node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula1 + parent = lo_document ). + lv_value = lo_data_validation->formula1. + lo_element_3->set_value( value = lv_value ). + + lo_element_2->append_child( new_child = lo_element_3 ). " formula1 node + " formula2 node + IF NOT lo_data_validation->formula2 IS INITIAL. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula2 + parent = lo_document ). + lv_value = lo_data_validation->formula2. + lo_element_3->set_value( value = lv_value ). + + lo_element_2->append_child( new_child = lo_element_3 ). " formula2 node + ENDIF. + + lo_element->append_child( new_child = lo_element_2 ). " dataValidation node + ENDWHILE. + lo_element_root->append_child( new_child = lo_element ). " dataValidations node + ENDIF. + + " Hyperlinks + DATA: lv_hyperlinks_count TYPE i, + lo_link TYPE REF TO zcl_excel_hyperlink. + + lv_hyperlinks_count = io_worksheet->get_hyperlinks_size( ). + IF lv_hyperlinks_count > 0. + lo_element = lo_document->create_simple_element( name = 'hyperlinks' + parent = lo_document ). + + lo_iterator = io_worksheet->get_hyperlinks_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_link ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lo_element_2 = lo_document->create_simple_element( name = 'hyperlink' + parent = lo_element ). + + lv_value = lo_link->get_ref( ). + lo_element_2->set_attribute_ns( name = 'ref' + value = lv_value ). + + IF lo_link->is_internal( ) = abap_true. + lv_value = lo_link->get_url( ). + lo_element_2->set_attribute_ns( name = 'location' + value = lv_value ). + ELSE. + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element_2->set_attribute_ns( name = 'r:id' + value = lv_value ). + + ENDIF. + + lo_element->append_child( new_child = lo_element_2 ). + ENDWHILE. + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + + " PrintOptions + IF io_worksheet->print_gridlines = abap_true OR + io_worksheet->sheet_setup->vertical_centered = abap_true OR + io_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_element = lo_document->create_simple_element( name = 'printOptions' + parent = lo_document ). + + IF io_worksheet->print_gridlines = abap_true. + lo_element->set_attribute_ns( name = lc_xml_attr_gridlines + value = 'true' ). + ENDIF. + + IF io_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_element->set_attribute_ns( name = 'horizontalCentered' + value = 'true' ). + ENDIF. + + IF io_worksheet->sheet_setup->vertical_centered = abap_true. + lo_element->set_attribute_ns( name = 'verticalCentered' + value = 'true' ). + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + " pageMargins node + lo_element = lo_document->create_simple_element( name = lc_xml_node_pagemargins + parent = lo_document ). + + lv_value = io_worksheet->sheet_setup->margin_left. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_left + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_right. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_right + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_top. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_top + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_bottom. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_bottom + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_header. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_header + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_footer. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_footer + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). " pageMargins node + +* pageSetup node + lo_element = lo_document->create_simple_element( name = lc_xml_node_pagesetup + parent = lo_document ). + + IF io_worksheet->sheet_setup->black_and_white IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_blackandwhite + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->cell_comments IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_cellcomments + value = io_worksheet->sheet_setup->cell_comments ). + ENDIF. + + IF io_worksheet->sheet_setup->copies IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->copies. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_copies + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->draft IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_draft + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->errors IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_errors + value = io_worksheet->sheet_setup->errors ). + ENDIF. + + IF io_worksheet->sheet_setup->first_page_number IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->first_page_number. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_firstpagenumber + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->fit_to_height. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_fittoheight + value = lv_value ). + lv_value = io_worksheet->sheet_setup->fit_to_width. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_fittowidth + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->horizontal_dpi IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->horizontal_dpi. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_horizontaldpi + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->orientation IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->orientation. + lo_element->set_attribute_ns( name = lc_xml_attr_orientation + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->page_order IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_pageorder + value = io_worksheet->sheet_setup->page_order ). + ENDIF. + + IF io_worksheet->sheet_setup->paper_height IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_height. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_paperheight + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->paper_size IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_size. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_papersize + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->paper_width IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_width. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_paperwidth + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->scale IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->scale. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_scale + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->use_first_page_num IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_usefirstpagenumber + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->use_printer_defaults IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_useprinterdefaults + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->vertical_dpi IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->vertical_dpi. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_verticaldpi + value = lv_value ). + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). " pageSetup node + +* { headerFooter necessary? > + IF io_worksheet->sheet_setup->odd_header IS NOT INITIAL + OR io_worksheet->sheet_setup->odd_footer IS NOT INITIAL + OR io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_headerfooter + parent = lo_document ). + + " Different header/footer for odd/even pages? + IF io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + lo_element->set_attribute_ns( name = lc_xml_attr_differentoddeven + value = '1' ). + ENDIF. + + " OddHeader + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_header = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddheader + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " OddFooter + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_footer = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddfooter + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " evenHeader + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_header = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenheader + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " evenFooter + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_footer = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenfooter + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + + lo_element_root->append_child( new_child = lo_element ). " headerFooter + + ENDIF. + +* drawing + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + + lo_drawings = io_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing + parent = lo_document ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute( name = 'r:id' + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + +* tables + DATA lv_table_count TYPE i. + + lv_table_count = io_worksheet->get_tables_size( ). + IF lv_table_count > 0. + lo_element = lo_document->create_simple_element( name = 'tableParts' + parent = lo_document ). + lv_value = lv_table_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = 'count' + value = lv_value ). + + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element_2 = lo_document->create_simple_element( name = 'tablePart' + parent = lo_element ). + lo_element_2->set_attribute_ns( name = 'r:id' + value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + + ENDWHILE. + + lo_element_root->append_child( new_child = lo_element ). + + ENDIF. + + + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + + method CREATE_XL_SHEET_RELS. + + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + lc_xml_attr_target_mode TYPE string VALUE 'TargetMode', + lc_xml_val_external TYPE string VALUE 'External', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_table_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table', + lc_xml_node_rid_printer_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings', + lc_xml_node_rid_drawing_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + lc_xml_node_rid_link_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lo_link TYPE REF TO zcl_excel_hyperlink. + + DATA: lv_value TYPE string, + lv_relation_id TYPE i, + lv_index_str TYPE string. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + " Add sheet Relationship nodes here + lv_relation_id = 0. + lo_iterator = io_worksheet->get_hyperlinks_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_link ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_link_tp ). + + lv_value = lo_link->get_url( ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_target_mode + value = lc_xml_val_external ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + +* drawing + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + + lo_drawings = io_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_drawing_tp ). + + lv_index_str = iv_drawing_index. + CONDENSE lv_index_str NO-GAPS. + MOVE me->c_xl_drawings TO lv_value. + REPLACE 'xl' WITH '..' INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_table_tp ). + + lv_value = lo_table->get_name( ). + CONCATENATE '../tables/' lv_value '.xml' INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + +* IF io_worksheet->get_print_settings( )->is_empty( ) = abap_false. +* ADD 1 TO lv_relation_id. +* lv_value = lv_relation_id. +* CONDENSE lv_value. +* CONCATENATE 'rId' lv_value INTO lv_value. +* +* lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship +* parent = lo_document ). +* lo_element->set_attribute_ns( name = lc_xml_attr_id +* value = lv_value ). +* lo_element->set_attribute_ns( name = lc_xml_attr_type +* value = lc_xml_node_rid_printer_tp ). +* +* lv_index_str = iv_printer_index. +* CONDENSE lv_index_str NO-GAPS. +* MOVE me->c_xl_printersettings TO lv_value. +* REPLACE 'xl' WITH '..' INTO lv_value. +* REPLACE '#' WITH lv_index_str INTO lv_value. +* lo_element->set_attribute_ns( name = lc_xml_attr_target +* value = lv_value ). +* +* lo_element_root->append_child( new_child = lo_element ). +* ENDIF. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + METHOD create_xl_styles. + + +** Constant node name + CONSTANTS: lc_xml_node_stylesheet TYPE string VALUE 'styleSheet', + " font + lc_xml_node_fonts TYPE string VALUE 'fonts', + lc_xml_node_font TYPE string VALUE 'font', + lc_xml_node_b TYPE string VALUE 'b', "bold + lc_xml_node_i TYPE string VALUE 'i', "italic + lc_xml_node_u TYPE string VALUE 'u', "underline + lc_xml_node_strike TYPE string VALUE 'strike', "strikethrough + lc_xml_node_sz TYPE string VALUE 'sz', + lc_xml_node_color TYPE string VALUE 'color', + lc_xml_node_name TYPE string VALUE 'name', + lc_xml_node_family TYPE string VALUE 'family', + lc_xml_node_scheme TYPE string VALUE 'scheme', + " fill + lc_xml_node_fills TYPE string VALUE 'fills', + lc_xml_node_fill TYPE string VALUE 'fill', + lc_xml_node_patternfill TYPE string VALUE 'patternFill', + lc_xml_node_fgcolor TYPE string VALUE 'fgColor', + lc_xml_node_bgcolor TYPE string VALUE 'bgColor', + lc_xml_node_gradientfill TYPE string VALUE 'gradientFill', + lc_xml_node_stop TYPE string VALUE 'stop', + " borders + lc_xml_node_borders TYPE string VALUE 'borders', + lc_xml_node_border TYPE string VALUE 'border', + lc_xml_node_left TYPE string VALUE 'left', + lc_xml_node_right TYPE string VALUE 'right', + lc_xml_node_top TYPE string VALUE 'top', + lc_xml_node_bottom TYPE string VALUE 'bottom', + lc_xml_node_diagonal TYPE string VALUE 'diagonal', + " numfmt + lc_xml_node_numfmts TYPE string VALUE 'numFmts', + lc_xml_node_numfmt TYPE string VALUE 'numFmt', + " Styles + lc_xml_node_cellstylexfs TYPE string VALUE 'cellStyleXfs', + lc_xml_node_xf TYPE string VALUE 'xf', + lc_xml_node_cellxfs TYPE string VALUE 'cellXfs', + lc_xml_node_cellstyles TYPE string VALUE 'cellStyles', + lc_xml_node_cellstyle TYPE string VALUE 'cellStyle', + lc_xml_node_dxfs TYPE string VALUE 'dxfs', + lc_xml_node_dxf TYPE string VALUE 'dxf', + lc_xml_node_tablestyles TYPE string VALUE 'tableStyles', + " Colors + lc_xml_node_colors TYPE string VALUE 'colors', + lc_xml_node_indexedcolors TYPE string VALUE 'indexedColors', + lc_xml_node_rgbcolor TYPE string VALUE 'rgbColor', + lc_xml_node_mrucolors TYPE string VALUE 'mruColors', + " Alignment + lc_xml_node_alignment TYPE string VALUE 'alignment', + " Protection + lc_xml_node_protection TYPE string VALUE 'protection', + " Node attributes + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_attr_theme TYPE string VALUE 'theme', + lc_xml_attr_rgb TYPE string VALUE 'rgb', + lc_xml_attr_indexed TYPE string VALUE 'indexed', + lc_xml_attr_tint TYPE string VALUE 'tint', + lc_xml_attr_style TYPE string VALUE 'style', + lc_xml_attr_position TYPE string VALUE 'position', + lc_xml_attr_degree TYPE string VALUE 'degree', + lc_xml_attr_patterntype TYPE string VALUE 'patternType', + lc_xml_attr_numfmtid TYPE string VALUE 'numFmtId', + lc_xml_attr_fontid TYPE string VALUE 'fontId', + lc_xml_attr_fillid TYPE string VALUE 'fillId', + lc_xml_attr_borderid TYPE string VALUE 'borderId', + lc_xml_attr_xfid TYPE string VALUE 'xfId', + lc_xml_attr_applynumberformat TYPE string VALUE 'applyNumberFormat', + lc_xml_attr_applyprotection TYPE string VALUE 'applyProtection', + lc_xml_attr_applyfont TYPE string VALUE 'applyFont', + lc_xml_attr_applyfill TYPE string VALUE 'applyFill', + lc_xml_attr_applyborder TYPE string VALUE 'applyBorder', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_builtinid TYPE string VALUE 'builtinId', + lc_xml_attr_defaulttablestyle TYPE string VALUE 'defaultTableStyle', + lc_xml_attr_defaultpivotstyle TYPE string VALUE 'defaultPivotStyle', + lc_xml_attr_applyalignment TYPE string VALUE 'applyAlignment', + lc_xml_attr_horizontal TYPE string VALUE 'horizontal', + lc_xml_attr_formatcode TYPE string VALUE 'formatCode', + lc_xml_attr_vertical TYPE string VALUE 'vertical', + lc_xml_attr_wraptext TYPE string VALUE 'wrapText', + lc_xml_attr_textrotation TYPE string VALUE 'textRotation', + lc_xml_attr_shrinktofit TYPE string VALUE 'shrinkToFit', + lc_xml_attr_indent TYPE string VALUE 'indent', + lc_xml_attr_locked TYPE string VALUE 'locked', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_diagonalup TYPE string VALUE 'diagonalUp', + lc_xml_attr_diagonaldown TYPE string VALUE 'diagonalDown', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_fonts TYPE REF TO if_ixml_element, + lo_element_font TYPE REF TO if_ixml_element, + lo_element_fills TYPE REF TO if_ixml_element, + lo_element_fill TYPE REF TO if_ixml_element, + lo_element_borders TYPE REF TO if_ixml_element, + lo_element_border TYPE REF TO if_ixml_element, + lo_element_numfmts TYPE REF TO if_ixml_element, + lo_element_numfmt TYPE REF TO if_ixml_element, + lo_element_cellxfs TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + lo_sub_element_2 TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_iterator2 TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lo_style TYPE REF TO zcl_excel_style. + + + DATA: lt_fonts TYPE zexcel_t_style_font, + ls_font TYPE zexcel_s_style_font, + lt_fills TYPE zexcel_t_style_fill, + ls_fill TYPE zexcel_s_style_fill, + lt_borders TYPE zexcel_t_style_border, + ls_border TYPE zexcel_s_style_border, + lt_numfmts TYPE zexcel_t_style_numfmt, + ls_numfmt TYPE zexcel_s_style_numfmt, + lt_protections TYPE zexcel_t_style_protection, + ls_protection TYPE zexcel_s_style_protection, + lt_alignments TYPE zexcel_t_style_alignment, + ls_alignment TYPE zexcel_s_style_alignment, + lt_cellxfs TYPE zexcel_t_cellxfs, + ls_cellxfs TYPE zexcel_s_cellxfs, + ls_styles_mapping TYPE zexcel_s_styles_mapping, + ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, + ls_cellis TYPE zexcel_conditional_cellis, + ls_expression TYPE zexcel_conditional_expression, + lt_colors TYPE zexcel_t_style_color_argb, + ls_color LIKE LINE OF lt_colors. + + DATA: lv_value TYPE string, + lv_dfx_count TYPE i, + lv_fonts_count TYPE i, + lv_fills_count TYPE i, + lv_borders_count TYPE i, + lv_cellxfs_count TYPE i, + lv_index TYPE i, + lv_align_flag TYPE c. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_stylesheet + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + lo_element_fonts = lo_document->create_simple_element( name = lc_xml_node_fonts + parent = lo_document ). + + lo_element_fills = lo_document->create_simple_element( name = lc_xml_node_fills + parent = lo_document ). + + lo_element_borders = lo_document->create_simple_element( name = lc_xml_node_borders + parent = lo_document ). + + lo_element_cellxfs = lo_document->create_simple_element( name = lc_xml_node_cellxfs + parent = lo_document ). + + lo_element_numfmts = lo_document->create_simple_element( name = lc_xml_node_numfmts + parent = lo_document ). + + +* Compress styles + lo_iterator = excel->get_styles_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style ?= lo_iterator->if_object_collection_iterator~get_next( ). + ls_font = lo_style->font->get_structure( ). + ls_fill = lo_style->fill->get_structure( ). + ls_border = lo_style->borders->get_structure( ). + ls_alignment = lo_style->alignment->get_structure( ). + ls_protection = lo_style->protection->get_structure( ). + ls_numfmt = lo_style->number_format->get_structure( ). + + CLEAR ls_cellxfs. + + +* Compress fonts + READ TABLE lt_fonts FROM ls_font TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-fontid = sy-tabix. + ELSE. + APPEND ls_font TO lt_fonts. + DESCRIBE TABLE lt_fonts LINES ls_cellxfs-fontid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-fontid. + +* Compress alignment + READ TABLE lt_alignments FROM ls_alignment TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-alignmentid = sy-tabix. + ELSE. + APPEND ls_alignment TO lt_alignments. + DESCRIBE TABLE lt_alignments LINES ls_cellxfs-alignmentid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-alignmentid. + +* Compress fills + READ TABLE lt_fills FROM ls_fill TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-fillid = sy-tabix. + ELSE. + APPEND ls_fill TO lt_fills. + DESCRIBE TABLE lt_fills LINES ls_cellxfs-fillid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-fillid. + +* Compress borders + READ TABLE lt_borders FROM ls_border TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-borderid = sy-tabix. + ELSE. + APPEND ls_border TO lt_borders. + DESCRIBE TABLE lt_borders LINES ls_cellxfs-borderid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-borderid. + +* Compress protection + IF ls_protection-locked EQ c_on AND ls_protection-hidden EQ c_off. + ls_cellxfs-applyprotection = 0. + ELSE. + READ TABLE lt_protections FROM ls_protection TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-protectionid = sy-tabix. + ELSE. + APPEND ls_protection TO lt_protections. + DESCRIBE TABLE lt_protections LINES ls_cellxfs-protectionid. + ENDIF. + ls_cellxfs-applyprotection = 1. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-protectionid. + +* Compress number formats + + "----------- + IF ls_numfmt-numfmt NE zcl_excel_style_number_format=>c_format_date_std." and ls_numfmt-NUMFMT ne 'STD_NDEC'. " ALE Changes on going + "--- + IF ls_numfmt IS NOT INITIAL. + + READ TABLE lt_numfmts FROM ls_numfmt TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-numfmtid = sy-tabix. + ELSE. + APPEND ls_numfmt TO lt_numfmts. + DESCRIBE TABLE lt_numfmts LINES ls_cellxfs-numfmtid. + ENDIF. + ADD zcl_excel_common=>c_excel_numfmt_offset TO ls_cellxfs-numfmtid. " Add OXML offset for custom styles + ls_cellxfs-applynumberformat = 1. + ELSE. + ls_cellxfs-applynumberformat = 0. + ENDIF. + "----------- " ALE changes on going + ELSE. + ls_cellxfs-applynumberformat = 1. + IF ls_numfmt-numfmt EQ zcl_excel_style_number_format=>c_format_date_std. + ls_cellxfs-numfmtid = 14. +* elseif ls_numfmt-NUMFMT eq 'STD_NDEC'. +* ls_cellxfs-numfmtid = 2. + ENDIF. + ENDIF. + "--- + + IF ls_cellxfs-fontid NE 0. + ls_cellxfs-applyfont = 1. + ELSE. + ls_cellxfs-applyfont = 0. + ENDIF. + IF ls_cellxfs-alignmentid NE 0. + ls_cellxfs-applyalignment = 1. + ELSE. + ls_cellxfs-applyalignment = 0. + ENDIF. + IF ls_cellxfs-fillid NE 0. + ls_cellxfs-applyfill = 1. + ELSE. + ls_cellxfs-applyfill = 0. + ENDIF. + IF ls_cellxfs-borderid NE 0. + ls_cellxfs-applyborder = 1. + ELSE. + ls_cellxfs-applyborder = 0. + ENDIF. + +* Remap styles + READ TABLE lt_cellxfs FROM ls_cellxfs TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_styles_mapping-style = sy-tabix. + ELSE. + APPEND ls_cellxfs TO lt_cellxfs. + DESCRIBE TABLE lt_cellxfs LINES ls_styles_mapping-style. + ENDIF. + SUBTRACT 1 FROM ls_styles_mapping-style. + ls_styles_mapping-guid = lo_style->get_guid( ). + APPEND ls_styles_mapping TO me->styles_mapping. + ENDWHILE. + + " create numfmt elements + LOOP AT lt_numfmts INTO ls_numfmt. + lo_element_numfmt = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_document ). + lv_value = sy-tabix + zcl_excel_common=>c_excel_numfmt_offset. + CONDENSE lv_value. + lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_numfmtid + value = lv_value ). + lv_value = ls_numfmt-numfmt. +* REPLACE ALL OCCURRENCES OF '.' IN lv_value WITH '\.'. + lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_formatcode + value = lv_value ). + lo_element_numfmts->append_child( new_child = lo_element_numfmt ). + ENDLOOP. + + " create font elements + LOOP AT lt_fonts INTO ls_font. + lo_element_font = lo_document->create_simple_element( name = lc_xml_node_font + parent = lo_document ). + IF ls_font-bold EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_b + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-italic EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_i + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-underline EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_u + parent = lo_document ). + lv_value = ls_font-underline_mode. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-strikethrough EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_strike + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + "size + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_sz + parent = lo_document ). + lv_value = ls_font-size. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + "color + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_element_font + is_color = ls_font-color ). + + "name + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_name + parent = lo_document ). + lv_value = ls_font-name. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + "family + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_family + parent = lo_document ). + lv_value = ls_font-family. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + "scheme + IF ls_font-scheme IS NOT INITIAL. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_scheme + parent = lo_document ). + lv_value = ls_font-scheme. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + lo_element_fonts->append_child( new_child = lo_element_font ). + ENDLOOP. + + " create fill elements + LOOP AT lt_fills INTO ls_fill. + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill + parent = lo_document ). + "pattern + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_patternfill + parent = lo_document ). + lv_value = ls_fill-filltype. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). + + " bgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). + + lo_element_fill->append_child( new_child = lo_sub_element )."pattern + lo_element_fills->append_child( new_child = lo_element_fill ). + ENDLOOP. + + " create border elements + LOOP AT lt_borders INTO ls_border. + lo_element_border = lo_document->create_simple_element( name = lc_xml_node_border + parent = lo_document ). + + IF ls_border-diagonalup IS NOT INITIAL. + lv_value = ls_border-diagonalup. + CONDENSE lv_value. + lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonalup + value = lv_value ). + ENDIF. + + IF ls_border-diagonaldown IS NOT INITIAL. + lv_value = ls_border-diagonaldown. + CONDENSE lv_value. + lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonaldown + value = lv_value ). + ENDIF. + + "left + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_left + parent = lo_document ). + IF ls_border-left_style IS NOT INITIAL. + lv_value = ls_border-left_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-left_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "right + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_right + parent = lo_document ). + IF ls_border-right_style IS NOT INITIAL. + lv_value = ls_border-right_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-right_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "top + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_top + parent = lo_document ). + IF ls_border-top_style IS NOT INITIAL. + lv_value = ls_border-top_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-top_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "bottom + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_bottom + parent = lo_document ). + IF ls_border-bottom_style IS NOT INITIAL. + lv_value = ls_border-bottom_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-bottom_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "diagonal + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_diagonal + parent = lo_document ). + IF ls_border-diagonal_style IS NOT INITIAL. + lv_value = ls_border-diagonal_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-diagonal_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + lo_element_borders->append_child( new_child = lo_element_border ). + ENDLOOP. + + " update attribute "count" + DESCRIBE TABLE lt_fonts LINES lv_fonts_count. + MOVE lv_fonts_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_fonts->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_fills LINES lv_fills_count. + MOVE lv_fills_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_fills->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_borders LINES lv_borders_count. + MOVE lv_borders_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_borders->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_cellxfs LINES lv_cellxfs_count. + MOVE lv_cellxfs_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_cellxfs->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + + " Append to root node + lo_element_root->append_child( new_child = lo_element_numfmts ). + lo_element_root->append_child( new_child = lo_element_fonts ). + lo_element_root->append_child( new_child = lo_element_fills ). + lo_element_root->append_child( new_child = lo_element_borders ). + + " cellstylexfs node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstylexfs + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '1' ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_xf + parent = lo_document ). + + lo_sub_element->set_attribute_ns( name = lc_xml_attr_numfmtid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_fontid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_fillid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_borderid + value = c_off ). + + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + + LOOP AT lt_cellxfs INTO ls_cellxfs. + lo_element = lo_document->create_simple_element( name = lc_xml_node_xf + parent = lo_document ). + MOVE ls_cellxfs-numfmtid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_numfmtid + value = lv_value ). + MOVE ls_cellxfs-fontid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_fontid + value = lv_value ). + MOVE ls_cellxfs-fillid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_fillid + value = lv_value ). + MOVE ls_cellxfs-borderid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_borderid + value = lv_value ). + MOVE ls_cellxfs-xfid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_xfid + value = lv_value ). + IF ls_cellxfs-applynumberformat EQ 1. + MOVE ls_cellxfs-applynumberformat TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applynumberformat + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyfont EQ 1. + MOVE ls_cellxfs-applyfont TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyfont + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyfill EQ 1. + MOVE ls_cellxfs-applyfill TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyfill + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyborder EQ 1. + MOVE ls_cellxfs-applyborder TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyborder + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyalignment EQ 1. " depends on each style not for all the sheet + MOVE ls_cellxfs-applyalignment TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyalignment + value = lv_value ). + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_alignment + parent = lo_document ). + ADD 1 TO ls_cellxfs-alignmentid. "Table index starts from 1 + READ TABLE lt_alignments INTO ls_alignment INDEX ls_cellxfs-alignmentid. + SUBTRACT 1 FROM ls_cellxfs-alignmentid. + IF ls_alignment-horizontal IS NOT INITIAL. + MOVE ls_alignment-horizontal TO lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_horizontal + value = lv_value ). + ENDIF. + IF ls_alignment-vertical IS NOT INITIAL. + MOVE ls_alignment-vertical TO lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_vertical + value = lv_value ). + ENDIF. + IF ls_alignment-wraptext EQ abap_true. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_wraptext + value = c_on ). + ENDIF. + IF ls_alignment-textrotation IS NOT INITIAL. + MOVE ls_alignment-textrotation TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_textrotation + value = lv_value ). + ENDIF. + IF ls_alignment-shrinktofit EQ abap_true. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_shrinktofit + value = c_on ). + ENDIF. + IF ls_alignment-indent IS NOT INITIAL. + MOVE ls_alignment-indent TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_indent + value = lv_value ). + ENDIF. + + lo_element->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_cellxfs-applyprotection EQ 1. + MOVE ls_cellxfs-applyprotection TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_applyprotection + value = lv_value ). + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_protection + parent = lo_document ). + ADD 1 TO ls_cellxfs-protectionid. "Table index starts from 1 + READ TABLE lt_protections INTO ls_protection INDEX ls_cellxfs-protectionid. + SUBTRACT 1 FROM ls_cellxfs-protectionid. + IF ls_protection-locked IS NOT INITIAL. + MOVE ls_protection-locked TO lv_value. + CONDENSE lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_locked + value = lv_value ). + ENDIF. + IF ls_protection-hidden IS NOT INITIAL. + MOVE ls_protection-hidden TO lv_value. + CONDENSE lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_hidden + value = lv_value ). + ENDIF. + lo_element->append_child( new_child = lo_sub_element_2 ). + ENDIF. + lo_element_cellxfs->append_child( new_child = lo_element ). + ENDLOOP. + + lo_element_root->append_child( new_child = lo_element_cellxfs ). + + " cellStyles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstyles + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '1' ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_cellstyle + parent = lo_document ). + + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = 'Normal' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_xfid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_builtinid + value = c_off ). + + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + + " dxfs node + lo_element = lo_document->create_simple_element( name = lc_xml_node_dxfs + parent = lo_document ). + + lo_iterator = me->excel->get_worksheets_iterator( ). + " get sheets + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + " Conditional formatting styles into exch sheet + lo_iterator2 = lo_worksheet->get_cond_styles_iterator( ). + WHILE lo_iterator2->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style_conditional ?= lo_iterator2->if_object_collection_iterator~get_next( ). + CASE lo_style_conditional->rule. + WHEN zcl_excel_style_conditional=>c_rule_cellis. + "if style defined + ls_cellis = lo_style_conditional->mode_cellis. + IF ls_cellis-cell_style IS INITIAL. + CONTINUE. + ENDIF. + READ TABLE me->styles_mapping INTO ls_styles_mapping WITH KEY guid = ls_cellis-cell_style. + ADD 1 TO ls_styles_mapping-style. " the numbering starts from 0 + READ TABLE lt_cellxfs INTO ls_cellxfs INDEX ls_styles_mapping-style. + ADD 1 TO ls_cellxfs-fillid. " the numbering starts from 0 + + " Style already mapped? + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY style = ls_styles_mapping-style. + IF sy-subrc EQ 0. + ls_style_cond_mapping-guid = ls_cellis-cell_style. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ELSE. + ls_style_cond_mapping-guid = ls_cellis-cell_style. + ls_style_cond_mapping-style = ls_styles_mapping-style. + ls_style_cond_mapping-dxf = lv_dfx_count. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ADD 1 TO lv_dfx_count. + + " dxf node + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_dxf + parent = lo_document ). + + "Conditional formatting font style correction by Alessandro Iannacci START + lv_index = ls_cellxfs-fontid + 1. + READ TABLE lt_fonts INTO ls_font INDEX lv_index. + IF ls_font IS NOT INITIAL. + lo_element_font = lo_document->create_simple_element( name = lc_xml_node_font + parent = lo_document ). + IF ls_font-bold EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_b + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-italic EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_i + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-underline EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_u + parent = lo_document ). + lv_value = ls_font-underline_mode. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-strikethrough EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_strike + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + "color + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_element_font + is_color = ls_font-color ). + lo_sub_element->append_child( new_child = lo_element_font ). + ENDIF. + "---Conditional formatting font style correction by Alessandro Iannacci END + + + READ TABLE lt_fills INTO ls_fill INDEX ls_cellxfs-fillid. + IF ls_fill IS NOT INITIAL. + " fill properties + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill + parent = lo_document ). + "pattern + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_patternfill + parent = lo_document ). + lv_value = ls_fill-filltype. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). + + " bgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). + + lo_element_fill->append_child( new_child = lo_sub_element_2 ). "pattern + + lo_sub_element->append_child( new_child = lo_element_fill ). + ENDIF. + ENDIF. + + lo_element->append_child( new_child = lo_sub_element ). + WHEN zcl_excel_style_conditional=>c_rule_expression. + "if style defined + ls_expression = lo_style_conditional->mode_expression. + IF ls_expression-cell_style IS INITIAL. + CONTINUE. + ENDIF. + READ TABLE me->styles_mapping INTO ls_styles_mapping WITH KEY guid = ls_expression-cell_style. + ADD 1 TO ls_styles_mapping-style. " the numbering starts from 0 + READ TABLE lt_cellxfs INTO ls_cellxfs INDEX ls_styles_mapping-style. + ADD 1 TO ls_cellxfs-fillid. " the numbering starts from 0 + + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY style = ls_styles_mapping-style. + IF sy-subrc EQ 0. + ls_style_cond_mapping-guid = ls_expression-cell_style. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ELSE. + ls_style_cond_mapping-guid = ls_expression-cell_style. + ls_style_cond_mapping-style = ls_styles_mapping-style. + ls_style_cond_mapping-dxf = lv_dfx_count. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ADD 1 TO lv_dfx_count. + + " dxf node + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_dxf + parent = lo_document ). + + READ TABLE lt_fills INTO ls_fill INDEX ls_cellxfs-fillid. + IF ls_fill IS NOT INITIAL. + " fill properties + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill + parent = lo_document ). + "pattern + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_patternfill + parent = lo_document ). + lv_value = ls_fill-filltype. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). + + " bgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). + + lo_element_fill->append_child( new_child = lo_sub_element_2 ). "pattern + + lo_sub_element->append_child( new_child = lo_element_fill ). + ENDIF. + ENDIF. + + lo_element->append_child( new_child = lo_sub_element ). + WHEN OTHERS. + CONTINUE. + ENDCASE. + ENDWHILE. + ENDWHILE. + + lv_value = lv_dfx_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " tableStyles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_tablestyles + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '0' ). + lo_element->set_attribute_ns( name = lc_xml_attr_defaulttablestyle + value = zcl_excel_table=>builtinstyle_medium9 ). + lo_element->set_attribute_ns( name = lc_xml_attr_defaultpivotstyle + value = zcl_excel_table=>builtinstyle_pivot_light16 ). + lo_element_root->append_child( new_child = lo_element ). + + "write legacy color palette in case any indexed color was changed + IF excel->legacy_palette->is_modified( ) = abap_true. + lo_element = lo_document->create_simple_element( name = lc_xml_node_colors + parent = lo_document ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_indexedcolors + parent = lo_document ). + lo_element->append_child( new_child = lo_sub_element ). + + lt_colors = excel->legacy_palette->get_colors( ). + LOOP AT lt_colors INTO ls_color. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_rgbcolor + parent = lo_document ). + lv_value = ls_color. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_rgb + value = lv_value ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). + ENDLOOP. + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + + + method CREATE_XL_STYLES_COLOR_NODE. + DATA: lo_sub_element TYPE REF TO if_ixml_element, + lv_value TYPE string. + + CONSTANTS: lc_xml_attr_theme TYPE string VALUE 'theme', + lc_xml_attr_rgb TYPE string VALUE 'rgb', + lc_xml_attr_indexed TYPE string VALUE 'indexed', + lc_xml_attr_tint TYPE string VALUE 'tint'. + +"add node only if at least one attribute is set + CHECK is_color-rgb IS NOT INITIAL OR + is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set OR + is_color-theme <> zcl_excel_style_color=>c_theme_not_set OR + is_color-tint IS NOT INITIAL. + + lo_sub_element = io_document->create_simple_element( + name = iv_color_elem_name + parent = io_parent ). + + IF is_color-rgb IS NOT INITIAL. + lv_value = is_color-rgb. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_rgb + value = lv_value ). + ENDIF. + + IF is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-indexed ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_indexed + value = lv_value ). + ENDIF. + + IF is_color-theme <> zcl_excel_style_color=>c_theme_not_set. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-theme ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_theme + value = lv_value ). + ENDIF. + + IF is_color-tint IS NOT INITIAL. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-tint ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_tint + value = lv_value ). + ENDIF. + + io_parent->append_child( new_child = lo_sub_element ). + endmethod. + + + + + METHOD create_xl_table. + + DATA: lc_xml_node_table TYPE string VALUE 'table', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'id', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_display_name TYPE string VALUE 'displayName', + lc_xml_attr_ref TYPE string VALUE 'ref', + lc_xml_attr_totals TYPE string VALUE 'totalsRowShown', + " Node namespace + lc_xml_node_table_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element2 TYPE REF TO if_ixml_element, + 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, + + lv_table_name TYPE string, + lv_id TYPE i, + lv_match TYPE i, + lv_syindex TYPE char3, + lv_ref TYPE string, + lv_value TYPE string, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lv_num_columns TYPE i, + ls_fieldcat TYPE zexcel_s_fieldcatalog. + + +********************************************************************** +* STEP 1: Create xml + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node table + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_table + parent = lo_document ). + + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_table_ns ). + + lv_id = io_table->get_id( ). + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_id ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + + FIND ALL OCCURRENCES OF REGEX '[^_a-zA-Z0-9]' IN io_table->settings-table_name IGNORING CASE MATCH COUNT lv_match. + IF io_table->settings-table_name IS NOT INITIAL AND lv_match EQ 0. + lv_table_name = io_table->settings-table_name. + ELSE. + lv_table_name = io_table->get_name( ). + ENDIF. + lo_element_root->set_attribute_ns( name = lc_xml_attr_name + value = lv_table_name ). + + lo_element_root->set_attribute_ns( name = lc_xml_attr_display_name + value = lv_table_name ). + + lv_ref = io_table->get_reference( ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_ref + value = lv_ref ). + IF io_table->has_totals( ) = abap_true. + lo_element_root->set_attribute_ns( name = 'totalsRowCount' + value = '1' ). + ELSE. + lo_element_root->set_attribute_ns( name = lc_xml_attr_totals + value = '0' ). + ENDIF. + +********************************************************************** +* STEP 4: Create subnodes + + " autoFilter + IF io_table->settings-nofilters EQ abap_false. + lo_element = lo_document->create_simple_element( name = 'autoFilter' + parent = lo_document ). + + lv_ref = io_table->get_reference( ip_include_totals_row = abap_false ). + lo_element->set_attribute_ns( name = 'ref' + value = lv_ref ). + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + "columns + lo_element = lo_document->create_simple_element( name = 'tableColumns' + parent = lo_document ). + +* lo_columns = io_table->get_columns( ). + LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. + ADD 1 TO lv_num_columns. + ENDLOOP. + + lv_value = lv_num_columns. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = 'count' + value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). + + LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. + lo_element2 = lo_document->create_simple_element_ns( name = 'tableColumn' + parent = lo_element ). + + lv_value = ls_fieldcat-position. + SHIFT lv_value LEFT DELETING LEADING '0'. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lv_value = ls_fieldcat-scrtext_l. + lo_element2->set_attribute_ns( name = 'name' + value = lv_value ). + + IF ls_fieldcat-totals_function IS NOT INITIAL. + lo_element2->set_attribute_ns( name = 'totalsRowFunction' + value = ls_fieldcat-totals_function ). + ENDIF. + + lo_element->append_child( new_child = lo_element2 ). + ENDLOOP. + + + lo_element = lo_document->create_simple_element( name = 'tableStyleInfo' + parent = lo_element_root ). + + lo_element->set_attribute_ns( name = 'name' + value = io_table->settings-table_style ). + + lo_element->set_attribute_ns( name = 'showFirstColumn' + value = '0' ). + + lo_element->set_attribute_ns( name = 'showLastColumn' + value = '0' ). + + IF io_table->settings-show_row_stripes = abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + + lo_element->set_attribute_ns( name = 'showRowStripes' + value = lv_value ). + + IF io_table->settings-show_column_stripes = abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + + lo_element->set_attribute_ns( name = 'showColumnStripes' + value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + method CREATE_XL_THEME. + + +* @TODO * + + DATA: lv_xl_theme TYPE string, + lv_xl_theme_01 TYPE string, + lv_xl_theme_02 TYPE string, + lv_xl_theme_03 TYPE string, + lv_xl_theme_04 TYPE string, + lv_xl_theme_05 TYPE string, + lv_xl_theme_06 TYPE string, + lv_xl_theme_07 TYPE string, + lv_xl_theme_08 TYPE string, + lv_xl_theme_09 TYPE string, + lv_xl_theme_10 TYPE string, + lv_xl_theme_11 TYPE string, + lv_xl_theme_12 TYPE string, + lv_xl_theme_13 TYPE string, + lv_xl_theme_14 TYPE string, + lv_xl_theme_15 TYPE string, + lv_xl_theme_16 TYPE string, + lv_xl_theme_17 TYPE string, + lv_xl_theme_18 TYPE string, + lv_xl_theme_19 TYPE string, + lv_xl_theme_20 TYPE string, + lv_xl_theme_21 TYPE string, + lv_xl_theme_22 TYPE string, + lv_xl_theme_23 TYPE string, + lv_xl_theme_24 TYPE string, + lv_xl_theme_25 TYPE string, + lv_xl_theme_26 TYPE string, + lv_xl_theme_27 TYPE string, + lv_xl_theme_28 TYPE string, + lv_xl_theme_29 TYPE string, + lv_xl_theme_30 TYPE string, + lv_xl_theme_31 TYPE string, + lv_xl_theme_32 TYPE string. + + lv_xl_theme_01 = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'. + lv_xl_theme_02 = '<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" '. + lv_xl_theme_03 = 'lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr '. + lv_xl_theme_04 = 'val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink>'. + lv_xl_theme_05 = '<a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/>'. + lv_xl_theme_06 = '<a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" '. + lv_xl_theme_07 = 'typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font '. + lv_xl_theme_08 = 'script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" '. + lv_xl_theme_09 = 'typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" '. + lv_xl_theme_10 = 'typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" '. + lv_xl_theme_11 = 'typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/>'. + lv_xl_theme_12 = '<a:font script="Arab" typeface="Arial"/><a:font script="Hebr" '. + lv_xl_theme_13 = 'typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font '. + lv_xl_theme_14 = 'script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font '. + lv_xl_theme_15 = 'script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" '. + lv_xl_theme_16 = 'typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" '. + lv_xl_theme_17 = 'typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/>'. + lv_xl_theme_18 = '</a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod '. + lv_xl_theme_19 = 'val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1">'. + lv_xl_theme_20 = '<a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:shade val="51000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="80000"><a:schemeClr val="phClr"><a:shade val="93000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs '. + lv_xl_theme_21 = 'pos="100000"><a:schemeClr val="phClr"><a:shade val="94000"/><a:satMod val="135000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" '. + lv_xl_theme_22 = 'algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr '. + lv_xl_theme_23 = 'val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst>'. + lv_xl_theme_24 = '<a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst>'. + lv_xl_theme_25 = '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" '. + lv_xl_theme_26 = 'dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig '. + lv_xl_theme_27 = 'rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/>'. + lv_xl_theme_28 = '</a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade '. + lv_xl_theme_29 = 'val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" '. + lv_xl_theme_30 = 't="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr '. + lv_xl_theme_31 = 'val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme>'. + lv_xl_theme_32 = '</a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>'. + + + CONCATENATE lv_xl_theme_01 lv_xl_theme_02 lv_xl_theme_03 lv_xl_theme_04 lv_xl_theme_05 lv_xl_theme_06 lv_xl_theme_07 lv_xl_theme_08 lv_xl_theme_09 lv_xl_theme_10 lv_xl_theme_11 lv_xl_theme_12 lv_xl_theme_13 lv_xl_theme_14 lv_xl_theme_15 + lv_xl_theme_16 lv_xl_theme_17 lv_xl_theme_18 lv_xl_theme_19 lv_xl_theme_20 lv_xl_theme_21 lv_xl_theme_22 lv_xl_theme_23 lv_xl_theme_24 lv_xl_theme_25 lv_xl_theme_26 lv_xl_theme_27 lv_xl_theme_28 lv_xl_theme_29 lv_xl_theme_30 + lv_xl_theme_31 lv_xl_theme_32 + INTO lv_xl_theme SEPARATED BY space. + + CALL FUNCTION 'SCMS_STRING_TO_XSTRING' + EXPORTING + text = lv_xl_theme + IMPORTING + buffer = ep_content. + + + endmethod. + + + + method CREATE_XL_WORKBOOK. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-07 +* - ... +* changes: aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-01 +* changes: correction of pointer to localSheetId +*--------------------------------------------------------------------* + +** Constant node name + DATA: lc_xml_node_workbook TYPE string VALUE 'workbook', + lc_xml_node_fileversion TYPE string VALUE 'fileVersion', + lc_xml_node_workbookpr TYPE string VALUE 'workbookPr', + lc_xml_node_bookviews TYPE string VALUE 'bookViews', + lc_xml_node_workbookview TYPE string VALUE 'workbookView', + lc_xml_node_sheets TYPE string VALUE 'sheets', + lc_xml_node_sheet TYPE string VALUE 'sheet', + lc_xml_node_calcpr TYPE string VALUE 'calcPr', + lc_xml_node_workbookprotection TYPE string VALUE 'workbookProtection', + lc_xml_node_definednames TYPE string VALUE 'definedNames', + lc_xml_node_definedname TYPE string VALUE 'definedName', + " Node attributes + lc_xml_attr_appname TYPE string VALUE 'appName', + lc_xml_attr_lastedited TYPE string VALUE 'lastEdited', + lc_xml_attr_lowestedited TYPE string VALUE 'lowestEdited', + lc_xml_attr_rupbuild TYPE string VALUE 'rupBuild', + lc_xml_attr_themeversion TYPE string VALUE 'defaultThemeVersion', + lc_xml_attr_xwindow TYPE string VALUE 'xWindow', + lc_xml_attr_ywindow TYPE string VALUE 'yWindow', + lc_xml_attr_windowwidth TYPE string VALUE 'windowWidth', + lc_xml_attr_windowheight TYPE string VALUE 'windowHeight', + lc_xml_attr_activetab TYPE string VALUE 'activeTab', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_sheetid TYPE string VALUE 'sheetId', + lc_xml_attr_state TYPE string VALUE 'state', + lc_xml_attr_id TYPE string VALUE 'id', + lc_xml_attr_calcid TYPE string VALUE 'calcId', + lc_xml_attr_lockrevision TYPE string VALUE 'lockRevision', + lc_xml_attr_lockstructure TYPE string VALUE 'lockStructure', + lc_xml_attr_lockwindows TYPE string VALUE 'lockWindows', + lc_xml_attr_revisionspassword TYPE string VALUE 'revisionsPassword', + lc_xml_attr_workbookpassword TYPE string VALUE 'workbookPassword', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_localsheetid TYPE string VALUE 'localSheetId', + " Node namespace + lc_r_ns TYPE string VALUE 'r', + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element_range TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + 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, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_iterator_range TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_autofilters TYPE REF TO zcl_excel_autofilters, + lo_autofilter TYPE REF TO zcl_excel_autofilter. + + DATA: lv_xml_node_ridx_id TYPE string, + lv_value TYPE string, + lv_syindex TYPE string, + l_guid TYPE uuid, + lv_active_sheet TYPE zexcel_active_worksheet. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_workbook + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_r_ns ). + +********************************************************************** +* STEP 4: Create subnode + " fileVersion node + lo_element = lo_document->create_simple_element( name = lc_xml_node_fileversion + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_appname + value = 'xl' ). + lo_element->set_attribute_ns( name = lc_xml_attr_lastedited + value = '4' ). + lo_element->set_attribute_ns( name = lc_xml_attr_lowestedited + value = '4' ). + lo_element->set_attribute_ns( name = lc_xml_attr_rupbuild + value = '4506' ). + lo_element_root->append_child( new_child = lo_element ). + + " fileVersion node + lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookpr + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_themeversion + value = '124226' ). + lo_element_root->append_child( new_child = lo_element ). + + " workbookProtection node + IF me->excel->zif_excel_book_protection~protected EQ abap_true. + lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookprotection + parent = lo_document ). + MOVE me->excel->zif_excel_book_protection~workbookpassword TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_workbookpassword + value = lv_value ). + ENDIF. + MOVE me->excel->zif_excel_book_protection~revisionspassword TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_revisionspassword + value = lv_value ). + ENDIF. + MOVE me->excel->zif_excel_book_protection~lockrevision TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockrevision + value = lv_value ). + MOVE me->excel->zif_excel_book_protection~lockstructure TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockstructure + value = lv_value ). + MOVE me->excel->zif_excel_book_protection~lockwindows TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockwindows + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + " bookviews node + lo_element = lo_document->create_simple_element( name = lc_xml_node_bookviews + parent = lo_document ). + " bookview node + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_workbookview + parent = lo_document ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_xwindow + value = '120' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_ywindow + value = '120' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowwidth + value = '19035' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowheight + value = '8445' ). + " Set Active Sheet + lv_active_sheet = excel->get_active_sheet_index( ). + IF lv_active_sheet > 1. + lv_active_sheet = lv_active_sheet - 1. + lv_value = lv_active_sheet. + CONDENSE lv_value. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_activetab + value = lv_value ). + ENDIF. + lo_element->append_child( new_child = lo_sub_element )." bookview node + lo_element_root->append_child( new_child = lo_element )." bookviews node + + " sheets node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheets + parent = lo_document ). + lo_iterator = excel->get_worksheets_iterator( ). + + " ranges node + lo_element_range = lo_document->create_simple_element( name = lc_xml_node_definednames " issue 163 + + parent = lo_document ). " issue 163 + + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + " sheet node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_sheet + parent = lo_document ). + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_syindex = sy-index. " question by Stefan Schmöcker 2012-12-02: sy-index seems to do the job - but is it proven to work or purely coincedence + lv_value = lo_worksheet->get_title( ). + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_sheetid + value = lv_syindex ). + IF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_hidden. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_state + value = 'hidden' ). + ELSEIF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_veryhidden. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_state + value = 'veryHidden' ). + ENDIF. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_id + prefix = lc_r_ns + value = lv_xml_node_ridx_id ). + lo_element->append_child( new_child = lo_sub_element ). " sheet node + + " issue 163 >>> + lo_iterator_range = lo_worksheet->get_ranges_iterator( ). + +*--------------------------------------------------------------------* +* Defined names sheetlocal: Ranges, Repeat rows and columns +*--------------------------------------------------------------------* + WHILE lo_iterator_range->if_object_collection_iterator~has_next( ) EQ abap_true. + " range node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lo_range ?= lo_iterator_range->if_object_collection_iterator~get_next( ). + lv_value = lo_range->name. + + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + +* lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid "del #235 Repeat rows/cols - EXCEL starts couting from zero +* value = lv_xml_node_ridx_id ). "del #235 Repeat rows/cols - and needs absolute referencing to localSheetId + lv_value = lv_syindex - 1. "ins #235 Repeat rows/cols + CONDENSE lv_value NO-GAPS. "ins #235 Repeat rows/cols + lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid + value = lv_value ). + + lv_value = lo_range->get_value( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node + + ENDWHILE. + " issue 163 <<< + + ENDWHILE. + lo_element_root->append_child( new_child = lo_element )." sheets node + + +*--------------------------------------------------------------------* +* Defined names workbookgolbal: Ranges +*--------------------------------------------------------------------* +* " ranges node +* lo_element = lo_document->create_simple_element( name = lc_xml_node_definednames " issue 163 - +* parent = lo_document ). " issue 163 - + lo_iterator = excel->get_ranges_iterator( ). + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + " range node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lo_range ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_value = lo_range->name. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lv_value = lo_range->get_value( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node + + ENDWHILE. + +*--------------------------------------------------------------------* +* Defined names - Autofilters ( also sheetlocal ) +*--------------------------------------------------------------------* + lo_autofilters = excel->get_autofilters_reference( ). + IF lo_autofilters->is_empty( ) = abap_false. + lo_iterator = excel->get_worksheets_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_syindex = sy-index - 1 . + l_guid = lo_worksheet->get_guid( ). + lo_autofilter = lo_autofilters->get( i_sheet_guid = l_guid ) . + IF lo_autofilter IS BOUND. + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lv_value = lo_autofilters->c_autofilter. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lv_value = lv_syindex. + CONDENSE lv_value NO-GAPS. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid + value = lv_value ). + lv_value = '1'. " Always hidden + lo_sub_element->set_attribute_ns( name = lc_xml_attr_hidden + value = lv_value ). + lv_value = lo_autofilter->get_filter_reference( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node + ENDIF. + + ENDWHILE. + ENDIF. + lo_element_root->append_child( new_child = lo_element_range ). " ranges node + + + " calcPr node + lo_element = lo_document->create_simple_element( name = lc_xml_node_calcpr + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_calcid + value = '125725' ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + + method FLAG2BOOL. + + + IF ip_flag EQ abap_true. + ep_boolean = 'true'. + ELSE. + ep_boolean = 'false'. + ENDIF. + endmethod. + + + + + method GET_SHARED_STRING_INDEX. + + + DATA ls_shared_string TYPE zexcel_s_shared_string. + + READ TABLE shared_strings INTO ls_shared_string WITH KEY string_value = ip_cell_value BINARY SEARCH. + ep_index = ls_shared_string-string_no. + + endmethod. + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + method ZIF_EXCEL_WRITER~WRITE_FILE. + me->excel = io_excel. + ep_file = me->create( ). + endmethod. + + + + method CREATE. + +* .csv format with ; delimiter + + ep_excel = me->CREATE_CSV( ). + + endmethod. + + + + method CREATE_CSV. + + TYPES: BEGIN OF lty_format, + cmpname TYPE SEOCMPNAME, + attvalue TYPE SEOVALUE, + END OF lty_format. + DATA: lt_format TYPE STANDARD TABLE OF lty_format, + ls_format LIKE LINE OF lt_format, + lv_date TYPE DATS, + lv_tmp TYPE string, + lv_time TYPE CHAR08. + + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, + lv_row TYPE sytabix, + lv_col TYPE sytabix, + lv_string TYPE string, + lc_value TYPE string, + lv_attrname TYPE SEOCMPNAME. + + DATA: ls_numfmt TYPE zexcel_s_style_numfmt, + lo_style TYPE REF TO zcl_excel_style. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + +* --- Retrieve supported cell format + REFRESH lt_format. + SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_format + FROM seocompodf + WHERE clsname = 'ZCL_EXCEL_STYLE_NUMBER_FORMAT' + AND typtype = 1 + AND type = 'ZEXCEL_NUMBER_FORMAT'. + +* --- Retrieve SAP date format + CLEAR ls_format. + SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' + AND ddlanguage = sy-langu. + ls_format-cmpname = 'DATE'. + CONDENSE ls_format-attvalue. + CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. + APPEND ls_format TO lt_format. + ENDSELECT. + + + LOOP AT lt_format INTO ls_format. + TRANSLATE ls_format-attvalue TO UPPER CASE. + MODIFY lt_format FROM ls_format. + ENDLOOP. + + +* STEP 1: Collect strings from the first worksheet + lo_iterator = excel->get_worksheets_iterator( ). + data: current_worksheet_title type ZEXCEL_SHEET_TITLE. + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + + IF worksheet_name IS NOT INITIAL. + current_worksheet_title = lo_worksheet->get_title( ). + CHECK current_worksheet_title = worksheet_name. + ELSE. + IF worksheet_index IS INITIAL. + worksheet_index = 1. + ENDIF. + CHECK worksheet_index = sy-index. + ENDIF. + APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. + EXIT. " Take first worksheet only + ENDWHILE. + + DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content + + SORT lt_cell_data BY cell_row + cell_column. + lv_row = 1. + lv_col = 1. + CLEAR lv_string. + LOOP AT lt_cell_data ASSIGNING <fs_sheet_content>. + +* --- Retrieve Cell Style format and data type + CLEAR ls_numfmt. + IF <fs_sheet_content>-data_type IS INITIAL AND <fs_sheet_content>-cell_style IS NOT INITIAL. + lo_iterator = excel->get_styles_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style ?= lo_iterator->if_object_collection_iterator~get_next( ). + CHECK lo_style->get_guid( ) = <fs_sheet_content>-cell_style. + ls_numfmt = lo_style->number_format->get_structure( ). + EXIT. + ENDWHILE. + ENDIF. + IF <fs_sheet_content>-data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. + " determine data-type + CLEAR lv_attrname. + CONCATENATE '''' ls_numfmt-NUMFMT '''' INTO ls_numfmt-NUMFMT. + TRANSLATE ls_numfmt-numfmt TO UPPER CASE. + READ TABLE lt_format INTO ls_format WITH KEY attvalue = ls_numfmt-NUMFMT. + IF sy-subrc = 0. + lv_attrname = ls_format-cmpname. + ENDIF. + + IF lv_attrname IS NOT INITIAL. + FIND FIRST OCCURRENCE OF 'DATETIME' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'd'. + ELSE. + FIND FIRST OCCURRENCE OF 'TIME' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 't'. + ELSE. + FIND FIRST OCCURRENCE OF 'DATE' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'd'. + ELSE. + FIND FIRST OCCURRENCE OF 'CURRENCY' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'n'. + ELSE. + FIND FIRST OCCURRENCE OF 'NUMBER' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'n'. + ELSE. + FIND FIRST OCCURRENCE OF 'PERCENTAGE' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'n'. + ENDIF. " Purcentage + ENDIF. " Number + ENDIF. " Currency + ENDIF. " Date + ENDIF. " TIME + ENDIF. " DATETIME + ENDIF. " lv_attrname IS NOT INITIAL. + ENDIF. " <fs_sheet_content>-data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. + +* --- Add empty rows + WHILE lv_row < <fs_sheet_content>-cell_row. +* CONCATENATE lv_string cl_abap_char_utilities=>newline INTO lv_string. +* CONCATENATE lv_string cl_abap_char_utilities=>cr_lf INTO lv_string. + CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. + lv_row = lv_row + 1. + lv_col = 1. + ENDWHILE. + +* --- Add empty columns + WHILE lv_col < <fs_sheet_content>-cell_column. +* CONCATENATE lv_string ';' INTO lv_string. + CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. + lv_col = lv_col + 1. + ENDWHILE. + +* ----- Use format to determine the data type and display format. + CASE <fs_sheet_content>-data_type. +* WHEN 'n' OR 'N'. +* lc_value = zcl_excel_common=>excel_number_to_string( ip_value = <fs_sheet_content>-cell_value ). + + WHEN 'd' OR 'D'. + lc_value = zcl_excel_common=>excel_string_to_date( ip_value = <fs_sheet_content>-cell_value ). + TRY. + lv_date = lc_value. + CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL' + EXPORTING + DATE_INTERNAL = lv_date + IMPORTING + DATE_EXTERNAL = lv_tmp + EXCEPTIONS + DATE_INTERNAL_IS_INVALID = 1 + OTHERS = 2 + . + IF SY-SUBRC = 0. + lc_value = lv_tmp. + ENDIF. + + CATCH CX_SY_CONVERSION_NO_NUMBER. + + ENDTRY. + + WHEN 't' OR 'T'. + lc_value = zcl_excel_common=>excel_string_to_time( ip_value = <fs_sheet_content>-cell_value ). + write lc_value to lv_time USING EDIT MASK '__:__:__'. + lc_value = lv_time. + WHEN OTHERS. + lc_value = <fs_sheet_content>-cell_value. + + ENDCASE. + +* REPLACE ALL OCCURRENCES OF '"' in lc_value with '""'. + CONCATENATE zcl_excel_writer_csv=>enclosure zcl_excel_writer_csv=>enclosure INTO lv_tmp. + CONDENSE lv_tmp. + REPLACE ALL OCCURRENCES OF zcl_excel_writer_csv=>enclosure in lc_value with lv_tmp. + +* FIND FIRST OCCURRENCE OF ';' IN lc_value. + FIND FIRST OCCURRENCE OF zcl_excel_writer_csv=>delimiter IN lc_value. + IF sy-subrc = 0. + CONCATENATE lv_string zcl_excel_writer_csv=>enclosure lc_value zcl_excel_writer_csv=>enclosure INTO lv_string. + ELSE. + CONCATENATE lv_string lc_value INTO lv_string. + ENDIF. + + ENDLOOP. " AT lt_cell_data + + CLEAR ep_content. + + CALL FUNCTION 'SCMS_STRING_TO_XSTRING' + EXPORTING + TEXT = lv_string +* MIMETYPE = ' ' +* ENCODING = + IMPORTING + BUFFER = ep_content + EXCEPTIONS + FAILED = 1 + OTHERS = 2 + . + + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX. + CLEAR WORKSHEET_NAME. + WORKSHEET_INDEX = i_active_worksheet. + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX_BY_NAME. + CLEAR WORKSHEET_INDEX. + WORKSHEET_NAME = i_worksheet_name. + endmethod. + + + + method SET_DELIMITER. + delimiter = ip_value. + endmethod. + + + + method SET_ENCLOSURE. + zcl_excel_writer_csv=>enclosure = ip_value. + endmethod. + + + + method SET_ENDOFLINE. + zcl_excel_writer_csv=>eol = ip_value. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + 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. +** 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', + " 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'. + + + 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. + +********************************************************************** +* STEP 3: Create standard contentType + ep_content = super->create_content_types( ). + +********************************************************************** +* STEP 2: modify XML adding the extension bin definition + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + lo_document ?= lo_document_xml->m_document. + lo_element_root = lo_document->if_ixml_node~get_first_child( ). + + " extension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_bin_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_bin_ct ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 3: modify XML changing the contentType of node Override /xl/workbook.xml + + lo_collection = lo_document->get_elements_by_tag_name( 'Override' ). + lo_iterator = lo_collection->create_iterator( ). + lo_element ?= lo_iterator->get_next( ). + WHILE lo_element IS BOUND. + lv_contenttype = lo_element->get_attribute_ns( lc_xml_attr_partname ). + IF lv_contenttype EQ lc_xml_node_workb_pn. + lo_element->remove_attribute_ns( lc_xml_attr_contenttype ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_workb_ct ). + EXIT. + ENDIF. + lo_element ?= lo_iterator->get_next( ). + ENDWHILE. + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + method CREATE_XL_RELATIONSHIPS. + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " 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', + " Node target + 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: 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 + ep_content = super->create_xl_relationships( ). + +********************************************************************** +* STEP 2: modify XML adding the vbaProject relation + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + lo_document ?= lo_document_xml->m_document. + lo_element_root = lo_document->if_ixml_node~get_first_child( ). + + + lv_size = excel->get_worksheets_size( ). + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 4 TO lv_size. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_vba_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_vba_tg ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + 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: lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. + +********************************************************************** +* STEP 3: Create standard relationship + ep_content = super->create_xl_sheet( io_worksheet = io_worksheet + iv_active = iv_active ). + +********************************************************************** +* STEP 2: modify XML adding the vbaProject relation + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + 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( ). + WHILE lo_element IS BOUND. + lo_element->set_attribute_ns( name = lc_xml_attr_codename + value = io_worksheet->zif_excel_sheet_vba_project~codename_pr ). + lo_element ?= lo_iterator->get_next( ). + ENDWHILE. + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + 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: lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. + +********************************************************************** +* STEP 3: Create standard relationship + ep_content = super->create_xl_workbook( ). + +********************************************************************** +* STEP 2: modify XML adding the vbaProject relation + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + 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( 'workbookPr' ). + 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_pr ). + lo_element ?= lo_iterator->get_next( ). + ENDWHILE. + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + 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. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + method IF_MESSAGE~GET_LONGTEXT. + + IF me->error IS NOT INITIAL + OR me->syst_at_raise IS NOT INITIAL. +*--------------------------------------------------------------------* +* If message was supplied explicitly use this as longtext as well +*--------------------------------------------------------------------* + result = me->get_text( ). + ELSE. +*--------------------------------------------------------------------* +* otherwise use standard method to derive text +*--------------------------------------------------------------------* + super->if_message~get_longtext( EXPORTING + preserve_newlines = preserve_newlines + RECEIVING + result = result ). + ENDIF. + endmethod. + + + method IF_MESSAGE~GET_TEXT. + + IF me->error IS NOT INITIAL. +*--------------------------------------------------------------------* +* If message was supplied explicitly use this +*--------------------------------------------------------------------* + result = me->error . + ELSEIF me->syst_at_raise IS NOT INITIAL. +*--------------------------------------------------------------------* +* If message was supplied by syst create messagetext now +*--------------------------------------------------------------------* + MESSAGE ID syst_at_raise-msgid TYPE syst_at_raise-msgty NUMBER syst_at_raise-msgno + WITH syst_at_raise-msgv1 syst_at_raise-msgv2 syst_at_raise-msgv3 syst_at_raise-msgv4 + INTO result. + ELSE. +*--------------------------------------------------------------------* +* otherwise use standard method to derive text +*--------------------------------------------------------------------* + CALL METHOD super->if_message~get_text + RECEIVING + result = result. + ENDIF. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + method ADD. + ranges->add( ip_range ). + endmethod. + + + method CLEAR. + ranges->clear( ). + endmethod. + + + method CONSTRUCTOR. + + + CREATE OBJECT ranges. + + endmethod. + + + + + method GET. + eo_range ?= ranges->if_object_collection~get( ip_index ). + endmethod. + + + + method GET_ITERATOR. + eo_iterator ?= ranges->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + is_empty = ranges->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + ranges->remove( ip_range ). + endmethod. + + + + method SIZE. + ep_size = ranges->if_object_collection~size( ). + endmethod. + + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + +* Signal "not found" +class lcx_not_found implementation. + method constructor. + super->constructor( textid = textid previous = previous ). + me->error = error. + endmethod. "constructor + method if_message~get_text. + result = error. + endmethod. "if_message~get_text +endclass. "lcx_not_found IMPLEMENTATION + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + +* Signal for "Not found" +class lcx_not_found definition inheriting from cx_static_check. + public section. + data error type string. + methods constructor + importing error type string + textid type sotr_conc optional + previous type ref to cx_root optional. + methods if_message~get_text redefinition. +endclass. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + *"* use this source file for your ABAP unit test classes +class lcl_test definition deferred. +class zcl_excel_reader_huge_file definition local friends lcl_test. + +* +class lcl_test definition for testing " #AU Risk_Level Harmless + inheriting from cl_aunit_assert. " #AU Duration Short + + private section. + data: + out type ref to zcl_excel_reader_huge_file, " object under test + excel type ref to zcl_excel, + worksheet type ref to zcl_excel_worksheet. + methods: + setup, + test_number for testing, + test_shared_string for testing, + test_shared_string_missing for testing, + test_inline_string for testing, + test_empty_cells for testing, + test_boolean for testing, + test_style for testing, + test_style_missing for testing, + test_formula for testing, + test_read_shared_strings for testing, + test_skip_to_inexistent for testing, + get_reader importing iv_xml type string returning value(eo_reader) type ref to if_sxml_reader, + assert_value_equals importing iv_row type i default 1 iv_col type i default 1 iv_value type string, + assert_formula_equals importing iv_row type i default 1 iv_col type i default 1 iv_formula type string, + assert_style_equals importing iv_row type i default 1 iv_col type i default 1 iv_style type ZEXCEL_CELL_STYLE, + assert_datatype_equals importing iv_row type i default 1 iv_col type i default 1 iv_datatype type string. + +endclass. "lcl_test DEFINITION + +* +class lcl_test implementation. + +* + method test_number. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="n"><v>17</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `17` ). + assert_datatype_equals( `n` ). + endmethod. "test_shared_string + +* + method test_shared_string. + data lo_reader type ref to if_sxml_reader. + append `Test1` to out->shared_strings. + append `Test2` to out->shared_strings. + lo_reader = get_reader( + `<c r="A1" t="s"><v>1</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `Test2` ). + assert_datatype_equals( `s` ). + endmethod. "test_shared_string +* + method test_shared_string_missing. + + data: lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + append `Test` to out->shared_strings. + lo_reader = get_reader( + `<c r="A1" t="s"><v>1</v></c>` + ). + + try. + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + fail(`Index to non-existent shared string should give an error`). + catch lcx_not_found into lo_ex. + lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger + endtry. + + endmethod. +* + method test_inline_string. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="inlineStr"><is><t>Alpha</t></is></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `Alpha` ). + assert_datatype_equals( `inlineStr` ). + endmethod. "test_inline_string + +* + method test_boolean. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="b"><v>1</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `1` ). + assert_datatype_equals( `b` ). + endmethod. "test_boolean + +* + method test_formula. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="n"><f>A2*A2</f></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_formula_equals( `A2*A2` ). + assert_datatype_equals( `n` ). + endmethod. "test_formula + +* + method test_empty_cells. + +* There is no need to store an empty cell in the ABAP worksheet structure + + data: lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + append `` to out->shared_strings. + append `t` to out->shared_strings. + lo_reader = get_reader( + `<c r="A1" t="s"><v>0</v></c>` && + `<c r="A2" t="inlineStr"><is><t></t></is></c>` && + `<c r="A3" t="s"><v>1</v></c>` + ). + + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + + assert_value_equals( iv_row = 1 iv_col = 1 iv_value = `` ). + assert_value_equals( iv_row = 2 iv_col = 1 iv_value = `` ). + assert_value_equals( iv_row = 3 iv_col = 1 iv_value = `t` ). + + endmethod. + +* + method test_style. + data: + lo_reader type ref to if_sxml_reader, + lo_style type ref to zcl_excel_style, + lv_guid type ZEXCEL_CELL_STYLE. + create object lo_style. + append lo_style to out->styles. + lv_guid = lo_style->get_guid( ). + + lo_reader = get_reader( + `<c r="A1" s="0"><v>18</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + + assert_style_equals( lv_guid ). + + endmethod. "test_style + +* + method test_style_missing. + + data: + lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + + lo_reader = get_reader( + `<c r="A1" s="0"><v>18</v></c>` + ). + + try. + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + fail(`Reference to non-existent style should throw an lcx_not_found exception`). + catch lcx_not_found into lo_ex. + lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger + endtry. + + endmethod. "test_style + +* + method test_read_shared_strings. + data: lo_reader type ref to if_sxml_reader, + lt_act type stringtab, + lt_exp type stringtab. + lo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to( + `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>` + ) ). + append : + `` to lt_exp, + `Alpha` to lt_exp, + `Bravo` to lt_exp. + + lt_act = out->read_shared_strings( lo_reader ). + + assert_equals( act = lt_act + exp = lt_exp ). + + endmethod. + +* + method test_skip_to_inexistent. + data: lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + + lo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to( + `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>` + ) ). + try. + out->skip_to( iv_element_name = `nonExistingElement` io_reader = lo_reader ). + fail(`Skipping to non-existing element must raise lcx_not_found exception`). + catch lcx_not_found into lo_ex. + lv_text = lo_ex->get_text( ). " May inspect exception text in debugger + endtry. + endmethod. + +* + method get_reader. + data: lv_full type string. + concatenate `<root><sheetData><row>` iv_xml `</row></sheetData></root>` into lv_full. + eo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to( lv_full ) ). + endmethod. "get_reader +* + method assert_value_equals. + + constants: lc_empty_string type string value is initial. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data, + <lv_value> type string. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + if sy-subrc eq 0. + assign <ls_cell_data>-cell_value to <lv_value>. + else. + assign lc_empty_string to <lv_value>. + endif. + + assert_equals( act = <lv_value> + exp = iv_value ). + + endmethod. "assert_value_equals +** + method assert_formula_equals. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + assert_subrc( sy-subrc ). + + assert_equals( act = <ls_cell_data>-cell_formula + exp = iv_formula ). + + endmethod. "assert_formula_equals +* + method assert_style_equals. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + assert_subrc( sy-subrc ). + + assert_equals( act = <ls_cell_data>-cell_style + exp = iv_style ). + + endmethod. +* + method assert_datatype_equals. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + assert_subrc( sy-subrc ). + + assert_equals( act = <ls_cell_data>-data_type + exp = iv_datatype ). + + endmethod. "assert_datatype_equals + method setup. + create object out. + create object excel. + create object worksheet + exporting + ip_excel = excel. + endmethod. "setup +endclass. "lcl_test IMPLEMENTATION + + + + + + + + + + + + + + + + method FILL_CELL_FROM_ATTRIBUTES. + + while io_reader->node_type ne c_end_of_stream. + io_reader->next_attribute( ). + if io_reader->node_type ne c_attribute. + exit. + endif. + case io_reader->name. + when `t`. + es_cell-datatype = io_reader->value. + when `s`. + if io_reader->value is not initial. + es_cell-style = get_style( io_reader->value ). + endif. + when `r`. + es_cell-coord = get_cell_coord( io_reader->value ). + endcase. + endwhile. + +endmethod. + + + + + method GET_CELL_COORD. + + zcl_excel_common=>convert_columnrow2column_a_row( + exporting + i_columnrow = iv_coord + importing + e_column = es_coord-column + e_row = es_coord-row + ). + +endmethod. + + + + + + method GET_SHARED_STRING. + data: lv_tabix type i. + lv_tabix = iv_index + 1. + read table shared_strings into ev_value index lv_tabix. + if sy-subrc ne 0. + raise exception type lcx_not_found + exporting + error = |Entry { iv_index } not found in Shared String Table|. + endif. +endmethod. + + + + + + method GET_STYLE. + + data: lv_tabix type i, + lo_style type ref to zcl_excel_style. + + if gs_buffer_style-index ne iv_index. + lv_tabix = iv_index + 1. + read table styles into lo_style index lv_tabix. + if sy-subrc ne 0. + raise exception type lcx_not_found + exporting + error = |Entry { iv_index } not found in Style Table|. + else. + gs_buffer_style-index = iv_index. + gs_buffer_style-guid = lo_style->get_guid( ). + endif. + endif. + + ev_style_guid = gs_buffer_style-guid. + +endmethod. + + + + + + method GET_SXML_READER. + + data: lv_xml type xstring. + + lv_xml = get_from_zip_archive( iv_path ). + eo_reader = cl_sxml_string_reader=>create( lv_xml ). + +endmethod. + + + method LOAD_SHARED_STRINGS. + + data: lo_reader type ref to if_sxml_reader. + + lo_reader = get_sxml_reader( ip_path ). + + shared_strings = read_shared_strings( lo_reader ). + +endmethod. + + + method LOAD_WORKSHEET. + + data: lo_reader type ref to if_sxml_reader. + + lo_reader = get_sxml_reader( ip_path ). + + read_worksheet_data( io_reader = lo_reader + io_worksheet = io_worksheet ). + +endmethod. + + + + + method PUT_CELL_TO_WORKSHEET. + check is_cell-value is not initial + or is_cell-formula is not initial + or is_cell-style is not initial. + call method io_worksheet->set_cell + exporting + ip_column = is_cell-column + ip_row = is_cell-row + ip_value = is_cell-value + ip_formula = is_cell-formula + ip_data_type = is_cell-datatype + ip_style = is_cell-style. +endmethod. + + + + + method READ_SHARED_STRINGS. + + while io_reader->node_type ne c_end_of_stream. + io_reader->next_node( ). + if io_reader->node_type eq c_element_close and + io_reader->name eq `t`. + append io_reader->value to et_shared_strings. + endif. + endwhile. + +endmethod. + + + + + + method READ_WORKSHEET_DATA. + + data: ls_cell type t_cell. + +* Skip to <sheetData> element + skip_to( iv_element_name = `sheetData` io_reader = io_reader ). + +* Main loop: Evaluate the <c> elements and its children + while io_reader->node_type ne c_end_of_stream. + io_reader->next_node( ). + case io_reader->node_type. + when c_element_open. + if io_reader->name eq `c`. + ls_cell = fill_cell_from_attributes( io_reader ). + endif. + when c_node_value. + case io_reader->name. + when `f`. + ls_cell-formula = io_reader->value. + when `v`. + if ls_cell-datatype eq `s`. + ls_cell-value = get_shared_string( io_reader->value ). + else. + ls_cell-value = io_reader->value. + endif. + when `t` or `is`. + ls_cell-value = io_reader->value. + endcase. + when c_element_close. + case io_reader->name. + when `c`. + put_cell_to_worksheet( is_cell = ls_cell io_worksheet = io_worksheet ). + when `sheetData`. + exit. + endcase. + endcase. + endwhile. + +endmethod. + + + + + + method SKIP_TO. + +* Skip forward to given element + while io_reader->name ne iv_element_name or + io_reader->node_type ne c_element_open. + io_reader->next_node( ). + if io_reader->node_type = c_end_of_stream. + raise exception type lcx_not_found + exporting + error = |XML error: Didn't find element <{ iv_element_name }>|. + endif. + endwhile. + + +endmethod. + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + CLASS zcl_tc_excel DEFINITION DEFERRED. +CLASS zcl_excel DEFINITION LOCAL FRIENDS zcl_tc_excel. + +*----------------------------------------------------------------------* +* CLASS zcl_Tc_Excel DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_tc_excel DEFINITION FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS +. +*?<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> +*?<asx:values> +*?<TESTCLASS_OPTIONS> +*?<TEST_CLASS>zcl_Tc_Excel +*?</TEST_CLASS> +*?<TEST_MEMBER>f_Cut +*?</TEST_MEMBER> +*?<OBJECT_UNDER_TEST>ZCL_EXCEL +*?</OBJECT_UNDER_TEST> +*?<OBJECT_IS_LOCAL/> +*?<GENERATE_FIXTURE>X +*?</GENERATE_FIXTURE> +*?<GENERATE_CLASS_FIXTURE>X +*?</GENERATE_CLASS_FIXTURE> +*?<GENERATE_INVOCATION>X +*?</GENERATE_INVOCATION> +*?<GENERATE_ASSERT_EQUAL>X +*?</GENERATE_ASSERT_EQUAL> +*?</TESTCLASS_OPTIONS> +*?</asx:values> +*?</asx:abap> + PRIVATE SECTION. +* ================ + DATA: + f_cut TYPE REF TO zcl_excel. "class under test + + CLASS-METHODS: class_setup. + CLASS-METHODS: class_teardown. + METHODS: setup. + METHODS: teardown. + METHODS: create_empty_excel FOR TESTING. + +ENDCLASS. "zcl_Tc_Excel + + +*----------------------------------------------------------------------* +* CLASS zcl_Tc_Excel IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_tc_excel IMPLEMENTATION. +* ================================== + + METHOD class_setup. +* =================== + + + ENDMETHOD. "class_Setup + + + METHOD class_teardown. +* ====================== + + + ENDMETHOD. "class_Teardown + + + METHOD setup. +* ============= + + CREATE OBJECT f_cut. + ENDMETHOD. "setup + + + METHOD teardown. +* ================ + + + ENDMETHOD. "teardown + +*// START TEST METHODS + + METHOD create_empty_excel. +* ================================== + + DATA: lv_count TYPE i. + lv_count = f_cut->get_worksheets_size( ). + + cl_abap_unit_assert=>assert_equals( act = lv_count + exp = 1 + msg = 'Testing number of sheet' + level = if_aunit_constants=>tolerable ). + ENDMETHOD. "create_empty_excel + +*// END TEST METHODS + + +ENDCLASS. "zcl_Tc_Excel + + + + + + + + + + + + + + + METHOD zif_excel_book_properties~initialize. + DATA: lv_timestamp TYPE timestampl. + + me->zif_excel_book_properties~application = 'Microsoft Excel'. + me->zif_excel_book_properties~appversion = '12.0000'. + + GET TIME STAMP FIELD lv_timestamp. + me->zif_excel_book_properties~created = lv_timestamp. + me->zif_excel_book_properties~creator = sy-uname. + me->zif_excel_book_properties~description = zcl_excel=>version. + me->zif_excel_book_properties~modified = lv_timestamp. + me->zif_excel_book_properties~lastmodifiedby = sy-uname. +ENDMETHOD. + + + method ZIF_EXCEL_BOOK_PROTECTION~INITIALIZE. + me->zif_excel_book_protection~protected = zif_excel_book_protection=>c_unprotected. + me->zif_excel_book_protection~lockrevision = zif_excel_book_protection=>c_unlocked. + me->zif_excel_book_protection~lockstructure = zif_excel_book_protection=>c_unlocked. + me->zif_excel_book_protection~lockwindows = zif_excel_book_protection=>c_unlocked. + CLEAR me->zif_excel_book_protection~workbookpassword. + CLEAR me->zif_excel_book_protection~revisionspassword. + endmethod. + + + method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_CODENAME. + me->zif_excel_book_vba_project~codename = ip_codename. + endmethod. + + + method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_CODENAME_PR. + me->zif_excel_book_vba_project~codename_pr = ip_codename_pr. + endmethod. + + + method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_VBAPROJECT. + me->zif_excel_book_vba_project~vbaproject = ip_vbaproject. + endmethod. + + + + + method ADD_NEW_AUTOFILTER. +* Check for autofilter reference: new or overwrite; only one per sheet + ro_autofilter = autofilters->add( io_sheet = io_sheet ) . + endmethod. + + + + + + method ADD_NEW_DRAWING. + DATA: lv_guid TYPE guid_16. +* Create default blank worksheet + CREATE OBJECT eo_drawing + EXPORTING + ip_type = ip_type + ip_title = ip_title. + + CASE ip_type. + WHEN 'image'. + drawings->add( eo_drawing ). + WHEN 'chart'. + charts->add( eo_drawing ). + ENDCASE. + endmethod. + + + + method ADD_NEW_RANGE. +* Create default blank range + CREATE OBJECT eo_range. + ranges->add( eo_range ). + endmethod. + + + + + method ADD_NEW_STYLE. +* Start of deletion # issue 139 - Dateretention of cellstyles +* CREATE OBJECT eo_style. +* styles->add( eo_style ). +* End of deletion # issue 139 - Dateretention of cellstyles +* Start of insertion # issue 139 - Dateretention of cellstyles +* Create default style + CREATE OBJECT eo_style + EXPORTING + ip_guid = ip_guid. + styles->add( eo_style ). + + DATA: style2 TYPE zexcel_s_stylemapping. +* Copy to new representations + style2 = stylemapping_dynamic_style( eo_style ). + INSERT style2 INTO TABLE t_stylemapping1. + INSERT style2 INTO TABLE t_stylemapping2. +* End of insertion # issue 139 - Dateretention of cellstyles + + endmethod. + + + + + + method ADD_NEW_WORKSHEET. + DATA: lv_guid TYPE guid_16. + +* Create default blank worksheet + CREATE OBJECT eo_worksheet + EXPORTING + ip_excel = me + ip_title = ip_title. + + worksheets->add( eo_worksheet ). + worksheets->active_worksheet = worksheets->size( ). + endmethod. + + + method ADD_STATIC_STYLES. + " # issue 139 +* sp#ƒÂ¤ter hier noch die Worksheets abklappern, welche Styles #ƒÂ#berhaupt noch ben#ƒÂ#tigt werden +* und nur diese dann auch hier zur Verf#ƒÂ#gung stellen +* Da muss ich noch mal nachfragen, ob die beiden ersten Styles, die scheinbar immer mit dem +* EXCEL-Objekt erzeugt werden evtl. immer ben#ƒÂ#tigt werden, egal ob verwendet oder nicht +* Aber als Start fange ich mal an einfach alle static styles der Reihe nach hinzuzuf#ƒÂ#gen + FIELD-SYMBOLS: <style1> LIKE LINE OF t_stylemapping1, + <style2> LIKE LINE OF t_stylemapping2. + DATA: style TYPE REF TO zcl_excel_style. + + LOOP AT me->t_stylemapping1 ASSIGNING <style1> WHERE added_to_iterator IS INITIAL. + READ TABLE me->t_stylemapping2 ASSIGNING <style2> WITH TABLE KEY guid = <style1>-guid. + CHECK sy-subrc = 0. " Should always be true since these tables are being filled parallel + + style = me->add_new_style( <style1>-guid ). + + zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = <style1>-complete_style + i_sourcex = <style1>-complete_stylex + CHANGING e_target = style ). + + ENDLOOP. + endmethod. + + + method CONSTRUCTOR. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style TYPE REF TO zcl_excel_style. + +* Inizialize instance objects + CREATE OBJECT security. + CREATE OBJECT worksheets. + CREATE OBJECT ranges. + CREATE OBJECT styles. + CREATE OBJECT drawings + EXPORTING + ip_type = zcl_excel_drawing=>type_image. + CREATE OBJECT charts + EXPORTING + ip_type = zcl_excel_drawing=>type_chart. + CREATE OBJECT legacy_palette. + CREATE OBJECT autofilters. + + me->zif_excel_book_protection~initialize( ). + me->zif_excel_book_properties~initialize( ). + + me->add_new_worksheet( ). + me->add_new_style( ). " Standard style + lo_style = me->add_new_style( ). " Standard style with fill gray125 + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_pattern_gray125. + + endmethod. + + + + method GET_ACTIVE_SHEET_INDEX. + r_active_worksheet = me->worksheets->active_worksheet. + endmethod. + + + + method GET_ACTIVE_WORKSHEET. + + eo_worksheet = me->worksheets->get( me->worksheets->active_worksheet ). + + endmethod. + + + + method GET_AUTOFILTERS_REFERENCE. + + ro_autofilters = autofilters. + + endmethod. + + + + method GET_DEFAULT_STYLE. + ep_style = me->default_style. + endmethod. + + + + + method GET_DRAWINGS_ITERATOR. + + CASE ip_type. + WHEN zcl_excel_drawing=>type_image. + eo_iterator = me->drawings->get_iterator( ). + WHEN zcl_excel_drawing=>type_chart. + eo_iterator = me->charts->get_iterator( ). + WHEN OTHERS. + ENDCASE. + + endmethod. + + + + method GET_NEXT_TABLE_ID. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lv_tables_count TYPE i. + + lo_iterator = me->get_worksheets_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_tables_count = lo_worksheet->get_tables_size( ). + ADD lv_tables_count TO ep_id. + + ENDWHILE. + + ADD 1 TO ep_id. + + endmethod. + + + + method GET_RANGES_ITERATOR. + + eo_iterator = me->ranges->get_iterator( ). + + endmethod. + + + + + + method GET_STATIC_CELLSTYLE_GUID. +" # issue 139 + DATA: style LIKE LINE OF me->t_stylemapping1. + + READ TABLE me->t_stylemapping1 INTO style + WITH TABLE KEY dynamic_style_guid = style-guid " no dynamic style --> look for initial guid here + complete_style = ip_cstyle_complete + complete_stylex = ip_cstylex_complete. + IF sy-subrc <> 0. + style-complete_style = ip_cstyle_complete. + style-complete_stylex = ip_cstylex_complete. + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = style-guid. + INSERT style INTO TABLE me->t_stylemapping1. + INSERT style INTO TABLE me->t_stylemapping2. + + ENDIF. + + ep_guid = style-guid. + endmethod. + + + + method GET_STYLES_ITERATOR. + + eo_iterator = me->styles->get_iterator( ). + + endmethod. + + + + + + method GET_STYLE_INDEX_IN_STYLES. + DATA: index TYPE syindex. + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_style TYPE REF TO zcl_excel_style. + + CHECK ip_guid IS NOT INITIAL. + + + lo_iterator = me->get_styles_iterator( ). + WHILE lo_iterator->has_next( ) = 'X'. + ADD 1 TO index. + lo_style ?= lo_iterator->get_next( ). + IF lo_style->get_guid( ) = ip_guid. + ep_index = index. + EXIT. + ENDIF. + ENDWHILE. + + IF ep_index IS INITIAL. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Index not found'. + else. + SUBTRACT 1 from ep_index. " In excel list starts with "0" + ENDIF. + endmethod. + + + + + + method GET_STYLE_TO_GUID. + " # issue 139 + + READ TABLE me->t_stylemapping2 INTO ep_stylemapping WITH TABLE KEY guid = ip_guid. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'GUID not found'. + ENDIF. + + IF ep_stylemapping-dynamic_style_guid IS NOT INITIAL. + zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = ep_stylemapping-cl_style + CHANGING e_target = ep_stylemapping-complete_style + e_targetx = ep_stylemapping-complete_stylex ). + ENDIF. + + + endmethod. + + + + method GET_WORKSHEETS_ITERATOR. + + eo_iterator = me->worksheets->get_iterator( ). + + endmethod. + + + + method GET_WORKSHEETS_NAME. + + ep_name = me->worksheets->name. + + endmethod. + + + + method GET_WORKSHEETS_SIZE. + + ep_size = me->worksheets->size( ). + + endmethod. + + + + + method GET_WORKSHEET_BY_NAME. + + DATA: lv_index TYPE zexcel_active_worksheet, + l_size TYPE i. + + l_size = get_worksheets_size( ). + + DO l_size TIMES. + lv_index = sy-index. + eo_worksheet = me->worksheets->get( lv_index ). + IF eo_worksheet->get_title( ) = ip_sheet_name. + RETURN. + ENDIF. + ENDDO. + + CLEAR eo_worksheet. + + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX. + me->worksheets->active_worksheet = i_active_worksheet. + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX_BY_NAME. + + DATA: ws_it TYPE REF TO cl_object_collection_iterator, + ws TYPE REF TO zcl_excel_worksheet, + lv_title TYPE ZEXCEL_SHEET_TITLE, + count TYPE i VALUE 1. + + ws_it = me->worksheets->get_iterator( ). + + WHILE ws_it->if_object_collection_iterator~has_next( ) = abap_true. + ws ?= ws_it->if_object_collection_iterator~get_next( ). + lv_title = ws->get_title( ). + IF lv_title = i_worksheet_name. + me->worksheets->active_worksheet = count. + EXIT. + ENDIF. + count = count + 1. + ENDWHILE. + + endmethod. + + + + + method SET_DEFAULT_STYLE. + me->default_style = ip_style. + endmethod. + + + + + method STYLEMAPPING_DYNAMIC_STYLE. +" # issue 139 + eo_style2-dynamic_style_guid = ip_style->get_guid( ). + eo_style2-guid = eo_style2-dynamic_style_guid. + eo_style2-added_to_iterator = abap_true. + eo_style2-cl_style = ip_style. + +* don't care about attributes here, since this data may change +* dynamically + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + method CONSTRUCTOR. + worksheet = io_sheet. + endmethod. + + + + method GET_FILTER_AREA. + + validate_area( ). + + rs_area = filter_area. + + endmethod. + + + + method GET_FILTER_RANGE. + DATA: l_row_start_c TYPE string, + l_row_end_c TYPE string, + l_col_start_c TYPE string, + l_col_end_c TYPE string, + l_value TYPE string. + + validate_area( ). + + l_row_end_c = filter_area-row_end. + CONDENSE l_row_end_c NO-GAPS. + + l_row_start_c = filter_area-row_start. + CONDENSE l_row_start_c NO-GAPS. + + l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . + l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . + + CONCATENATE l_col_start_c l_row_start_c ':' l_col_end_c l_row_end_c INTO r_range. + + endmethod. + + + + method GET_FILTER_REFERENCE. + DATA: l_row_start_c TYPE string, + l_row_end_c TYPE string, + l_col_start_c TYPE string, + l_col_end_c TYPE string, + l_value TYPE string. + + validate_area( ). + + l_row_end_c = filter_area-row_end. + CONDENSE l_row_end_c NO-GAPS. + + l_row_start_c = filter_area-row_start. + CONDENSE l_row_start_c NO-GAPS. + + l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . + l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . + l_value = worksheet->get_title( ) . + + r_ref = zcl_excel_common=>escape_string( ip_value = l_value ). + + CONCATENATE r_ref '!$' l_col_start_c '$' l_row_start_c ':$' l_col_end_c '$' l_row_end_c INTO r_ref. + + endmethod. + + + + method GET_VALUES. + + rt_filter = values. + + endmethod. + + + + method SET_FILTER_AREA. + + filter_area = is_area. + + endmethod. + + + + + method SET_VALUE. + DATA: ls_values TYPE zexcel_s_autofilter_values. + +* Checks a re missing. + ls_values-column = i_column. + ls_values-value = i_value. + + INSERT ls_values INTO TABLE values. +* Now we need to be sure we don't get the same value again. + DELETE ADJACENT DUPLICATES FROM values COMPARING column value. + + endmethod. + + + + method SET_VALUES. + +* Checks are missing. + values = it_values. + DELETE ADJACENT DUPLICATES FROM values COMPARING column value. + + endmethod. + + + method VALIDATE_AREA. + DATA: l_col TYPE zexcel_cell_column, + l_row TYPE zexcel_cell_row. + + l_row = worksheet->get_highest_row( ) . + l_col = worksheet->get_highest_column( ) . + + IF filter_area IS INITIAL. + filter_area-row_start = 1. + filter_area-col_start = 1. + filter_area-row_end = l_row . + filter_area-col_end = l_col . + ENDIF. + + IF filter_area-row_start < 1. + filter_area-row_start = 1. + ENDIF. + IF filter_area-col_start < 1. + filter_area-col_start = 1. + ENDIF. + IF filter_area-row_end > l_row OR + filter_area-row_end < 1. + filter_area-row_end = l_row. + ENDIF. + IF filter_area-col_end > l_col OR + filter_area-col_end < 1. + filter_area-col_end = l_col. + ENDIF. + IF filter_area-row_start >= filter_area-row_end. + filter_area-row_start = filter_area-row_end - 1. + IF filter_area-row_start < 1. + filter_area-row_start = 1. + filter_area-row_end = 2. + ENDIF. + ENDIF. + IF filter_area-col_start > filter_area-col_end. + filter_area-col_start = filter_area-col_end. + ENDIF. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature +TYPES: BEGIN OF ts_objects, + sheet_guid TYPE uuid, + autofilter TYPE REF TO zcl_excel_autofilter, + END OF ts_objects, + + tt_objects TYPE HASHED TABLE OF ts_objects WITH UNIQUE KEY sheet_guid. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + method ADD. + DATA: ls_autofilters TYPE ts_objects, + l_guid TYPE uuid. + l_guid = io_sheet->get_guid( ) . + READ TABLE autofilters INTO ls_autofilters WITH TABLE KEY sheet_guid = l_guid. + IF sy-subrc = 0. + ro_autofilter = ls_autofilters-autofilter. + ELSE. + CREATE OBJECT ro_autofilter + EXPORTING + io_sheet = io_sheet. + ls_autofilters-autofilter = ro_autofilter. + ls_autofilters-sheet_guid = l_guid. + INSERT ls_autofilters INTO TABLE autofilters . + ENDIF. + endmethod. + + + method CLEAR. + + REFRESH autofilters. + + endmethod. + + + + + method GET. + + DATA: ls_autofilters TYPE ts_objects. + + READ TABLE autofilters INTO ls_autofilters WITH TABLE KEY sheet_guid = i_sheet_guid. + IF sy-subrc = 0. + ro_autofilter = ls_autofilters-autofilter. + ELSE. + CLEAR ro_autofilter. + ENDIF. + + endmethod. + + + + method IS_EMPTY. + IF autofilters IS INITIAL. + r_empty = abap_true. + ENDIF. + endmethod. + + + + method REMOVE. + DATA: ls_autofilters TYPE ts_objects. + + DELETE autofilters WHERE sheet_guid = i_sheet_guid. + + endmethod. + + + + method SIZE. + DESCRIBE TABLE autofilters LINES r_size. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + CLASS lcl_excel_common_test DEFINITION DEFERRED. +CLASS zcl_excel_common DEFINITION LOCAL FRIENDS lcl_excel_common_test. + +*----------------------------------------------------------------------* +* CLASS lcl_Excel_Common_Test DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_excel_common_test DEFINITION FOR TESTING "#AU Risk_Level Harmless + . "#AU Duration Short +*?<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> +*?<asx:values> +*?<TESTCLASS_OPTIONS> +*?<TEST_CLASS>lcl_Excel_Common_Test +*?</TEST_CLASS> +*?<TEST_MEMBER>f_Cut +*?</TEST_MEMBER> +*?<OBJECT_UNDER_TEST>ZCL_EXCEL_COMMON +*?</OBJECT_UNDER_TEST> +*?<OBJECT_IS_LOCAL/> +*?<GENERATE_FIXTURE>X +*?</GENERATE_FIXTURE> +*?<GENERATE_CLASS_FIXTURE>X +*?</GENERATE_CLASS_FIXTURE> +*?<GENERATE_INVOCATION>X +*?</GENERATE_INVOCATION> +*?<GENERATE_ASSERT_EQUAL>X +*?</GENERATE_ASSERT_EQUAL> +*?</TESTCLASS_OPTIONS> +*?</asx:values> +*?</asx:abap> + PRIVATE SECTION. +* ================ + DATA: + lx_excel TYPE REF TO zcx_excel, + ls_symsg_act TYPE symsg, " actual messageinformation of exception + ls_symsg_exp TYPE symsg, " expected messageinformation of exception + f_cut TYPE REF TO zcl_excel_common. "class under test + + CLASS-METHODS: class_setup. + CLASS-METHODS: class_teardown. + METHODS: setup. + METHODS: teardown. +* METHODS: char2hex FOR TESTING. + METHODS: convert_column2alpha FOR TESTING. + METHODS: convert_column2int FOR TESTING. + METHODS: date_to_excel_string FOR TESTING. + METHODS: encrypt_password FOR TESTING. + METHODS: excel_string_to_date FOR TESTING. + METHODS: excel_string_to_time FOR TESTING. +* METHODS: number_to_excel_string FOR TESTING. + METHODS: time_to_excel_string FOR TESTING. + METHODS: split_file FOR TESTING. + METHODS: convert_range2column_a_row FOR TESTING. + METHODS: describe_structure FOR TESTING. + METHODS: calculate_cell_distance FOR TESTING. + METHODS: shift_formula FOR TESTING. +ENDCLASS. "lcl_Excel_Common_Test + + +*----------------------------------------------------------------------* +* CLASS lcl_Excel_Common_Test IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_excel_common_test IMPLEMENTATION. +* =========================================== + + METHOD class_setup. +* =================== + + + ENDMETHOD. "class_Setup + + + METHOD class_teardown. +* ====================== + + + ENDMETHOD. "class_Teardown + + + METHOD setup. +* ============= + + CREATE OBJECT f_cut. + ENDMETHOD. "setup + + + METHOD teardown. +* ================ + + + ENDMETHOD. "teardown + + + METHOD convert_column2alpha. +* ============================ + DATA ep_column TYPE zexcel_cell_column_alpha. + +* Test 1. Simple test + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 1 ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 'A' + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Max column for OXML #16,384 = XFD + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 16384 ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 'XFD' + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Index 0 is out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 0 ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 'A' + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Colum index 0 is out of bounds, min column index is 1' + level = if_aunit_constants=>fatal + ). + ENDTRY. + +* Test 4. Exception should be thrown index out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 16385 ). + + zcl_excel_common=>assert_differs( + act = ep_column + exp = 'XFE' + msg = 'Colum index 16385 is out of bounds, max column index is 16384' + level = if_aunit_constants=>fatal + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Wrong exception is thrown' + level = if_aunit_constants=>tolerable + ). + ENDTRY. + ENDMETHOD. "convert_Column2alpha + + + METHOD convert_column2int. +* ========================== + DATA ep_column TYPE zexcel_cell_column. + +* Test 1. Basic test + TRY. + ep_column = zcl_excel_common=>convert_column2int( 'A' ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 1 + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Max column + TRY. + ep_column = zcl_excel_common=>convert_column2int( 'XFD' ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 16384 + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2int( '' ). + + zcl_excel_common=>assert_differs( act = ep_column + exp = '0' + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical ). + CATCH zcx_excel INTO lx_excel. + CLEAR: ls_symsg_act, + ls_symsg_exp. + ls_symsg_exp-msgid = 'ZABAP2XLSX'. + ls_symsg_exp-msgno = '800'. + ls_symsg_act-msgid = lx_excel->syst_at_raise-msgid. + ls_symsg_act-msgno = lx_excel->syst_at_raise-msgno. + zcl_excel_common=>assert_equals( act = ls_symsg_act + exp = ls_symsg_exp + msg = 'Colum name should be a valid string' + level = if_aunit_constants=>fatal ). + ENDTRY. + +* Test 4. Out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2int( 'XFE' ). + + zcl_excel_common=>assert_differs( act = ep_column + exp = 16385 + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Colum XFE is out of range' + level = if_aunit_constants=>fatal ). + ENDTRY. + ENDMETHOD. "convert_Column2int + + + METHOD date_to_excel_string. +* ============================ + DATA ep_value TYPE zexcel_cell_value. + +* Test 1. Basic conversion + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '19000101' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 1 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. +* Check around the "Excel Leap Year" 1900 + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '19000228' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 59 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '19000301' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 61 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + + +* Test 2. Basic conversion + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '99991212' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 2958446 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Initial date + TRY. + DATA: lv_date TYPE d. + ep_value = zcl_excel_common=>date_to_excel_string( lv_date ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Basic conversion + TRY. + DATA exp_value TYPE zexcel_cell_value VALUE 0. + ep_value = zcl_excel_common=>date_to_excel_string( '18991231' ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = exp_value + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Dates prior of 1900 are not available in excel' + level = if_aunit_constants=>critical + ). + ENDTRY. + + ENDMETHOD. "date_To_Excel_String + + + METHOD encrypt_password. +* ======================== + DATA lv_encrypted_pwd TYPE zexcel_aes_password. + + TRY. + lv_encrypted_pwd = zcl_excel_common=>encrypt_password( 'test' ). + + zcl_excel_common=>assert_equals( + act = lv_encrypted_pwd + exp = 'CBEB' + msg = 'Wrong password encryption' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + ENDMETHOD. "encrypt_Password + + + METHOD excel_string_to_date. +* ============================ + DATA ep_value TYPE d. + + +* Test 1. Simple test -> ABAP Manage also date prior of 1900 + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '0' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '18991231' + msg = 'Wrong date conversion' + level = if_aunit_constants=>tolerable + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. +* Check around the "Excel Leap Year" 1900 + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '59' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '19000228' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '61' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '19000301' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '1' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '19000101' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Index 0 is out of bounds + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '2958446' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '99991212' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 4. Exception should be thrown index out of bounds + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '2958447' ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = '99991212' + msg = 'Wrong date conversion' + level = if_aunit_constants=>fatal + ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = '00000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>fatal + ). + + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Wrong exception is thrown' + level = if_aunit_constants=>tolerable + ). + ENDTRY. + ENDMETHOD. "excel_String_To_Date + + + METHOD excel_string_to_time. +* ============================ + DATA ep_value TYPE t. + +* Test 1. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '0' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>tolerable + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '1' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '0.99999' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '235959' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 4. Also string greater than 1 should be managed + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '4.1' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '022400' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 4. string is not a number + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( 'NaN' ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = '000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Unable to interpret time' + msg = 'Time should be a valid string' + level = if_aunit_constants=>fatal + ). + ENDTRY. + ENDMETHOD. "excel_String_To_Time + + + METHOD time_to_excel_string. +* ============================ + DATA ep_value TYPE zexcel_cell_value. + +* Test 1. Basic conversion + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '000001' ). + " A test directly in Excel returns the value 0.0000115740740740741000 + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0.0000115740740741' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Basic conversion + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '235959' ). + " A test directly in Excel returns the value 0.9999884259259260000000 + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0.9999884259259260' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Initial date + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '000000' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Basic conversion + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '022400' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0.1000000000000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + + ENDMETHOD. "time_To_Excel_String + + METHOD split_file. +* ============================ + + DATA: ep_file TYPE text255, + ep_extension TYPE char10, + ep_dotextension TYPE char10. + + +* Test 1. Basic conversion + zcl_excel_common=>split_file( EXPORTING ip_file = 'filename.xml' + IMPORTING ep_file = ep_file + ep_extension = ep_extension + ep_dotextension = ep_dotextension ). + + zcl_excel_common=>assert_equals( + act = ep_file + exp = 'filename' + msg = 'Split filename failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_extension + exp = 'xml' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_dotextension + exp = '.xml' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + +* Test 2. no extension + zcl_excel_common=>split_file( EXPORTING ip_file = 'filename' + IMPORTING ep_file = ep_file + ep_extension = ep_extension + ep_dotextension = ep_dotextension ). + + zcl_excel_common=>assert_equals( + act = ep_file + exp = 'filename' + msg = 'Split filename failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_extension + exp = '' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_dotextension + exp = '' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + + ENDMETHOD. "split_file + + METHOD convert_range2column_a_row. + DATA: lv_range TYPE string. + DATA: lv_column_start TYPE zexcel_cell_column_alpha, + lv_column_end TYPE zexcel_cell_column_alpha, + lv_row_start TYPE zexcel_cell_row, + lv_row_end TYPE zexcel_cell_row, + lv_sheet TYPE string. + +* a) input empty --> nothing to do + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). +* b) sheetname existing - starts with ' example 'Sheet 1'!$B$6:$D$13 + lv_range = `'Sheet 1'!$B$6:$D$13`. + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = 'B' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = 'D' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '6' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '13' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = 'Sheet 1' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). +* c) sheetname existing - does not start with ' example Sheet1!$B$6:$D$13 + lv_range = `Sheet1!B6:$D$13`. + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = 'B' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = 'D' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '6' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '13' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = 'Sheet1' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). +* d) no sheetname - just area example $B$6:$D$13 + lv_range = `$B$6:D13`. + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = 'B' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = 'D' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '6' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '13' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + ENDMETHOD. "convert_range2column_a_row + + + METHOD describe_structure. + DATA: ls_test TYPE scarr. + DATA: lo_structdescr TYPE REF TO cl_abap_structdescr. + DATA: lt_structure TYPE ddfields. + FIELD-SYMBOLS: <line> LIKE LINE OF lt_structure. + + " Test with DDIC Type + lo_structdescr ?= cl_abap_structdescr=>describe_by_data( p_data = ls_test ). + lt_structure = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + READ TABLE lt_structure ASSIGNING <line> INDEX 1. + zcl_excel_common=>assert_equals( + act = <line>-fieldname + exp = 'MANDT' + msg = 'Describe structure failed' + level = if_aunit_constants=>critical ). + + " Test with local defined structure having DDIC and non DDIC elements + TYPES: + BEGIN OF t_test, + carrid TYPE s_carr_id, + carrname TYPE s_carrname, + carrdesc TYPE string, + END OF t_test. + DATA: ls_ttest TYPE t_test. + + lo_structdescr ?= cl_abap_structdescr=>describe_by_data( p_data = ls_ttest ). + lt_structure = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + READ TABLE lt_structure ASSIGNING <line> INDEX 1. + zcl_excel_common=>assert_equals( + act = <line>-fieldname + exp = 'CARRID' + msg = 'Describe structure failed' + level = if_aunit_constants=>critical ). + + ENDMETHOD. "describe_structure + + + METHOD calculate_cell_distance. + DATA: lv_offset_rows TYPE i, + lv_offset_cols TYPE i, + lv_message TYPE string. + + DEFINE macro_calculate_cell_distance. + zcl_excel_common=>calculate_cell_distance( exporting iv_reference_cell = &1 + iv_current_cell = &2 + importing ev_row_difference = lv_offset_rows + ev_col_difference = lv_offset_cols ). +* Check delta columns + concatenate 'Error calculating column difference in test:' + &1 + '->' + &2 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_offset_cols + exp = &3 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). +* Check delta rows + concatenate 'Error calculating row difference in test:' + &1 + '->' + &2 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_offset_rows + exp = &4 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). + END-OF-DEFINITION. + + + macro_calculate_cell_distance: + 'C12' 'C12' 0 0 , " Same cell + 'C12' 'C13' 0 1 , " Shift down 1 place + 'C12' 'C25' 0 13 , " Shift down some places + 'C12' 'C11' 0 -1 , " Shift up 1 place + 'C12' 'C1' 0 -11 , " Shift up some place + 'C12' 'D12' 1 0 , " Shift right 1 place + 'C12' 'AA12' 24 0 , " Shift right some places + 'C12' 'B12' -1 0 , " Shift left 1 place + 'AA12' 'C12' -24 0 , " Shift left some place + 'AA121' 'C12' -24 -109 . " The full package. + + ENDMETHOD. "CALCULATE_CELL_DISTANCE + + METHOD shift_formula. + DATA: lv_resulting_formula TYPE string, + lv_message TYPE string, + lv_counter TYPE num8. + + DEFINE macro_shift_formula. + add 1 to lv_counter. + clear lv_resulting_formula. + try. + lv_resulting_formula = zcl_excel_common=>shift_formula( iv_reference_formula = &1 + iv_shift_cols = &2 + iv_shift_rows = &3 ). + concatenate 'Wrong result in test' + lv_counter + 'shifting formula ' + &1 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_resulting_formula + exp = &4 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). + catch zcx_excel. + concatenate 'Unexpected exception occurred in test' + lv_counter + 'shifting formula ' + &1 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_resulting_formula + exp = &4 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). + endtry. + END-OF-DEFINITION. + +* Test shifts that should result in a valid output + macro_shift_formula: + 'C17' 0 0 'C17', " Very basic check + 'C17' 2 3 'E20', " Check shift right and down + 'C17' -2 -3 'A14', " Check shift left and up + '$C$17' 1 1 '$C$17', " Fixed columns/rows + 'SUM($C17:C$23)+C30' 1 11 'SUM($C28:D$23)+D41', " Operators and Ranges, mixed fixed rows or columns + 'RNGNAME1+C7' -1 -4 'RNGNAME1+B3', " Operators and Rangename + '"Date:"&TEXT(B2)' 1 1 '"Date:"&TEXT(C3)', " String literals and string concatenation + '[TEST6.XLSX]SHEET1!A1' 1 11 '[TEST6.XLSX]SHEET1!B12', " External sheet reference + `X(B13, "KK" ) ` 1 1 `X(C14,"KK")`, " superflous blanks, multi-argument functions, literals in function, unknown functions +* 'SIN((((((B2))))))' 1 1 'SIN((((((C3))))))', " Deep nesting +* 'SIN(SIN(SIN(SIN(E22))))' 0 1 'SIN(SIN(SIN(SIN(E23))))', " Different type of deep nesting + `SIN(SIN(SIN(SIN(E22))))` 0 1 'SIN(SIN(SIN(SIN(E23))))', " same as above - but with string input instead of Char-input + 'HEUTE()' 2 5 'HEUTE()', " Functions w/o arguments, No cellreferences + '"B2"' 2 5 '"B2"', " No cellreferences + '' 2 5 '', " Empty + 'A1+$A1+A$1+$A$1+B2' -1 0 '#REF!+$A1+#REF!+$A$1+A2', " Referencing error , column only , underflow + 'A1+$A1+A$1+$A$1+B2' 0 -1 '#REF!+#REF!+A$1+$A$1+B1', " Referencing error , row only , underflow + 'A1+$A1+A$1+$A$1+B2' -1 -1 '#REF!+#REF!+#REF!+$A$1+A1'. " Referencing error , row and column , underflow + ENDMETHOD. "SHIFT_FORMULA + + + + + +ENDCLASS. "lcl_Excel_Common_Test + + + + + + + + + + + + + + + + ABAP + + + + + + + + + + + + + + + + + + method ASSERT_DIFFERS. + DATA: ls_seoclass TYPE seoclass. + +" Let see >=7.02 + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_ABAP_UNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_differs + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + RECEIVING + assertion_failed = assertion_failed. + ELSE. +" Let see >=7.00 or even lower + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_AUNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_differs + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + RECEIVING + assertion_failed = assertion_failed. + ELSE. +* We do nothing for now not supported + ENDIF. + ENDIF. +endmethod. + + + + + + + + + + + METHOD assert_equals. + DATA: ls_seoclass TYPE seoclass. + + " Let see >=7.02 + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_ABAP_UNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_equals + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + ignore_hash_sequence = ignore_hash_sequence + RECEIVING + assertion_failed = assertion_failed. + ELSE. + " Let see >=7.00 or even lower + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_AUNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_equals + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + ignore_hash_sequence = ignore_hash_sequence + RECEIVING + assertion_failed = assertion_failed. + ELSE. +* We do nothing for now not supported + ENDIF. + ENDIF. +ENDMETHOD. + + + + + + + + METHOD calculate_cell_distance. + + DATA: lv_reference_row TYPE i, + lv_reference_col_alpha TYPE zexcel_cell_column_alpha, + lv_reference_col TYPE i, + lv_current_row TYPE i, + lv_current_col_alpha TYPE zexcel_cell_column_alpha, + lv_current_col TYPE i. + +*--------------------------------------------------------------------* +* Split reference cell into numerical row/column representation +*--------------------------------------------------------------------* + convert_columnrow2column_a_row( EXPORTING + i_columnrow = iv_reference_cell + IMPORTING + e_column = lv_reference_col_alpha + e_row = lv_reference_row ). + lv_reference_col = convert_column2int( lv_reference_col_alpha ). + +*--------------------------------------------------------------------* +* Split current cell into numerical row/column representation +*--------------------------------------------------------------------* + convert_columnrow2column_a_row( EXPORTING + i_columnrow = iv_current_cell + IMPORTING + e_column = lv_current_col_alpha + e_row = lv_current_row ). + lv_current_col = convert_column2int( lv_current_col_alpha ). + +*--------------------------------------------------------------------* +* Calculate row and column difference +* Positive: Current cell below reference cell +* or Current cell right of reference cell +* Negative: Current cell above reference cell +* or Current cell left of reference cell +*--------------------------------------------------------------------* + ev_row_difference = lv_current_row - lv_reference_row. + ev_col_difference = lv_current_col - lv_reference_col. + +ENDMETHOD. + + + + + method CHAR2HEX. + + IF o_conv IS NOT BOUND. + o_conv = cl_abap_conv_out_ce=>create( endian = 'L' + ignore_cerr = abap_true + replacement = '#' ). + ENDIF. + + CALL METHOD o_conv->reset( ). + CALL METHOD o_conv->write( data = i_char ). + r_hex+1 = o_conv->get_buffer( ). " x'65' must be x'0065' + +endmethod. + + + + + + METHOD convert_column2alpha. + + DATA: lv_uccpi TYPE i, + lv_text TYPE sychar02, + lv_module TYPE int4, + lv_column TYPE zexcel_cell_column. + +* Propagate zcx_excel if error occurs " issue #155 - less restrictive typing for ip_column + lv_column = convert_column2int( ip_column ). " issue #155 - less restrictive typing for ip_column + +*--------------------------------------------------------------------* +* Check whether column is in allowed range for EXCEL to handle ( 1-16384 ) +*--------------------------------------------------------------------* + IF lv_column > 16384 + OR lv_column < 1. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Index out of bounds'. + ENDIF. + +*--------------------------------------------------------------------* +* Build alpha representation of column +*--------------------------------------------------------------------* + WHILE lv_column GT 0. + + lv_module = ( lv_column - 1 ) MOD 26. + lv_uccpi = 65 + lv_module. + + lv_column = ( lv_column - lv_module ) / 26. + + lv_text = cl_abap_conv_in_ce=>uccpi( lv_uccpi ). + CONCATENATE lv_text ep_column INTO ep_column. + + ENDWHILE. + +ENDMETHOD. + + + + + + METHOD convert_column2int. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-12-29 +* - ... +* changes: renaming variables to naming conventions +* removing unused variables +* removing commented out code that is inactive for more then half a year +* message made to support multilinguality +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#246 - error converting lower case column names +* - Stefan Schmöcker, 2012-12-29 +* changes: translating the correct variable to upper dase +* adding missing exception if input is a number +* that is out of bounds +* adding missing exception if input contains +* illegal characters like german umlauts +*--------------------------------------------------------------------* + + DATA: lv_column TYPE zexcel_cell_column_alpha, + lv_column_c TYPE char10, + lv_column_s TYPE string, + lv_errormessage TYPE string, " Can't pass '...'(abc) to exception-class + lv_modulo TYPE i. + +*--------------------------------------------------------------------* +* This module tries to identify which column a user wants to access +* Numbers as input are just passed back, anything else will be converted +* using EXCEL nomenclatura A = 1, AA = 27, ..., XFD = 16384 +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* Normalize input ( upper case , no gaps ) +*--------------------------------------------------------------------* + lv_column_c = ip_column. +* TRANSLATE lv_column TO UPPER CASE. " Fix #246 + TRANSLATE lv_column_c TO UPPER CASE. " Fix #246 + CONDENSE lv_column_c NO-GAPS. + IF lv_column_c EQ ''. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + +*--------------------------------------------------------------------* +* If a number gets passed, just convert it to an integer and return +* the converted value +*--------------------------------------------------------------------* + TRY. + IF lv_column_c CO '1234567890 '. " Fix #164 + ep_column = lv_column_c. " Fix #164 +*--------------------------------------------------------------------* +* Maximum column for EXCEL: XFD = 16384 " if anyone has a reference for this information - please add here instead of this comment +*--------------------------------------------------------------------* + IF ep_column > 16384 OR ep_column < 1. + lv_errormessage = 'Index out of bounds'(004). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + EXIT. + ENDIF. + CATCH cx_sy_conversion_no_number. "#EC NO_HANDLER + " Try the character-approach if approach via number has failed + ENDTRY. + +*--------------------------------------------------------------------* +* Raise error if unexpected characters turns up +*--------------------------------------------------------------------* + lv_column_s = lv_column_c. + IF lv_column_s CN sy-abcde. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + +*--------------------------------------------------------------------* +* Interpret input as number to base 26 with A=1, ... Z=26 +* Raise error if unexpected character turns up +*--------------------------------------------------------------------* +* 1st character +*--------------------------------------------------------------------* + lv_column = lv_column_c. + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+0(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + ep_column = lv_modulo. " Leftmost digit + +*--------------------------------------------------------------------* +* 2nd character if present +*--------------------------------------------------------------------* + CHECK lv_column+1(1) IS NOT INITIAL. " No need to continue if string ended + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+1(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + ep_column = 26 * ep_column + lv_modulo. " if second digit is present first digit is for 26^1 + +*--------------------------------------------------------------------* +* 3rd character if present +*--------------------------------------------------------------------* + CHECK lv_column+2(1) IS NOT INITIAL. " No need to continue if string ended + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+2(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + ep_column = 26 * ep_column + lv_modulo. " if third digit is present first digit is for 26^2 and second digit for 26^1 + +*--------------------------------------------------------------------* +* Maximum column for EXCEL: XFD = 16384 " if anyone has a reference for this information - please add here instead of this comment +*--------------------------------------------------------------------* + IF ep_column > 16384 OR ep_column < 1. + lv_errormessage = 'Index out of bounds'(004). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + +ENDMETHOD. + + + + + + method CONVERT_COLUMNROW2COLUMN_A_ROW. +*--------------------------------------------------------------------* + "issue #256 - replacing char processing with regex +*--------------------------------------------------------------------* +* Stefan Schmöcker, 2013-08-11 +* Allow input to be CLIKE instead of STRING +*--------------------------------------------------------------------* + + DATA: pane_cell_row_a TYPE string, + lv_columnrow type string. + + lv_columnrow = i_columnrow. " Get rid of trailing blanks + + FIND REGEX '^(\D+)(\d+)$' IN lv_columnrow SUBMATCHES e_column + pane_cell_row_a. + e_row = pane_cell_row_a. + +endmethod. + + + + + + + + + + method CONVERT_RANGE2COLUMN_A_ROW. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-12-07 +* - ... +* changes: renaming variables to naming conventions +* aligning code +* added exceptionclass +* added errorhandling for invalid range +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#241 - error when sheetname contains "!" +* - sheetname should be returned unescaped +* - Stefan Schmöcker, 2012-12-07 +* changes: changed coding to support sheetnames with "!" +* unescaping sheetname +*--------------------------------------------------------------------* +* issue#155 - lessening restrictions of input parameters +* - Stefan Schmöcker, 2012-12-07 +* changes: i_range changed to clike +* e_sheet changed to clike +*--------------------------------------------------------------------* + + DATA: lv_sheet TYPE string, + lv_range TYPE string, + lv_columnrow_start TYPE string, + lv_columnrow_end TYPE string, + lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + + +*--------------------------------------------------------------------* +* Split input range into sheetname and Area +* 4 cases - a) input empty --> nothing to do +* - b) sheetname existing - starts with ' example 'Sheet 1'!$B$6:$D$13 +* - c) sheetname existing - does not start with ' example Sheet1!$B$6:$D$13 +* - d) no sheetname - just area example $B$6:$D$13 +*--------------------------------------------------------------------* +* Initialize output parameters + CLEAR: e_column_start, + e_column_end, + e_row_start, + e_row_end, + e_sheet. + + IF i_range IS INITIAL. " a) input empty --> nothing to do + EXIT. + + ELSEIF i_range(1) = `'`. " b) sheetname existing - starts with ' + FIND REGEX '\![^\!]*$' IN i_range MATCH OFFSET sy-fdpos. " Find last ! + IF sy-subrc = 0. + lv_sheet = i_range(sy-fdpos). + ADD 1 TO sy-fdpos. + lv_range = i_range. + SHIFT lv_range LEFT BY sy-fdpos PLACES. + ELSE. + lv_errormessage = 'Invalid range'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ELSEIF i_range CS '!'. " c) sheetname existing - does not start with ' + SPLIT i_range AT '!' INTO lv_sheet lv_range. + + ELSE. " d) no sheetname - just area + lv_range = i_range. + ENDIF. + + REPLACE ALL OCCURRENCES OF '$' IN lv_range WITH ''. + SPLIT lv_range AT ':' INTO lv_columnrow_start lv_columnrow_end. + + convert_columnrow2column_a_row( EXPORTING + i_columnrow = lv_columnrow_start + IMPORTING + e_column = e_column_start + e_row = e_row_start ). + convert_columnrow2column_a_row( EXPORTING + i_columnrow = lv_columnrow_end + IMPORTING + e_column = e_column_end + e_row = e_row_end ). + + e_sheet = unescape_string( lv_sheet ). " Return in unescaped form +endmethod. + + + + + method DATE_TO_EXCEL_STRING. + DATA: lv_date_diff TYPE i. + + CHECK ip_value IS NOT INITIAL. + " Needed hack caused by the problem that: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year + " http://support.microsoft.com/kb/214326/en-us + IF ip_value > c_excel_1900_leap_year. + lv_date_diff = ip_value - c_excel_baseline_date + 2. + ELSE. + lv_date_diff = ip_value - c_excel_baseline_date + 1. + ENDIF. + ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_date_diff ). +endmethod. + + + + + method DESCRIBE_STRUCTURE. + DATA: lt_components TYPE abap_component_tab, + lt_comps TYPE abap_component_tab, + lo_struct TYPE REF TO cl_abap_structdescr, + ls_component TYPE abap_componentdescr, + lo_elemdescr TYPE REF TO cl_abap_elemdescr, + ls_dfies TYPE dfies, + l_position TYPE tabfdpos. + + "for DDIC structure get the info directly + IF io_struct->is_ddic_type( ) = abap_true. + rt_dfies = io_struct->get_ddic_field_list( ). + ELSE. + lt_components = io_struct->get_components( ). + + LOOP AT lt_components INTO ls_component. + structure_case( EXPORTING is_component = ls_component + CHANGING xt_components = lt_comps ) . + ENDLOOP. + LOOP AT lt_comps INTO ls_component. + CLEAR ls_dfies. + IF ls_component-type->kind = cl_abap_typedescr=>kind_elem. "E Elementary Type + ADD 1 TO l_position. + lo_elemdescr ?= ls_component-type. + IF lo_elemdescr->is_ddic_type( ) = abap_true. + ls_dfies = lo_elemdescr->get_ddic_field( ). + ls_dfies-fieldname = ls_component-name. + ls_dfies-position = l_position. + ELSE. + ls_dfies-fieldname = ls_component-name. + ls_dfies-position = l_position. + ls_dfies-inttype = lo_elemdescr->type_kind. + ls_dfies-leng = lo_elemdescr->length. + ls_dfies-outputlen = lo_elemdescr->length. + ls_dfies-decimals = lo_elemdescr->decimals. + ls_dfies-fieldtext = ls_component-name. + ls_dfies-reptext = ls_component-name. + ls_dfies-scrtext_s = ls_component-name. + ls_dfies-scrtext_m = ls_component-name. + ls_dfies-scrtext_l = ls_component-name. + ls_dfies-dynpfld = abap_true. + ENDIF. + INSERT ls_dfies INTO TABLE rt_dfies. + ENDIF. + ENDLOOP. + ENDIF. +endmethod. + + + + + + + + METHOD determine_resulting_formula. + + DATA: lv_row_difference TYPE i, + lv_col_difference TYPE i. + +*--------------------------------------------------------------------* +* Calculate distance of reference and current cell +*--------------------------------------------------------------------* + calculate_cell_distance( EXPORTING + iv_reference_cell = iv_reference_cell + iv_current_cell = iv_current_cell + IMPORTING + ev_row_difference = lv_row_difference + ev_col_difference = lv_col_difference ). + +*--------------------------------------------------------------------* +* and shift formula by using the row- and columndistance +*--------------------------------------------------------------------* + ev_resulting_formula = shift_formula( iv_reference_formula = iv_reference_formula + iv_shift_rows = lv_row_difference + iv_shift_cols = lv_col_difference ). + +ENDMETHOD. "determine_resulting_formula + + + + + method ENCRYPT_PASSWORD. + + DATA lv_curr_offset TYPE i. + DATA lv_curr_char TYPE c LENGTH 1. + DATA lv_curr_hex TYPE zexcel_pwd_hash. + DATA lv_pwd_len TYPE zexcel_pwd_hash. + DATA lv_pwd_hash TYPE zexcel_pwd_hash. + + CONSTANTS: + lv_0x7fff TYPE zexcel_pwd_hash VALUE '7FFF', + lv_0x0001 TYPE zexcel_pwd_hash VALUE '0001', + lv_0xce4b TYPE zexcel_pwd_hash VALUE 'CE4B'. + + DATA lv_pwd TYPE zexcel_aes_password. + + lv_pwd = i_pwd(15). + + lv_pwd_len = STRLEN( lv_pwd ). + lv_curr_offset = lv_pwd_len - 1. + + WHILE lv_curr_offset GE 0. + + lv_curr_char = lv_pwd+lv_curr_offset(1). + lv_curr_hex = char2hex( lv_curr_char ). + + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). + + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_curr_hex. + SUBTRACT 1 FROM lv_curr_offset. + ENDWHILE. + + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_0xce4b. + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_pwd_len. + + WRITE lv_pwd_hash TO r_encrypted_pwd. + +endmethod. + + + + + method ESCAPE_STRING. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-12-08 +* - ... +* changes: aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#242 - Support escaping for white-spaces +* - Escaping also necessary when ' encountered in input +* - Stefan Schmöcker, 2012-12-08 +* changes: switched check if escaping is necessary to regular expression +* and moved the "REPLACE" +*--------------------------------------------------------------------* +* issue#155 - lessening restrictions of input parameters +* - Stefan Schmöcker, 2012-12-08 +* changes: ip_value changed to clike +*--------------------------------------------------------------------* + DATA: lv_value TYPE string. + +*--------------------------------------------------------------------* +* There exist various situations when a space will be used to separate +* different parts of a string. When we have a string consisting spaces +* that will cause errors unless we "escape" the string by putting ' at +* the beginning and at the end of the string. +*--------------------------------------------------------------------* + + +*--------------------------------------------------------------------* +* When allowing clike-input parameters we might encounter trailing +* "real" blanks . These are automatically eliminated when moving +* the input parameter to a string. +* Now any remaining spaces ( white-spaces or normal spaces ) should +* trigger the escaping as well as any ' +*--------------------------------------------------------------------* + lv_value = ip_value. + + + FIND REGEX `\s|'` IN lv_value. " \s finds regular and white spaces + IF sy-subrc = 0. + REPLACE ALL OCCURRENCES OF `'` IN lv_value WITH `''`. + CONCATENATE `'` lv_value `'` INTO lv_value . + ENDIF. + + ep_escaped_value = lv_value. + +endmethod. + + + + + + method EXCEL_STRING_TO_DATE. + DATA: lv_date_int TYPE i. + + TRY. + lv_date_int = ip_value. + ep_value = lv_date_int + c_excel_baseline_date - 2. + " Needed hack caused by the problem that: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year + " http://support.microsoft.com/kb/214326/en-us + IF ep_value < c_excel_1900_leap_year. + ep_value = ep_value + 1. + ENDIF. + CATCH cx_sy_conversion_error. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Index out of bounds'. + ENDTRY. +endmethod. + + + + + + method EXCEL_STRING_TO_TIME. + DATA: lv_seconds_in_day TYPE i, + lv_day_fraction TYPE f, + lc_seconds_in_day TYPE i VALUE 86400. + + TRY. + + lv_day_fraction = ip_value. + lv_seconds_in_day = lv_day_fraction * lc_seconds_in_day. + + ep_value = lv_seconds_in_day. + + CATCH cx_sy_conversion_error. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret time'. + ENDTRY. +endmethod. + + + + + + + method FAIL. + DATA: ls_seoclass TYPE seoclass. + + " Let see >=7.02 + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_ABAP_UNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>fail + EXPORTING + msg = msg + level = level + quit = quit + detail = detail. + ELSE. + " Let see >=7.00 or even lower + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_AUNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>fail + EXPORTING + msg = msg + level = level + quit = quit + detail = detail. + ELSE. +* We do nothing for now not supported + ENDIF. + ENDIF. + +endmethod. + + + + + method GET_FIELDCATALOG. + DATA: lr_dref_tab TYPE REF TO data, + lo_salv_table TYPE REF TO cl_salv_table, + lo_salv_columns_table TYPE REF TO cl_salv_columns_table, + lt_salv_t_column_ref TYPE salv_t_column_ref, + ls_salv_t_column_ref LIKE LINE OF lt_salv_t_column_ref, + lo_salv_column_table TYPE REF TO cl_salv_column_table. + + FIELD-SYMBOLS: <tab> TYPE STANDARD TABLE. + FIELD-SYMBOLS: <fcat> LIKE LINE OF ep_fieldcatalog. + +* Get copy of IP_TABLE-structure <-- must be changeable to create salv + CREATE DATA lr_dref_tab LIKE ip_table. + ASSIGN lr_dref_tab->* TO <tab>. +* Create salv --> implicitly create fieldcat + TRY. + cl_salv_table=>factory( IMPORTING + r_salv_table = lo_salv_table + CHANGING + t_table = <tab> ). + lo_salv_columns_table = lo_salv_table->get_columns( ). + lt_salv_t_column_ref = lo_salv_columns_table->get( ). + CATCH cx_root. +* maybe some errorhandling here - just haven't made up my mind yet + ENDTRY. + +* Loop through columns and set relevant fields ( fieldname, texts ) + LOOP AT lt_salv_t_column_ref INTO ls_salv_t_column_ref. + + lo_salv_column_table ?= ls_salv_t_column_ref-r_column. + APPEND INITIAL LINE TO ep_fieldcatalog ASSIGNING <fcat>. + <fcat>-position = sy-tabix. + <fcat>-fieldname = ls_salv_t_column_ref-columnname. + <fcat>-scrtext_s = ls_salv_t_column_ref-r_column->get_short_text( ). + <fcat>-scrtext_m = ls_salv_t_column_ref-r_column->get_medium_text( ). + <fcat>-scrtext_l = ls_salv_t_column_ref-r_column->get_long_text( ). + + <fcat>-dynpfld = 'X'. " What in the world would we exclude here? + IF <fcat>-position = 1. " except for the MANDT-field of most tables ( 1st column that is ) + IF lo_salv_column_table->get_ddic_datatype( ) = 'CLNT'. + CLEAR <fcat>-dynpfld. + ENDIF. + ENDIF. + +* For fields that don't a description ( i.e. defined by "field type i," ) +* just use the fieldname as description - that is better than nothing + IF <fcat>-scrtext_s IS INITIAL + AND <fcat>-scrtext_m IS INITIAL + AND <fcat>-scrtext_l IS INITIAL. + CONCATENATE 'Col:' <fcat>-fieldname INTO <fcat>-scrtext_l SEPARATED BY space. + <fcat>-scrtext_m = <fcat>-scrtext_l. + <fcat>-scrtext_s = <fcat>-scrtext_l. + ENDIF. + + ENDLOOP. + +endmethod. + + + + + method NUMBER_TO_EXCEL_STRING. + DATA: lv_value_c TYPE c LENGTH 100. + + WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN. + REPLACE ALL OCCURRENCES OF ',' IN lv_value_c WITH '.'. + + ep_value = lv_value_c. + CONDENSE ep_value. + + IF ip_value < 0. + CONCATENATE '-' ep_value INTO ep_value. + ELSEIF ip_value EQ 0. + ep_value = '0'. + ENDIF. +endmethod. + + + + + + method RECURSIVE_CLASS_TO_STRUCT. + " # issue 139 +* is working for me - but after looking through this coding I guess +* I'll rewrite this to a version w/o recursion +* This is private an no one using it so far except me, so no need to hurry + DATA: descr TYPE REF TO cl_abap_structdescr, + wa_component LIKE LINE OF descr->components, + attribute_name TYPE fieldname, + flag_class TYPE flag, + o_border TYPE REF TO zcl_excel_style_border. + + FIELD-SYMBOLS: <field> TYPE any, + <fieldx> TYPE any, + <class> TYPE REF TO object, + <attribute> TYPE any. + + + descr ?= cl_abap_structdescr=>describe_by_data( e_target ). + + LOOP AT descr->components INTO wa_component. + +* Assign structure and X-structure + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO <field>. + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_targetx TO <fieldx>. +* At least one field in the structure should be marked - otherwise continue with next field + CLEAR flag_class. +* maybe source is just a structure - try assign component... + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO <attribute>. + IF sy-subrc <> 0. +* not - then it is an attribute of the class - use different assign then + CONCATENATE 'i_source->' wa_component-name INTO attribute_name. + ASSIGN (attribute_name) TO <attribute>. + IF sy-subrc <> 0. + EXIT. + ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps + flag_class = abap_true. + ENDIF. + + CASE wa_component-type_kind. + WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursio +* IF flag_class = abap_true. +** Only borders will be passed as unbound references. But since we want to set a value we have to create an instance +* ENDIF. + zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = <attribute> + CHANGING e_target = <field> + e_targetx = <fieldx> ). + WHEN OTHERS. + <field> = <attribute>. + <fieldx> = abap_true. + + ENDCASE. + ENDLOOP. + +endmethod. + + + + + + method RECURSIVE_STRUCT_TO_CLASS. + " # issue 139 +* is working for me - but after looking through this coding I guess +* I'll rewrite this to a version w/o recursion +* This is private an no one using it so far except me, so no need to hurry + DATA: descr TYPE REF TO cl_abap_structdescr, + wa_component LIKE LINE OF descr->components, + attribute_name TYPE fieldname, + flag_class TYPE flag, + o_border TYPE REF TO zcl_excel_style_border. + + FIELD-SYMBOLS: <field> TYPE any, + <fieldx> TYPE any, + <class> TYPE REF TO object, + <attribute> TYPE any, + <attribute_s> TYPE ANY TABLE. + + + descr ?= cl_abap_structdescr=>describe_by_data( i_source ). + + LOOP AT descr->components INTO wa_component. + +* Assign structure and X-structure + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO <field>. + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_sourcex TO <fieldx>. +* At least one field in the structure should be marked - otherwise continue with next field + CHECK <fieldx> CA abap_true. + CLEAR flag_class. +* maybe target is just a structure - try assign component... + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO <attribute>. + IF sy-subrc <> 0. +* not - then it is an attribute of the class - use different assign then + CONCATENATE 'E_TARGET->' wa_component-name INTO attribute_name. + ASSIGN (attribute_name) TO <attribute>. + IF sy-subrc <> 0.EXIT.ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps + flag_class = abap_true. + ENDIF. + + CASE wa_component-type_kind. + WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursion + IF flag_class = abap_true AND <attribute> IS INITIAL. +* Only borders will be passed as unbound references. But since we want to set a value we have to create an instance + CREATE OBJECT o_border. + <attribute> = o_border. + ENDIF. + zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = <field> + i_sourcex = <fieldx> + CHANGING e_target = <attribute> ). +* WHEN cl_abap_structdescr=>typekind_struct2. " String +* CHECK <fieldx> = abap_true. " Marked for change +* <attribute_s> = <field>. + WHEN OTHERS. + CHECK <fieldx> = abap_true. " Marked for change + <attribute> = <field>. + + ENDCASE. + ENDLOOP. + +endmethod. + + + + + + + + METHOD shift_formula. + + CONSTANTS: lcv_operators TYPE string VALUE '+-/*^%=<>&, !', + lcv_letters TYPE string VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ$', + lcv_digits TYPE string VALUE '0123456789', + lcv_cell_reference_error TYPE string VALUE '#REF!'. + + DATA: lv_tcnt TYPE i, " Counter variable + lv_tlen TYPE i, " Temp variable length + lv_cnt TYPE i, " Counter variable + lv_cnt2 TYPE i, " Counter variable + lv_offset1 TYPE i, " Character offset + lv_numchars TYPE i, " Number of characters counter + lv_tchar(1) TYPE c, " Temp character + lv_tchar2(1) TYPE c, " Temp character + lv_cur_form(132) TYPE c, " Formula for current cell + lv_ref_cell_addr TYPE string, " Reference cell address + lv_tcol1 TYPE string, " Temp column letter + lv_tcol2 TYPE string, " Temp column letter + lv_tcoln TYPE i, " Temp column number + lv_trow1 TYPE string, " Temp row number + lv_trow2 TYPE string, " Temp row number + lv_flen TYPE i, " Length of reference formula + lv_tlen2 TYPE i, " Temp variable length + lv_substr1 TYPE string, " Substring variable + lv_abscol TYPE string, " Absolute column symbol + lv_absrow TYPE string, " Absolute row symbol + + lv_errormessage TYPE string. + + FIELD-SYMBOLS: <find_my_include> TYPE ANY. + +*--------------------------------------------------------------------* +* When copying a cell in EXCEL to another cell any inherent formulas +* are copied as well. Cell-references in the formula are being adjusted +* by the distance of the new cell to the original one +*--------------------------------------------------------------------* +* §1 Parse reference formula character by character +* §2 Identify Cell-references +* §3 Shift cell-reference +* §4 Build resulting formula +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* No distance --> Reference = resulting cell/formula +*--------------------------------------------------------------------* + IF iv_shift_cols = 0 + AND iv_shift_rows = 0. + ev_resulting_formula = iv_reference_formula. + EXIT. " done + ENDIF. + + + lv_flen = STRLEN( iv_reference_formula ). + lv_numchars = 1. + +*--------------------------------------------------------------------* +* §1 Parse reference formula character by character +*--------------------------------------------------------------------* + DO lv_flen TIMES. + + CLEAR: lv_tchar, + lv_substr1, + lv_ref_cell_addr. + lv_cnt2 = lv_cnt + 1. + IF lv_cnt2 > lv_flen. + EXIT. " Done + ENDIF. + +*--------------------------------------------------------------------* +* Here we have the current character in the formula +*--------------------------------------------------------------------* + lv_tchar = iv_reference_formula+lv_cnt(1). + +*--------------------------------------------------------------------* +* Operators or opening parenthesis will separate possible cellreferences +*--------------------------------------------------------------------* + IF ( lv_tchar CA lcv_operators + OR lv_tchar CA '(' ) + AND lv_cnt2 = 1. + lv_substr1 = iv_reference_formula+lv_offset1(1). + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. + +*--------------------------------------------------------------------* +* Quoted literal text holds no cell reference --> advance to end of text +*--------------------------------------------------------------------* + IF lv_tchar EQ '"'. + lv_cnt = lv_cnt + 1. + lv_numchars = lv_numchars + 1. + lv_tchar = iv_reference_formula+lv_cnt(1). + WHILE lv_tchar NE '"'. + + lv_cnt = lv_cnt + 1. + lv_numchars = lv_numchars + 1. + lv_tchar = iv_reference_formula+lv_cnt(1). + + ENDWHILE. + lv_cnt2 = lv_cnt + 1. + lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + IF lv_cnt = lv_flen. + EXIT. + ENDIF. + lv_offset1 = lv_cnt. + lv_numchars = 1. + lv_tchar = iv_reference_formula+lv_cnt(1). + lv_cnt2 = lv_cnt + 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. + + +*--------------------------------------------------------------------* +* Operators or parenthesis or last character in formula will separate possible cellreferences +*--------------------------------------------------------------------* + IF lv_tchar CA lcv_operators + OR lv_tchar CA '():' + OR lv_cnt2 = lv_flen. + IF lv_cnt > 0. + lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). +*--------------------------------------------------------------------* +* Check for text concatenation and functions +*--------------------------------------------------------------------* + IF ( lv_tchar CA lcv_operators AND lv_tchar EQ lv_substr1 ) OR lv_tchar EQ '('. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. + + lv_tlen = lv_cnt2 - lv_offset1. +*--------------------------------------------------------------------* +* Exclude mathematical operators and closing parentheses +*--------------------------------------------------------------------* + IF lv_tchar CA lcv_operators + OR lv_tchar CA ':)'. + IF lv_cnt2 = lv_flen + AND lv_numchars = 1. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ELSE. + lv_tlen = lv_tlen - 1. + ENDIF. + ENDIF. +*--------------------------------------------------------------------* +* Capture reference cell address +*--------------------------------------------------------------------* + TRY. + MOVE: iv_reference_formula+lv_offset1(lv_tlen) TO lv_ref_cell_addr. "Ref cell address + CATCH cx_root. + lv_errormessage = 'Internal error in Class ZCL_EXCEL_COMMON Method SHIFT_FORMULA Spot 1 '. " Change to messageclass if possible + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDTRY. + +*--------------------------------------------------------------------* +* Split cell address into characters and numbers +*--------------------------------------------------------------------* + CLEAR: lv_tlen, + lv_tcnt, + lv_tcol1, + lv_trow1. + lv_tlen = STRLEN( lv_ref_cell_addr ). + IF lv_tlen <> 0. + CLEAR: lv_tcnt. + DO lv_tlen TIMES. + CLEAR: lv_tchar2. + lv_tchar2 = lv_ref_cell_addr+lv_tcnt(1). + IF lv_tchar2 CA lcv_letters. + CONCATENATE lv_tcol1 lv_tchar2 INTO lv_tcol1. + ELSEIF lv_tchar2 CA lcv_digits. + CONCATENATE lv_trow1 lv_tchar2 INTO lv_trow1. + ENDIF. + lv_tcnt = lv_tcnt + 1. + ENDDO. + ENDIF. +*--------------------------------------------------------------------* +* Check for invalid cell address +*--------------------------------------------------------------------* + IF lv_tcol1 IS INITIAL OR lv_trow1 IS INITIAL. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. +*--------------------------------------------------------------------* +* Check for range names +*--------------------------------------------------------------------* + CLEAR: lv_tlen. + lv_tlen = STRLEN( lv_tcol1 ). + IF lv_tlen GT 3. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. +*--------------------------------------------------------------------* +* Check for valid row +*--------------------------------------------------------------------* + IF lv_trow1 GT 1048576. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. +*--------------------------------------------------------------------* +* Check for absolute column or row reference +*--------------------------------------------------------------------* + CLEAR: lv_tcol2, + lv_trow2, + lv_abscol, + lv_absrow. + lv_tlen2 = STRLEN( lv_tcol1 ) - 1. + IF lv_tcol1 IS NOT INITIAL. + lv_abscol = lv_tcol1(1). + ENDIF. + IF lv_tlen2 GE 0. + lv_absrow = lv_tcol1+lv_tlen2(1). + ENDIF. + IF lv_abscol EQ '$' AND lv_absrow EQ '$'. + lv_tlen2 = lv_tlen2 - 1. + IF lv_tlen2 > 0. + lv_tcol1 = lv_tcol1+1(lv_tlen2). + ENDIF. + lv_tlen2 = lv_tlen2 + 1. + ELSEIF lv_abscol EQ '$'. + lv_tcol1 = lv_tcol1+1(lv_tlen2). + ELSEIF lv_absrow EQ '$'. + lv_tcol1 = lv_tcol1(lv_tlen2). + ENDIF. +*--------------------------------------------------------------------* +* Check for valid column +*--------------------------------------------------------------------* + TRY. + lv_tcoln = zcl_excel_common=>convert_column2int( lv_tcol1 ) + iv_shift_cols. + CATCH zcx_excel. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDTRY. +*--------------------------------------------------------------------* +* Check whether there is a referencing problem +*--------------------------------------------------------------------* + lv_trow2 = lv_trow1 + iv_shift_rows. + IF ( lv_tcoln < 1 AND lv_abscol <> '$' ) " Maybe we should add here max-column and max row-tests as well. + OR ( lv_trow2 < 1 AND lv_absrow <> '$' ). " Check how EXCEL behaves in this case +*--------------------------------------------------------------------* +* Referencing problem encountered --> set error +*--------------------------------------------------------------------* + CONCATENATE lv_cur_form lcv_cell_reference_error INTO lv_cur_form. + ELSE. +*--------------------------------------------------------------------* +* No referencing problems --> adjust row and column +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* Adjust column +*--------------------------------------------------------------------* + IF lv_abscol EQ '$'. + CONCATENATE lv_cur_form lv_abscol lv_tcol1 INTO lv_cur_form. + ELSEIF iv_shift_cols EQ 0. + CONCATENATE lv_cur_form lv_tcol1 INTO lv_cur_form. + ELSE. + TRY. + lv_tcol2 = zcl_excel_common=>convert_column2alpha( lv_tcoln ). + CONCATENATE lv_cur_form lv_tcol2 INTO lv_cur_form. + CATCH zcx_excel. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDTRY. + ENDIF. +*--------------------------------------------------------------------* +* Adjust row +*--------------------------------------------------------------------* + IF lv_absrow EQ '$'. + CONCATENATE lv_cur_form lv_absrow lv_trow1 INTO lv_cur_form. + ELSEIF iv_shift_rows = 0. + CONCATENATE lv_cur_form lv_trow1 INTO lv_cur_form. +* elseif lv_trow2 < 1. +* CONCATENATE lv_cur_form lc_cell_reference_error INTO lv_cur_form. + ELSE. + CONCATENATE lv_cur_form lv_trow2 INTO lv_cur_form. + ENDIF. + ENDIF. + + lv_numchars = 0. + IF lv_tchar CA lcv_operators + OR lv_tchar CA ':)'. + CONCATENATE lv_cur_form lv_tchar INTO lv_cur_form. + ENDIF. + lv_offset1 = lv_cnt2. + ENDIF. + ENDIF. + lv_numchars = lv_numchars + 1. + lv_cnt = lv_cnt + 1. + lv_cnt2 = lv_cnt + 1. + + ENDDO. + + + +*--------------------------------------------------------------------* +* Return resulting formula +*--------------------------------------------------------------------* + IF lv_cur_form IS NOT INITIAL. + MOVE lv_cur_form TO ev_resulting_formula. + ENDIF. + +ENDMETHOD. + + + + + method SHL01. + + DATA: + lv_bit TYPE i, + lv_curr_pos TYPE i VALUE 2, + lv_prev_pos TYPE i VALUE 1. + + DO 15 TIMES. + GET BIT lv_curr_pos OF i_pwd_hash INTO lv_bit. + SET BIT lv_prev_pos OF r_pwd_hash TO lv_bit. + ADD 1 TO lv_curr_pos. + ADD 1 TO lv_prev_pos. + ENDDO. + SET BIT 16 OF r_pwd_hash TO 0. + +endmethod. + + + + + method SHR14. + + DATA: + lv_bit TYPE i, + lv_curr_pos TYPE i, + lv_next_pos TYPE i. + + r_pwd_hash = i_pwd_hash. + + DO 14 TIMES. + lv_curr_pos = 15. + lv_next_pos = 16. + + DO 15 TIMES. + GET BIT lv_curr_pos OF r_pwd_hash INTO lv_bit. + SET BIT lv_next_pos OF r_pwd_hash TO lv_bit. + SUBTRACT 1 FROM lv_curr_pos. + SUBTRACT 1 FROM lv_next_pos. + ENDDO. + SET BIT 1 OF r_pwd_hash TO 0. + ENDDO. + +endmethod. + + + + + + + method SPLIT_FILE. + + DATA: lt_hlp TYPE TABLE OF text255, + ls_hlp TYPE text255. + + DATA: lf_ext(10) TYPE c, + lf_dot_ext(10) TYPE c. + DATA: lf_str TYPE text255, + lf_anz TYPE i, + lf_len TYPE i. +** --------------------------------------------------------------------- + + CLEAR: lt_hlp, + ep_file, + ep_extension, + ep_dotextension. + +** Split the whole file at '.' + SPLIT ip_file AT '.' INTO TABLE lt_hlp. + +** get the extenstion from the last line of table + DESCRIBE TABLE lt_hlp LINES lf_anz. + IF lf_anz <= 1. + ep_file = ip_file. + EXIT. + ENDIF. + + READ TABLE lt_hlp INTO ls_hlp INDEX lf_anz. + ep_extension = ls_hlp. + lf_ext = ls_hlp. + IF NOT lf_ext IS INITIAL. + CONCATENATE '.' lf_ext INTO lf_dot_ext. + ENDIF. + ep_dotextension = lf_dot_ext. + +** get only the filename + lf_len = strlen( ip_file ) - strlen( lf_dot_ext ). + IF lf_len > 0. + ep_file = ip_file(lf_len). + ENDIF. + +endmethod. + + + + + method STRUCTURE_CASE. + DATA: lt_comp_str TYPE abap_component_tab. + + CASE is_component-type->kind. + WHEN cl_abap_typedescr=>kind_elem. "E Elementary Type + INSERT is_component INTO TABLE xt_components. + WHEN cl_abap_typedescr=>kind_table. "T Table + INSERT is_component INTO TABLE xt_components. + WHEN cl_abap_typedescr=>kind_struct. "S Structure + lt_comp_str = structure_recursive( is_component = is_component ). + INSERT LINES OF lt_comp_str INTO TABLE xt_components. + WHEN OTHERS. "cl_abap_typedescr=>kind_ref or cl_abap_typedescr=>kind_class or cl_abap_typedescr=>kind_intf. +* We skip it. for now. + ENDCASE. +endmethod. + + + + + method STRUCTURE_RECURSIVE. + DATA: lo_struct TYPE REF TO cl_abap_structdescr, + lt_components TYPE abap_component_tab, + ls_components TYPE abap_componentdescr. + + REFRESH rt_components. + + lo_struct ?= is_component-type. + lt_components = lo_struct->get_components( ). + + LOOP AT lt_components INTO ls_components. + structure_case( EXPORTING is_component = ls_components + CHANGING xt_components = rt_components ) . + ENDLOOP. + +endmethod. + + + + + method TIME_TO_EXCEL_STRING. + DATA: lv_seconds_in_day TYPE i, + lv_day_fraction TYPE f, + lc_time_baseline TYPE t VALUE '000000', + lc_seconds_in_day TYPE i VALUE 86400. + + lv_seconds_in_day = ip_value - lc_time_baseline. + lv_day_fraction = lv_seconds_in_day / lc_seconds_in_day. + ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_day_fraction ). +endmethod. + + + + + + method UNESCAPE_STRING. + + CONSTANTS lcv_regex TYPE string VALUE `^'[^']` & `|` & " Beginning single ' OR + `[^']'$` & `|` & " Trailing single ' OR + `[^']'[^']`. " Single ' somewhere in between + + + DATA: lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + +*--------------------------------------------------------------------* +* This method is used to extract the "real" string from an escaped string. +* An escaped string can be identified by a beginning ' which must be +* accompanied by a trailing ' +* All '' in between beginning and trailing ' are treated as single ' +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* When allowing clike-input parameters we might encounter trailing +* "real" blanks . These are automatically eliminated when moving +* the input parameter to a string. +*--------------------------------------------------------------------* + ev_unescaped_string = iv_escaped. " Pass through if not escaped + + CHECK ev_unescaped_string IS NOT INITIAL. " Nothing to do if empty + CHECK ev_unescaped_string(1) = `'`. " Nothing to do if not escaped + +*--------------------------------------------------------------------* +* Remove leading and trailing ' +*--------------------------------------------------------------------* + REPLACE REGEX `^'(.*)'$` IN ev_unescaped_string WITH '$1'. + IF sy-subrc <> 0. + lv_errormessage = 'Input not properly escaped - &'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* Any remaining single ' should not be here +*--------------------------------------------------------------------* + FIND REGEX lcv_regex IN ev_unescaped_string. + IF sy-subrc = 0. + lv_errormessage = 'Input not properly escaped - &'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* Replace '' with ' +*--------------------------------------------------------------------* + REPLACE ALL OCCURRENCES OF `''` IN ev_unescaped_string WITH `'`. + + +endmethod. + + + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + +TYPES: BEGIN OF ts_alv_types, + seoclass TYPE seoclsname, + clsname TYPE seoclsname, + END OF ts_alv_types, + tt_alv_types TYPE HASHED TABLE OF ts_alv_types WITH UNIQUE KEY seoclass. + +TYPES: BEGIN OF ts_sort_values, + fieldname TYPE fieldname, + row_int TYPE zexcel_cell_row, + value TYPE REF TO data, + new TYPE flag, + sort_level TYPE int4, + is_collapsed type flag, + END OF ts_sort_values, + + tt_sort_values TYPE HASHED TABLE OF ts_sort_values WITH UNIQUE KEY fieldname. +TYPES: BEGIN OF ts_subtotal_rows, + row_int TYPE zexcel_cell_row, + row_int_start TYPE zexcel_cell_row, + columnname TYPE fieldname, + END OF ts_subtotal_rows, + + tt_subtotal_rows TYPE HASHED TABLE OF ts_subtotal_rows WITH UNIQUE KEY row_int. + +TYPES: BEGIN OF ts_styles, + type TYPE char1, + alignment TYPE zexcel_alignment, + inttype TYPE inttype, + decimals TYPE int1, + style TYPE REF TO zcl_excel_style, + guid TYPE zexcel_cell_style, + END OF ts_styles, + + tt_styles TYPE HASHED TABLE OF ts_styles WITH UNIQUE KEY type alignment inttype decimals. + +TYPES: BEGIN OF ts_color_styles, + guid_old TYPE zexcel_cell_style, + fontcolor TYPE zexcel_style_color_argb, + fillcolor TYPE zexcel_style_color_argb, + style_new TYPE REF TO zcl_excel_style, + END OF ts_color_styles, + + tt_color_styles TYPE HASHED TABLE OF ts_color_styles WITH UNIQUE KEY guid_old fontcolor fillcolor. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + ABAP + SLIS + SOI + + + + + + + + + + + + + + + + + + + + + + + + + + + + method ASK_OPTION. + DATA: ls_sval TYPE sval, + lt_sval TYPE STANDARD TABLE OF sval, + l_returncode TYPE string, + lt_fields TYPE ddfields, + ls_fields TYPE dfies. + + FIELD-SYMBOLS: <fs> TYPE ANY. + + rs_option = ws_option. + + CALL FUNCTION 'DDIF_FIELDINFO_GET' + EXPORTING + tabname = 'ZEXCEL_S_CONVERTER_OPTION' +* FIELDNAME = ' ' +* LANGU = sy-langu +* LFIELDNAME = ' ' +* ALL_TYPES = ' ' +* GROUP_NAMES = ' ' +* UCLEN = +* IMPORTING +* X030L_WA = +* DDOBJTYPE = +* DFIES_WA = +* LINES_DESCR = + TABLES + dfies_tab = lt_fields +* FIXED_VALUES = + EXCEPTIONS + not_found = 1 + internal_error = 2 + OTHERS = 3 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + LOOP AT lt_fields INTO ls_fields. + ASSIGN COMPONENT ls_fields-fieldname OF STRUCTURE ws_option TO <fs>. + IF sy-subrc = 0. + CLEAR ls_sval. + ls_sval-tabname = ls_fields-tabname. + ls_sval-fieldname = ls_fields-fieldname. + ls_sval-value = <fs>. + ls_sval-field_attr = space. + ls_sval-field_obl = space. + ls_sval-comp_code = space. + ls_sval-fieldtext = ls_fields-scrtext_m. + ls_sval-comp_tab = space. + ls_sval-comp_field = space. + ls_sval-novaluehlp = space. + INSERT ls_sval INTO TABLE lt_sval. + ENDIF. + ENDLOOP. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING +* NO_VALUE_CHECK = space + popup_title = 'Excel creation options'(008) +* START_COLUMN = '5' +* START_ROW = '5' + IMPORTING + returncode = l_returncode + TABLES + fields = lt_sval + EXCEPTIONS + error_in_fields = 1 + OTHERS = 2 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ELSE. + IF l_returncode = 'A'. + RAISE EXCEPTION TYPE zcx_excel. + ELSE. + LOOP AT lt_sval INTO ls_sval. + ASSIGN COMPONENT ls_sval-fieldname OF STRUCTURE ws_option TO <fs>. + IF sy-subrc = 0. + <fs> = ls_sval-value. + ENDIF. + ENDLOOP. + set_option( is_option = ws_option ) . + rs_option = ws_option. + ENDIF. + ENDIF. + endmethod. + + + + + method BIND_CELLS. + +* Do we need subtotals with grouping + READ TABLE wt_fieldcatalog TRANSPORTING NO FIELDS WITH KEY is_subtotalled = abap_true. + IF sy-subrc = 0 . + r_freeze_col = loop_subtotal( i_row_int = w_row_int + i_col_int = w_col_int ) . + ELSE. + r_freeze_col = loop_normal( i_row_int = w_row_int + i_col_int = w_col_int ) . + ENDIF. + + endmethod. + + + + + + method BIND_TABLE. + data: lt_field_catalog type zexcel_t_fieldcatalog, + ls_field_catalog type zexcel_s_fieldcatalog, + ls_fcat type zexcel_s_converter_fcat, + lo_col_dim type ref to zcl_excel_worksheet_columndime, + lo_row_dim type ref to zcl_excel_worksheet_rowdimensi, + l_col_int type zexcel_cell_column, + l_col_alpha type zexcel_cell_column_alpha, + ls_settings type zexcel_s_table_settings, + l_line type i. + + field-symbols: <fs_tab> type any table. + + assign wo_data->* to <fs_tab> . + + ls_settings-table_style = i_style_table. + ls_settings-top_left_column = zcl_excel_common=>convert_column2alpha( ip_column = w_col_int ). + ls_settings-top_left_row = w_row_int. + ls_settings-show_row_stripes = ws_layout-is_stripped. + + describe table wt_fieldcatalog lines l_line. + l_line = l_line + 1 + w_col_int. + ls_settings-bottom_right_column = zcl_excel_common=>convert_column2alpha( ip_column = l_line ). + + describe table <fs_tab> lines l_line. + ls_settings-bottom_right_row = l_line + 1 + w_row_int. + sort wt_fieldcatalog by position. + loop at wt_fieldcatalog into ls_fcat. + move-corresponding ls_fcat to ls_field_catalog. + ls_field_catalog-dynpfld = abap_true. + insert ls_field_catalog into table lt_field_catalog. + endloop. + + wo_worksheet->bind_table( + exporting + ip_table = <fs_tab> + it_field_catalog = lt_field_catalog + is_table_settings = ls_settings + importing + es_table_settings = ls_settings + ). + loop at wt_fieldcatalog into ls_fcat. + l_col_int = w_col_int + ls_fcat-position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). +* Freeze panes + if ls_fcat-fix_column = abap_true. + add 1 to r_freeze_col. + endif. +* Now let's check for optimized + if ls_fcat-is_optimized = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_auto_size( ip_auto_size = abap_true ) . + endif. +* Now let's check for visible + if ls_fcat-is_hidden = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_visible( ip_visible = abap_false ) . + endif. + endloop. + + endmethod. + + + method CLASS_CONSTRUCTOR. + DATA: ls_objects TYPE ts_alv_types. + DATA: ls_option TYPE zexcel_s_converter_option, + l_uname TYPE sy-uname. + + GET PARAMETER ID 'ZUS' FIELD l_uname. + IF l_uname IS INITIAL OR l_uname = space. + l_uname = sy-uname. + ENDIF. + +* Object CL_GUI_ALV_GRID + ls_objects-seoclass = 'CL_GUI_ALV_GRID'. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_ALV_GRID'. + INSERT ls_objects INTO TABLE wt_objects. + +* Object CL_SALV_TABLE + ls_objects-seoclass = 'CL_SALV_TABLE'. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_SALV_TABLE'. + INSERT ls_objects INTO TABLE wt_objects. + +* Object CL_SALV_RESULT + ls_objects-seoclass = 'CL_SALV_EX_RESULT_DATA_TABLE '. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_RESULT_EX'. + INSERT ls_objects INTO TABLE wt_objects. +* Object CL_SALV_WD_RESULT + ls_objects-seoclass = 'CL_SALV_WD_RESULT_DATA_TABLE '. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_RESULT_WD'. + INSERT ls_objects INTO TABLE wt_objects. + + CONCATENATE 'EXCEL_' sy-uname INTO ws_indx-srtfd. + + IMPORT p1 = ls_option FROM DATABASE indx(xl) TO ws_indx ID ws_indx-srtfd. + + IF sy-subrc = 0. + ws_option = ls_option. + ELSE. + init_option( ) . + ENDIF. + + endmethod. + + + method CLEAN_FIELDCATALOG. + DATA: l_position TYPE int1. + + FIELD-SYMBOLS: <fs_sfcat> TYPE zexcel_s_converter_fcat. + + SORT wt_fieldcatalog BY position col_id. + + CLEAR l_position. + LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat>. + ADD 1 TO l_position. + <fs_sfcat>-position = l_position. +* Default stype with alignment and format + <fs_sfcat>-style_hdr = get_style( i_type = c_type_hdr + i_alignment = <fs_sfcat>-alignment ). + IF ws_layout-is_stripped = abap_true. + <fs_sfcat>-style_stripped = get_style( i_type = c_type_str + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + ENDIF. + <fs_sfcat>-style_normal = get_style( i_type = c_type_nor + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + <fs_sfcat>-style_subtotal = get_style( i_type = c_type_sub + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + <fs_sfcat>-style_total = get_style( i_type = c_type_tot + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + ENDLOOP. + + endmethod. + + + + + + + + + + + + + method CONVERT. + + IF is_option IS SUPPLIED. + ws_option = is_option. + ENDIF. + + TRY. + execute_converter( EXPORTING io_object = io_alv + it_table = it_table ) . + ENDTRY. + + IF io_worksheet IS SUPPLIED AND io_worksheet IS BOUND. + wo_worksheet = io_worksheet. + ENDIF. + IF co_excel IS SUPPLIED. + IF co_excel IS NOT BOUND. + CREATE OBJECT co_excel. + co_excel->zif_excel_book_properties~creator = sy-uname. + ENDIF. + wo_excel = co_excel. + ENDIF. + +* Move table to data object and clean it up + IF wt_fieldcatalog IS NOT INITIAL. + create_table( ). + ELSE. + wo_data = wo_table . + ENDIF. + + IF wo_excel IS NOT BOUND. + CREATE OBJECT wo_excel. + wo_excel->zif_excel_book_properties~creator = sy-uname. + ENDIF. + IF wo_worksheet IS NOT BOUND. + " Get active sheet + wo_worksheet = wo_excel->get_active_worksheet( ). + wo_worksheet->set_title( ip_title = 'Sheet1'(001) ). + ENDIF. + + IF i_row_int <= 0. + w_row_int = 1. + ELSE. + w_row_int = i_row_int. + ENDIF. + IF i_column_int <= 0. + w_col_int = 1. + ELSE. + w_col_int = i_column_int. + ENDIF. + + create_worksheet( i_table = i_table + i_style_table = i_style_table ) . + + endmethod. + + + + + + method CREATE_COLOR_STYLE. + DATA: ls_styles TYPE ts_styles. + DATA: lo_style TYPE REF TO zcl_excel_style. + + READ TABLE wt_styles INTO ls_styles WITH KEY guid = i_style. + IF sy-subrc = 0. + lo_style = wo_excel->add_new_style( ). +* lo_style->borders = ls_styles-style->borders. +* lo_style->protection = ls_styles-style->protection. + lo_style->font->bold = ls_styles-style->font->bold. + lo_style->alignment->horizontal = ls_styles-style->alignment->horizontal. + lo_style->number_format->format_code = ls_styles-style->number_format->format_code. + + lo_style->font->color-rgb = is_colors-fontcolor. + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = is_colors-fillcolor. + + ro_style = lo_style. + ENDIF. + endmethod. + + + + + + + + method CREATE_FORMULAR_SUBTOTAL. + data: l_row_alpha_start type string, + l_row_alpha_end type string, + l_func_num type string. + + l_row_alpha_start = i_row_int_start. + l_row_alpha_end = i_row_int_end. + + l_func_num = get_function_number( i_totals_function = i_totals_function ). + concatenate 'SUBTOTAL(' l_func_num ',' i_column l_row_alpha_start ':' i_column l_row_alpha_end ')' into r_formula. + endmethod. + + + + + + + method CREATE_FORMULAR_TOTAL. + data: l_row_alpha type string, + l_row_e_alpha type string. + + l_row_alpha = w_row_int + 1. + l_row_e_alpha = i_row_int. + + concatenate i_totals_function '(' i_column l_row_alpha ':' i_column l_row_e_alpha ')' into r_formula. + endmethod. + + + + method CREATE_PATH. + DATA: l_sep TYPE c , + l_path TYPE string, + l_return TYPE i . + + CLEAR r_path. + + " Save the file + cl_gui_frontend_services=>get_sapgui_workdir( + CHANGING + sapworkdir = l_path + EXCEPTIONS + get_sapworkdir_failed = 1 + cntl_error = 2 + error_no_gui = 3 + not_supported_by_gui = 4 + ). + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + CONCATENATE 'Excel_' w_fcount '.xlsx' INTO r_path. + ELSE. + DO. + ADD 1 TO w_fcount. +*-obtain file separator character--------------------------------------- + CALL METHOD cl_gui_frontend_services=>get_file_separator + CHANGING + file_separator = l_sep + EXCEPTIONS + cntl_error = 1 + error_no_gui = 2 + not_supported_by_gui = 3 + OTHERS = 4. + + IF sy-subrc <> 0. + l_sep = ''. + ENDIF. + + CONCATENATE l_path l_sep 'Excel_' w_fcount '.xlsx' INTO r_path. + + IF cl_gui_frontend_services=>file_exist( file = r_path ) = abap_true. + cl_gui_frontend_services=>file_delete( EXPORTING filename = r_path + CHANGING rc = l_return + EXCEPTIONS OTHERS = 1 ). + IF sy-subrc = 0 . + RETURN. + ENDIF. + ELSE. + RETURN. + ENDIF. + ENDDO. + ENDIF. + + endmethod. + + + + + method CREATE_STYLE_HDR. + data: lo_style type ref to zcl_excel_style. + + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. + lo_style->font->color-rgb = zcl_excel_style_color=>c_white. + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FF4F81BD'. + if i_alignment is supplied and i_alignment is not initial. + lo_style->alignment->horizontal = i_alignment. + endif. + ro_style = lo_style . + endmethod. + + + + + + + method CREATE_STYLE_NORMAL. + DATA: lo_style TYPE REF TO zcl_excel_style, + l_format TYPE zexcel_number_format. + + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + ENDIF. + IF l_format IS NOT INITIAL OR + ( i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL ) . + + lo_style = wo_excel->add_new_style( ). + + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. + ENDIF. + + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. + ENDIF. + + ro_style = lo_style . + + ENDIF. + endmethod. + + + + + + + method CREATE_STYLE_STRIPPED. + data: lo_style type ref to zcl_excel_style. + data: l_format type zexcel_number_format. + + lo_style = wo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FFDBE5F1'. + if i_alignment is supplied and i_alignment is not initial. + lo_style->alignment->horizontal = i_alignment. + endif. + if i_inttype is supplied and i_inttype is not initial. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + if l_format is not initial. + lo_style->number_format->format_code = l_format. + endif. + endif. + ro_style = lo_style. + + endmethod. + + + + + + + method CREATE_STYLE_SUBTOTAL. + data: lo_style type ref to zcl_excel_style. + data: l_format type zexcel_number_format. + + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. + + if i_alignment is supplied and i_alignment is not initial. + lo_style->alignment->horizontal = i_alignment. + endif. + if i_inttype is supplied and i_inttype is not initial. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + if l_format is not initial. + lo_style->number_format->format_code = l_format. + endif. + endif. + + ro_style = lo_style . + + endmethod. + + + + + + + method CREATE_STYLE_TOTAL. + DATA: lo_style TYPE REF TO zcl_excel_style. + DATA: l_format TYPE zexcel_number_format. + + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. + + CREATE OBJECT lo_style->borders->top. + lo_style->borders->top->border_style = zcl_excel_style_border=>c_border_thin. + lo_style->borders->top->border_color-rgb = zcl_excel_style_color=>c_black. + + CREATE OBJECT lo_style->borders->right. + lo_style->borders->right->border_style = zcl_excel_style_border=>c_border_none. + lo_style->borders->right->border_color-rgb = zcl_excel_style_color=>c_black. + + CREATE OBJECT lo_style->borders->down. + lo_style->borders->down->border_style = zcl_excel_style_border=>c_border_double. + lo_style->borders->down->border_color-rgb = zcl_excel_style_color=>c_black. + + CREATE OBJECT lo_style->borders->left. + lo_style->borders->left->border_style = zcl_excel_style_border=>c_border_none. + lo_style->borders->left->border_color-rgb = zcl_excel_style_color=>c_black. + + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. + ENDIF. + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. + ENDIF. + ENDIF. + + ro_style = lo_style . + + endmethod. + + + method CREATE_TABLE. + TYPES: BEGIN OF ts_output, + fieldname TYPE fieldname, + function TYPE funcname, + END OF ts_output. + + DATA: lo_data TYPE REF TO data. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + lt_components_tab TYPE cl_abap_structdescr=>component_table, + ls_components TYPE abap_componentdescr, + lo_table TYPE REF TO cl_abap_tabledescr, + lo_struc TYPE REF TO cl_abap_structdescr, + lt_fieldcatalog TYPE zexcel_t_converter_fcat. + + FIELD-SYMBOLS: <fs_scat> TYPE zexcel_s_converter_fcat, + <fs_stab> TYPE ANY, + <fs_ttab> TYPE STANDARD TABLE, + <fs> TYPE ANY, + <fs_table> TYPE STANDARD TABLE. + + SORT wt_fieldcatalog BY position. + ASSIGN wo_table->* TO <fs_table>. + + READ TABLE <fs_table> ASSIGNING <fs_stab> INDEX 1. + IF sy-subrc EQ 0 . + LOOP AT wt_fieldcatalog ASSIGNING <fs_scat>. + ASSIGN COMPONENT <fs_scat>-columnname OF STRUCTURE <fs_stab> TO <fs>. + IF sy-subrc = 0. + ls_components-name = <fs_scat>-columnname. + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_data( <fs> ). + CATCH cx_sy_move_cast_error. + CLEAR lo_addit. + DELETE TABLE wt_fieldcatalog FROM <fs_scat>. + ENDTRY. + IF lo_addit IS BOUND. + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ENDIF. + ENDIF. + ENDLOOP. + IF lt_components_tab IS NOT INITIAL. + "create new line type + TRY. + lo_struc = cl_abap_structdescr=>create( P_COMPONENTS = lt_components_tab + P_STRICT = abap_false ). + CATCH cx_sy_struct_creation. + RETURN. " We can not do anything in this case. + ENDTRY. + + lo_table = cl_abap_tabledescr=>create( lo_struc ). + + CREATE DATA wo_data TYPE HANDLE lo_table. + CREATE DATA lo_data TYPE HANDLE lo_struc. + + ASSIGN wo_data->* TO <fs_ttab>. + ASSIGN lo_data->* TO <fs_stab>. + LOOP AT <fs_table> ASSIGNING <fs>. + CLEAR <fs_stab>. + MOVE-CORRESPONDING <fs> TO <fs_stab>. + APPEND <fs_stab> TO <fs_ttab>. + ENDLOOP. + ENDIF. + ENDIF. + + endmethod. + + + + + + METHOD create_text_subtotal. + DATA: l_string(256) TYPE c, + l_func TYPE string. + + CASE i_totals_function. + WHEN zcl_excel_table=>totals_function_sum. " Total + l_func = 'Total'(003). + WHEN zcl_excel_table=>totals_function_min. " Minimum + l_func = 'Minimum'(004). + WHEN zcl_excel_table=>totals_function_max. " Maximum + l_func = 'Maximum'(005). + WHEN zcl_excel_table=>totals_function_average. " Mean Value + l_func = 'Average'(006). + WHEN zcl_excel_table=>totals_function_count. " Count + l_func = 'Count'(007). + WHEN OTHERS. + CLEAR l_func. + ENDCASE. + + MOVE i_value TO l_string. + + CONCATENATE l_string l_func INTO r_text SEPARATED BY space. + +ENDMETHOD. + + + + + + method CREATE_WORKSHEET. + DATA: l_freeze_col TYPE i. + DATA: l_guid TYPE oltpguid16. + + IF wo_data IS BOUND AND wo_worksheet IS BOUND. + + wo_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_on. " By default is on + + IF wt_fieldcatalog IS INITIAL. + set_fieldcatalog( ) . + ELSE. + clean_fieldcatalog( ) . + ENDIF. + + IF i_table = abap_true. + l_freeze_col = bind_table( i_style_table = i_style_table ) . + ELSE. +* Let's check for filter. + IF wt_filter IS NOT INITIAL. + wo_autofilter = wo_excel->add_new_autofilter( io_sheet = wo_worksheet ). + l_freeze_col = bind_cells( ) . + set_autofilter_area( ) . + ELSE. + l_freeze_col = bind_cells( ) . + ENDIF. + + ENDIF. + +* Check for freeze panes + IF ws_layout-is_fixed = abap_true. + IF l_freeze_col = 0. + l_freeze_col = w_col_int. + ENDIF. + wo_worksheet->freeze_panes( EXPORTING ip_num_columns = l_freeze_col + ip_num_rows = w_row_int ) . + ENDIF. + ENDIF. + + endmethod. + + + + + + method EXECUTE_CONVERTER. + DATA: lt_fieldcatalog TYPE zexcel_t_fieldcatalog, + ls_fieldcatalog TYPE zexcel_s_converter_fcat, + lo_if TYPE REF TO zif_excel_converter, + ls_types TYPE ts_alv_types, + lo_addit TYPE REF TO cl_abap_classdescr. + + IF io_object IS BOUND. + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_object_ref( io_object ). + CATCH cx_sy_move_cast_error. + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + ls_types-seoclass = lo_addit->get_relative_name( ). + READ TABLE wt_objects INTO ls_types WITH TABLE KEY seoclass = ls_types-seoclass. + IF sy-subrc = 0. + CREATE OBJECT lo_if TYPE (ls_types-clsname). + + TRY. + lo_if->create_fieldcatalog( + EXPORTING + is_option = ws_option + io_object = io_object + it_table = it_table + IMPORTING + es_layout = ws_layout + et_fieldcatalog = wt_fieldcatalog + eo_table = wo_table + et_colors = wt_colors + et_filter = wt_filter + ). + ENDTRY. +* data lines of highest level. + IF ws_layout-max_subtotal_level > 0. + ADD 1 TO ws_layout-max_subtotal_level. + ENDIF. + ELSE. + RAISE EXCEPTION TYPE zcx_excel. + ENDIF. + ELSE. + REFRESH wt_fieldcatalog. + GET REFERENCE OF it_table INTO wo_table. + ENDIF. + + endmethod. + + + + + + + method GET_COLOR_STYLE. + DATA: ls_colors TYPE zexcel_s_converter_col, + ls_color_styles TYPE ts_color_styles, + lo_style TYPE REF TO zcl_excel_style. + + r_style = i_style. " Default we change nothing + + IF wt_colors IS NOT INITIAL. +* Full line has color + READ TABLE wt_colors INTO ls_colors WITH KEY rownumber = i_row + columnname = space. + IF sy-subrc = 0. + READ TABLE wt_color_styles INTO ls_color_styles WITH KEY guid_old = i_style + fontcolor = ls_colors-fontcolor + fillcolor = ls_colors-fillcolor. + IF sy-subrc = 0. + r_style = ls_color_styles-style_new->get_guid( ). + ELSE. + lo_style = create_color_style( i_style = i_style + is_colors = ls_colors ) . + r_style = lo_style->get_guid( ) . + ls_color_styles-guid_old = i_style. + ls_color_styles-fontcolor = ls_colors-fontcolor. + ls_color_styles-fillcolor = ls_colors-fillcolor. + ls_color_styles-style_new = lo_style. + INSERT ls_color_styles INTO TABLE wt_color_styles. + ENDIF. + ELSE. +* Only field has color + READ TABLE wt_colors INTO ls_colors WITH KEY rownumber = i_row + columnname = i_fieldname. + IF sy-subrc = 0. + READ TABLE wt_color_styles INTO ls_color_styles WITH KEY guid_old = i_style + fontcolor = ls_colors-fontcolor + fillcolor = ls_colors-fillcolor. + IF sy-subrc = 0. + r_style = ls_color_styles-style_new->get_guid( ). + ELSE. + lo_style = create_color_style( i_style = i_style + is_colors = ls_colors ) . + ls_color_styles-guid_old = i_style. + ls_color_styles-fontcolor = ls_colors-fontcolor. + ls_color_styles-fillcolor = ls_colors-fillcolor. + ls_color_styles-style_new = lo_style. + INSERT ls_color_styles INTO TABLE wt_color_styles. + r_style = ls_color_styles-style_new->get_guid( ). + ENDIF. + ELSE. + r_style = i_style. + ENDIF. + ENDIF. + ELSE. + r_style = i_style. + ENDIF. + + endmethod. + + + + + + method GET_FILE. + data: lo_excel_writer type ref to zif_excel_writer, + lo_excel type ref to zcl_excel. + + data: ls_seoclass type seoclass. + + + if wo_excel is bound. + create object lo_excel_writer type zcl_excel_writer_2007. + e_file = lo_excel_writer->write_file( wo_excel ). + + select single * into ls_seoclass + from seoclass + where clsname = 'CL_BCS_CONVERT'. + + if sy-subrc = 0. + call method (ls_seoclass-clsname)=>xstring_to_solix + exporting + iv_xstring = e_file + receiving + et_solix = et_file. + e_bytecount = xstrlen( e_file ). + else. + " Convert to binary + call function 'SCMS_XSTRING_TO_BINARY' + exporting + buffer = e_file + importing + output_length = e_bytecount + tables + binary_tab = et_file. + endif. + endif. + + endmethod. + + + + + method GET_FUNCTION_NUMBER. +*Number Function +*1 AVERAGE +*2 COUNT +*3 COUNTA +*4 MAX +*5 MIN +*6 PRODUCT +*7 STDEV +*8 STDEVP +*9 SUM +*10 VAR +*11 VARP + + case i_totals_function. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_SUM. " Total + r_function_number = 9. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_MIN. " Minimum + r_function_number = 5. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_MAX. " Maximum + r_function_number = 4. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_AVERAGE. " Mean Value + r_function_number = 1. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_count. " Count + r_function_number = 2. + when others. + clear r_function_number. + endcase. + endmethod. + + + + method GET_OPTION. + + rs_option = ws_option. + + endmethod. + + + + + + + + method GET_STYLE. + DATA: ls_styles TYPE ts_styles, + lo_style TYPE REF TO zcl_excel_style. + + CLEAR r_style. + + READ TABLE wt_styles INTO ls_styles WITH TABLE KEY type = i_type + alignment = i_alignment + inttype = i_inttype + decimals = i_decimals. + IF sy-subrc = 0. + r_style = ls_styles-guid. + ELSE. + CASE i_type. + WHEN c_type_hdr. " Header + lo_style = create_style_hdr( i_alignment = i_alignment ). + WHEN c_type_str. "Stripped + lo_style = create_style_stripped( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_nor. "Normal + lo_style = create_style_normal( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_sub. "Subtotals + lo_style = create_style_subtotal( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_tot. "Totals + lo_style = create_style_total( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + ENDCASE. + IF lo_style IS NOT INITIAL. + r_style = lo_style->get_guid( ). + ls_styles-type = i_type. + ls_styles-alignment = i_alignment. + ls_styles-inttype = i_inttype. + ls_styles-decimals = i_decimals. + ls_styles-guid = r_style. + ls_styles-style = lo_style. + INSERT ls_styles INTO TABLE wt_styles. + ENDIF. + ENDIF. + endmethod. + + + method INIT_OPTION. + + ws_option-filter = abap_true. + ws_option-hidenc = abap_true. + ws_option-subtot = abap_true. + + endmethod. + + + + + + + method LOOP_NORMAL. + DATA: lo_data TYPE REF TO data, + l_row_header TYPE zexcel_cell_row VALUE 2, + l_col_header TYPE zexcel_cell_column_alpha VALUE 'B', + l_row_int_start TYPE zexcel_cell_row, + l_row_int_end TYPE zexcel_cell_row, + l_row_int TYPE zexcel_cell_row, + l_col_int TYPE zexcel_cell_column, + l_col_alpha TYPE zexcel_cell_column_alpha, + l_col_alpha_start TYPE zexcel_cell_column_alpha, + l_cell_value TYPE zexcel_cell_value, + l_s_color TYPE abap_bool, + lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi, + l_formula TYPE zexcel_cell_formula, + l_style TYPE zexcel_cell_style, + l_cells TYPE i, + l_count TYPE i, + l_table_row TYPE i. + + FIELD-SYMBOLS: <fs_stab> TYPE ANY, + <fs_tab> TYPE STANDARD TABLE, + <fs_sfcat> TYPE zexcel_s_converter_fcat, + <fs_fldval> TYPE ANY, + <fs_cell_value> TYPE zexcel_cell_value. + + ASSIGN wo_data->* TO <fs_tab> . + + DESCRIBE TABLE wt_fieldcatalog LINES l_cells. + DESCRIBE TABLE <fs_tab> LINES l_count. + l_cells = l_cells * l_count. + +* It is better to loop column by column + LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat>. + l_row_int = i_row_int. + l_col_int = i_col_int + <fs_sfcat>-position - 1. + +* Freeze panes + IF <fs_sfcat>-fix_column = abap_true. + ADD 1 TO r_freeze_col. + ENDIF. + l_s_color = abap_true. + + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + +* Only if the Header is required create it. + IF ws_option-hidehd IS INITIAL. + " First of all write column header + l_cell_value = <fs_sfcat>-scrtext_m. + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_style = <fs_sfcat>-style_hdr ). + ADD 1 TO l_row_int. + ENDIF. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_table_row = sy-tabix. +* Now the cell values + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. +* Now let's write the cell values + IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_stripped ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + CLEAR l_s_color. + ELSE. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_normal ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + l_s_color = abap_true. + ENDIF. + READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row + columnname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + wo_worksheet->get_cell( EXPORTING + ip_column = l_col_alpha + ip_row = l_row_int + IMPORTING + ep_value = l_cell_value ). + wo_autofilter->set_value( i_column = l_col_int + i_value = l_cell_value ). + ENDIF. + ADD 1 TO l_row_int. + ENDLOOP. +* Now let's check for optimized + IF <fs_sfcat>-is_optimized = abap_true . + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_auto_size( ip_auto_size = abap_true ) . + ENDIF. +* Now let's check for visible + IF <fs_sfcat>-is_hidden = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_visible( ip_visible = abap_false ) . + ENDIF. +* Now let's check for total versus subtotal. + IF <fs_sfcat>-totals_function IS NOT INITIAL. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_total( i_row_int = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_total ). + ENDIF. + ENDLOOP. + endmethod. + + + + + + + method LOOP_SUBTOTAL. + + DATA: lo_data TYPE REF TO data, + l_row_header TYPE zexcel_cell_row VALUE 2, + l_col_header TYPE zexcel_cell_column_alpha VALUE 'B', + l_row_int_start TYPE zexcel_cell_row, + l_row_int_end TYPE zexcel_cell_row, + l_row_int TYPE zexcel_cell_row, + l_col_int TYPE zexcel_cell_column, + l_col_alpha TYPE zexcel_cell_column_alpha, + l_col_alpha_start TYPE zexcel_cell_column_alpha, + l_cell_value TYPE zexcel_cell_value, + l_s_color TYPE abap_bool, + lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi, + l_formula TYPE zexcel_cell_formula, + l_style TYPE zexcel_cell_style, + l_subtotalled TYPE flag, + l_text TYPE string, + ls_sort_values TYPE ts_sort_values, + ls_subtotal_rows TYPE ts_subtotal_rows, + l_sort_level TYPE int4, + l_hidden TYPE int4, + l_line TYPE i, + l_guid TYPE guid_22, + l_tabix TYPE sy-tabix, + l_cells TYPE i, + l_count TYPE i, + l_table_row TYPE i, + lt_fcat TYPE zexcel_t_converter_fcat. + + FIELD-SYMBOLS: <fs_stab> TYPE ANY, + <fs_tab> TYPE STANDARD TABLE, + <fs_sfcat> TYPE zexcel_s_converter_fcat, + <fs_fldval> TYPE ANY, + <fs_sortval> TYPE ANY, + <fs_sortv> TYPE ts_sort_values, + <fs_cell_value> TYPE zexcel_cell_value. + + ASSIGN wo_data->* TO <fs_tab> . + + REFRESH: wt_sort_values, + wt_subtotal_rows. + + DESCRIBE TABLE wt_fieldcatalog LINES l_cells. + DESCRIBE TABLE <fs_tab> LINES l_count. + l_cells = l_cells * l_count. + + READ TABLE <fs_tab> ASSIGNING <fs_stab> INDEX 1. + IF sy-subrc = 0. + l_row_int = i_row_int + 1. + lt_fcat = wt_fieldcatalog. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true. + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. + ls_sort_values-fieldname = <fs_sfcat>-columnname. + ls_sort_values-row_int = l_row_int. + ls_sort_values-sort_level = <fs_sfcat>-sort_level. + ls_sort_values-is_collapsed = <fs_sfcat>-is_collapsed. + CREATE DATA ls_sort_values-value LIKE <fs_fldval>. + ASSIGN ls_sort_values-value->* TO <fs_sortval>. + <fs_sortval> = <fs_fldval>. + INSERT ls_sort_values INTO TABLE wt_sort_values. + ENDLOOP. + ENDIF. + l_row_int = i_row_int. +* Let's check if we need to hide a sort level. + DESCRIBE TABLE wt_sort_values LINES l_line. + IF l_line <= 1. + CLEAR l_hidden. + ELSE. + LOOP AT wt_sort_values INTO ls_sort_values WHERE is_collapsed = abap_false. + IF l_hidden < ls_sort_values-sort_level. + l_hidden = ls_sort_values-sort_level. + ENDIF. + ENDLOOP. + ENDIF. + ADD 1 TO l_hidden. " As this is the first level we show. +* First loop without formular only addtional rows with subtotal text. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + ADD 1 TO l_row_int. " 1 is for header row. + l_row_int_start = l_row_int. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true. + l_col_int = i_col_int + <fs_sfcat>-position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). +* Now the cell values + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. + IF sy-subrc = 0. + READ TABLE wt_sort_values ASSIGNING <fs_sortv> WITH TABLE KEY fieldname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + ASSIGN <fs_sortv>-value->* TO <fs_sortval>. + IF <fs_sortval> <> <fs_fldval> OR <fs_sortv>-new = abap_true. +* First let's remmember the subtotal values as it has to appear later. + ls_subtotal_rows-row_int = l_row_int. + ls_subtotal_rows-row_int_start = <fs_sortv>-row_int. + ls_subtotal_rows-columnname = <fs_sfcat>-columnname. + INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. +* Now let's write the subtotal line + l_cell_value = create_text_subtotal( i_value = <fs_sortval> + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = <fs_sfcat>-sort_level ) . + IF <fs_sfcat>-is_collapsed = abap_true. + IF <fs_sfcat>-sort_level > l_hidden. + lo_row_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . + ENDIF. +* Now let's change the key + ADD 1 TO l_row_int. + <fs_sortval> = <fs_fldval>. + <fs_sortv>-new = abap_false. + l_line = <fs_sortv>-sort_level. + LOOP AT wt_sort_values ASSIGNING <fs_sortv> WHERE sort_level >= l_line. + <fs_sortv>-row_int = l_row_int. + ENDLOOP. + ENDIF. + ENDIF. + ENDIF. + ENDLOOP. + ENDLOOP. + ADD 1 TO l_row_int. + l_row_int_start = l_row_int. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true. + l_col_int = i_col_int + <fs_sfcat>-position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + READ TABLE wt_sort_values ASSIGNING <fs_sortv> WITH TABLE KEY fieldname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + ASSIGN <fs_sortv>-value->* TO <fs_sortval>. + ls_subtotal_rows-row_int = l_row_int. + ls_subtotal_rows-row_int_start = <fs_sortv>-row_int. + ls_subtotal_rows-columnname = <fs_sfcat>-columnname. + INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. +* First let's write the value as it has to appear. + l_cell_value = create_text_subtotal( i_value = <fs_sortval> + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + + l_sort_level = <fs_sfcat>-sort_level. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = l_sort_level ) . + IF <fs_sfcat>-is_collapsed = abap_true. + IF <fs_sfcat>-sort_level > l_hidden. + lo_row_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . + ENDIF. + ADD 1 TO l_row_int. + ENDIF. + ENDLOOP. +* Let's write the Grand total + l_sort_level = 0. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = l_sort_level ) . +* lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . Not on grand total + + l_text = create_text_subtotal( i_value = 'Grand'(002) + i_totals_function = <fs_sfcat>-totals_function ). + + l_col_alpha_start = zcl_excel_common=>convert_column2alpha( i_col_int ). + wo_worksheet->set_cell( ip_column = l_col_alpha_start + ip_row = l_row_int + ip_value = l_text + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + +* It is better to loop column by column second time around +* Second loop with formular and data. + LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat>. + l_row_int = i_row_int. + l_col_int = i_col_int + <fs_sfcat>-position - 1. +* Freeze panes + IF <fs_sfcat>-fix_column = abap_true. + ADD 1 TO r_freeze_col. + ENDIF. + l_s_color = abap_true. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + " First of all write column header + l_cell_value = <fs_sfcat>-scrtext_m. + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_hdr ). + ADD 1 TO l_row_int. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_table_row = sy-tabix. +* Now the cell values + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. +* Let's check for subtotal lines + DO. + READ TABLE wt_subtotal_rows TRANSPORTING NO FIELDS WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + IF <fs_sfcat>-is_subtotalled = abap_false AND + <fs_sfcat>-totals_function IS NOT INITIAL. + DO. + READ TABLE wt_subtotal_rows INTO ls_subtotal_rows WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + l_row_int_start = ls_subtotal_rows-row_int_start. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_subtotal ). + IF <fs_sfcat>-is_collapsed = abap_true. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ). + IF <fs_sfcat>-sort_level > l_hidden. + lo_row_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + ENDIF. + ADD 1 TO l_row_int. + ELSE. + EXIT. + ENDIF. + ENDDO. + ELSE. + ADD 1 TO l_row_int. + ENDIF. + ELSE. + EXIT. + ENDIF. + ENDDO. +* Let's set the row dimension values + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = ws_layout-max_subtotal_level ) . + IF <fs_sfcat>-is_collapsed = abap_true. + lo_row_dim->set_visible( ip_visible = abap_false ) . + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . + ENDIF. +* Now let's write the cell values + IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_stripped ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + CLEAR l_s_color. + ELSE. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_normal ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + l_s_color = abap_true. + ENDIF. + READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row + columnname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + wo_worksheet->get_cell( EXPORTING + ip_column = l_col_alpha + ip_row = l_row_int + IMPORTING + ep_value = l_cell_value ). + wo_autofilter->set_value( i_column = l_col_int + i_value = l_cell_value ). + ENDIF. + ADD 1 TO l_row_int. + ENDLOOP. +* Let's check for subtotal lines + DO. + READ TABLE wt_subtotal_rows TRANSPORTING NO FIELDS WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + IF <fs_sfcat>-is_subtotalled = abap_false AND + <fs_sfcat>-totals_function IS NOT INITIAL. + DO. + READ TABLE wt_subtotal_rows INTO ls_subtotal_rows WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + l_row_int_start = ls_subtotal_rows-row_int_start. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_subtotal ). + IF <fs_sfcat>-is_collapsed = abap_true. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ). + ENDIF. + ADD 1 TO l_row_int. + ELSE. + EXIT. + ENDIF. + ENDDO. + ELSE. + ADD 1 TO l_row_int. + ENDIF. + ELSE. + EXIT. + ENDIF. + ENDDO. +* Now let's check for Grand total + IF <fs_sfcat>-is_subtotalled = abap_false AND + <fs_sfcat>-totals_function IS NOT INITIAL. + l_row_int_start = i_row_int + 1. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_subtotal ). + ENDIF. +* Now let's check for optimized + IF <fs_sfcat>-is_optimized = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_auto_size( ip_auto_size = abap_true ) . + ENDIF. +* Now let's check for visible + IF <fs_sfcat>-is_hidden = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + ENDLOOP. + + endmethod. + + + method OPEN_FILE. + data: l_bytecount type i, + lt_file type solix_tab, + l_dir type string, + l_sep type c. + + field-symbols: <fs_data> type any table. + + assign wo_data->* to <fs_data>. + +* catch zcx_excel . +*endtry. + if wo_excel is bound. + get_file( importing e_bytecount = l_bytecount + et_file = lt_file ) . + + l_dir = create_path( ) . + + cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount + filename = l_dir + filetype = 'BIN' + changing data_tab = lt_file ). + cl_gui_frontend_services=>execute( + exporting + document = l_dir +* application = +* parameter = +* default_directory = +* maximized = +* minimized = +* synchronous = +* operation = 'OPEN' + exceptions + cntl_error = 1 + error_no_gui = 2 + bad_parameter = 3 + file_not_found = 4 + path_not_found = 5 + file_extension_unknown = 6 + error_execute_failed = 7 + synchronous_failed = 8 + not_supported_by_gui = 9 + ). + if sy-subrc <> 0. + message id sy-msgid type sy-msgty number sy-msgno + with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + endif. + + endif. + + + endmethod. + + + method SET_AUTOFILTER_AREA. + DATA: ls_area TYPE zexcel_s_autofilter_area, + l_lines TYPE i, + lt_values TYPE zexcel_t_autofilter_values, + ls_values TYPE zexcel_s_autofilter_values. + +* Let's check for filter. + IF wo_autofilter IS BOUND. + ls_area-row_start = 1. + lt_values = wo_autofilter->get_values( ) . + SORT lt_values BY column ASCENDING. + DESCRIBE TABLE lt_values LINES l_lines. + READ TABLE lt_values INTO ls_values INDEX 1. + IF sy-subrc = 0. + ls_area-col_start = ls_values-column. + ENDIF. + READ TABLE lt_values INTO ls_values INDEX l_lines. + IF sy-subrc = 0. + ls_area-col_end = ls_values-column. + ENDIF. + wo_autofilter->set_filter_area( is_area = ls_area ) . + ENDIF. + + endmethod. + + + + + + method SET_CELL_FORMAT. + DATA: l_format TYPE zexcel_number_format. + + CLEAR r_format. + CASE i_inttype. + WHEN cl_abap_typedescr=>typekind_date. + r_format = wo_worksheet->get_default_excel_date_format( ). + WHEN cl_abap_typedescr=>typekind_time. + r_format = wo_worksheet->get_default_excel_time_format( ). + WHEN cl_abap_typedescr=>typekind_float OR cl_abap_typedescr=>typekind_packed. + IF i_decimals > 0 . + l_format = '#,##0.'. + DO i_decimals TIMES. + CONCATENATE l_format '0' INTO l_format. + ENDDO. + r_format = l_format. + ENDIF. + WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2. + r_format = '#,##0'. + ENDCASE. + + endmethod. + + + method SET_FIELDCATALOG. + + DATA: lr_data TYPE REF TO data, + lo_structdescr TYPE REF TO cl_abap_structdescr, + lt_dfies TYPE ddfields, + ls_dfies TYPE dfies, + ls_fieldcatalog TYPE zexcel_s_fieldcatalog. + DATA: ls_fcat TYPE zexcel_s_converter_fcat. + + FIELD-SYMBOLS: <fs_tab> TYPE ANY TABLE. + + ASSIGN wo_data->* TO <fs_tab> . + + CREATE DATA lr_data LIKE LINE OF <fs_tab>. + + lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + + lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + + LOOP AT lt_dfies INTO ls_dfies. + MOVE-CORRESPONDING ls_dfies TO ls_fcat. + ls_fcat-columnname = ls_dfies-fieldname. + INSERT ls_fcat INTO TABLE wt_fieldcatalog. + ENDLOOP. + + clean_fieldcatalog( ). + + endmethod. + + + + method SET_OPTION. + + IF ws_indx-begdt IS INITIAL. + ws_indx-begdt = sy-datum. + ENDIF. + + ws_indx-aedat = sy-datum. + ws_indx-usera = sy-uname. + ws_indx-pgmid = sy-cprog. + + EXPORT p1 = is_option TO DATABASE indx(xl) FROM ws_indx ID ws_indx-srtfd. + + IF sy-subrc = 0. + ws_option = is_option. + ENDIF. + + endmethod. + + + + method WRITE_FILE. + data: l_bytecount type i, + lt_file type solix_tab, + l_dir type string. + + field-symbols: <fs_data> type any table. + + assign wo_data->* to <fs_data>. + +* catch zcx_excel . +*endtry. + if wo_excel is bound. + get_file( importing e_bytecount = l_bytecount + et_file = lt_file ) . + if i_path is initial. + l_dir = create_path( ) . + else. + l_dir = i_path. + endif. + cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount + filename = l_dir + filetype = 'BIN' + changing data_tab = lt_file ). + endif. + endmethod. + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature +TYPES: BEGIN OF ts_col_converter, + col TYPE lvc_col, + int TYPE lvc_int, + inv TYPE lvc_inv, + fontcolor TYPE zexcel_style_color_argb, + fillcolor TYPE zexcel_style_color_argb, + END OF ts_col_converter, + + tt_col_converter TYPE HASHED TABLE OF ts_col_converter WITH UNIQUE KEY col int inv. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + ABAP + KKBLO + + + + + + + + + + method APPLY_SORT. + DATA: lt_otab TYPE abap_sortorder_tab, + ls_otab TYPE abap_sortorder. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE, + <fs_sort> TYPE lvc_s_sort. + + CREATE DATA eo_table LIKE it_table. + ASSIGN eo_table->* TO <fs_table>. + + <fs_table> = it_table. + + SORT wt_sort BY spos. + LOOP AT wt_sort ASSIGNING <fs_sort>. + IF <fs_sort>-up = abap_true. + ls_otab-name = <fs_sort>-fieldname. + ls_otab-descending = abap_false. +* ls_otab-astext = abap_true. " not only text fields + INSERT ls_otab INTO TABLE lt_otab. + ENDIF. + IF <fs_sort>-down = abap_true. + ls_otab-name = <fs_sort>-fieldname. + ls_otab-descending = abap_true. +* ls_otab-astext = abap_true. " not only text fields + INSERT ls_otab INTO TABLE lt_otab. + ENDIF. + ENDLOOP. + IF lt_otab IS NOT INITIAL. + SORT <fs_table> BY (lt_otab). + ENDIF. + + endmethod. + + + method CLASS_CONSTRUCTOR. +* let's fill the color conversion routines. + DATA: ls_color TYPE ts_col_converter. +* 0 all combination the same + ls_color-col = 0. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* Blue + ls_color-col = 1. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFB0E4FC'. " 176 228 252 blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFB0E4FC'. " 176 228 252 blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF5FCBFE'. " 095 203 254 Int blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF5FCBFE'. " 095 203 254 + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 + INSERT ls_color INTO TABLE wt_colors. + +* Gray + ls_color-col = 2. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. + ls_color-fillcolor = 'FFE5EAF0'. " 229 234 240 gray + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFE5EAF0'. " 229 234 240 gray + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFD8E8F4'. " 216 234 244 int gray + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFD8E8F4'. " 216 234 244 int gray + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +*Yellow + ls_color-col = 3. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFEFEB8'. " 254 254 184 yellow + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFEFEB8'. " 254 254 184 yellow + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFF9ED5D'. " 249 237 093 int yellow + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFF9ED5D'. " 249 237 093 int yellow + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* light blue + ls_color-col = 4. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFCEE7FB'. " 206 231 251 light blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFCEE7FB'. " 206 231 251 light blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF9ACCEF'. " 154 204 239 int light blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF9ACCEF'. " 154 204 239 int light blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* Green + ls_color-col = 5. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFCEF8AE'. " 206 248 174 Green + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFCEF8AE'. " 206 248 174 Green + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF7AC769'. " 122 199 105 int Green + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF7AC769'. " 122 199 105 int Green + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* Red + ls_color-col = 6. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFDBBBC'. " 253 187 188 Red + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFDBBBC'. " 253 187 188 Red + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFB6B6B'. " 251 107 107 int Red + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFB6B6B'. " 251 107 107 int Red + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + endmethod. + + + + + method GET_COLOR. + DATA: ls_con_col TYPE zexcel_s_converter_col, + ls_color TYPE ts_col_converter, + l_line TYPE i, + l_color(4) TYPE c. + FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE, + <fs_stab> TYPE ANY, + <fs> TYPE ANY, + <fs_tcol> TYPE lvc_t_scol, + <fs_scol> TYPE lvc_s_scol. + +* Loop trough the table to set the color properties of each line. The color properties field is +* Char 4 and the characters is set as follows: +* Char 1 = C = This is a color property +* Char 2 = 6 = Color code (1 - 7) +* Char 3 = Intensified on/of = 1 = on +* Char 4 = Inverse display = 0 = of + + ASSIGN io_table->* TO <fs_tab>. + + IF ws_layo-info_fname IS NOT INITIAL OR + ws_layo-ctab_fname IS NOT INITIAL. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_line = sy-tabix. + IF ws_layo-info_fname IS NOT INITIAL. + ASSIGN COMPONENT ws_layo-info_fname OF STRUCTURE <fs_stab> TO <fs>. + IF sy-subrc = 0. + IF <fs> IS NOT INITIAL. + l_color = <fs>. + IF l_color(1) = 'C'. + READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = l_color+1(1) + int = l_color+2(1) + inv = l_color+3(1). + IF sy-subrc = 0. + ls_con_col-rownumber = l_line. + ls_con_col-columnname = space. + ls_con_col-fontcolor = ls_color-fontcolor. + ls_con_col-fillcolor = ls_color-fillcolor. + INSERT ls_con_col INTO TABLE et_colors. + ENDIF. + ENDIF. + ENDIF. + ENDIF. + ENDIF. + IF ws_layo-ctab_fname IS NOT INITIAL. + ASSIGN COMPONENT ws_layo-ctab_fname OF STRUCTURE <fs_stab> TO <fs_tcol>. + IF sy-subrc = 0. + LOOP AT <fs_tcol> ASSIGNING <fs_scol>. + READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = <fs_scol>-color-col + int = <fs_scol>-color-int + inv = <fs_scol>-color-inv. + IF sy-subrc = 0. + ls_con_col-rownumber = l_line. + ls_con_col-columnname = <fs_scol>-fname. + ls_con_col-fontcolor = ls_color-fontcolor. + ls_con_col-fillcolor = ls_color-fillcolor. + ls_con_col-nokeycol = <fs_scol>-nokeycol. + INSERT ls_con_col INTO TABLE et_colors. + ENDIF. + ENDLOOP. + ENDIF. + ENDIF. + ENDLOOP. + ENDIF. + endmethod. + + + + + METHOD get_filter. + DATA: ls_filt TYPE lvc_s_filt, + l_line TYPE i, + ls_filter TYPE zexcel_s_converter_fil. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + lt_components_tab TYPE cl_abap_structdescr=>component_table, + ls_components TYPE abap_componentdescr, + lo_table TYPE REF TO cl_abap_tabledescr, + lo_struc TYPE REF TO cl_abap_structdescr, + lo_trange TYPE REF TO data, + lo_srange TYPE REF TO data, + lo_ltabdata TYPE REF TO data. + + FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE, + <fs_ltab> TYPE STANDARD TABLE, + <fs_stab> TYPE any, + <fs> TYPE any, + <fs1> TYPE any, + <fs_srange> TYPE any, + <fs_trange> TYPE STANDARD TABLE. + + IF ws_option-filter = abap_false. + REFRESH et_filter. + RETURN. + ENDIF. + + ASSIGN xo_table->* TO <fs_tab>. + + CREATE DATA lo_ltabdata LIKE <fs_tab>. + ASSIGN lo_ltabdata->* TO <fs_ltab>. + + LOOP AT wt_filt INTO ls_filt. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_line = sy-tabix. + ASSIGN COMPONENT ls_filt-fieldname OF STRUCTURE <fs_stab> TO <fs>. + IF sy-subrc = 0. + IF l_line = 1. + REFRESH lt_components_tab. + ls_components-name = 'SIGN'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-sign ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'OPTION'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-option ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'LOW'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( <fs> ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'HIGH'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( <fs> ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + "create new line type + TRY. + lo_struc = cl_abap_structdescr=>create( p_components = lt_components_tab + p_strict = abap_false ). + CATCH cx_sy_struct_creation. + CONTINUE. + ENDTRY. + lo_table = cl_abap_tabledescr=>create( lo_struc ). + + CREATE DATA lo_trange TYPE HANDLE lo_table. + CREATE DATA lo_srange TYPE HANDLE lo_struc. + + ASSIGN lo_trange->* TO <fs_trange>. + ASSIGN lo_srange->* TO <fs_srange>. + ENDIF. + REFRESH <fs_trange>. + ASSIGN COMPONENT 'SIGN' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-sign. + ASSIGN COMPONENT 'OPTION' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-option. + ASSIGN COMPONENT 'LOW' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-low. + ASSIGN COMPONENT 'HIGH' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-high. + INSERT <fs_srange> INTO TABLE <fs_trange>. + IF <fs> IN <fs_trange>. + IF ws_option-filter = abap_true. + ls_filter-rownumber = l_line. + ls_filter-columnname = ls_filt-fieldname. + INSERT ls_filter INTO TABLE et_filter. + ELSE. + INSERT <fs_stab> INTO TABLE <fs_ltab>. + ENDIF. + ENDIF. + ENDIF. + ENDLOOP. + IF ws_option-filter = abap_undefined. + <fs_tab> = <fs_ltab>. + REFRESH <fs_ltab>. + ENDIF. + ENDLOOP. + +ENDMETHOD. + + + + + method UPDATE_CATALOG. + DATA: ls_fieldcatalog TYPE zexcel_s_converter_fcat, + ls_ref TYPE salv_s_ddic_reference, + ls_fcat TYPE lvc_s_fcat, + ls_sort TYPE lvc_s_sort, + l_decimals TYPE lvc_decmls. + + FIELD-SYMBOLS: <fs_scat> TYPE zexcel_s_converter_fcat. + + IF ws_layo-zebra IS NOT INITIAL. + cs_layout-is_stripped = abap_true. + ENDIF. + IF ws_layo-no_keyfix IS INITIAL OR + ws_layo-no_keyfix = '0'. + cs_layout-is_fixed = abap_true. + ENDIF. + + LOOP AT wt_fcat INTO ls_fcat. + CLEAR: ls_fieldcatalog, + l_decimals. + CASE ws_option-hidenc. + WHEN abap_false. " We make hiden columns visible + CLEAR ls_fcat-no_out. + WHEN abap_true. +* We convert column and hide it. + WHEN abap_undefined. "We don't convert hiden columns + IF ls_fcat-no_out = abap_true. + ls_fcat-tech = abap_true. + ENDIF. + ENDCASE. + IF ls_fcat-tech = abap_false. + ls_fieldcatalog-tabname = ls_fcat-tabname. + ls_fieldcatalog-fieldname = ls_fcat-fieldname . + ls_fieldcatalog-columnname = ls_fcat-fieldname . + ls_fieldcatalog-position = ls_fcat-col_pos. + ls_fieldcatalog-col_id = ls_fcat-col_id. + ls_fieldcatalog-convexit = ls_fcat-convexit. + ls_fieldcatalog-inttype = ls_fcat-inttype. + ls_fieldcatalog-scrtext_s = ls_fcat-scrtext_s . + ls_fieldcatalog-scrtext_m = ls_fcat-scrtext_m . + ls_fieldcatalog-scrtext_l = ls_fcat-scrtext_l. + l_decimals = ls_fcat-decimals_o. + IF l_decimals IS NOT INITIAL. + ls_fieldcatalog-decimals = l_decimals. + ELSE. + ls_fieldcatalog-decimals = ls_fcat-decimals . + ENDIF. + CASE ws_option-subtot. + WHEN abap_false. " We ignore subtotals + CLEAR ls_fcat-do_sum. + WHEN abap_true. " We convert subtotals and detail + + WHEN abap_undefined. " We should only take subtotals and displayed detail +* for now abap_true + ENDCASE. + CASE ls_fcat-do_sum. + WHEN abap_true. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. + WHEN 'A'. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_min. + WHEN 'B' . + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_max. + WHEN 'C' . + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_average. + WHEN OTHERS. + CLEAR ls_fieldcatalog-totals_function . + ENDCASE. + ls_fieldcatalog-fix_column = ls_fcat-fix_column. + IF ws_layo-cwidth_opt IS INITIAL. + IF ls_fcat-col_opt IS NOT INITIAL. + ls_fieldcatalog-is_optimized = abap_true. + ENDIF. + ELSE. + ls_fieldcatalog-is_optimized = abap_true. + ENDIF. + IF ls_fcat-no_out IS NOT INITIAL. + ls_fieldcatalog-is_hidden = abap_true. + ls_fieldcatalog-position = ls_fieldcatalog-col_id. " We hide based on orginal data structure + ENDIF. +* Alignment in each cell + CASE ls_fcat-just. + WHEN 'R'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_right. + WHEN 'L'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_left. + WHEN 'C'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_center. + WHEN OTHERS. + CLEAR ls_fieldcatalog-alignment. + ENDCASE. +* Check for subtotals. + READ TABLE wt_sort INTO ls_sort WITH KEY fieldname = ls_fcat-fieldname. + IF sy-subrc = 0 AND ws_option-subtot <> abap_false. + ls_fieldcatalog-sort_level = 0 . +* IF ls_fieldcatalog-totals_function IS INITIAL. " Not clear why not +* CLEAR ls_fieldcatalog-is_subtotalled. +* ELSE. + ls_fieldcatalog-is_subtotalled = ls_sort-subtot. +* ENDIF. + ls_fieldcatalog-is_collapsed = ls_sort-expa. + IF ls_fieldcatalog-is_subtotalled = abap_true. + ls_fieldcatalog-sort_level = ls_sort-spos. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. " we need function for text + ENDIF. + ENDIF. + APPEND ls_fieldcatalog TO ct_fieldcatalog. + ENDIF. + ENDLOOP. + + SORT ct_fieldcatalog BY sort_level ASCENDING. + cs_layout-max_subtotal_level = 0. + LOOP AT ct_fieldcatalog ASSIGNING <fs_scat> WHERE sort_level > 0. + cs_layout-max_subtotal_level = cs_layout-max_subtotal_level + 1. + <fs_scat>-sort_level = cs_layout-max_subtotal_level. + ENDLOOP. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + method ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + data: lo_alv type REF TO cl_gui_alv_grid. + + try. + lo_alv ?= io_object. + catch cx_sy_move_cast_error . + raise exception type zcx_excel. + endtry. + +endmethod. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_alv TYPE REF TO cl_gui_alv_grid. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_alv ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog. + + IF lo_alv IS BOUND. + lo_alv->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = wt_fcat ). + lo_alv->get_frontend_layout( IMPORTING es_layout = ws_layo ). + lo_alv->get_sort_criteria( IMPORTING et_sort = wt_sort ) . + lo_alv->get_filter_criteria( IMPORTING et_filter = wt_filt ) . + + apply_sort( EXPORTING it_table = it_table + IMPORTING eo_table = eo_table ) . + + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ENDIF. +ENDMETHOD. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + method GET_TABLE. + DATA: lo_object TYPE REF TO object, + ls_seoclass TYPE seoclass, + l_method TYPE string. + + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'IF_SALV_BS_DATA_SOURCE'. + + IF sy-subrc = 0. + l_method = 'GET_TABLE_REF'. + lo_object ?= io_object. + CALL METHOD lo_object->(l_method) + RECEIVING + value = ro_data. + ELSE. + l_method = 'GET_REF_TO_TABLE'. + lo_object ?= io_object. + CALL METHOD lo_object->(l_method) + RECEIVING + value = ro_data. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + + DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table. + + TRY. + lo_result ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + +ENDMETHOD. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table, + lo_ex_cm TYPE REF TO cl_salv_ex_cm, + lo_data TYPE REF TO data. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_result ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog. + + IF lo_result IS BOUND. + lo_data = get_table( io_object = lo_result->r_model->r_data ). + IF lo_data IS BOUND. + ASSIGN lo_data->* TO <fs_table> . + + lo_ex_cm ?= lo_result->r_model->r_model. + ws_layo = lo_ex_cm->s_layo. +* T_DRDN Instance Attribute Public Type LVC_T_DROP + wt_fcat = lo_ex_cm->t_fcat. + wt_filt = lo_ex_cm->t_filt. +* T_HYPE Instance Attribute Public Type LVC_T_HYPE +* T_SELECTED_CELLS Instance Attribute Public Type LVC_T_CELL +* T_SELECTED_COLUMNS Instance Attribute Public Type LVC_T_COL + wt_sort = lo_ex_cm->t_sort. + + apply_sort( EXPORTING it_table = <fs_table> + IMPORTING eo_table = eo_table ) . + + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + else. +* We have a problem and should stop here. + ENDIF. + ENDIF. +ENDMETHOD. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + + DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table. + + TRY. + lo_result ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + +ENDMETHOD. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table, + lo_data TYPE REF TO data. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_result ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog. + + IF lo_result IS BOUND. + lo_data = get_table( io_object = lo_result->r_model->r_data ). + IF lo_data IS BOUND. + ASSIGN lo_data->* TO <fs_table> . + + wo_config ?= lo_result->r_model->r_model. + + IF wo_config IS BOUND. + wt_fields = wo_config->if_salv_wd_field_settings~get_fields( ) . + wt_columns = wo_config->if_salv_wd_column_settings~get_columns( ) . + ENDIF. + + create_wt_fcat( io_table = lo_data ). + create_wt_sort( ). + create_wt_filt( ). + + apply_sort( EXPORTING it_table = <fs_table> + IMPORTING eo_table = eo_table ) . + +* get_color( EXPORTING io_table = eo_table +* IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ELSE. +* We have a problem and should stop here + ENDIF. + ENDIF. +ENDMETHOD. + + + + method CREATE_WT_FCAT. + DATA: lr_data TYPE REF TO data, + lo_structdescr TYPE REF TO cl_abap_structdescr, + lt_dfies TYPE ddfields, + ls_dfies TYPE dfies, + lv_sytabix TYPE sytabix. + + DATA: ls_fcat TYPE lvc_s_fcat. + + FIELD-SYMBOLS: <fs_tab> TYPE ANY TABLE. + + ASSIGN io_table->* TO <fs_tab> . + CREATE DATA lr_data LIKE LINE OF <fs_tab>. + + lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + + lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + + loop at lt_dfies into ls_dfies. + MOVE-CORRESPONDING ls_dfies TO ls_fcat. +* ls_fcat-columnname = ls_dfies-fieldname. + ls_fcat-col_pos = ls_dfies-position. + ls_fcat-key = ls_dfies-keyflag. + get_fields_info( CHANGING xs_fcat = ls_fcat ) . + + ls_fcat-col_opt = abap_true. + + get_columns_info( CHANGING xs_fcat = ls_fcat ) . + + INSERT ls_fcat INTO TABLE wt_fcat. + endloop. + + endmethod. + + + method CREATE_WT_FILT. +* No neeed for superclass. +* Only for WD + DATA: lt_otab TYPE abap_sortorder_tab, + ls_otab TYPE abap_sortorder. + DATA: lt_filters TYPE salv_wd_t_filter_rule_ref, + ls_filt TYPE lvc_s_filt. + + FIELD-SYMBOLS: <fs_fields> TYPE salv_wd_s_field_ref, + <fs_filter> TYPE salv_wd_s_filter_rule_ref. + + LOOP AT wt_fields ASSIGNING <fs_fields>. + REFRESH lt_filters. + lt_filters = <fs_fields>-r_field->if_salv_wd_filter~get_filter_rules( ) . + LOOP AT lt_filters ASSIGNING <fs_filter>. + ls_filt-fieldname = <fs_fields>-fieldname. + IF <fs_filter>-r_filter_rule->get_included( ) = abap_true. + ls_filt-sign = 'I'. + ELSE. + ls_filt-sign = 'E'. + ENDIF. + ls_filt-option = <fs_filter>-r_filter_rule->get_operator( ). + ls_filt-high = <fs_filter>-r_filter_rule->get_high_value( ) . + ls_filt-low = <fs_filter>-r_filter_rule->get_low_value( ) . + INSERT ls_filt INTO TABLE wt_filt. + ENDLOOP. + ENDLOOP. + + endmethod. + + + method CREATE_WT_SORT. + DATA: lo_sort TYPE REF TO cl_salv_wd_sort_rule, + l_sort_order TYPE salv_wd_constant, + ls_sort TYPE lvc_s_sort. + + FIELD-SYMBOLS: <fs_fields> TYPE salv_wd_s_field_ref. + + LOOP AT wt_fields ASSIGNING <fs_fields>. + lo_sort = <fs_fields>-r_field->if_salv_wd_sort~get_sort_rule( ) . + IF lo_sort IS BOUND. + l_sort_order = lo_sort->get_sort_order( ). + IF l_sort_order <> if_salv_wd_c_sort=>sort_order. + CLEAR ls_sort. + ls_sort-spos = lo_sort->get_sort_position( ). + ls_sort-fieldname = <fs_fields>-fieldname. +* ls_sort-GROUP + ls_sort-subtot = lo_sort->get_group_aggregation( ). +* ls_sort-COMP +* ls_sort-EXPA +* ls_sort-SELTEXT +* ls_sort-OBLIGATORY +* ls_sort-LEVEL +* ls_sort-NO_OUT + IF l_sort_order = if_salv_wd_c_sort=>sort_order_ascending. + ls_sort-up = abap_true. + ELSE. + ls_sort-down = abap_true. + ENDIF. + INSERT ls_sort INTO TABLE wt_sort. + ENDIF. + ENDIF. + ENDLOOP. + + endmethod. + + + + method GET_COLUMNS_INFO. + DATA: l_numc2 TYPE salv_wd_constant. + + + FIELD-SYMBOLS: <fs_column> TYPE salv_wd_s_column_ref. + + READ TABLE wt_columns ASSIGNING <fs_column> WITH KEY id = xs_fcat-fieldname . + IF sy-subrc = 0. + xs_fcat-col_pos = <fs_column>-r_column->get_position( ) . + l_numc2 = <fs_column>-r_column->get_fixed_position( ). + IF l_numc2 = '02'. + xs_fcat-fix_column = abap_true . + ENDIF. + l_numc2 = <fs_column>-r_column->get_visible( ). + IF l_numc2 = '01'. + xs_fcat-no_out = abap_true . + ENDIF. + ENDIF. + + endmethod. + + + + method GET_FIELDS_INFO. + DATA: lo_aggr TYPE REF TO cl_salv_wd_aggr_rule, + l_aggrtype TYPE salv_wd_constant. + + FIELD-SYMBOLS: <fs_fields> TYPE salv_wd_s_field_ref. + + READ TABLE wt_fields ASSIGNING <fs_fields> WITH KEY fieldname = xs_fcat-fieldname. + IF sy-subrc = 0. + lo_aggr = <fs_fields>-r_field->if_salv_wd_aggr~get_aggr_rule( ) . + IF lo_aggr IS BOUND. + l_aggrtype = lo_aggr->get_aggregation_type( ) . + CASE l_aggrtype. + WHEN if_salv_wd_c_aggregation=>aggrtype_total. + xs_fcat-do_sum = abap_true. + WHEN if_salv_wd_c_aggregation=>aggrtype_minimum. + xs_fcat-do_sum = 'A'. + WHEN if_salv_wd_c_aggregation=>aggrtype_maximum . + xs_fcat-do_sum = 'B'. + WHEN if_salv_wd_c_aggregation=>aggrtype_average . + xs_fcat-do_sum = 'C'. + WHEN OTHERS. + CLEAR xs_fcat-do_sum . + ENDCASE. + ENDIF. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + METHOD zif_excel_converter~can_convert_object. + + DATA: lo_salv TYPE REF TO cl_salv_table. + + TRY. + lo_salv ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + +ENDMETHOD. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_salv TYPE REF TO cl_salv_table. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_salv ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog, + et_colors . + + IF lo_salv IS BOUND. + load_data( EXPORTING io_salv = lo_salv + it_table = it_table ). + apply_sort( EXPORTING it_table = it_table + IMPORTING eo_table = eo_table ) . + + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ENDIF. +ENDMETHOD. + + + + + method LOAD_DATA. + DATA: lo_columns TYPE REF TO cl_salv_columns_table, + lo_aggregations TYPE REF TO cl_salv_aggregations, + lo_sorts TYPE REF TO cl_salv_sorts, + lo_filters TYPE REF TO cl_salv_filters, + lo_functional TYPE REF TO cl_salv_functional_settings, + lo_display TYPE REF TO cl_salv_display_settings, + lo_selections TYPE REF TO cl_salv_selections. + + DATA: ls_vari TYPE disvariant, + lo_layout TYPE REF TO cl_salv_layout. + + DATA: lr_form_tol TYPE REF TO cl_salv_form, + lr_form_eol TYPE REF TO cl_salv_form. + + DATA lt_kkblo_fieldcat TYPE kkblo_t_fieldcat. + DATA ls_kkblo_layout TYPE kkblo_layout. + DATA lt_kkblo_filter TYPE kkblo_t_filter. + DATA lt_kkblo_sort TYPE kkblo_t_sortinfo. + + lo_layout = io_salv->get_layout( ) . + lo_columns = io_salv->get_columns( ). + lo_aggregations = io_salv->get_aggregations( ) . + lo_sorts = io_salv->get_sorts( ) . + lo_filters = io_salv->get_filters( ) . + lo_display = io_salv->get_display_settings( ) . + lo_functional = io_salv->get_functional_settings( ) . + + REFRESH: wt_fcat, + wt_sort, + wt_filt. + +* First update metadata if we can. + IF io_salv->is_offline( ) = abap_false. + io_salv->get_metadata( ) . + ELSE. +* If we are offline we need to build this. + cl_salv_controller_metadata=>get_variant( + EXPORTING + r_layout = lo_layout + CHANGING + s_variant = ls_vari ). + ENDIF. + +*... get the column information + wt_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog( + r_columns = lo_columns + r_aggregations = lo_aggregations ). + +*... get the layout information + cl_salv_controller_metadata=>get_lvc_layout( + EXPORTING + r_functional_settings = lo_functional + r_display_settings = lo_display + r_columns = lo_columns + r_aggregations = lo_aggregations + CHANGING + s_layout = ws_layo ). + +* the fieldcatalog is not complete yet! + CALL FUNCTION 'LVC_FIELDCAT_COMPLETE' + EXPORTING + i_complete = 'X' + i_refresh_buffer = space + i_buffer_active = space + is_layout = ws_layo + i_test = '1' + i_fcat_complete = 'X' + IMPORTING +* E_EDIT = + es_layout = ws_layo + CHANGING + ct_fieldcat = wt_fcat. + + IF ls_vari IS NOT INITIAL AND io_salv->is_offline( ) = abap_true. + CALL FUNCTION 'LVC_TRANSFER_TO_KKBLO' + EXPORTING + it_fieldcat_lvc = wt_fcat + is_layout_lvc = ws_layo + IMPORTING + et_fieldcat_kkblo = lt_kkblo_fieldcat + es_layout_kkblo = ls_kkblo_layout + TABLES + it_data = it_table + EXCEPTIONS + it_data_missing = 1 + it_fieldcat_lvc_missing = 2 + OTHERS = 3. + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + CALL FUNCTION 'LT_VARIANT_LOAD' + EXPORTING +* I_TOOL = 'LT' + i_tabname = '1' +* I_TABNAME_SLAVE = + i_dialog = ' ' +* I_USER_SPECIFIC = ' ' +* I_DEFAULT = 'X' +* I_NO_REPTEXT_OPTIMIZE = +* I_VIA_GRID = + i_fcat_complete = 'X' + IMPORTING +* E_EXIT = + et_fieldcat = lt_kkblo_fieldcat + et_sort = lt_kkblo_sort + et_filter = lt_kkblo_filter + CHANGING + cs_layout = ls_kkblo_layout + ct_default_fieldcat = lt_kkblo_fieldcat + cs_variant = ls_vari + EXCEPTIONS + wrong_input = 1 + fc_not_complete = 2 + not_found = 3 + OTHERS = 4 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO' + EXPORTING +* I_TECH_COMPLETE = +* I_STRUCTURE_NAME = + it_fieldcat_kkblo = lt_kkblo_fieldcat + it_sort_kkblo = lt_kkblo_sort + it_filter_kkblo = lt_kkblo_filter +* IT_SPECIAL_GROUPS_KKBLO = +* IT_FILTERED_ENTRIES_KKBLO = +* IT_GROUPLEVELS_KKBLO = +* IS_SUBTOT_OPTIONS_KKBLO = + is_layout_kkblo = ls_kkblo_layout +* IS_REPREP_ID_KKBLO = +* I_CALLBACK_PROGRAM_KKBLO = +* IT_ADD_FIELDCAT = +* IT_EXCLUDING_KKBLO = +* IT_EXCEPT_QINFO_KKBLO = + IMPORTING + et_fieldcat_lvc = wt_fcat + et_sort_lvc = wt_sort + et_filter_lvc = wt_filt +* ET_SPECIAL_GROUPS_LVC = +* ET_FILTER_INDEX_LVC = +* ET_GROUPLEVELS_LVC = +* ES_TOTAL_OPTIONS_LVC = + es_layout_lvc = ws_layo +* ES_VARIANT_LVC = +* E_VARIANT_SAVE_LVC = +* ES_PRINT_INFO_LVC = +* ES_REPREP_LVC = +* E_REPREP_ACTIVE_LVC = +* ET_EXCLUDING_LVC = +* ET_EXCEPT_QINFO_LVC = + TABLES + it_data = it_table + EXCEPTIONS + it_data_missing = 1 + OTHERS = 2 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + ELSE. +* ... get the sort information + wt_sort = cl_salv_controller_metadata=>get_lvc_sort( lo_sorts ). + +* ... get the filter information + wt_filt = cl_salv_controller_metadata=>get_lvc_filter( lo_filters ). + ENDIF. + + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + " Initialise instance variables + formula1 = ''. + formula2 = ''. + type = me->c_type_none. + errorstyle = me->c_style_stop. + operator = ''. + allowblank = abap_false. + showdropdown = abap_false. + showinputmessage = abap_true. + showerrormessage = abap_true. + errortitle = ''. + error = ''. + prompttitle = ''. + prompt = ''. +* inizialize dimension range + cell_row = 1. + cell_column = 'A'. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + method ADD. + data_validations->add( ip_data_validation ). + endmethod. + + + method CLEAR. + data_validations->clear( ). + endmethod. + + + method CONSTRUCTOR. + + CREATE OBJECT data_validations. + + endmethod. + + + + method GET_ITERATOR. + eo_iterator ?= data_validations->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + is_empty = data_validations->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + data_validations->remove( ip_data_validation ). + endmethod. + + + + method SIZE. + ep_size = data_validations->if_object_collection~size( ). + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = me->guid. + + IF ip_title IS NOT INITIAL. + title = ip_title. + ELSE. + title = me->guid. + ENDIF. + + me->type = ip_type. + +* inizialize dimension range + anchor = anchor_one_cell. + from_loc-col = 1. + from_loc-row = 1. + endmethod. + + + + method CREATE_MEDIA_NAME. + +* if media name is initial, create unique name + CHECK media_name IS INITIAL. + + index = ip_index. + CONCATENATE me->type index INTO media_name. + CONDENSE media_name NO-GAPS. + endmethod. + + + + method GET_FROM_COL. + r_from_col = me->from_loc-col. + endmethod. + + + + method GET_FROM_ROW. + r_from_row = me->from_loc-row. + endmethod. + + + + method GET_GUID. + + ep_guid = me->guid. + + endmethod. + + + + method GET_HEIGHT_EMU_STR. + r_height = pixel2emu( size-height ). + CONDENSE r_height NO-GAPS. + endmethod. + + + + method GET_INDEX. + rp_index = me->index. + endmethod. + + + + METHOD get_media. + + DATA: lv_language TYPE sylangu. + DATA: lt_bin_mime TYPE sdokcntbins. + DATA: lt_mime TYPE tsfmime, + lv_filesize TYPE i, + lv_filesizec(10). + + CASE media_source. + WHEN c_media_source_xstring. + r_media = media. + WHEN c_media_source_www. + CALL FUNCTION 'WWWDATA_IMPORT' + EXPORTING + key = media_key_www + TABLES + mime = lt_mime + EXCEPTIONS + OTHERS = 1. + + CALL FUNCTION 'WWWPARAMS_READ' + EXPORTING + relid = media_key_www-relid + objid = media_key_www-objid + name = 'filesize' + IMPORTING + value = lv_filesizec. + + lv_filesize = lv_filesizec. + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filesize + IMPORTING + buffer = r_media + TABLES + binary_tab = lt_mime + EXCEPTIONS + failed = 1 + OTHERS = 2. + WHEN c_media_source_mime. + lv_language = sy-langu. + cl_wb_mime_repository=>load_mime( EXPORTING + io = me->io + IMPORTING + filesize = lv_filesize + bin_data = lt_bin_mime + CHANGING + language = lv_language ). + + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filesize + IMPORTING + buffer = r_media + TABLES + binary_tab = lt_bin_mime + EXCEPTIONS + failed = 1 + OTHERS = 2. + ENDCASE. +ENDMETHOD. + + + + method GET_MEDIA_NAME. + CONCATENATE media_name `.` media_type INTO r_name. + endmethod. + + + + method GET_MEDIA_TYPE. + r_type = media_type. + endmethod. + + + + method GET_NAME. + r_name = title. + endmethod. + + + + method GET_POSITION. + rp_position-anchor = anchor. + rp_position-from = from_loc. + rp_position-to = to_loc. + rp_position-size = size. + endmethod. + + + + method GET_TO_COL. + r_to_col = me->to_loc-col. + endmethod. + + + + method GET_TO_ROW. + r_to_row = me->to_loc-row. + endmethod. + + + + method GET_TYPE. + rp_type = me->type. + endmethod. + + + + method GET_WIDTH_EMU_STR. + r_width = pixel2emu( size-width ). + CONDENSE r_width NO-GAPS. + endmethod. + + + + method LOAD_CHART_ATTRIBUTES. + DATA: node TYPE REF TO if_ixml_element. + DATA: node2 TYPE REF TO if_ixml_element. + DATA: node3 TYPE REF TO if_ixml_element. + DATA: node4 TYPE REF TO if_ixml_element. + DATA: iterator TYPE REF TO if_ixml_node_iterator. + + DATA: chartspace TYPE REF TO if_ixml_node_collection. + DATA: coll_length TYPE i. + DATA: chartelem TYPE REF TO if_ixml_element. + + DATA lo_barchart TYPE REF TO zcl_excel_graph_bars. + DATA lo_piechart TYPE REF TO zcl_excel_graph_pie. + DATA lo_linechart TYPE REF TO zcl_excel_graph_line. + + TYPES: BEGIN OF t_prop, + val TYPE string, + rtl TYPE string, + lang TYPE string, + formatcode TYPE string, + sourcelinked TYPE string, + END OF t_prop. + + TYPES: BEGIN OF t_pagemargins, + b TYPE string, + l TYPE string, + r TYPE string, + t TYPE string, + header TYPE string, + footer TYPE string, + END OF t_pagemargins. + + DATA ls_prop TYPE t_prop. + DATA ls_pagemargins TYPE t_pagemargins. + + DATA lo_collection TYPE REF TO if_ixml_node_collection. + DATA lo_node TYPE REF TO if_ixml_node. + DATA lo_iterator TYPE REF TO if_ixml_node_iterator. + DATA lv_idx TYPE i. + DATA lv_order TYPE i. + DATA lv_invertifnegative TYPE string. + DATA lv_symbol TYPE string. + DATA lv_smooth TYPE c. + DATA lv_sername TYPE string. + DATA lv_label TYPE string. + DATA lv_value TYPE string. + DATA lv_axid TYPE string. + DATA lv_orientation TYPE string. + DATA lv_delete TYPE string. + DATA lv_axpos TYPE string. + DATA lv_formatcode TYPE string. + DATA lv_sourcelinked TYPE string. + DATA lv_majortickmark TYPE string. + DATA lv_minortickmark TYPE string. + DATA lv_ticklblpos TYPE string. + DATA lv_crossax TYPE string. + DATA lv_crosses TYPE string. + DATA lv_auto TYPE string. + DATA lv_lblalgn TYPE string. + DATA lv_lbloffset TYPE string. + DATA lv_nomultilvllbl TYPE string. + DATA lv_crossbetween TYPE string. + + node ?= ip_chart->if_ixml_node~get_first_child( ). + CHECK node IS NOT INITIAL. + + CASE me->graph_type. + WHEN c_graph_bars. + CREATE OBJECT lo_barchart. + me->graph = lo_barchart. + WHEN c_graph_pie. + CREATE OBJECT lo_piechart. + me->graph = lo_piechart. + WHEN c_graph_line. + CREATE OBJECT lo_linechart. + me->graph = lo_linechart. + WHEN OTHERS. + ENDCASE. + + "Fill properties + node2 ?= node->find_from_name( name = 'date1904' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_1904val = ls_prop-val. + node2 ?= node->find_from_name( name = 'lang' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_langval = ls_prop-val. + node2 ?= node->find_from_name( name = 'roundedCorners' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_roundedcornersval = ls_prop-val. + + "style + node2 ?= node->find_from_name( name = 'style' namespace = 'c14' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_c14styleval = ls_prop-val. + node2 ?= node->find_from_name( name = 'style' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_styleval = ls_prop-val. + "---------------------------Read graph properties + node2 ?= node->find_from_name( name = 'autoTitleDeleted' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_autotitledeletedval = ls_prop-val. + + "plotArea + CASE me->graph_type. + WHEN c_graph_bars. + node2 ?= node->find_from_name( name = 'barDir' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_bardirval = ls_prop-val. + node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_groupingval = ls_prop-val. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'invertIfNegative' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_invertifnegative = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_barchart->create_serie + EXPORTING + ip_idx = lv_idx + ip_order = lv_order + ip_invertifnegative = lv_invertifnegative + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showbubblesizeval = ls_prop-val. + node2 ?= node->find_from_name( name = 'gapWidth' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_gapwidthval = ls_prop-val. + + "Load axes + node2 ?= node->find_from_name( name = 'barChart' namespace = 'c' ). + CALL METHOD node2->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'axId' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lv_axid = ls_prop-val. + IF sy-index EQ 1. "catAx + node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_auto = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lblalgn = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lbloffset = ls_prop-val. + node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_nomultilvllbl = ls_prop-val. + CALL METHOD lo_barchart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_bars=>c_catax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_auto = lv_auto + ip_lblalgn = lv_lblalgn + ip_lbloffset = lv_lbloffset + ip_nomultilvllbl = lv_nomultilvllbl. + ELSEIF sy-index EQ 2. "valAx + node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossbetween = ls_prop-val. + CALL METHOD lo_barchart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_bars=>c_valax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_crossbetween = lv_crossbetween. + ENDIF. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + + WHEN c_graph_pie. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_piechart->create_serie + EXPORTING + ip_idx = lv_idx + ip_order = lv_order + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showbubblesizeval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showLeaderLines' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showleaderlinesval = ls_prop-val. + node2 ?= node->find_from_name( name = 'firstSliceAng' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_firstsliceangval = ls_prop-val. + WHEN c_graph_line. + node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_groupingval = ls_prop-val. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'symbol' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_symbol = ls_prop-val. + node3 ?= node2->find_from_name( name = 'smooth' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_smooth = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_linechart->create_serie + EXPORTING + ip_idx = lv_idx + ip_order = lv_order + ip_symbol = lv_symbol + ip_smooth = lv_smooth + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showbubblesizeval = ls_prop-val. + + node ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). + node2 ?= node->find_from_name( name = 'marker' namespace = 'c' DEPTH = '1' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->NS_MARKERVAL = ls_prop-val. + node2 ?= node->find_from_name( name = 'smooth' namespace = 'c' DEPTH = '1' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->NS_SMOOTHVAL = ls_prop-val. + node ?= ip_chart->if_ixml_node~get_first_child( ). + CHECK node IS NOT INITIAL. + + "Load axes + node2 ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). + CALL METHOD node2->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'axId' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lv_axid = ls_prop-val. + IF sy-index EQ 1. "catAx + node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. +* node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). +* zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). +* lv_formatcode = ls_prop-formatcode. +* lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_auto = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lblalgn = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lbloffset = ls_prop-val. + node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_nomultilvllbl = ls_prop-val. + CALL METHOD lo_linechart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_line=>c_catax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_auto = lv_auto + ip_lblalgn = lv_lblalgn + ip_lbloffset = lv_lbloffset + ip_nomultilvllbl = lv_nomultilvllbl. + ELSEIF sy-index EQ 2. "valAx + node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossbetween = ls_prop-val. + CALL METHOD lo_linechart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_line=>c_valax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_crossbetween = lv_crossbetween. + ENDIF. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + WHEN OTHERS. + ENDCASE. + + "legend + CASE me->graph_type. + WHEN c_graph_bars. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_overlayval = ls_prop-val. + WHEN c_graph_line. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_overlayval = ls_prop-val. + WHEN c_graph_pie. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_overlayval = ls_prop-val. + node2 ?= node->find_from_name( name = 'pPr' namespace = 'a' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_pprrtl = ls_prop-rtl. + node2 ?= node->find_from_name( name = 'endParaRPr' namespace = 'a' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_endpararprlang = ls_prop-lang. + + WHEN OTHERS. + ENDCASE. + + node2 ?= node->find_from_name( name = 'plotVisOnly' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_plotvisonlyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'dispBlanksAs' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_dispblanksasval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showDLblsOverMax' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_showdlblsovermaxval = ls_prop-val. + "--------------------- + + node2 ?= node->find_from_name( name = 'pageMargins' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_pagemargins ). + me->graph->pagemargins = ls_pagemargins. + + + endmethod. + + + + + + method PIXEL2EMU. +* suppose 96 DPI + IF ip_dpi IS SUPPLIED. + r_emu = ip_pixel * 914400 / ip_dpi. + ELSE. +* suppose 96 DPI + r_emu = ip_pixel * 914400 / 96. + ENDIF. + endmethod. + + + + + + + method SET_MEDIA. + IF ip_media IS SUPPLIED. + media = ip_media. + ENDIF. + media_type = ip_media_type. + media_source = c_media_source_xstring. + IF ip_width IS SUPPLIED. + size-width = ip_width. + ENDIF. + IF ip_height IS SUPPLIED. + size-height = ip_height. + ENDIF. + endmethod. + + + + + + METHOD set_media_mime. + + DATA: lv_language TYPE sylangu. + + io = ip_io. + media_source = c_media_source_mime. + size-width = ip_width. + size-height = ip_height. + + lv_language = sy-langu. + cl_wb_mime_repository=>load_mime( EXPORTING + io = ip_io + IMPORTING + filename = media_name + "mimetype = media_type + CHANGING + language = lv_language ). + + SPLIT media_name AT '.' INTO media_name media_type. + +ENDMETHOD. + + + + + + method SET_MEDIA_WWW. + DATA: lv_value(20). + + media_key_www = ip_key. + media_source = c_media_source_www. + + CALL FUNCTION 'WWWPARAMS_READ' + EXPORTING + relid = media_key_www-relid + objid = media_key_www-objid + name = 'fileextension' + IMPORTING + value = lv_value. + media_type = lv_value. + SHIFT media_type LEFT DELETING LEADING '.'. + + size-width = ip_width. + size-height = ip_height. + endmethod. + + + + + + + method SET_POSITION. + from_loc-col = zcl_excel_common=>convert_column2int( ip_from_col ) - 1. + IF ip_coloff IS SUPPLIED. + from_loc-col_offset = ip_coloff. + ENDIF. + from_loc-row = ip_from_row - 1. + IF ip_rowoff IS SUPPLIED. + from_loc-row_offset = ip_rowoff. + ENDIF. + anchor = anchor_one_cell. + endmethod. + + + + + + method SET_POSITION2. + + data: lv_anchor type zexcel_drawing_anchor. + lv_anchor = ip_anchor. + + IF lv_anchor IS INITIAL. + IF ip_to IS NOT INITIAL. + lv_anchor = anchor_two_cell. + ELSE. + lv_anchor = anchor_one_cell. + ENDIF. + ENDIF. + + CASE lv_anchor. + WHEN anchor_absolute OR anchor_one_cell. + CLEAR: me->to_loc. + WHEN anchor_two_cell. + CLEAR: me->size. + ENDCASE. + + me->from_loc = ip_from. + me->to_loc = ip_to. + me->anchor = lv_anchor. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + method ADD. + DATA: lv_index TYPE i. + + drawings->add( ip_drawing ). + lv_index = drawings->if_object_collection~size( ). + ip_drawing->create_media_name( + ip_index = lv_index ). + endmethod. + + + method CLEAR. + + drawings->clear( ). + endmethod. + + + + method CONSTRUCTOR. + + CREATE OBJECT drawings. + type = ip_type. + + endmethod. + + + + + method GET. + + DATA lv_index TYPE i. + lv_index = ip_index. + eo_drawing ?= drawings->if_object_collection~get( lv_index ). + endmethod. + + + + method GET_ITERATOR. + + eo_iterator ?= drawings->if_object_collection~get_iterator( ). + endmethod. + + + + method GET_TYPE. + rp_type = me->type. + endmethod. + + + + method INCLUDE. + drawings->add( ip_drawing ). + endmethod. + + + + method IS_EMPTY. + + is_empty = drawings->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + + drawings->remove( ip_drawing ). + endmethod. + + + + method SIZE. + + ep_size = drawings->if_object_collection~size( ). + endmethod. + + + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + "Load default values + me->pagemargins-b = '0.75'. + me->pagemargins-l = '0.7'. + me->pagemargins-r = '0.7'. + me->pagemargins-t = '0.75'. + me->pagemargins-header = '0.3'. + me->pagemargins-footer = '0.3'. + endmethod. + + + + + + + + + + + + + + + + + + + + method CREATE_SERIE. + DATA ls_serie TYPE s_series. + + DATA: lv_start_row_c TYPE char7, + lv_stop_row_c TYPE char7. + + + IF ip_lbl IS NOT SUPPLIED. + lv_stop_row_c = ip_lbl_to_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_lbl_from_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + ls_serie-lbl = ip_sheet. + ls_serie-lbl = zcl_excel_common=>escape_string( ip_value = ls_serie-lbl ). + CONCATENATE ls_serie-lbl '!$' ip_lbl_from_col '$' lv_start_row_c ':$' ip_lbl_to_col '$' lv_stop_row_c INTO ls_serie-lbl. + CLEAR: lv_start_row_c, lv_stop_row_c. + ELSE. + ls_serie-lbl = ip_lbl. + ENDIF. + IF ip_ref IS NOT SUPPLIED. + lv_stop_row_c = ip_ref_to_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_ref_from_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + ls_serie-ref = ip_sheet. + ls_serie-ref = zcl_excel_common=>escape_string( ip_value = ls_serie-ref ). + CONCATENATE ls_serie-ref '!$' ip_ref_from_col '$' lv_start_row_c ':$' ip_ref_to_col '$' lv_stop_row_c INTO ls_serie-ref. + CLEAR: lv_start_row_c, lv_stop_row_c. + ELSE. + ls_serie-ref = ip_ref. + ENDIF. + ls_serie-idx = ip_idx. + ls_serie-order = ip_order. + ls_serie-invertifnegative = ip_invertifnegative. + ls_serie-symbol = ip_symbol. + ls_serie-smooth = ip_smooth. + ls_serie-sername = ip_sername. + APPEND ls_serie TO me->series. + SORT me->series BY order ASCENDING. + endmethod. + + + + method SET_PRINT_LBL. + me->print_label = ip_value. + endmethod. + + + + method SET_STYLE. + me->ns_c14styleval = ip_style-c14style. + CONDENSE me->ns_c14styleval NO-GAPS. + me->ns_styleval = ip_style-cstyle. + CONDENSE me->ns_styleval NO-GAPS. + endmethod. + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CREATE_AX. + DATA ls_ax TYPE s_ax. + ls_ax-type = ip_type. + + if ip_type = c_catax. + if ip_axid is SUPPLIED. + ls_ax-axid = ip_axid. + else. + ls_ax-axid = '1'. + endif. + if ip_orientation is SUPPLIED. + ls_ax-orientation = ip_orientation. + else. + ls_ax-orientation = 'minMax'. + endif. + if ip_delete is SUPPLIED. + ls_ax-delete = ip_delete. + else. + ls_ax-delete = '0'. + endif. + if ip_axpos is SUPPLIED. + ls_ax-axpos = ip_axpos. + else. + ls_ax-axpos = 'b'. + endif. + if ip_formatcode is SUPPLIED. + ls_ax-formatcode = ip_formatcode. + else. + ls_ax-formatcode = 'General'. + endif. + if ip_sourcelinked is SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + else. + ls_ax-sourcelinked = '1'. + endif. + if ip_majorTickMark is SUPPLIED. + ls_ax-majorTickMark = ip_majorTickMark. + else. + ls_ax-majorTickMark = 'out'. + endif. + if ip_minorTickMark is SUPPLIED. + ls_ax-minorTickMark = ip_minorTickMark. + else. + ls_ax-minorTickMark = 'none'. + endif. + if ip_ticklblpos is SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + else. + ls_ax-ticklblpos = 'nextTo'. + endif. + if ip_crossax is SUPPLIED. + ls_ax-crossax = ip_crossax. + else. + ls_ax-crossax = '2'. + endif. + if ip_crosses is SUPPLIED. + ls_ax-crosses = ip_crosses. + else. + ls_ax-crosses = 'autoZero'. + endif. + if ip_auto is SUPPLIED. + ls_ax-auto = ip_auto. + else. + ls_ax-auto = '1'. + endif. + if ip_lblAlgn is SUPPLIED. + ls_ax-lblAlgn = ip_lblAlgn. + else. + ls_ax-lblAlgn = 'ctr'. + endif. + if ip_lblOffset is SUPPLIED. + ls_ax-lblOffset = ip_lblOffset. + else. + ls_ax-lblOffset = '100'. + endif. + if ip_noMultiLvlLbl is SUPPLIED. + ls_ax-noMultiLvlLbl = ip_noMultiLvlLbl. + else. + ls_ax-noMultiLvlLbl = '0'. + endif. + elseif ip_type = c_valax. + if ip_axid is SUPPLIED. + ls_ax-axid = ip_axid. + else. + ls_ax-axid = '2'. + endif. + if ip_orientation is SUPPLIED. + ls_ax-orientation = ip_orientation. + else. + ls_ax-orientation = 'minMax'. + endif. + if ip_delete is SUPPLIED. + ls_ax-delete = ip_delete. + else. + ls_ax-delete = '0'. + endif. + if ip_axpos is SUPPLIED. + ls_ax-axpos = ip_axpos. + else. + ls_ax-axpos = 'l'. + endif. + if ip_formatcode is SUPPLIED. + ls_ax-formatcode = ip_formatcode. + else. + ls_ax-formatcode = 'General'. + endif. + if ip_sourcelinked is SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + else. + ls_ax-sourcelinked = '1'. + endif. + if ip_majorTickMark is SUPPLIED. + ls_ax-majorTickMark = ip_majorTickMark. + else. + ls_ax-majorTickMark = 'out'. + endif. + if ip_minorTickMark is SUPPLIED. + ls_ax-minorTickMark = ip_minorTickMark. + else. + ls_ax-minorTickMark = 'none'. + endif. + if ip_ticklblpos is SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + else. + ls_ax-ticklblpos = 'nextTo'. + endif. + if ip_crossax is SUPPLIED. + ls_ax-crossax = ip_crossax. + else. + ls_ax-crossax = '1'. + endif. + if ip_crosses is SUPPLIED. + ls_ax-crosses = ip_crosses. + else. + ls_ax-crosses = 'autoZero'. + endif. + if ip_crossBetween is SUPPLIED. + ls_ax-crossBetween = ip_crossBetween. + else. + ls_ax-crossBetween = 'between'. + endif. + endif. + + APPEND ls_ax TO me->axes. + sort me->axes by axid ascending. + endmethod. + + + + method SET_SHOW_CAT_NAME. + ns_showcatnameval = ip_value. + endmethod. + + + + method SET_SHOW_LEGEND_KEY. + ns_showlegendkeyval = ip_value. + endmethod. + + + + method SET_SHOW_PERCENT. + ns_showpercentval = ip_value. + endmethod. + + + + method SET_SHOW_SER_NAME. + ns_showsernameval = ip_value. + endmethod. + + + + method SET_SHOW_VALUES. + ns_showvalval = ip_value. + endmethod. + + + + method SET_VARYCOLOR. + ns_varycolorsval = ip_value. + endmethod. + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CREATE_AX. + DATA ls_ax TYPE s_ax. + ls_ax-type = ip_type. + + IF ip_type = c_catax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '1'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'b'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '2'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_auto IS SUPPLIED. + ls_ax-auto = ip_auto. + ELSE. + ls_ax-auto = '1'. + ENDIF. + IF ip_lblalgn IS SUPPLIED. + ls_ax-lblalgn = ip_lblalgn. + ELSE. + ls_ax-lblalgn = 'ctr'. + ENDIF. + IF ip_lbloffset IS SUPPLIED. + ls_ax-lbloffset = ip_lbloffset. + ELSE. + ls_ax-lbloffset = '100'. + ENDIF. + IF ip_nomultilvllbl IS SUPPLIED. + ls_ax-nomultilvllbl = ip_nomultilvllbl. + ELSE. + ls_ax-nomultilvllbl = '0'. + ENDIF. + ELSEIF ip_type = c_valax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '2'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'l'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '1'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_crossbetween IS SUPPLIED. + ls_ax-crossbetween = ip_crossbetween. + ELSE. + ls_ax-crossbetween = 'between'. + ENDIF. + ENDIF. + + APPEND ls_ax TO me->axes. + SORT me->axes BY axid ASCENDING. + endmethod. + + + + method SET_SHOW_CAT_NAME. + ns_showcatnameval = ip_value. + endmethod. + + + + method SET_SHOW_LEGEND_KEY. + ns_showlegendkeyval = ip_value. + endmethod. + + + + method SET_SHOW_PERCENT. + ns_showpercentval = ip_value. + endmethod. + + + + method SET_SHOW_SER_NAME. + ns_showsernameval = ip_value. + endmethod. + + + + method SET_SHOW_VALUES. + ns_showvalval = ip_value. + endmethod. + + + + method SET_VARYCOLOR. + ns_varycolorsval = ip_value. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + method SET_SHOW_CAT_NAME. + ns_showcatnameval = ip_value. + endmethod. + + + + method SET_SHOW_LEADER_LINES. + ns_showleaderlinesval = ip_value. + endmethod. + + + + method SET_SHOW_LEGEND_KEY. + ns_showlegendkeyval = ip_value. + endmethod. + + + + method SET_SHOW_PERCENT. + ns_showpercentval = ip_value. + endmethod. + + + + method SET_SHOW_SER_NAME. + ns_showsernameval = ip_value. + endmethod. + + + + method SET_SHOW_VALUES. + ns_showvalval = ip_value. + endmethod. + + + + method SET_VARYCOLOR. + ns_varycolorsval = ip_value. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + method CREATE. + data: lo_hyperlink type REF TO zcl_excel_hyperlink. + + create OBJECT lo_hyperlink. + + lo_hyperlink->location = iv_url. + lo_hyperlink->internal = iv_internal. + + ov_link = lo_hyperlink. + endmethod. + + + + + method CREATE_EXTERNAL_LINK. + + ov_link = zcl_excel_hyperlink=>create( iv_url = iv_url + iv_internal = abap_false ). + endmethod. + + + + + method CREATE_INTERNAL_LINK. + ov_link = zcl_excel_hyperlink=>create( iv_url = iv_location + iv_internal = abap_true ). + endmethod. + + + + method GET_REF. + ev_ref = row. + CONDENSE ev_ref. + CONCATENATE column ev_ref INTO ev_ref. + endmethod. + + + + method GET_URL. + ev_url = me->location. + endmethod. + + + + method IS_INTERNAL. + ev_ret = me->internal. + endmethod. + + + + + + method SET_CELL_REFERENCE. + me->column = zcl_excel_common=>convert_column2alpha( ip_column ). " issue #155 - less restrictive typing for ip_column + me->row = ip_row. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + method CONSTRUCTOR. + " default Excel palette based on + " http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.indexedcolors.aspx + + APPEND '00000000' TO colors. + APPEND '00FFFFFF' TO colors. + APPEND '00FF0000' TO colors. + APPEND '0000FF00' TO colors. + APPEND '000000FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00000000' TO colors. + APPEND '00FFFFFF' TO colors. + + APPEND '00FF0000' TO colors. + APPEND '0000FF00' TO colors. + APPEND '000000FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00800000' TO colors. + APPEND '00008000' TO colors. + APPEND '00000080' TO colors. + APPEND '00808000' TO colors. + + APPEND '00800080' TO colors. + APPEND '00008080' TO colors. + APPEND '00C0C0C0' TO colors. + APPEND '00808080' TO colors. + APPEND '009999FF' TO colors. + APPEND '00993366' TO colors. + APPEND '00FFFFCC' TO colors. + APPEND '00CCFFFF' TO colors. + APPEND '00660066' TO colors. + APPEND '00FF8080' TO colors. + + APPEND '000066CC' TO colors. + APPEND '00CCCCFF' TO colors. + APPEND '00000080' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00800080' TO colors. + APPEND '00800000' TO colors. + APPEND '00008080' TO colors. + APPEND '000000FF' TO colors. + + APPEND '0000CCFF' TO colors. + APPEND '00CCFFFF' TO colors. + APPEND '00CCFFCC' TO colors. + APPEND '00FFFF99' TO colors. + APPEND '0099CCFF' TO colors. + APPEND '00FF99CC' TO colors. + APPEND '00CC99FF' TO colors. + APPEND '00FFCC99' TO colors. + APPEND '003366FF' TO colors. + APPEND '0033CCCC' TO colors. + + APPEND '0099CC00' TO colors. + APPEND '00FFCC00' TO colors. + APPEND '00FF9900' TO colors. + APPEND '00FF6600' TO colors. + APPEND '00666699' TO colors. + APPEND '00969696' TO colors. + APPEND '00003366' TO colors. + APPEND '00339966' TO colors. + APPEND '00003300' TO colors. + APPEND '00333300' TO colors. + + APPEND '00993300' TO colors. + APPEND '00993366' TO colors. + APPEND '00333399' TO colors. + APPEND '00333333' TO colors. + + endmethod. + + + + + + method GET_COLOR. + DATA: lv_index type i. + + lv_index = ip_index + 1. + READ TABLE colors INTO ep_color INDEX lv_index. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid color index'. + ENDIF. + endmethod. + + + + method GET_COLORS. + ep_colors = colors. + endmethod. + + + + method IS_MODIFIED. + ep_modified = modified. + endmethod. + + + + + method SET_COLOR. + DATA: lv_index TYPE i. + + FIELD-SYMBOLS: <lv_color> LIKE LINE OF colors. + + lv_index = ip_index + 1. + READ TABLE colors ASSIGNING <lv_color> INDEX lv_index. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid color index'. + ENDIF. + + IF <lv_color> <> ip_color. + modified = abap_true. + <lv_color> = ip_color. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + method GET_GUID. + + ep_guid = me->guid. + + endmethod. + + + + method GET_VALUE. + + ep_value = me->value. + + endmethod. + + + + method SET_RANGE_VALUE. + me->value = ip_value. + endmethod. + + + + + + + + method SET_VALUE. + DATA: lv_start_row_c TYPE char7, + lv_stop_row_c TYPE char7, + lv_value TYPE string. + lv_stop_row_c = ip_stop_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_start_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + lv_value = ip_sheet_name. + me->value = zcl_excel_common=>escape_string( ip_value = lv_value ). + + CONCATENATE me->value '!$' ip_start_column '$' lv_start_row_c ':$' ip_stop_column '$' lv_stop_row_c INTO me->value. + endmethod. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel30. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + + +DATA: lv_value TYPE string, + lv_count TYPE i VALUE 10, + lv_packed TYPE p LENGTH 16 DECIMALS 1 VALUE '1234567890.5'. + +CONSTANTS: lc_typekind_string TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_string, + lc_typekind_packed TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_packed, + lc_typekind_num TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_num, + lc_typekind_date TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_date. + +CONSTANTS: gc_save_file_name TYPE string VALUE '30_CellDataTypes.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Cell data types' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Number as String' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 2 ip_value = '11' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 1 ip_value = 'String' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Negative Value' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_value = 'Packed' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 2 ip_value = '50000.01-' + ip_abap_type = lc_typekind_packed ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 1 ip_value = 'Number with Percentage' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 2 ip_value = '0 %' + ip_abap_type = lc_typekind_num ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = 1 ip_value = 'Date' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = 2 ip_value = '20110831' + ip_abap_type = lc_typekind_date ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'Positive Value' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = '5000.02' + ip_abap_type = lc_typekind_packed ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 3 ip_value = '50 %' + ip_abap_type = lc_typekind_num ). + + WHILE lv_count <= 15. + lv_value = lv_count. + CONCATENATE 'Positive Value with' lv_value 'Digits' INTO lv_value SEPARATED BY space. + lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_count ip_value = lv_value + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_count ip_value = lv_packed + ip_abap_type = lc_typekind_packed ). + CONCATENATE 'Positive Value with' lv_value 'Digits formated as string' INTO lv_value SEPARATED BY space. + lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_count ip_value = lv_value + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = lv_count ip_value = lv_packed + ip_abap_type = lc_typekind_string ). + lv_packed = lv_packed * 10. + lv_count = lv_count + 1. + ENDWHILE. + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'D' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'E' ). + column_dimension->set_auto_size( abap_true ). + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel31. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + + +DATA: fieldval TYPE text80, + row TYPE i, + style_column_a TYPE REF TO zcl_excel_style, + style_column_a_guid TYPE zexcel_cell_style, + style_column_b TYPE REF TO zcl_excel_style, + style_column_b_guid TYPE zexcel_cell_style, + style_column_c TYPE REF TO zcl_excel_style, + style_column_c_guid TYPE zexcel_cell_style, + style_font TYPE REF TO zcl_excel_style_font. + +CONSTANTS: gc_save_file_name TYPE string VALUE '31_AutosizeWithDifferentFontSizes.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + " Use active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Regular Font' ). + + style_column_a = lo_excel->add_new_style( ). + style_column_a->font->size = 32. " quite large + style_column_a_guid = style_column_a->get_guid( ). + + style_column_c = lo_excel->add_new_style( ). + style_column_c->font->size = 16. " not so large + style_column_c_guid = style_column_c->get_guid( ). + + + DO 20 TIMES. + row = sy-index. + CLEAR fieldval. + DO sy-index TIMES. + CONCATENATE fieldval 'X' INTO fieldval. + ENDDO. + lo_worksheet->set_cell( ip_column = 'A' ip_row = row ip_value = fieldval ip_style = style_column_a_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = row ip_value = fieldval ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = row ip_value = fieldval ip_style = style_column_c_guid ). + ENDDO. + + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Add sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Bold Font' ). + + style_column_a = lo_excel->add_new_style( ). + style_column_a->font->size = 32. " quite large + style_column_a->font->bold = abap_true. + style_column_a_guid = style_column_a->get_guid( ). + + style_column_b = lo_excel->add_new_style( ). + style_column_b->font->bold = abap_true. + style_column_b_guid = style_column_b->get_guid( ). + + style_column_c = lo_excel->add_new_style( ). + style_column_c->font->size = 16. " not so large + style_column_c->font->bold = abap_true. + style_column_c_guid = style_column_c->get_guid( ). + + DO 20 TIMES. + row = sy-index. + CLEAR fieldval. + DO sy-index TIMES. + CONCATENATE fieldval 'X' INTO fieldval. + ENDDO. + lo_worksheet->set_cell( ip_column = 'A' ip_row = row ip_value = fieldval ip_style = style_column_a_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = row ip_value = fieldval ip_style = style_column_b_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = row ip_value = fieldval ip_style = style_column_c_guid ). + ENDDO. + + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Add sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Italic Font' ). + + style_column_a = lo_excel->add_new_style( ). + style_column_a->font->size = 32. " quite large + style_column_a->font->italic = abap_true. + style_column_a_guid = style_column_a->get_guid( ). + + style_column_b = lo_excel->add_new_style( ). + style_column_b->font->italic = abap_true. + style_column_b_guid = style_column_b->get_guid( ). + + style_column_c = lo_excel->add_new_style( ). + style_column_c->font->size = 16. " not so large + style_column_c->font->italic = abap_true. + style_column_c_guid = style_column_c->get_guid( ). + + DO 20 TIMES. + row = sy-index. + CLEAR fieldval. + DO sy-index TIMES. + CONCATENATE fieldval 'X' INTO fieldval. + ENDDO. + lo_worksheet->set_cell( ip_column = 'A' ip_row = row ip_value = fieldval ip_style = style_column_a_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = row ip_value = fieldval ip_style = style_column_b_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = row ip_value = fieldval ip_style = style_column_c_guid ). + ENDDO. + + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + lo_excel->set_active_sheet_index( i_active_worksheet = 1 ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *--------------------------------------------------------------------* +* REPORT ZDEMO_EXCEL32 +* Demo for export options from ALV GRID: +* export data from ALV (CL_GUI_ALV_GRID) object or cl_salv_table object +* to Excel. +*--------------------------------------------------------------------* +REPORT zdemo_excel32. + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events DEFINITION. + PUBLIC SECTION. + METHODS: + on_user_command FOR EVENT added_function OF cl_salv_events + IMPORTING e_salv_function. +ENDCLASS. "lcl_handle_events DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events IMPLEMENTATION. + METHOD on_user_command. + PERFORM user_command." using e_salv_function text-i08. + ENDMETHOD. "on_user_command +ENDCLASS. "lcl_handle_events IMPLEMENTATION + +*--------------------------------------------------------------------* +* DATA DECLARATION +*--------------------------------------------------------------------* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_salv TYPE REF TO cl_salv_table, + gr_events TYPE REF TO lcl_handle_events, + lr_events TYPE REF TO cl_salv_events_table, + gt_sbook TYPE TABLE OF sbook. + +DATA: l_path TYPE string, " local dir + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: + lv_default_file_name TYPE string VALUE '32_Export_ALV.xlsx', + lv_default_file_name2 TYPE string VALUE '32_Export_Convert.xlsx'. +*--------------------------------------------------------------------* +*START-OF-SELECTION +*--------------------------------------------------------------------* + +START-OF-SELECTION. + +* get data +* ------------------------------------------ + + SELECT * + INTO TABLE gt_sbook[] + FROM sbook "#EC CI_NOWHERE + UP TO 100 ROWS. + +* Display ALV +* ------------------------------------------ + + TRY. + cl_salv_table=>factory( + EXPORTING + list_display = abap_false + IMPORTING + r_salv_table = lo_salv + CHANGING + t_table = gt_sbook[] ). + CATCH cx_salv_msg . + ENDTRY. + + TRY. + lo_salv->set_screen_status( + EXPORTING + report = sy-repid + pfstatus = 'ALV_STATUS' + set_functions = lo_salv->c_functions_all ). + CATCH cx_salv_msg . + ENDTRY. + + lr_events = lo_salv->get_event( ). + CREATE OBJECT gr_events. + SET HANDLER gr_events->on_user_command FOR lr_events. + + lo_salv->display( ). + + +*&---------------------------------------------------------------------* +*& Form USER_COMMAND +*&---------------------------------------------------------------------* +* ALV user command +*--------------------------------------------------------------------* +FORM user_command . + +* get save file path + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = l_path ). + cl_gui_cfw=>flush( ). + cl_gui_frontend_services=>directory_browse( + EXPORTING initial_folder = l_path + CHANGING selected_folder = l_path ). + + IF l_path IS INITIAL. + cl_gui_frontend_services=>get_sapgui_workdir( + CHANGING sapworkdir = lv_workdir ). + l_path = lv_workdir. + ENDIF. + + cl_gui_frontend_services=>get_file_separator( + CHANGING file_separator = lv_file_separator ). + + + +* export file to save file path + CASE sy-ucomm. + WHEN 'EXCELBIND'. + CONCATENATE l_path lv_file_separator lv_default_file_name + INTO l_path. + PERFORM export_to_excel_bind. + + WHEN 'EXCELCONV'. + + CONCATENATE l_path lv_file_separator lv_default_file_name2 + INTO l_path. + PERFORM export_to_excel_conv. + + ENDCASE. +ENDFORM. " USER_COMMAND +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL_CONV +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +FORM export_to_excel_conv. + DATA: lo_converter TYPE REF TO zcl_excel_converter. + + CREATE OBJECT lo_converter. +*TRY. + lo_converter->convert( + EXPORTING + io_alv = lo_salv + it_table = gt_sbook + i_row_int = 2 + i_column_int = 2 +* i_table = +* i_style_table = +* io_worksheet = +* CHANGING +* co_excel = + ). +* CATCH zcx_excel . +*ENDTRY. + lo_converter->write_file( i_path = l_path ). + +ENDFORM. "EXPORT_TO_EXCEL_CONV + +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL_BIND +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +FORM export_to_excel_bind. +* create zcl_excel_worksheet object + CREATE OBJECT lo_excel. + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + +* write to excel using method Bin_object +*try. + lo_worksheet->bind_alv( + io_alv = lo_salv + it_table = gt_sbook + i_top = 2 + i_left = 1 + ). +* catch zcx_excel . +*endtry. + + + PERFORM write_file. + +ENDFORM. "EXPORT_TO_EXCEL_BIND +*&---------------------------------------------------------------------* +*& Form WRITE_FILE +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +* --> p1 text +* <-- p2 text +*----------------------------------------------------------------------* +FORM write_file . + DATA: lt_file TYPE solix_tab, + l_bytecount TYPE i, + l_file TYPE xstring. + + DATA: lo_excel_writer TYPE REF TO zif_excel_writer. + + DATA: ls_seoclass TYPE seoclass. + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + l_file = lo_excel_writer->write_file( lo_excel ). + + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_BCS_CONVERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>xstring_to_solix + EXPORTING + iv_xstring = l_file + RECEIVING + et_solix = lt_file. + + l_bytecount = XSTRLEN( l_file ). + ELSE. + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = l_file + IMPORTING + output_length = l_bytecount + TABLES + binary_tab = lt_file. + ENDIF. + + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount + filename = l_path + filetype = 'BIN' + CHANGING data_tab = lt_file ). + +ENDFORM. " WRITE_FILE + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel33. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_converter TYPE REF TO zcl_excel_converter, + lo_autofilter TYPE REF TO zcl_excel_autofilter. + +DATA lt_test TYPE TABLE OF t005t. + +DATA: l_cell_value TYPE zexcel_cell_value, + ls_area TYPE zexcel_s_autofilter_area. + +CONSTANTS: c_airlines TYPE string VALUE 'Airlines'. + +CONSTANTS: gc_save_file_name TYPE string VALUE '33_autofilter.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Internal table'). + + SELECT * UP TO 2 ROWS FROM t005t INTO TABLE lt_test. "#EC CI_NOWHERE + + CREATE OBJECT lo_converter. + + lo_converter->convert( EXPORTING + it_table = lt_test + i_row_int = 1 + i_column_int = 1 + io_worksheet = lo_worksheet + CHANGING + co_excel = lo_excel ) . + + lo_autofilter = lo_excel->add_new_autofilter( io_sheet = lo_worksheet ) . + + ls_area-row_start = 1. + ls_area-col_start = 1. + ls_area-row_end = lo_worksheet->get_highest_row( ). + ls_area-col_end = lo_worksheet->get_highest_column( ). + + lo_autofilter->set_filter_area( is_area = ls_area ). + + lo_worksheet->get_cell( EXPORTING + ip_column = 'C' + ip_row = 2 + IMPORTING + ep_value = l_cell_value ). + lo_autofilter->set_value( i_column = 3 + i_value = l_cell_value ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL2 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel34. + +CONSTANTS: width TYPE f VALUE '10.14'. +CONSTANTS: height TYPE f VALUE '57.75'. + +DATA: current_row TYPE i, + col TYPE i, + col_alpha TYPE zexcel_cell_column_alpha, + row TYPE i, + row_board TYPE i, + colorflag TYPE i, + color TYPE zexcel_style_color_argb, + + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, + + writing1 TYPE string, + writing2 TYPE string. + + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +CONSTANTS: gc_save_file_name TYPE string VALUE '34_Static Styles_Chess.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Spassky_vs_Bronstein' ). + +* Header + current_row = 1. + + ADD 1 TO current_row. + lo_worksheet->set_cell( ip_row = current_row ip_column = 'B' ip_value = 'White' ). + lo_worksheet->set_cell( ip_row = current_row ip_column = 'C' ip_value = 'Spassky, Boris V -- wins in turn 23' ). + + ADD 1 TO current_row. + lo_worksheet->set_cell( ip_row = current_row ip_column = 'B' ip_value = 'Black' ). + lo_worksheet->set_cell( ip_row = current_row ip_column = 'C' ip_value = 'Bronstein, David I' ). + + ADD 1 TO current_row. +* Set size of column + Writing above chessboard + DO 8 TIMES. + + writing1 = zcl_excel_common=>convert_column2alpha( sy-index ). + writing2 = sy-index . + row = current_row + sy-index. + + col = sy-index + 1. + col_alpha = zcl_excel_common=>convert_column2alpha( col ). + +* Set size of column + column_dimension = lo_worksheet->get_column_dimension( col_alpha ). + column_dimension->set_width( width ). + +* Set size of row + row_dimension = lo_worksheet->get_row_dimension( row ). + row_dimension->set_row_height( height ). + +* Set writing on chessboard + lo_worksheet->set_cell( ip_row = row + ip_column = 'A' + ip_value = writing2 ). + lo_worksheet->change_cell_style( ip_column = 'A' + ip_row = row + ip_alignment_vertical = zcl_excel_style_alignment=>c_vertical_center ). + lo_worksheet->set_cell( ip_row = row + ip_column = 'J' + ip_value = writing2 ). + lo_worksheet->change_cell_style( ip_column = 'J' + ip_row = row + ip_alignment_vertical = zcl_excel_style_alignment=>c_vertical_center ). + + row = current_row + 9. + lo_worksheet->set_cell( ip_row = current_row + ip_column = col_alpha + ip_value = writing1 ). + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = current_row + ip_alignment_horizontal = zcl_excel_style_alignment=>c_horizontal_center ). + lo_worksheet->set_cell( ip_row = row + ip_column = col_alpha + ip_value = writing1 ). + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_alignment_horizontal = zcl_excel_style_alignment=>c_horizontal_center ). + ENDDO. + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'J' ). + column_dimension->set_auto_size( abap_true ). + +* Set win-position + CONSTANTS: c_pawn TYPE string VALUE 'Pawn'. + CONSTANTS: c_rook TYPE string VALUE 'Rook'. + CONSTANTS: c_knight TYPE string VALUE 'Knight'. + CONSTANTS: c_bishop TYPE string VALUE 'Bishop'. + CONSTANTS: c_queen TYPE string VALUE 'Queen'. + CONSTANTS: c_king TYPE string VALUE 'King'. + + row = current_row + 1. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = c_rook ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_rook ). + lo_worksheet->set_cell( ip_row = row ip_column = 'G' ip_value = c_knight ). + row = current_row + 2. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'D' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_queen ). + lo_worksheet->set_cell( ip_row = row ip_column = 'H' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'I' ip_value = c_king ). + row = current_row + 3. + lo_worksheet->set_cell( ip_row = row ip_column = 'I' ip_value = c_pawn ). + row = current_row + 4. + lo_worksheet->set_cell( ip_row = row ip_column = 'D' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_knight ). + row = current_row + 5. + lo_worksheet->set_cell( ip_row = row ip_column = 'E' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_queen ). + row = current_row + 6. + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = c_bishop ). + row = current_row + 7. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'H' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'I' ip_value = c_pawn ). + row = current_row + 8. + lo_worksheet->set_cell( ip_row = row ip_column = 'G' ip_value = c_rook ). + lo_worksheet->set_cell( ip_row = row ip_column = 'H' ip_value = c_king ). + +* Set Chessboard + DO 8 TIMES. + IF sy-index <= 3. " Black + color = zcl_excel_style_color=>c_black. + ELSE. + color = zcl_excel_style_color=>c_white. + ENDIF. + row_board = sy-index. + row = current_row + sy-index. + DO 8 TIMES. + col = sy-index + 1. + col_alpha = zcl_excel_common=>convert_column2alpha( col ). + TRY. +* Borders around outer limits + IF row_board = 1. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_top_style = zcl_excel_style_border=>c_border_thick + ip_borders_top_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. + IF row_board = 8. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_down_style = zcl_excel_style_border=>c_border_thick + ip_borders_down_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. + IF col = 2. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_left_style = zcl_excel_style_border=>c_border_thick + ip_borders_left_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. + IF col = 9. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_right_style = zcl_excel_style_border=>c_border_thick + ip_borders_right_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. +* Style for writing + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_font_color_rgb = color + ip_font_bold = 'X' + ip_font_size = 16 + ip_alignment_horizontal = zcl_excel_style_alignment=>c_horizontal_center + ip_alignment_vertical = zcl_excel_style_alignment=>c_vertical_center + ip_fill_filltype = zcl_excel_style_fill=>c_fill_solid ). +* Color of field + colorflag = ( row + col ) MOD 2. + IF colorflag = 0. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_fill_fgcolor_rgb = 'FFB5866A' ). + ELSE. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_fill_fgcolor_rgb = 'FFF5DEBF' ). + ENDIF. + + + + CATCH zcx_excel . + ENDTRY. + + ENDDO. + ENDDO. + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL2 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel35. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_bold TYPE REF TO zcl_excel_style, + lo_style_underline TYPE REF TO zcl_excel_style, + lo_style_filled TYPE REF TO zcl_excel_style, + lo_style_border TYPE REF TO zcl_excel_style, + lo_style_button TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lo_border_light TYPE REF TO zcl_excel_style_border. + +DATA: lv_style_bold_guid TYPE zexcel_cell_style, + lv_style_underline_guid TYPE zexcel_cell_style, + lv_style_filled_guid TYPE zexcel_cell_style, + lv_style_filled_green_guid TYPE zexcel_cell_style, + lv_style_border_guid TYPE zexcel_cell_style, + lv_style_button_guid TYPE zexcel_cell_style, + lv_style_filled_turquoise_guid TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE '35_Static_Styles.xlsx'. + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>GET_DESKTOP_DIRECTORY( CHANGING DESKTOP_DIRECTORY = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + + sy-title = 'ZDEMO_EXCEL2;Issue 139: Change cellstyle retroactivly'. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + CREATE OBJECT lo_border_light. + lo_border_light->border_color-rgb = zcl_excel_style_color=>c_gray. + lo_border_light->border_style = zcl_excel_style_border=>c_border_thin. + " Create a bold / italic style + lo_style_bold = lo_excel->add_new_style( ). + lo_style_bold->font->bold = abap_true. + lo_style_bold->font->italic = abap_true. + lo_style_bold->font->name = zcl_excel_style_font=>c_name_arial. + lo_style_bold->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_bold->font->color-rgb = zcl_excel_style_color=>c_red. + lv_style_bold_guid = lo_style_bold->get_guid( ). + " Create an underline double style + lo_style_underline = lo_excel->add_new_style( ). + lo_style_underline->font->underline = abap_true. + lo_style_underline->font->underline_mode = zcl_excel_style_font=>c_underline_double. + lo_style_underline->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_underline->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_underline->font->family = zcl_excel_style_font=>c_family_roman. + lv_style_underline_guid = lo_style_underline->get_guid( ). + " Create filled style yellow + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-theme = zcl_excel_style_color=>c_theme_accent6. + lv_style_filled_guid = lo_style_filled->get_guid( ). + " Create border with button effects + lo_style_button = lo_excel->add_new_style( ). + lo_style_button->borders->right = lo_border_dark. + lo_style_button->borders->down = lo_border_dark. + lo_style_button->borders->left = lo_border_light. + lo_style_button->borders->top = lo_border_light. + lv_style_button_guid = lo_style_button->get_guid( ). + "Create style with border + lo_style_border = lo_excel->add_new_style( ). + lo_style_border->borders->allborders = lo_border_dark. + lo_style_border->borders->diagonal = lo_border_dark. + lo_style_border->borders->diagonal_mode = zcl_excel_style_borders=>c_diagonal_both. + lv_style_border_guid = lo_style_border->get_guid( ). + " Create filled style green + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-rgb = zcl_excel_style_color=>c_green. + lo_style_filled->font->name = zcl_excel_style_font=>c_name_cambria. + lo_style_filled->font->scheme = zcl_excel_style_font=>c_scheme_major. + lv_style_filled_green_guid = lo_style_filled->get_guid( ). + + " Create filled style turquoise using legacy excel ver <= 2003 palette. (https://code.sdn.sap.com/spaces/abap2xlsx/tickets/92) + lo_style_filled = lo_excel->add_new_style( ). + lo_excel->legacy_palette->set_color( "replace built-in color from palette with out custom RGB turquoise + ip_index = 16 + ip_color = '0040E0D0' ). + + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-indexed = 16. + lv_style_filled_turquoise_guid = lo_style_filled->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Styles' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Bold text' ip_style = lv_style_bold_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 4 ip_value = 'Underlined text' ip_style = lv_style_underline_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 6 ip_value = 'Borders' ip_style = lv_style_border_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 7 ip_value = 'I''m not a button :)' ip_style = lv_style_button_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 9 ip_value = 'Modified color for Excel 2003' ip_style = lv_style_filled_turquoise_guid ). + " Fill the cell and apply one style + lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + " Change the style + lo_worksheet->set_cell_style( ip_column = 'B' ip_row = 6 ip_style = lv_style_filled_green_guid ). + " Add Style to an empty cell to test Fix for Issue + "#44 Exception ZCX_EXCEL thrown when style is set for an empty cell + " https://code.sdn.sap.com/spaces/abap2xlsx/tickets/44-exception-zcx_excel-thrown-when-style-is-set-for-an-empty-cell + lo_worksheet->set_cell_style( ip_column = 'E' ip_row = 6 ip_style = lv_style_filled_green_guid ). + + +* Demonstrate how to retroactivly change the cellstyle +*Filled text and underlinded text + lo_worksheet->change_cell_style( ip_column = 'B' + ip_row = 5 + ip_font_bold = abap_true + ip_font_italic = abap_true ). + + lo_worksheet->change_cell_style( ip_column = 'D' + ip_row = 4 + ip_font_bold = abap_true + ip_font_italic = abap_true ). + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL36 +REPORT zdemo_excel36. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + col TYPE i. + +DATA: lo_style_arial20 TYPE REF TO zcl_excel_style, + lo_style_times11 TYPE REF TO zcl_excel_style, + lo_style_cambria8red TYPE REF TO zcl_excel_style. + +DATA: lv_style_arial20_guid TYPE zexcel_cell_style, + lv_style_times11_guid TYPE zexcel_cell_style, + lv_style_cambria8red_guid TYPE zexcel_cell_style. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '36_DefaultStyles.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create a bold / italic style + lo_style_arial20 = lo_excel->add_new_style( ). + lo_style_arial20->font->name = zcl_excel_style_font=>c_name_arial. + lo_style_arial20->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_arial20->font->size = 20. + lv_style_arial20_guid = lo_style_arial20->get_guid( ). + + lo_style_times11 = lo_excel->add_new_style( ). + lo_style_times11->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_times11->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_times11->font->size = 11. + lv_style_times11_guid = lo_style_times11->get_guid( ). + + lo_style_cambria8red = lo_excel->add_new_style( ). + lo_style_cambria8red->font->name = zcl_excel_style_font=>c_name_cambria. + lo_style_cambria8red->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_cambria8red->font->size = 8. + lo_style_cambria8red->font->color-rgb = zcl_excel_style_color=>c_red. + lv_style_cambria8red_guid = lo_style_cambria8red->get_guid( ). + + lo_excel->set_default_style( lv_style_arial20_guid ). " Default for all new worksheets + +* 1st sheet - do not change anything --> defaultstyle from lo_excel should apply + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Style for complete document' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 4 ip_value = 'All cells in this sheet are set to font Arial, fontsize 20' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 5 ip_value = 'because no separate style was passed for this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 6 ip_value = 'but a default style was set for the complete instance of zcl_excel' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 1 ip_value = space ). " Missing feature "set active cell - use this to simulate that + + +* 2nd sheet - defaultstyle for this sheet set explicitly ( set to Times New Roman 11 ) + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Style for this sheet' ). + lo_worksheet->zif_excel_sheet_properties~set_style( lv_style_times11_guid ). + + lo_worksheet->set_cell( ip_column = 2 ip_row = 4 ip_value = 'All cells in this sheet are set to font Times New Roman, fontsize 11' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 5 ip_value = 'because this style was passed for this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 6 ip_value = 'thus the default style from zcl_excel does not apply to this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 1 ip_value = space ). " Missing feature "set active cell - use this to simulate that + + +* 3rd sheet - defaultstyle for columns ( set to Times New Roman 11 ) + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Style for 3 columns' ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_column_style_by_guid( ip_style_guid = lv_style_times11_guid ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_column_style_by_guid( ip_style_guid = lv_style_times11_guid ). + column_dimension = lo_worksheet->get_column_dimension( 'F' ). + column_dimension->set_column_style_by_guid( ip_style_guid = lv_style_times11_guid ). + + lo_worksheet->set_cell( ip_column = 2 ip_row = 4 ip_value = 'The columns B,C and F are set to Times New Roman' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 10 ip_value = 'All other cells in this sheet are set to font Arial, fontsize 20' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 11 ip_value = 'because no separate style was passed for this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 12 ip_value = 'but a default style was set for the complete instance of zcl_excel' ). + + lo_worksheet->set_cell( ip_column = 8 ip_row = 1 ip_value = 'Of course' ip_style = lv_style_cambria8red_guid ). + lo_worksheet->set_cell( ip_column = 8 ip_row = 2 ip_value = 'setting a specific style to a cell' ip_style = lv_style_cambria8red_guid ). + lo_worksheet->set_cell( ip_column = 8 ip_row = 3 ip_value = 'takes precedence over all defaults' ip_style = lv_style_cambria8red_guid ). + lo_worksheet->set_cell( ip_column = 8 ip_row = 4 ip_value = 'Here: Cambria 8 in red' ip_style = lv_style_cambria8red_guid ). + + +* Set entry into each of the first 10 columns + DO 20 TIMES. + col = sy-index. + CASE col. + WHEN 2 " B + OR 3 " C + OR 6." F + lo_worksheet->set_cell( ip_column = col ip_row = 6 ip_value = 'Times 11' ). + WHEN OTHERS. + lo_worksheet->set_cell( ip_column = col ip_row = 6 ip_value = 'Arial 20' ). + ENDCASE. + ENDDO. + + lo_worksheet->set_cell( ip_column = 2 ip_row = 1 ip_value = space ). " Missing feature "set active cell - use this to simulate that + + + + lo_excel->set_active_sheet_index( 1 ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + REPORT zdemo_excel37. + +DATA: excel TYPE REF TO zcl_excel, + reader TYPE REF TO zif_excel_reader, + go_error TYPE REF TO cx_root, + gv_message type string. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '37-passthrough.xlsx'. + +SELECTION-SCREEN BEGIN OF BLOCK blx WITH FRAME. +PARAMETERS: p_upfile TYPE string DEFAULT 'c:\temp\whatever.xlsx' LOWER CASE. +SELECTION-SCREEN END OF BLOCK blx. + +INCLUDE zdemo_excel_outputopt_incl. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_upfile. + PERFORM f4_p_upfile CHANGING p_upfile. + + +START-OF-SELECTION. + + TRY. + CREATE OBJECT reader TYPE zcl_excel_reader_2007. +* CREATE OBJECT reader TYPE zcl_excel_reader_xlsm. + excel = reader->load_file( p_upfile ). + + "Use template for charts + excel->use_template = abap_true. +*--------------------------------------------------------------------* +* CL_ABAP_ZIP may have problems reading LibreOffice generated files +* You may have to use alternate ZIP-Class - see comments in issue #234 in abap2xlsx at developers network +* excel = reader->load_file( i_filename = p_upfile +* iv_use_alternate_zip = 'ZCL_EXCEL_ABAP_ZIP' ). +*--------------------------------------------------------------------* + +*** Create output + lcl_output=>output( excel ). + CATCH cx_root INTO go_error. + MESSAGE 'Error reading excelfile' TYPE 'I'. + gv_message = go_error->get_text( ). + IF gv_message IS NOT INITIAL. + MESSAGE gv_message TYPE 'I'. + ENDIF. + ENDTRY. + + +*&---------------------------------------------------------------------* +*& Form F4_P_UPFILE +*&---------------------------------------------------------------------* +FORM f4_p_upfile CHANGING p_upfile TYPE string. + + DATA: lv_repid TYPE syrepid, + lt_fields TYPE dynpread_tabtype, + ls_field LIKE LINE OF lt_fields, + lt_files TYPE filetable. + + lv_repid = sy-repid. + + CALL FUNCTION 'DYNP_VALUES_READ' + EXPORTING + dyname = lv_repid + dynumb = '1000' + request = 'A' + TABLES + dynpfields = lt_fields + EXCEPTIONS + invalid_abapworkarea = 01 + invalid_dynprofield = 02 + invalid_dynproname = 03 + invalid_dynpronummer = 04 + invalid_request = 05 + no_fielddescription = 06 + undefind_error = 07. + READ TABLE lt_fields INTO ls_field WITH KEY fieldname = 'P_UPFILE'. + p_upfile = ls_field-fieldvalue. + + cl_gui_frontend_services=>file_open_dialog( EXPORTING + default_filename = p_upfile + file_filter = zcl_excel_common=>c_xlsx_file_filter + CHANGING + file_table = lt_files + rc = sy-tabix + EXCEPTIONS + OTHERS = 1 ). + READ TABLE lt_files INDEX 1 INTO p_upfile. + +ENDFORM. " F4_P_UPFILE + + + + + + + + + REPORT. + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_drawing TYPE REF TO zcl_excel_drawing. + +TYPES: BEGIN OF gty_icon, +* name TYPE icon_name, "Fix #228 + name TYPE iconname, "Fix #228 + objid TYPE w3objid, + END OF gty_icon, + gtyt_icon TYPE STANDARD TABLE OF gty_icon WITH NON-UNIQUE DEFAULT KEY. + +DATA: lt_icon TYPE gtyt_icon, + lv_row TYPE sytabix, + ls_wwwdatatab TYPE wwwdatatab, + lt_mimedata TYPE STANDARD TABLE OF w3mime WITH NON-UNIQUE DEFAULT KEY, + lv_xstring TYPE xstring. + +FIELD-SYMBOLS: <icon> LIKE LINE OF lt_icon, + <mimedata> LIKE LINE OF lt_mimedata. + +CONSTANTS: gc_save_file_name TYPE string VALUE '38_SAP-Icons.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +TABLES: icon. +SELECT-OPTIONS: s_icon FOR icon-name DEFAULT 'ICON_LED_*' OPTION CP. + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo Icons' ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). + lo_column_dimension->set_auto_size( 'X' ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( 'X' ). + +* Get all icons + SELECT name + INTO TABLE lt_icon + FROM icon + WHERE name IN s_icon + ORDER BY name. + LOOP AT lt_icon ASSIGNING <icon>. + + lv_row = sy-tabix. +*--------------------------------------------------------------------* +* Set name of icon +*--------------------------------------------------------------------* + lo_worksheet->set_cell( ip_row = lv_row + ip_column = 'A' + ip_value = <icon>-name ). +*--------------------------------------------------------------------* +* Check whether the mime-repository holds some icondata for us +*--------------------------------------------------------------------* + +* Get key + SELECT SINGLE objid + INTO <icon>-objid + FROM wwwdata + WHERE text = <icon>-name. + CHECK sy-subrc = 0. " :o( + lo_worksheet->set_cell( ip_row = lv_row + ip_column = 'B' + ip_value = <icon>-objid ). + +* Load mimedata + CLEAR lt_mimedata. + CLEAR ls_wwwdatatab. + ls_wwwdatatab-relid = 'MI' . + ls_wwwdatatab-objid = <icon>-objid. + CALL FUNCTION 'WWWDATA_IMPORT' + EXPORTING + key = ls_wwwdatatab + TABLES + mime = lt_mimedata + EXCEPTIONS + wrong_object_type = 1 + import_error = 2 + OTHERS = 3. + CHECK sy-subrc = 0. " :o( + + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = lv_row + ip_from_col = 'C' ). + CLEAR lv_xstring. + LOOP AT lt_mimedata ASSIGNING <mimedata>. + CONCATENATE lv_xstring <mimedata>-line INTO lv_xstring IN BYTE MODE. + ENDLOOP. + + lo_drawing->set_media( ip_media = lv_xstring + ip_media_type = zcl_excel_drawing=>c_media_type_jpg + ip_width = 16 + ip_height = 14 ). + lo_worksheet->add_drawing( lo_drawing ). + + ENDLOOP. + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL16 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel39. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_drawing TYPE REF TO zcl_excel_drawing. + +DATA lv_value TYPE i. + +DATA: ls_io TYPE skwf_io. + +DATA: ls_upper TYPE zexcel_drawing_location, + ls_lower TYPE zexcel_drawing_location. + +DATA lo_bar1 TYPE REF TO zcl_excel_graph_bars. +DATA lo_bar2 TYPE REF TO zcl_excel_graph_bars. +DATA lo_pie TYPE REF TO zcl_excel_graph_pie. +DATA lo_line TYPE REF TO zcl_excel_graph_line. + +CONSTANTS: gc_save_file_name TYPE string VALUE '39_Charts.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + " Create a pie chart and series + CREATE OBJECT lo_pie. + + CALL METHOD lo_pie->create_serie + EXPORTING + ip_order = 0 + ip_sheet = 'Values' + ip_lbl_from_col = 'B' + ip_lbl_from_row = '1' + ip_lbl_to_col = 'B' + ip_lbl_to_row = '3' + ip_ref_from_col = 'A' + ip_ref_from_row = '1' + ip_ref_to_col = 'A' + ip_ref_to_row = '3' + ip_sername = 'My serie 1'. + + " Set style + lo_pie->set_style( zcl_excel_graph=>c_style_15 ). + + " Create a bar chart, series and axes + CREATE OBJECT lo_bar1. + + CALL METHOD lo_bar1->create_serie + EXPORTING + ip_order = 0 + ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no + ip_lbl = 'Values!$D$1:$D$3' + ip_ref = 'Values!$C$1:$C$3' + ip_sername = 'My serie 1'. + + CALL METHOD lo_bar1->create_serie + EXPORTING + ip_order = 1 + ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no + ip_lbl = 'Values!$B$1:$B$3' + ip_ref = 'Values!$A$1:$A$3' + ip_sername = 'My serie 2'. + + CALL METHOD lo_bar1->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_catax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + CALL METHOD lo_bar1->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_valax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + " Set style + lo_bar1->set_style( zcl_excel_graph=>c_style_default ). + + " Set label to none + lo_bar1->set_print_lbl( zcl_excel_graph_bars=>c_show_false ). + + " Create a bar chart, series and axes + CREATE OBJECT lo_bar2. + + CALL METHOD lo_bar2->create_serie + EXPORTING + ip_order = 0 + ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_yes + ip_lbl = 'Values!$D$1:$D$3' + ip_ref = 'Values!$C$1:$C$3' + ip_sername = 'My serie 1'. + + CALL METHOD lo_bar2->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_catax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + CALL METHOD lo_bar2->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_valax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + " Set layout + lo_bar2->set_show_legend_key( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_values( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_cat_name( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_ser_name( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_percent( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_varycolor( zcl_excel_graph_bars=>c_show_true ). + + " Create a line chart, series and axes + CREATE OBJECT lo_line. + + CALL METHOD lo_line->create_serie + EXPORTING + ip_order = 0 + ip_symbol = zcl_excel_graph_line=>c_symbol_auto + ip_smooth = zcl_excel_graph_line=>c_show_false + ip_lbl = 'Values!$D$1:$D$3' + ip_ref = 'Values!$C$1:$C$3' + ip_sername = 'My serie 1'. + + CALL METHOD lo_line->create_serie + EXPORTING + ip_order = 1 + ip_symbol = zcl_excel_graph_line=>c_symbol_none + ip_smooth = zcl_excel_graph_line=>c_show_false + ip_lbl = 'Values!$B$1:$B$3' + ip_ref = 'Values!$A$1:$A$3' + ip_sername = 'My serie 2'. + + CALL METHOD lo_line->create_serie + EXPORTING + ip_order = 2 + ip_symbol = zcl_excel_graph_line=>c_symbol_auto + ip_smooth = zcl_excel_graph_line=>c_show_false + ip_lbl = 'Values!$F$1:$F$3' + ip_ref = 'Values!$E$1:$E$3' + ip_sername = 'My serie 3'. + + CALL METHOD lo_line->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_line=>c_catax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + CALL METHOD lo_line->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_line=>c_valax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + + + + + + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet (Pie sheet) + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'PieChart' ). + + " Create global drawing, set type as pie chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART PIE' ). + lo_drawing->graph = lo_pie. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_pie. + + "Set chart position (anchor 2 cells) + ls_lower-row = 30. + ls_lower-col = 20. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " BarChart1 sheet + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'BarChart1' ). + + " Create global drawing, set type as bar chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART BARS WITH 2 SERIES' ). + lo_drawing->graph = lo_bar1. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars. + + "Set chart position (anchor 2 cells) + ls_upper-row = 0. + ls_upper-col = 11. + ls_lower-row = 22. + ls_lower-col = 21. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " BarChart2 sheet + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'BarChart2' ). + + " Create global drawing, set type as bar chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART BARS WITH 1 SERIE' ). + lo_drawing->graph = lo_bar2. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars. + + "Set chart position (anchor 2 cells) + ls_upper-row = 0. + ls_upper-col = 0. + ls_lower-row = 30. + ls_lower-col = 20. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " LineChart sheet + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'LineChart' ). + + " Create global drawing, set type as line chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART LINES' ). + lo_drawing->graph = lo_line. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_line. + + "Set chart position (anchor 2 cells) + ls_upper-row = 0. + ls_upper-col = 0. + ls_lower-row = 30. + ls_lower-col = 20. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " Values sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for chart + lv_value = 1. + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = lv_value ). + lv_value = 2. + lo_worksheet->set_cell( ip_column = 'A' ip_row = 2 ip_value = lv_value ). + lv_value = 3. + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = lv_value ). + + " Set labels for chart + lo_worksheet->set_cell( ip_column = 'B' ip_row = 1 ip_value = 'One' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Two' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'Three' ). + + " Set values for chart + lv_value = 3. + lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_value = lv_value ). + lv_value = 2. + lo_worksheet->set_cell( ip_column = 'C' ip_row = 2 ip_value = lv_value ). + lv_value = -1. + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = lv_value ). + + " Set labels for chart + lo_worksheet->set_cell( ip_column = 'D' ip_row = 3 ip_value = 'One (Minus)' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 2 ip_value = 'Two' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 1 ip_value = 'Three' ). + + " Set values for chart + lv_value = 3. + lo_worksheet->set_cell( ip_column = 'E' ip_row = 1 ip_value = lv_value ). + lv_value = 1. + lo_worksheet->set_cell( ip_column = 'E' ip_row = 2 ip_value = lv_value ). + lv_value = 2. + lo_worksheet->set_cell( ip_column = 'E' ip_row = 3 ip_value = lv_value ). + + " Set labels for chart + lo_worksheet->set_cell( ip_column = 'F' ip_row = 3 ip_value = 'Two' ). + lo_worksheet->set_cell( ip_column = 'F' ip_row = 2 ip_value = 'One' ). + lo_worksheet->set_cell( ip_column = 'F' ip_row = 1 ip_value = 'Three' ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL4 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel4. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + + lv_tabcolor TYPE zexcel_s_tabcolor, + + ls_header TYPE zexcel_s_worksheet_head_foot, + ls_footer TYPE zexcel_s_worksheet_head_foot. + +CONSTANTS: gc_save_file_name TYPE string VALUE '04_Sheets.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected. + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the first sheet' ). +* Set color to tab with sheetname - Red + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = 'FF' + ip_green = '00' + ip_blu = '00' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet2!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to second sheet' ip_hyperlink = lo_hyperlink ). + + " Page printing settings + lo_worksheet->sheet_setup->set_page_margins( ip_header = '1' ip_footer = '1' ip_unit = 'cm' ). + lo_worksheet->sheet_setup->black_and_white = 'X'. + lo_worksheet->sheet_setup->fit_to_page = 'X'. " you should turn this on to activate fit_to_height and fit_to_width + lo_worksheet->sheet_setup->fit_to_height = 0. " used only if ip_fit_to_page = 'X' + lo_worksheet->sheet_setup->fit_to_width = 2. " used only if ip_fit_to_page = 'X' + lo_worksheet->sheet_setup->orientation = zcl_excel_sheet_setup=>c_orientation_landscape. + lo_worksheet->sheet_setup->page_order = zcl_excel_sheet_setup=>c_ord_downthenover. + lo_worksheet->sheet_setup->paper_size = zcl_excel_sheet_setup=>c_papersize_a4. + lo_worksheet->sheet_setup->scale = 80. " used only if ip_fit_to_page = SPACE + + " Header and Footer + ls_header-right_value = 'print date &D'. + ls_header-right_font-size = 8. + ls_header-right_font-name = zcl_excel_style_font=>c_name_arial. + + ls_footer-left_value = '&Z&F'. "Path / Filename + ls_footer-left_font = ls_header-right_font. + ls_footer-right_value = 'page &P of &N'. "page x of y + ls_footer-right_font = ls_header-right_font. + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). +* Set color to tab with sheetname - Green + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = '00' + ip_green = 'FF' + ip_blu = '00' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected. + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the second sheet' ). + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet1!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to first sheet' ip_hyperlink = lo_hyperlink ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 4 ip_value = 'Sheet3 is hidden' ). + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet3' ). +* Set color to tab with sheetname - Blue + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = '00' + ip_green = '00' + ip_blu = 'FF' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_hidden. + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet4' ). +* Set color to tab with sheetname - other color + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = '00' + ip_green = 'FF' + ip_blu = 'FF' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Cell B3 has value 0' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 0 ). + lo_worksheet->zif_excel_sheet_properties~show_zeros = zif_excel_sheet_properties=>c_hidezero. + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + lo_excel->set_active_sheet_index_by_name( 'Sheet1' ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + REPORT. + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lv_row TYPE zexcel_cell_row, + lv_col TYPE i, + lv_row_char TYPE char10, + lv_value TYPE string, + ls_fontcolor TYPE zexcel_style_color_argb. + +CONSTANTS: gc_save_file_name TYPE string VALUE '40_Printsettings.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo Printsettings' ). + +*--------------------------------------------------------------------* +* Prepare sheet with trivial data +* - first 4 columns will have fontocolor set +* - first 3 rows will have fontcolor set +* These marked cells will be used for repeatable rows/columns on printpages +*--------------------------------------------------------------------* + DO 100 TIMES. " Rows + + lv_row = sy-index . + WRITE lv_row TO lv_row_char. + + DO 20 TIMES. + + lv_col = sy-index - 1. + CONCATENATE sy-abcde+lv_col(1) lv_row_char INTO lv_value. + lv_col = sy-index. + lo_worksheet->set_cell( ip_row = lv_row + ip_column = lv_col + ip_value = lv_value ). + + TRY. + IF lv_row <= 3. + lo_worksheet->change_cell_style( ip_column = lv_col + ip_row = lv_row + ip_fill_filltype = zcl_excel_style_fill=>c_fill_solid + ip_fill_fgcolor_rgb = zcl_excel_style_color=>c_yellow ). + ENDIF. + IF lv_col <= 4. + lo_worksheet->change_cell_style( ip_column = lv_col + ip_row = lv_row + ip_font_color_rgb = zcl_excel_style_color=>c_red ). + ENDIF. + CATCH zcx_excel . + ENDTRY. + + ENDDO. + + + + ENDDO. + + +*--------------------------------------------------------------------* +* Printsettings +*--------------------------------------------------------------------* + TRY. + lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = 'A' + iv_columns_to = 'D' ). + lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = 1 + iv_rows_to = 3 ). + CATCH zcx_excel . + ENDTRY. + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL5 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel5. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional. + +DATA: ls_iconset TYPE zexcel_conditional_iconset. + + + +CONSTANTS: gc_save_file_name TYPE string VALUE '05_Conditional.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + + + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights2. + ls_iconset-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo1_value = '0'. + ls_iconset-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo2_value = '33'. + ls_iconset-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo3_value = '66'. + ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + lo_style_conditional->mode_iconset = ls_iconset. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 4 + ip_stop_column = 'C' + ip_stop_row = 8 ). + + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 100 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 1000 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 150 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 500 ). + + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights2. + ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_false. + lo_style_conditional->mode_iconset = ls_iconset. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 4 + ip_stop_column = 'E' + ip_stop_row = 8 ). + + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = 100 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'E' ip_value = 1000 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'E' ip_value = 150 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'E' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'E' ip_value = 500 ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL6 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel6. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_row TYPE syindex, + lv_formula TYPE string. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '06_Formulas.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + +*--------------------------------------------------------------------* +* Get some testdata +*--------------------------------------------------------------------* + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 100 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 1000 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 150 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = -10 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 500 ). + + +*--------------------------------------------------------------------* +* Demonstrate using formulas +*--------------------------------------------------------------------* + lo_worksheet->set_cell( ip_row = 9 ip_column = 'C' ip_formula = 'SUM(C4:C8)' ). + + +*--------------------------------------------------------------------* +* Demonstrate standard EXCEL-behaviour when copying a formula to another cell +* by calculating the resulting formula to put into another cell +*--------------------------------------------------------------------* + DO 10 TIMES. + + lv_formula = zcl_excel_common=>shift_formula( iv_reference_formula = 'SUM(C4:C8)' + iv_shift_cols = 0 " Offset in Columns - here we copy in same column --> 0 + iv_shift_rows = sy-index ). " Offset in Row - here we copy downward --> sy-index + lv_row = 9 + sy-index. " Absolute row = sy-index rows below reference cell + lo_worksheet->set_cell( ip_row = lv_row ip_column = 'C' ip_formula = lv_formula ). + + ENDDO. + +*--------------------------------------------------------------------* +*** Create output +*--------------------------------------------------------------------* + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL7 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel7. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional. + +DATA: ls_iconset3 TYPE zexcel_conditional_iconset, + ls_iconset4 TYPE zexcel_conditional_iconset, + ls_iconset5 TYPE zexcel_conditional_iconset, + ls_databar TYPE zexcel_conditional_databar, + ls_colorscale2 TYPE zexcel_conditional_colorscale, + ls_colorscale3 TYPE zexcel_conditional_colorscale. + +CONSTANTS: gc_save_file_name TYPE string VALUE '07_ConditionalAll.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + ls_iconset3-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset3-cfvo1_value = '0'. + ls_iconset3-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset3-cfvo2_value = '33'. + ls_iconset3-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset3-cfvo3_value = '66'. + ls_iconset3-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + ls_iconset4-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo1_value = '0'. + ls_iconset4-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo2_value = '25'. + ls_iconset4-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo3_value = '50'. + ls_iconset4-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo4_value = '75'. + ls_iconset4-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + ls_iconset5-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo1_value = '0'. + ls_iconset5-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo2_value = '20'. + ls_iconset5-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo3_value = '40'. + ls_iconset5-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo4_value = '60'. + ls_iconset5-cfvo5_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo5_value = '80'. + ls_iconset5-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + ls_databar-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. + ls_databar-cfvo1_value = '0'. + ls_databar-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_max. + ls_databar-cfvo2_value = '0'. + ls_databar-colorrgb = 'FF638EC6'. + + ls_colorscale2-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. + ls_colorscale2-cfvo1_value = '0'. + ls_colorscale2-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percentile. + ls_colorscale2-cfvo2_value = '50'. + ls_colorscale2-colorrgb1 = 'FFF8696B'. + ls_colorscale2-colorrgb2 = 'FF63BE7B'. + + ls_colorscale3-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. + ls_colorscale3-cfvo1_value = '0'. + ls_colorscale3-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percentile. + ls_colorscale3-cfvo2_value = '50'. + ls_colorscale3-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_max. + ls_colorscale3-cfvo3_value = '0'. + ls_colorscale3-colorrgb1 = 'FFF8696B'. + ls_colorscale3-colorrgb2 = 'FFFFEB84'. + ls_colorscale3-colorrgb3 = 'FF63BE7B'. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + +* ICONSET + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3arrows. + + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 5 + ip_stop_column = 'B' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'C_ICONSET_3ARROWS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3arrowsgray. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 5 + ip_stop_column = 'C' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'C_ICONSET_3ARROWSGRAY' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'C' ip_value = 50 ). + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3flags. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 5 + ip_stop_column = 'D' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'C_ICONSET_3FLAGS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 5 + ip_stop_column = 'E' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = 'C_ICONSET_3TRAFFICLIGHTS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'E' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'E' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'E' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'E' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'E' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights2. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'F' + ip_start_row = 5 + ip_stop_column = 'F' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'F' ip_value = 'C_ICONSET_3TRAFFICLIGHTS2' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'F' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'F' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'F' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'F' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'F' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3signs. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'G' + ip_start_row = 5 + ip_stop_column = 'G' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'G' ip_value = 'C_ICONSET_3SIGNS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'G' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'G' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'G' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'G' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'G' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3symbols. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'H' + ip_start_row = 5 + ip_stop_column = 'H' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'H' ip_value = 'C_ICONSET_3SYMBOLS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'H' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'H' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'H' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'H' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'H' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3symbols2. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'I' + ip_start_row = 5 + ip_stop_column = 'I' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'I' ip_value = 'C_ICONSET_3SYMBOLS2' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'I' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'I' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'I' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'I' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'I' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4arrows. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 12 + ip_stop_column = 'B' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'B' ip_value = 'C_ICONSET_4ARROWS' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4arrowsgray. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 12 + ip_stop_column = 'C' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'C' ip_value = 'C_ICONSET_4ARROWSGRAY' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'C' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4redtoblack. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 12 + ip_stop_column = 'D' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'D' ip_value = 'C_ICONSET_4REDTOBLACK' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4rating. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 12 + ip_stop_column = 'E' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'E' ip_value = 'C_ICONSET_4RATING' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'E' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'E' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'E' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'E' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'E' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4trafficlights. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'F' + ip_start_row = 12 + ip_stop_column = 'F' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'F' ip_value = 'C_ICONSET_4TRAFFICLIGHTS' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'F' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'F' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'F' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'F' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'F' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5arrows. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 19 + ip_stop_column = 'B' + ip_stop_row = 23 ). + + lo_worksheet->set_cell( ip_row = 18 ip_column = 'B' ip_value = 'C_ICONSET_5ARROWS' ). + lo_worksheet->set_cell( ip_row = 19 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 20 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 21 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 22 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 23 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5arrowsgray. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 19 + ip_stop_column = 'C' + ip_stop_row = 23 ). + + lo_worksheet->set_cell( ip_row = 18 ip_column = 'C' ip_value = 'C_ICONSET_5ARROWSGRAY' ). + lo_worksheet->set_cell( ip_row = 19 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 20 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 21 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 22 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 23 ip_column = 'C' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5rating. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 19 + ip_stop_column = 'D' + ip_stop_row = 23 ). + + lo_worksheet->set_cell( ip_row = 18 ip_column = 'D' ip_value = 'C_ICONSET_5RATING' ). + lo_worksheet->set_cell( ip_row = 19 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 20 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 21 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 22 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 23 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5quarters. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 19 + ip_stop_column = 'E' + ip_stop_row = 23 ). + +* DATABAR + + lo_worksheet->set_cell( ip_row = 25 ip_column = 'B' ip_value = 'DATABAR' ). + lo_worksheet->set_cell( ip_row = 26 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 27 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 28 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 29 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 30 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_databar. + lo_style_conditional->priority = 1. + lo_style_conditional->mode_databar = ls_databar. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 26 + ip_stop_column = 'B' + ip_stop_row = 30 ). + +* COLORSCALE + + lo_worksheet->set_cell( ip_row = 25 ip_column = 'C' ip_value = 'COLORSCALE 2 COLORS' ). + lo_worksheet->set_cell( ip_row = 26 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 27 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 28 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 29 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 30 ip_column = 'C' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_colorscale. + lo_style_conditional->priority = 1. + lo_style_conditional->mode_colorscale = ls_colorscale2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 26 + ip_stop_column = 'C' + ip_stop_row = 30 ). + + + lo_worksheet->set_cell( ip_row = 25 ip_column = 'D' ip_value = 'COLORSCALE 3 COLORS' ). + lo_worksheet->set_cell( ip_row = 26 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 27 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 28 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 29 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 30 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_colorscale. + lo_style_conditional->priority = 1. + lo_style_conditional->mode_colorscale = ls_colorscale3. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 26 + ip_stop_column = 'D' + ip_stop_row = 30 ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL8 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel8. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range. + +DATA: lv_title TYPE zexcel_sheet_title. + +CONSTANTS: gc_save_file_name TYPE string VALUE '08_Range.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lv_title = 'Sheet1'. + lo_worksheet->set_title( lv_title ). + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'range'. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'C' + ip_start_row = 4 + ip_stop_column = 'C' + ip_stop_row = 8 ). + + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'Apple' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 'Banana' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 'Blueberry' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Ananas' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Grapes' ). + + " Define another Range with a name longer than 40 characters that + " tests the fix of issue #168 ranges namescan be only up to 20 chars + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'A_range_with_a_name_that_is_longer_than_20_characters'. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'D' + ip_start_row = 4 + ip_stop_column = 'D' + ip_stop_row = 5 ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'Range Value 1' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 'Range Value 2' ). + + " issue #163 + " Define another Range with sheet visibility + lo_range = lo_worksheet->add_new_range( ). + lo_range->name = 'A_range_with_sheet_visibility'. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'E' + ip_start_row = 4 + ip_stop_column = 'E' + ip_stop_row = 5 ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = 'Range Value 3' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'E' ip_value = 'Range Value 4' ). + " issue #163 + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL9 +*& +*&---------------------------------------------------------------------* +*& abap2xlsx Demo: Data validations +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel9. + +CONSTANTS: c_fruits TYPE string VALUE 'Fruits', + c_vegetables TYPE string VALUE 'Vegetables', + c_meat TYPE string VALUE 'Meat', + c_fish TYPE string VALUE 'Fish'. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation. + +DATA: row TYPE zexcel_cell_row. + + +DATA: lv_title TYPE zexcel_sheet_title. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '09_DataValidation.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_sbook TYPE flag. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lv_title = 'Data Validation'. + lo_worksheet->set_title( lv_title ). + " Set values for dropdown + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = c_fish ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 'Anchovy' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 'Carp' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 'Catfish' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 'Cod' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 'Eel' ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'A' ip_value = 'Haddock' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_fish. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'B' ip_value = c_meat ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'Pork' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'B' ip_value = 'Beef' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Chicken' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'B' ip_value = 'Turkey' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_meat. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'B' + ip_start_row = 4 + ip_stop_column = 'B' + ip_stop_row = 7 ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'C' ip_value = c_fruits ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'Apple' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 'Banana' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 'Blueberry' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Ananas' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Grapes' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_fruits. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'C' + ip_start_row = 4 + ip_stop_column = 'C' + ip_stop_row = 8 ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'D' ip_value = c_vegetables ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'Cucumber' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 'Sweet pepper ' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'D' ip_value = 'Lettuce' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_vegetables. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'D' + ip_start_row = 4 + ip_stop_column = 'D' + ip_stop_row = 6 ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lv_title = 'Table with Data Validation'. + lo_worksheet->set_title( lv_title ). + + " Maximum Text length + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'Validate Maximum Text length of <= 10 in Cell A2:' ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = 'abcdefghij' ). + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_textlength. + lo_data_validation->operator = zcl_excel_data_validation=>c_operator_lessthanorequal. + lo_data_validation->formula1 = 10. + lo_data_validation->cell_row = 2. + lo_data_validation->cell_column = 'A'. + + " Integer Value between 1 and 10 + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 'Validate Integer Value between 1 and 10 in Cell A5:' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = '5' ). + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_whole. + lo_data_validation->operator = zcl_excel_data_validation=>c_operator_between. + lo_data_validation->formula1 = 1. + lo_data_validation->formula2 = 10. + lo_data_validation->prompttitle = 'Range'. + lo_data_validation->prompt = 'Enter a value between 1 and 10'. + lo_data_validation->errortitle = 'Error'. + lo_data_validation->error = 'You have entered a wrong value. Please use only numbers between 1 and 10.'. + lo_data_validation->cell_row = 5. + lo_data_validation->cell_column = 'A'. + + " Evaluation by Formula from issue #161 + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 'Validate if B8 contains a "-":' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 'Text' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'B' ip_value = '-' ). + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_custom. + lo_data_validation->formula1 = '"IF(B8<>"""";INDIRECT(LEFT(B8;SEARCH(""-"";B8;1)));EMPTY)"'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'A'. + + " There was an error when data validation was combined with cell merges this should test that: + lo_worksheet->set_cell( ip_row = 10 ip_column = 'A' ip_value = 'Demo for data validation with a dropdown list' ). + lo_worksheet->set_merge( ip_row = 10 ip_column_start = 'A' ip_column_end = 'F' ). + + " Headlines + lo_worksheet->set_cell( ip_row = 11 ip_column = 'A' ip_value = c_fruits ). + lo_worksheet->set_cell( ip_row = 11 ip_column = 'B' ip_value = c_vegetables ). + + row = 12. + WHILE row < 20. " Starting with 14500 the data validation is dropped 14000 are still ok + " 1st validation + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_fruits. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'A'. + lo_worksheet->set_cell( ip_row = row ip_column = 'A' ip_value = 'Select a value' ). + " 2nd + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_vegetables. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'B'. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = 'Select a value' ). + " 3rd + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_meat. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = 'Select a value' ). + " 4th + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_fish. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'D'. + lo_worksheet->set_cell( ip_row = row ip_column = 'D' ip_value = 'Select a value' ). + " Increment row + row = row + 1. + ENDWHILE. + + IF p_sbook = abap_true. + DATA: bookings type TABLE OF sbook. + + lo_worksheet = lo_excel->add_new_worksheet( ). + lv_title = 'SBOOK'. + lo_worksheet->set_title( lv_title ). + + SELECT * from sbook INTO TABLE bookings UP TO 4000 ROWS. + + lo_worksheet->bind_table( + EXPORTING + ip_table = bookings +* it_field_catalog = " Table binding field catalog +* is_table_settings = " Excel table binding settings +* IMPORTING +* es_table_settings = " Excel table binding settings + ). + ENDIF. + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Include ZDEMO_EXCEL_OUTPUTOPT_INCL +*&---------------------------------------------------------------------* +CLASS lcl_output DEFINITION CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS: output IMPORTING cl_excel TYPE REF TO zcl_excel, + f4_path RETURNING value(selected_folder) TYPE string, + parametertexts. + + PRIVATE SECTION. + METHODS: download_frontend, + download_backend, + display_online, + send_email. + + DATA: xdata TYPE xstring, " Will be used for sending as email + t_rawdata TYPE solix_tab, " Will be used for downloading or open directly + bytecount TYPE i. " Will be used for downloading or open directly +ENDCLASS. "lcl_output DEFINITION + + +SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE txt_bl1. +PARAMETERS: rb_down RADIOBUTTON GROUP rb1 DEFAULT 'X' USER-COMMAND space. + +PARAMETERS: rb_back RADIOBUTTON GROUP rb1. + +PARAMETERS: rb_show RADIOBUTTON GROUP rb1. + +PARAMETERS: rb_send RADIOBUTTON GROUP rb1. + +PARAMETERS: p_path TYPE string LOWER CASE MODIF ID pat. +PARAMETERS: p_email TYPE string LOWER CASE MODIF ID ema. +PARAMETERS: p_backfn TYPE text40 NO-DISPLAY. +SELECTION-SCREEN END OF BLOCK bl1. + + +AT SELECTION-SCREEN OUTPUT. + LOOP AT SCREEN. + + IF rb_down IS INITIAL AND screen-group1 = 'PAT'. + screen-input = 0. + screen-invisible = 1. + ENDIF. + + IF rb_send IS INITIAL AND screen-group1 = 'EMA'. + screen-input = 0. + screen-invisible = 1. + ENDIF. + + MODIFY SCREEN. + + ENDLOOP. + +INITIALIZATION. + IF sy-batch IS INITIAL. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = p_path ). + cl_gui_cfw=>flush( ). + ENDIF. + lcl_output=>parametertexts( ). " If started in language w/o textelements translated set defaults + sy-title = gc_save_file_name. + txt_bl1 = 'Output options'(bl1). + p_backfn = gc_save_file_name. " Use as default if nothing else is supplied by submit + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + p_path = lcl_output=>f4_path( ). + + +*----------------------------------------------------------------------* +* CLASS lcl_output IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_output IMPLEMENTATION. + METHOD output. + + DATA: cl_output TYPE REF TO lcl_output, + cl_writer TYPE REF TO zif_excel_writer. + + CREATE OBJECT cl_output. + CREATE OBJECT cl_writer TYPE zcl_excel_writer_2007. + cl_output->xdata = cl_writer->write_file( cl_excel ). + +* After 6.40 via cl_bcs_convert + cl_output->t_rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstring = cl_output->xdata ). + cl_output->bytecount = xstrlen( cl_output->xdata ). + +* before 6.40 +* CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' +* EXPORTING +* buffer = cl_output->xdata +* IMPORTING +* output_length = cl_output->bytecount +* TABLES +* binary_tab = cl_output->t_rawdata. + + CASE 'X'. + WHEN rb_down. + IF sy-batch IS INITIAL. + cl_output->download_frontend( ). + ELSE. + MESSAGE e001(00) WITH 'Frontenddownload impossible in background processing'. + ENDIF. + + WHEN rb_back. + cl_output->download_backend( ). + + WHEN rb_show. + IF sy-batch IS INITIAL. + cl_output->display_online( ). + ELSE. + MESSAGE e001(00) WITH 'Online display absurd in background processing'. + ENDIF. + + WHEN rb_send. + cl_output->send_email( ). + + ENDCASE. + ENDMETHOD. "output + + METHOD f4_path. + DATA: new_path TYPE string, + repid TYPE syrepid, + dynnr TYPE sydynnr, + lt_dynpfields TYPE TABLE OF dynpread, + ls_dynpfields LIKE LINE OF lt_dynpfields. + +* Get current value + dynnr = sy-dynnr. + repid = sy-repid. + ls_dynpfields-fieldname = 'P_PATH'. + APPEND ls_dynpfields TO lt_dynpfields. + + CALL FUNCTION 'DYNP_VALUES_READ' + EXPORTING + dyname = repid + dynumb = dynnr + TABLES + dynpfields = lt_dynpfields + EXCEPTIONS + invalid_abapworkarea = 1 + invalid_dynprofield = 2 + invalid_dynproname = 3 + invalid_dynpronummer = 4 + invalid_request = 5 + no_fielddescription = 6 + invalid_parameter = 7 + undefind_error = 8 + double_conversion = 9 + stepl_not_found = 10 + OTHERS = 11. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + EXIT. + ENDIF. + + READ TABLE lt_dynpfields INTO ls_dynpfields INDEX 1. + + new_path = ls_dynpfields-fieldvalue. + selected_folder = new_path. + + cl_gui_frontend_services=>directory_browse( + EXPORTING + window_title = 'Select path to download EXCEL-file' + initial_folder = new_path + CHANGING + selected_folder = new_path + EXCEPTIONS + cntl_error = 1 + error_no_gui = 2 + not_supported_by_gui = 3 + OTHERS = 4 + ). + cl_gui_cfw=>flush( ). + CHECK new_path IS NOT INITIAL. + selected_folder = new_path. + + ENDMETHOD. "f4_path + + METHOD parametertexts. +* If started in language w/o textelements translated set defaults +* Furthermore I don't have to change the selectiontexts of all demoreports. + DEFINE default_parametertext. + if %_&1_%_app_%-text = '&1' or + %_&1_%_app_%-text is initial. + %_&1_%_app_%-text = &2. + endif. + END-OF-DEFINITION. + + default_parametertext: rb_down 'Save to frontend', + rb_back 'Save to backend', + rb_show 'Direct display', + rb_send 'Send via email', + + p_path 'Frontend-path to download to', + p_email 'Email to send xlsx to'. + + ENDMETHOD. "parametertexts + + METHOD: download_frontend. + DATA: filename TYPE string. +* I don't like p_path here - but for this include it's ok + filename = p_path. +* Add trailing "\" or "/" + IF filename CA '/'. + REPLACE REGEX '([^/])\s*$' IN filename WITH '$1/' . + ELSE. + REPLACE REGEX '([^\\])\s*$' IN filename WITH '$1\\'. + ENDIF. + + CONCATENATE filename gc_save_file_name INTO filename. +* Get trailing blank + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = bytecount + filename = filename + filetype = 'BIN' + CHANGING data_tab = t_rawdata ). + ENDMETHOD. "download_frontend + + METHOD download_backend. + DATA: bytes_remain TYPE i. + FIELD-SYMBOLS: <rawdata> LIKE LINE OF t_rawdata. + + OPEN DATASET p_backfn FOR OUTPUT IN BINARY MODE. + CHECK sy-subrc = 0. + + bytes_remain = bytecount. + + LOOP AT t_rawdata ASSIGNING <rawdata>. + + AT LAST. + CHECK bytes_remain >= 0. + TRANSFER <rawdata> TO p_backfn LENGTH bytes_remain. + EXIT. + ENDAT. + + TRANSFER <rawdata> TO p_backfn. + SUBTRACT 255 FROM bytes_remain. " Solix hat Länge 255 + + ENDLOOP. + + CLOSE DATASET p_backfn. + + + + + IF sy-calld = 'X'. " no need to display anything if download was selected and report was called for demo purposes + LEAVE PROGRAM. + ELSE. + MESSAGE 'Data transferred to default backend directory' TYPE 'I'. + ENDIF. + ENDMETHOD. "download_backend + + METHOD display_online. + DATA:error TYPE REF TO i_oi_error, + t_errors TYPE STANDARD TABLE OF REF TO i_oi_error WITH NON-UNIQUE DEFAULT KEY, + cl_control TYPE REF TO i_oi_container_control,"OIContainerCtrl + cl_document TYPE REF TO i_oi_document_proxy. "Office Dokument + + c_oi_container_control_creator=>get_container_control( IMPORTING control = cl_control + error = error ). + APPEND error TO t_errors. + + cl_control->init_control( EXPORTING inplace_enabled = 'X' + no_flush = 'X' + r3_application_name = 'Demo Document Container' + parent = cl_gui_container=>screen0 + IMPORTING error = error + EXCEPTIONS OTHERS = 2 ). + APPEND error TO t_errors. + + cl_control->get_document_proxy( EXPORTING document_type = 'Excel.Sheet' " EXCEL + no_flush = ' ' + IMPORTING document_proxy = cl_document + error = error ). + APPEND error TO t_errors. +* Errorhandling should be inserted here + + cl_document->open_document_from_table( EXPORTING document_size = bytecount + document_table = t_rawdata + open_inplace = 'X' ). + + WRITE: '.'. " To create an output. That way screen0 will exist + ENDMETHOD. "display_online + + METHOD send_email. +* Needed to send emails + DATA: bcs_exception TYPE REF TO cx_bcs, + errortext TYPE string, + cl_send_request TYPE REF TO cl_bcs, + cl_document TYPE REF TO cl_document_bcs, + cl_recipient TYPE REF TO if_recipient_bcs, + cl_sender TYPE REF TO cl_cam_address_bcs, + t_attachment_header TYPE soli_tab, + wa_attachment_header LIKE LINE OF t_attachment_header, + attachment_subject TYPE sood-objdes, + + sood_bytecount TYPE sood-objlen, + mail_title TYPE so_obj_des, + t_mailtext TYPE soli_tab, + wa_mailtext LIKE LINE OF t_mailtext, + send_to TYPE adr6-smtp_addr, + sent TYPE os_boolean. + + + mail_title = 'Mail title'. + wa_mailtext = 'Mailtext'. + APPEND wa_mailtext TO t_mailtext. + + TRY. +* Create send request + cl_send_request = cl_bcs=>create_persistent( ). +* Create new document with mailtitle and mailtextg + cl_document = cl_document_bcs=>create_document( i_type = 'RAW' "#EC NOTEXT + i_text = t_mailtext + i_subject = mail_title ). +* Add attachment to document +* since the new excelfiles have an 4-character extension .xlsx but the attachment-type only holds 3 charactes .xls, +* we have to specify the real filename via attachment header +* Use attachment_type xls to have SAP display attachment with the excel-icon + attachment_subject = gc_save_file_name. + CONCATENATE '&SO_FILENAME=' attachment_subject INTO wa_attachment_header. + APPEND wa_attachment_header TO t_attachment_header. +* Attachment + sood_bytecount = bytecount. " next method expects sood_bytecount instead of any positive integer *sigh* + cl_document->add_attachment( i_attachment_type = 'XLS' "#EC NOTEXT + i_attachment_subject = attachment_subject + i_attachment_size = sood_bytecount + i_att_content_hex = t_rawdata + i_attachment_header = t_attachment_header ). + +* add document to send request + cl_send_request->set_document( cl_document ). + +* set sender in case if no own email is availabe +* cl_sender = cl_cam_address_bcs=>create_internet_address( 'sender@sender.sender' ). +* cl_send_request->set_sender( cl_sender ). + +* add recipient(s) - here only 1 will be needed + send_to = p_email. + IF send_to IS INITIAL. + send_to = 'no_email@no_email.no_email'. " Place into SOST in any case for demonstration purposes + ENDIF. + cl_recipient = cl_cam_address_bcs=>create_internet_address( send_to ). + cl_send_request->add_recipient( cl_recipient ). + +* Und abschicken + sent = cl_send_request->send( i_with_error_screen = 'X' ). + + COMMIT WORK. + + IF sent IS INITIAL. + MESSAGE i500(sbcoms) WITH p_email. + ELSE. + MESSAGE s022(so). + MESSAGE 'Document ready to be sent - Check SOST or SCOT' TYPE 'I'. + ENDIF. + + CATCH cx_bcs INTO bcs_exception. + errortext = bcs_exception->if_message~get_text( ). + MESSAGE errortext TYPE 'I'. + + ENDTRY. + ENDMETHOD. "send_email + + +ENDCLASS. "lcl_output IMPLEMENTATION + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched1. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo01' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_reader TYPE REF TO zif_excel_reader, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +DATA: lt_files TYPE filetable, + ls_file TYPE file_table, + lv_rc TYPE i, + lv_value TYPE zexcel_cell_value. + +CONSTANTS: gc_save_file_name TYPE string VALUE 'TechEd01.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + +******************************* +* abap2xlsx read XLSX * +******************************* + CREATE OBJECT lo_excel_reader TYPE zcl_excel_reader_2007. + lo_excel = lo_excel_reader->load_file( lv_full_path ). + + lo_excel->set_active_sheet_index( 1 ). + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_worksheet->get_cell( EXPORTING ip_column = 'C' + ip_row = 10 + IMPORTING ep_value = lv_value ). + + WRITE: 'abap2xlsx total score is ', lv_value. + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED2 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched2. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lv_style_title_guid TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_style_green TYPE REF TO zcl_excel_style, + lo_style_yellow TYPE REF TO zcl_excel_style, + lo_style_red TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lv_style_title_guid TYPE zexcel_cell_style, + lv_style_green_guid TYPE zexcel_cell_style, + lv_style_yellow_guid TYPE zexcel_cell_style, + lv_style_red_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + +* ls_key-relid = 'MI'. +* ls_key-objid = 'WBLOGO'. +* lo_drawing->set_media_www( ip_key = ls_key +* ip_width = 140 +* ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " defne conditional styles + lo_style_green = lo_excel->add_new_style( ). + lo_style_green->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_green->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. + lv_style_green_guid = lo_style_green->get_guid( ). + + lo_style_yellow = lo_excel->add_new_style( ). + lo_style_yellow->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_yellow->fill->bgcolor-rgb = zcl_excel_style_color=>c_yellow. + lv_style_yellow_guid = lo_style_yellow->get_guid( ). + + lo_style_red = lo_excel->add_new_style( ). + lo_style_red->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_red->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. + lv_style_red_guid = lo_style_red->get_guid( ). + + " add conditional formatting + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_green_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 1. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_yellow_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '0'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_red_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 3. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_style_green TYPE REF TO zcl_excel_style, + lo_style_yellow TYPE REF TO zcl_excel_style, + lo_style_red TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lv_style_title_guid TYPE zexcel_cell_style, + lv_style_green_guid TYPE zexcel_cell_style, + lv_style_yellow_guid TYPE zexcel_cell_style, + lv_style_red_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis, + ls_key TYPE wwwdatatab. + +DATA: lo_send_request TYPE REF TO cl_bcs, + lo_document TYPE REF TO cl_document_bcs, + lo_sender TYPE REF TO cl_sapuser_bcs, + lo_recipient TYPE REF TO cl_sapuser_bcs, + lo_recipient_i TYPE REF TO CL_CAM_ADDRESS_BCS. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lv_bytecount_c TYPE sood-objlen, + lt_file_tab TYPE solix_tab. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " defne conditional styles + lo_style_green = lo_excel->add_new_style( ). + lo_style_green->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_green->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. + lv_style_green_guid = lo_style_green->get_guid( ). + + lo_style_yellow = lo_excel->add_new_style( ). + lo_style_yellow->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_yellow->fill->bgcolor-rgb = zcl_excel_style_color=>c_yellow. + lv_style_yellow_guid = lo_style_yellow->get_guid( ). + + lo_style_red = lo_excel->add_new_style( ). + lo_style_red->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_red->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. + lv_style_red_guid = lo_style_red->get_guid( ). + + " add conditional formatting + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_green_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 1. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_yellow_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '0'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_red_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 3. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + lv_bytecount_c = lv_bytecount. + + " Send via email + lo_document = cl_document_bcs=>create_document( i_type = 'RAW' + i_subject = 'Demo TechEd' ). + + lo_document->add_attachment( i_attachment_type = 'EXT' + i_attachment_subject = 'abap2xlsx.xlsx' + i_attachment_size = lv_bytecount_c + i_att_content_hex = lt_file_tab ). + + lo_sender = cl_sapuser_bcs=>create( sy-uname ). + lo_recipient = cl_sapuser_bcs=>create( sy-uname ). +* lo_recipient_i = cl_cam_address_bcs=>create_internet_address( 'ivan.femia@techedge.it' ). + + lo_send_request = cl_bcs=>create_persistent( ). + lo_send_request->set_document( lo_document ). + lo_send_request->set_sender( lo_sender ). + lo_send_request->add_recipient( lo_recipient ). + lo_send_request->set_send_immediately( abap_true ). + lo_send_request->send( ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel3. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +DATA: ls_table_settings TYPE zexcel_s_table_settings. + + +DATA: lv_title TYPE zexcel_sheet_title, + lt_carr TYPE TABLE OF scarr, + row TYPE zexcel_cell_row VALUE 2, + lo_range TYPE REF TO zcl_excel_range. +DATA: lo_data_validation TYPE REF TO zcl_excel_data_validation. +FIELD-SYMBOLS: <carr> LIKE LINE OF lt_carr. + +CONSTANTS: c_airlines TYPE string VALUE 'Airlines'. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '03_iTab.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_empty TYPE flag. + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Internal table'). + + DATA lt_test TYPE TABLE OF sflight. + + IF p_empty <> abap_true. + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + ENDIF. + + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2. + ls_table_settings-show_row_stripes = abap_true. + ls_table_settings-nofilters = abap_true. + + lo_worksheet->bind_table( ip_table = lt_test + is_table_settings = ls_table_settings ). + + lo_worksheet->freeze_panes( ip_num_rows = 3 ). "freeze column headers when scrolling + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'E' ). "make date field a bit wider + column_dimension->set_width( ip_width = 11 ). + " Add another table for data validations + lo_worksheet = lo_excel->add_new_worksheet( ). + lv_title = 'Data Validation'. + lo_worksheet->set_title( lv_title ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = c_airlines ). + SELECT * FROM scarr INTO TABLE lt_carr. "#EC CI_NOWHERE + LOOP AT lt_carr ASSIGNING <carr>. + lo_worksheet->set_cell( ip_row = row ip_column = 'A' ip_value = <carr>-carrid ). + row = row + 1. + ENDLOOP. + row = row - 1. + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_airlines. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'A' + ip_start_row = 2 + ip_stop_column = 'A' + ip_stop_row = row ). + " Set Data Validation + lo_excel->set_active_sheet_index( 1 ). + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_airlines. + lo_data_validation->cell_row = 4. + lo_data_validation->cell_column = 'C'. + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZABAP2XLSX_DEMO_SHOW +*&---------------------------------------------------------------------* +REPORT zabap2xlsx_demo_like_se83. + + +*----------------------------------------------------------------------* +* CLASS lcl_perform DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_perform DEFINITION CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS: setup_objects, + collect_reports, + + handle_nav FOR EVENT double_click OF cl_gui_alv_grid + IMPORTING e_row. + + PRIVATE SECTION. + TYPES: BEGIN OF ty_reports, + progname TYPE reposrc-progname, + sort TYPE reposrc-progname, + filename TYPE string, + END OF ty_reports. + + CLASS-DATA: + lo_grid TYPE REF TO cl_gui_alv_grid, + lo_text TYPE REF TO cl_gui_textedit, + cl_document TYPE REF TO i_oi_document_proxy, + + t_reports TYPE STANDARD TABLE OF ty_reports WITH NON-UNIQUE DEFAULT KEY. + CLASS-DATA:error TYPE REF TO i_oi_error, + t_errors TYPE STANDARD TABLE OF REF TO i_oi_error WITH NON-UNIQUE DEFAULT KEY, + cl_control TYPE REF TO i_oi_container_control. "Office Dokument + +ENDCLASS. "lcl_perform DEFINITION + + +START-OF-SELECTION. + lcl_perform=>collect_reports( ). + lcl_perform=>setup_objects( ). + +END-OF-SELECTION. + + WRITE '.'. " Force output + + +*----------------------------------------------------------------------* +* CLASS lcl_perform IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_perform IMPLEMENTATION. + METHOD setup_objects. + DATA: lo_split TYPE REF TO cl_gui_splitter_container, + lo_container TYPE REF TO cl_gui_container. + + DATA: it_fieldcat TYPE lvc_t_fcat, + is_layout TYPE lvc_s_layo, + is_variant TYPE disvariant. + FIELD-SYMBOLS: <fc> LIKE LINE OF it_fieldcat. + + + CREATE OBJECT lo_split + EXPORTING + parent = cl_gui_container=>screen0 + rows = 1 + columns = 3 + no_autodef_progid_dynnr = 'X'. + lo_split->set_column_width( EXPORTING id = 1 + width = 20 ). + lo_split->set_column_width( EXPORTING id = 2 + width = 40 ). + +* Left: List of reports + lo_container = lo_split->get_container( row = 1 + column = 1 ). + + CREATE OBJECT lo_grid + EXPORTING + i_parent = lo_container. + SET HANDLER lcl_perform=>handle_nav FOR lo_grid. + + is_variant-report = sy-repid. + is_variant-handle = '0001'. + + is_layout-cwidth_opt = 'X'. + + APPEND INITIAL LINE TO it_fieldcat ASSIGNING <fc>. + <fc>-fieldname = 'PROGNAME'. + <fc>-tabname = 'REPOSRC'. + + APPEND INITIAL LINE TO it_fieldcat ASSIGNING <fc>. + <fc>-fieldname = 'SORT'. + <fc>-ref_field = 'PROGNAME'. + <fc>-ref_table = 'REPOSRC'. + + + lo_grid->set_table_for_first_display( EXPORTING + is_variant = is_variant + i_save = 'A' + is_layout = is_layout + CHANGING + it_outtab = t_reports + it_fieldcatalog = it_fieldcat + EXCEPTIONS + invalid_parameter_combination = 1 + program_error = 2 + too_many_lines = 3 + OTHERS = 4 ). + +* Middle: Text with coding + lo_container = lo_split->get_container( row = 1 + column = 2 ). + CREATE OBJECT lo_text + EXPORTING + parent = lo_container. + lo_text->set_readonly_mode( cl_gui_textedit=>true ). + lo_text->set_font_fixed( ). + + + +* right: DemoOutput + lo_container = lo_split->get_container( row = 1 + column = 3 ). + + c_oi_container_control_creator=>get_container_control( IMPORTING control = cl_control + error = error ). + APPEND error TO t_errors. + + cl_control->init_control( EXPORTING inplace_enabled = 'X' + no_flush = 'X' + r3_application_name = 'Demo Document Container' + parent = lo_container + IMPORTING error = error + EXCEPTIONS OTHERS = 2 ). + APPEND error TO t_errors. + + cl_control->get_document_proxy( EXPORTING document_type = 'Excel.Sheet' " EXCEL + no_flush = ' ' + IMPORTING document_proxy = cl_document + error = error ). + APPEND error TO t_errors. +* Errorhandling should be inserted here + + + ENDMETHOD. "setup_objects + + "collect_reports + METHOD collect_reports. + FIELD-SYMBOLS:<report> LIKE LINE OF t_reports. + DATA: t_source TYPE STANDARD TABLE OF text255 WITH NON-UNIQUE DEFAULT KEY. + +* Get all demoreports + SELECT progname + INTO CORRESPONDING FIELDS OF TABLE t_reports + FROM reposrc + WHERE progname LIKE 'ZDEMO_EXCEL%' + AND progname <> sy-repid + AND subc = '1'. + + LOOP AT t_reports ASSIGNING <report>. + +* Check if already switched to new outputoptions + READ REPORT <report>-progname INTO t_source. + IF sy-subrc = 0. + FIND 'INCLUDE zdemo_excel_outputopt_incl.' IN TABLE t_source IGNORING CASE. + ENDIF. + IF sy-subrc <> 0. + DELETE t_reports. + CONTINUE. + ENDIF. + + +* Build half-numeric sort + <report>-sort = <report>-progname. + REPLACE REGEX '(ZDEMO_EXCEL)(\d\d)\s*$' IN <report>-sort WITH '$1\0$2'. " REPLACE REGEX '(ZDEMO_EXCEL)([^][^])*$' IN <report>-sort WITH '$1$2'.REPLACE REGEX '(ZDEMO_EXCEL)([^][^])*$' IN <report>-sort WITH '$1$2'.REPLACE + + REPLACE REGEX '(ZDEMO_EXCEL)(\d)\s*$' IN <report>-sort WITH '$1\0\0$2'. + ENDLOOP. + SORT t_reports BY sort progname. + + ENDMETHOD. "collect_reports + + METHOD handle_nav. + CONSTANTS: filename TYPE text80 VALUE 'ZABAP2XLSX_DEMO_SHOW.xlsx'. + DATA: wa_report LIKE LINE OF t_reports, + t_source TYPE STANDARD TABLE OF text255, + t_rawdata TYPE solix_tab, + wa_rawdata LIKE LINE OF t_rawdata, + bytecount TYPE i, + length TYPE i, + add_selopt TYPE flag. + + + READ TABLE t_reports INTO wa_report INDEX e_row-index. + CHECK sy-subrc = 0. + +* Set new text into middle frame + READ REPORT wa_report-progname INTO t_source. + lo_text->set_text_as_r3table( EXPORTING table = t_source ). + + +* Unload old xls-file + cl_document->close_document( ). + +* Get the demo +* If additional parameters found on selection screen, start via selection screen , otherwise start w/o + CLEAR add_selopt. + FIND 'PARAMETERS' IN TABLE t_source. + IF sy-subrc = 0. + add_selopt = 'X'. + ELSE. + FIND 'SELECT-OPTIONS' IN TABLE t_source. + IF sy-subrc = 0. + add_selopt = 'X'. + ENDIF. + ENDIF. + IF add_selopt IS INITIAL. + SUBMIT (wa_report-progname) AND RETURN + WITH p_backfn = filename + WITH rb_back = 'X' + WITH rb_down = ' ' + WITH rb_send = ' ' + WITH rb_show = ' '. + ELSE. + SUBMIT (wa_report-progname) VIA SELECTION-SCREEN AND RETURN + WITH p_backfn = filename + WITH rb_back = 'X' + WITH rb_down = ' ' + WITH rb_send = ' ' + WITH rb_show = ' '. + ENDIF. + + OPEN DATASET filename FOR INPUT IN BINARY MODE. + IF sy-subrc = 0. + DO. + CLEAR wa_rawdata. + READ DATASET filename INTO wa_rawdata LENGTH length. + IF sy-subrc <> 0. + APPEND wa_rawdata TO t_rawdata. + ADD length TO bytecount. + EXIT. + ENDIF. + APPEND wa_rawdata TO t_rawdata. + ADD length TO bytecount. + ENDDO. + CLOSE DATASET filename. + ENDIF. + + cl_control->get_document_proxy( EXPORTING document_type = 'Excel.Sheet' " EXCEL + no_flush = ' ' + IMPORTING document_proxy = cl_document + error = error ). + + cl_document->open_document_from_table( EXPORTING document_size = bytecount + document_table = t_rawdata + open_inplace = 'X' ). + + ENDMETHOD. "handle_nav + +ENDCLASS. "lcl_perform IMPLEMENTATION + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZANGRY_BIRDS +*& Just for fun +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zangry_birds. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_border_light TYPE REF TO zcl_excel_style_border, + lo_style_color0 TYPE REF TO zcl_excel_style, + lo_style_color1 TYPE REF TO zcl_excel_style, + lo_style_color2 TYPE REF TO zcl_excel_style, + lo_style_color3 TYPE REF TO zcl_excel_style, + lo_style_color4 TYPE REF TO zcl_excel_style, + lo_style_color5 TYPE REF TO zcl_excel_style, + lo_style_color6 TYPE REF TO zcl_excel_style, + lo_style_color7 TYPE REF TO zcl_excel_style, + lo_style_credit TYPE REF TO zcl_excel_style, + lo_style_link TYPE REF TO zcl_excel_style, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. + +DATA: lv_style_color0_guid TYPE zexcel_cell_style, + lv_style_color1_guid TYPE zexcel_cell_style, + lv_style_color2_guid TYPE zexcel_cell_style, + lv_style_color3_guid TYPE zexcel_cell_style, + lv_style_color4_guid TYPE zexcel_cell_style, + lv_style_color5_guid TYPE zexcel_cell_style, + lv_style_color6_guid TYPE zexcel_cell_style, + lv_style_color7_guid TYPE zexcel_cell_style, + lv_style_credit_guid TYPE zexcel_cell_style, + lv_style_link_guid TYPE zexcel_cell_style, + lv_style TYPE zexcel_cell_style. + +DATA: lv_col_str TYPE zexcel_cell_column_alpha, + lv_row TYPE i, + lv_col TYPE i, + lt_mapper TYPE TABLE OF zexcel_cell_style, + ls_mapper TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'angry_birds.xlsx'. + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + " Creates active sheet + CREATE OBJECT lo_excel. + + CREATE OBJECT lo_border_light. + lo_border_light->border_color-rgb = zcl_excel_style_color=>c_white. + lo_border_light->border_style = zcl_excel_style_border=>c_border_thin. + + " Create color white + lo_style_color0 = lo_excel->add_new_style( ). + lo_style_color0->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color0->fill->fgcolor-rgb = 'FFFFFFFF'. + lo_style_color0->borders->allborders = lo_border_light. + lv_style_color0_guid = lo_style_color0->get_guid( ). + + " Create color black + lo_style_color1 = lo_excel->add_new_style( ). + lo_style_color1->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color1->fill->fgcolor-rgb = 'FF252525'. + lo_style_color1->borders->allborders = lo_border_light. + lv_style_color1_guid = lo_style_color1->get_guid( ). + + " Create color dark green + lo_style_color2 = lo_excel->add_new_style( ). + lo_style_color2->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color2->fill->fgcolor-rgb = 'FF75913A'. + lo_style_color2->borders->allborders = lo_border_light. + lv_style_color2_guid = lo_style_color2->get_guid( ). + + " Create color light green + lo_style_color3 = lo_excel->add_new_style( ). + lo_style_color3->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color3->fill->fgcolor-rgb = 'FF9DFB73'. + lo_style_color3->borders->allborders = lo_border_light. + lv_style_color3_guid = lo_style_color3->get_guid( ). + + " Create color green + lo_style_color4 = lo_excel->add_new_style( ). + lo_style_color4->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color4->fill->fgcolor-rgb = 'FF92CF56'. + lo_style_color4->borders->allborders = lo_border_light. + lv_style_color4_guid = lo_style_color4->get_guid( ). + + " Create color 2dark green + lo_style_color5 = lo_excel->add_new_style( ). + lo_style_color5->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color5->fill->fgcolor-rgb = 'FF506228'. + lo_style_color5->borders->allborders = lo_border_light. + lv_style_color5_guid = lo_style_color5->get_guid( ). + + " Create color yellow + lo_style_color6 = lo_excel->add_new_style( ). + lo_style_color6->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color6->fill->fgcolor-rgb = 'FFC3E224'. + lo_style_color6->borders->allborders = lo_border_light. + lv_style_color6_guid = lo_style_color6->get_guid( ). + + " Create color yellow + lo_style_color7 = lo_excel->add_new_style( ). + lo_style_color7->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color7->fill->fgcolor-rgb = 'FFB3C14F'. + lo_style_color7->borders->allborders = lo_border_light. + lv_style_color7_guid = lo_style_color7->get_guid( ). + + " Credits + lo_style_credit = lo_excel->add_new_style( ). + lo_style_credit->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_credit->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lo_style_credit->font->size = 20. + lv_style_credit_guid = lo_style_credit->get_guid( ). + + " Link + lo_style_link = lo_excel->add_new_style( ). + lo_style_link->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_link->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. +* lo_style_link->font->size = 20. + lv_style_link_guid = lo_style_link->get_guid( ). + + " Create image map " line 2 + DO 30 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 3 + DO 28 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 4 + DO 27 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 5 + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 15 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 6 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 13 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 7 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 8 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 9 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 10 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 11 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 7 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 12 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 13 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 14 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 12 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 15 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 16 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 7 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 17 + DO 8 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 13 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 18 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 23 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 19 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 27 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 20 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 23 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 21 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 19 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 22 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 17 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 23 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 17 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 24 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 25 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 26 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color6_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 27 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color6_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 28 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color6_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 29 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 30 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 31 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 32 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 33 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 34 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 35 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 36 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 37 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 38 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 39 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 22 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 40 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 17 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 41 + DO 8 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 15 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 42 + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 43 + DO 11 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 7 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 44 + DO 13 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 45 + DO 16 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 13 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 46 + DO 18 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Angry Birds' ). + + lv_row = 1. + lv_col = 1. + + LOOP AT lt_mapper INTO ls_mapper. + lv_col_str = zcl_excel_common=>convert_column2alpha( lv_col ). + IF ls_mapper IS INITIAL. + lo_row_dimension = lo_worksheet->get_row_dimension( ip_row = lv_row ). + lo_row_dimension->set_row_height( ip_row_height = 8 ). + lv_col = 1. + lv_row = lv_row + 1. + CONTINUE. + ENDIF. + lo_worksheet->set_cell( ip_column = lv_col_str + ip_row = lv_row + ip_value = space + ip_style = ls_mapper ). + lv_col = lv_col + 1. + + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = lv_col_str ). + lo_column_dimension->set_width( ip_width = 2 ). + ENDLOOP. + + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_false ). + + lo_worksheet->set_cell( ip_column = 'AP' + ip_row = 15 + ip_value = 'Created with abap2xlsx' + ip_style = lv_style_credit_guid ). + + lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'http://www.abap2xlsx.org' ). + lo_worksheet->set_cell( ip_column = 'AP' + ip_row = 24 + ip_value = 'http://www.abap2xlsx.org' + ip_style = lv_style_link_guid + ip_hyperlink = lo_hyperlink ). + + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'AP' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_worksheet->set_merge( ip_row = 15 ip_column_start = 'AP' ip_row_to = 22 ip_column_end = 'AR' ). + lo_worksheet->set_merge( ip_row = 24 ip_column_start = 'AP' ip_row_to = 26 ip_column_end = 'AR' ). + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + + + + + + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_CALENDAR +*& abap2xlsx Demo: Create Calendar with Pictures +*&---------------------------------------------------------------------* +*& This report creates a monthly calendar in the specified date range. +*& Each month is put on a seperate worksheet. The pictures for each +*& month can be specified in a tab delimited file called "Calendar.txt" +*& which is saved in the Export Directory. By default this is the SAP +*& Workdir. The file contains 3 fields: +*& +*& Month (with leading 0) +*& Image Filename +*& Image Description +*& URL for the Description +*& +*& The Images should be landscape JPEG's with a 3:2 ratio and min. +*& 450 pixel height. They must also be saved in the Export Directory. +*& In my tests I've discovered a limit of 20 MB in the +*& cl_gui_frontend_services=>gui_download method. So keep your images +*& smaller or chnage to a server export using OPEN DATASET. +*&---------------------------------------------------------------------* + +REPORT zdemo_calendar. + +TYPE-POOLS: abap. +CONSTANTS: gc_save_file_name TYPE string VALUE 'Calendar.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. +INCLUDE zdemo_calendar_classes. + +DATA: lv_workdir TYPE string. + +PARAMETERS: p_from TYPE dfrom DEFAULT '20130101', + p_to TYPE dto DEFAULT '20131231'. + +SELECTION-SCREEN BEGIN OF BLOCK orientation WITH FRAME TITLE orient. +PARAMETERS: p_portr TYPE flag RADIOBUTTON GROUP orie, + p_lands TYPE flag RADIOBUTTON GROUP orie DEFAULT 'X'. +SELECTION-SCREEN END OF BLOCK orientation. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + orient = 'Orientation'(000). + +START-OF-SELECTION. + + DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi, + hyperlink TYPE REF TO zcl_excel_hyperlink, + lo_drawing TYPE REF TO zcl_excel_drawing. + + DATA: lo_style_month TYPE REF TO zcl_excel_style, + lv_style_month_guid TYPE zexcel_cell_style. + DATA: lo_style_border TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lv_style_border_guid TYPE zexcel_cell_style. + DATA: lo_style_center TYPE REF TO zcl_excel_style, + lv_style_center_guid TYPE zexcel_cell_style. + + DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + + DATA: lv_full_path TYPE string, + image_descr_path TYPE string, + lv_file_separator TYPE c. + DATA: lv_content TYPE xstring, + width TYPE i, + lv_height TYPE i, + lv_from_row TYPE zexcel_cell_row. + + DATA: month TYPE i, + month_nr TYPE fcmnr, + count TYPE i VALUE 1, + title TYPE zexcel_sheet_title, + value TYPE string, + image_path TYPE string, + date_from TYPE datum, + date_to TYPE datum, + row TYPE zexcel_cell_row, + to_row TYPE zexcel_cell_row, + to_col TYPE zexcel_cell_column_alpha, + to_col_end TYPE zexcel_cell_column_alpha, + to_col_int TYPE i. + + DATA: month_names TYPE TABLE OF t247. + FIELD-SYMBOLS: <month_name> LIKE LINE OF month_names. + + TYPES: BEGIN OF tt_datatab, + month_nr TYPE fcmnr, + filename TYPE string, + descr TYPE string, + url TYPE string, + END OF tt_datatab. + + DATA: image_descriptions TYPE TABLE OF tt_datatab. + FIELD-SYMBOLS: <img_descr> LIKE LINE OF image_descriptions. + + CONSTANTS: lv_default_file_name TYPE string VALUE 'Calendar', "#EC NOTEXT + c_from_row_portrait TYPE zexcel_cell_row VALUE 28, + c_from_row_landscape TYPE zexcel_cell_row VALUE 38, + from_col TYPE zexcel_cell_column_alpha VALUE 'C', + c_height_portrait TYPE i VALUE 450, " Image Height in Portrait Mode + c_height_landscape TYPE i VALUE 670, " Image Height in Landscape Mode + c_factor TYPE f VALUE '1.5'. " Image Ratio, default 3:2 + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name '.xlsx' INTO lv_full_path. "#EC NOTEXT + + " Read Image Names for Month and Description + CONCATENATE p_path lv_file_separator lv_default_file_name '.txt' INTO image_descr_path. "#EC NOTEXT + cl_gui_frontend_services=>gui_upload( + EXPORTING + filename = image_descr_path " Name of file + filetype = 'ASC' " File Type (ASCII, Binary) + has_field_separator = 'X' + read_by_line = 'X' " File Written Line-By-Line to the Internal Table + CHANGING + data_tab = image_descriptions " Transfer table for file contents + 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 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19 + ). + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create Styles + " Create an underline double style + lo_style_month = lo_excel->add_new_style( ). + " lo_style_month->font->underline = abap_true. + " lo_style_month->font->underline_mode = zcl_excel_style_font=>c_underline_single. + lo_style_month->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_month->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_month->font->family = zcl_excel_style_font=>c_family_roman. + lo_style_month->font->bold = abap_true. + lo_style_month->font->size = 36. + lv_style_month_guid = lo_style_month->get_guid( ). + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + "Create style with border + lo_style_border = lo_excel->add_new_style( ). + lo_style_border->borders->allborders = lo_border_dark. + lo_style_border->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_right. + lo_style_border->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top. + lv_style_border_guid = lo_style_border->get_guid( ). + "Create style alignment center + lo_style_center = lo_excel->add_new_style( ). + lo_style_center->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_center->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top. + lv_style_center_guid = lo_style_center->get_guid( ). + + " Get Month Names + CALL FUNCTION 'MONTH_NAMES_GET' + TABLES + month_names = month_names. + + zcl_date_calculation=>months_between_two_dates( + EXPORTING + i_date_from = p_from + i_date_to = p_to + i_incl_to = abap_true + IMPORTING + e_month = month + ). + + date_from = p_from. + + WHILE count <= month. + IF count = 1. + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + ELSE. + lo_worksheet = lo_excel->add_new_worksheet( ). + ENDIF. + + lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected. + + title = count. + value = count. + CONDENSE title. + CONDENSE value. + lo_worksheet->set_title( title ). + lo_worksheet->set_print_gridlines( abap_false ). + lo_worksheet->sheet_setup->paper_size = zcl_excel_sheet_setup=>c_papersize_a4. + lo_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_worksheet->sheet_setup->vertical_centered = abap_true. + lo_col_dim = lo_worksheet->get_column_dimension( 'A' ). + lo_col_dim->set_width( '1.0' ). + lo_col_dim = lo_worksheet->get_column_dimension( 'B' ). + lo_col_dim->set_width( '2.0' ). + IF p_lands = abap_true. + lo_worksheet->sheet_setup->orientation = zcl_excel_sheet_setup=>c_orientation_landscape. + lv_height = c_height_landscape. + lv_from_row = c_from_row_landscape. + lo_worksheet->sheet_setup->margin_top = '0.10'. + lo_worksheet->sheet_setup->margin_left = '0.10'. + lo_worksheet->sheet_setup->margin_right = '0.10'. + lo_worksheet->sheet_setup->margin_bottom = '0.10'. + ELSE. + lo_col_dim = lo_worksheet->get_column_dimension( 'K' ). + lo_col_dim->set_width( '3.0' ). + lo_worksheet->sheet_setup->margin_top = '0.80'. + lo_worksheet->sheet_setup->margin_left = '0.55'. + lo_worksheet->sheet_setup->margin_right = '0.05'. + lo_worksheet->sheet_setup->margin_bottom = '0.30'. + lv_height = c_height_portrait. + lv_from_row = c_from_row_portrait. + ENDIF. + + " Add Month Name + month_nr = date_from+4(2). + IF p_portr = abap_true. + READ TABLE month_names WITH KEY mnr = month_nr ASSIGNING <month_name>. + CONCATENATE <month_name>-ltx ` ` date_from(4) INTO value. + row = lv_from_row - 2. + to_col = from_col. + ELSE. + row = lv_from_row - 1. + to_col_int = zcl_excel_common=>convert_column2int( from_col ) + 32. + to_col = zcl_excel_common=>convert_column2alpha( to_col_int ). + to_col_int = to_col_int + 1. + to_col_end = zcl_excel_common=>convert_column2alpha( to_col_int ). + CONCATENATE month_nr '/' date_from+2(2) INTO value. + to_row = row + 2. + lo_worksheet->set_merge( + EXPORTING + ip_column_start = to_col " Cell Column Start + ip_column_end = to_col_end " Cell Column End + ip_row = row " Cell Row + ip_row_to = to_row " Cell Row + ). + ENDIF. + lo_worksheet->set_cell( + EXPORTING + ip_column = to_col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = lv_style_month_guid + ). + +* to_col_int = zcl_excel_common=>convert_column2int( from_col ) + 7. +* to_col = zcl_excel_common=>convert_column2alpha( to_col_int ). +* +* lo_worksheet->set_merge( +* EXPORTING +* ip_column_start = from_col " Cell Column Start +* ip_column_end = to_col " Cell Column End +* ip_row = row " Cell Row +* ip_row_to = row " Cell Row +* ). + + " Add drawing from a XSTRING read from a file + UNASSIGN <img_descr>. + READ TABLE image_descriptions WITH KEY month_nr = month_nr ASSIGNING <img_descr>. + IF <img_descr> IS ASSIGNED. + value = <img_descr>-descr. + IF p_portr = abap_true. + row = lv_from_row - 3. + ELSE. + row = lv_from_row - 2. + ENDIF. + IF NOT <img_descr>-url IS INITIAL. + hyperlink = zcl_excel_hyperlink=>create_external_link( <img_descr>-url ). + lo_worksheet->set_cell( + EXPORTING + ip_column = from_col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_hyperlink = hyperlink + ). + ELSE. + lo_worksheet->set_cell( + EXPORTING + ip_column = from_col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ). + ENDIF. + lo_row_dim = lo_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '22.0' ). + + " In Landscape mode the row between the description and the + " dates should be not so high + IF p_lands = abap_true. + row = lv_from_row - 3. + lo_worksheet->set_cell( + EXPORTING + ip_column = from_col " Cell Column + ip_row = row " Cell Row + ip_value = ' ' " Cell Value + ). + lo_row_dim = lo_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '7.0' ). + row = lv_from_row - 1. + lo_row_dim = lo_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '5.0' ). + ENDIF. + + CONCATENATE p_path lv_file_separator <img_descr>-filename INTO image_path. + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 1 + ip_from_col = 'B' ). + + lv_content = zcl_helper=>load_image( image_path ). + width = lv_height * c_factor. + lo_drawing->set_media( ip_media = lv_content + ip_media_type = zcl_excel_drawing=>c_media_type_jpg + ip_width = width + ip_height = lv_height ). + lo_worksheet->add_drawing( lo_drawing ). + ENDIF. + + " Add Calendar + CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH' + EXPORTING + day_in = date_from + IMPORTING + last_day_of_month = date_to. + IF p_portr = abap_true. + zcl_helper=>add_calendar( + EXPORTING + i_date_from = date_from + i_date_to = date_to + i_from_row = lv_from_row + i_from_col = from_col + i_day_style = lv_style_border_guid + i_cw_style = lv_style_center_guid + CHANGING + c_worksheet = lo_worksheet + ). + ELSE. + zcl_helper=>add_calendar_landscape( + EXPORTING + i_date_from = date_from + i_date_to = date_to + i_from_row = lv_from_row + i_from_col = from_col + i_day_style = lv_style_border_guid + i_cw_style = lv_style_center_guid + CHANGING + c_worksheet = lo_worksheet + ). + ENDIF. + count = count + 1. + date_from = date_to + 1. + ENDWHILE. + + lo_excel->set_active_sheet_index_by_name( '1' ). +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Include ZDEMO_CALENDAR_CLASSES +*&---------------------------------------------------------------------* + +*&---------------------------------------------------------------------* +*& Class ZCL_DATE_CALCULATION +*&---------------------------------------------------------------------* +* Text +*----------------------------------------------------------------------* +CLASS zcl_date_calculation DEFINITION. + PUBLIC SECTION. + CLASS-METHODS: months_between_two_dates + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_incl_to TYPE flag + EXPORTING + e_month TYPE i. +ENDCLASS. "ZCL_DATE_CALCULATION + + +*----------------------------------------------------------------------* +* CLASS ZCL_DATE_CALCULATION IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_date_calculation IMPLEMENTATION. + METHOD months_between_two_dates. + DATA: date_to TYPE datum. + DATA: BEGIN OF datum_von, + jjjj(4) TYPE n, + mm(2) TYPE n, + tt(2) TYPE n, + END OF datum_von. + + DATA: BEGIN OF datum_bis, + jjjj(4) TYPE n, + mm(2) TYPE n, + tt(2) TYPE n, + END OF datum_bis. + + e_month = 0. + + CHECK NOT ( i_date_from IS INITIAL ) + AND NOT ( i_date_to IS INITIAL ). + + date_to = i_date_to. + IF i_incl_to = abap_true. + date_to = date_to + 1. + ENDIF. + + datum_von = i_date_from. + datum_bis = date_to. + + e_month = ( datum_bis-jjjj - datum_von-jjjj ) * 12 + + ( datum_bis-mm - datum_von-mm ). + ENDMETHOD. "MONTHS_BETWEEN_TWO_DATES +ENDCLASS. "ZCL_DATE_CALCULATION IMPLEMENTATION + +*----------------------------------------------------------------------* +* CLASS zcl_date_calculation_test DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_date_calculation_test DEFINITION FOR TESTING + " DURATION SHORT + " RISK LEVEL HARMLESS + "#AU Duration Medium + "#AU Risk_Level Harmless + . + PUBLIC SECTION. + METHODS: + months_between_two_dates FOR TESTING. +ENDCLASS. "zcl_date_calculation_test DEFINITION +*----------------------------------------------------------------------* +* CLASS zcl_date_calculation_test IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_date_calculation_test IMPLEMENTATION. + METHOD months_between_two_dates. + + DATA: date_from TYPE datum VALUE '20120101', + date_to TYPE datum VALUE '20121231'. + DATA: month TYPE i. + + zcl_date_calculation=>months_between_two_dates( + EXPORTING + i_date_from = date_from + i_date_to = date_to + i_incl_to = abap_true + IMPORTING + e_month = month + ). + + cl_aunit_assert=>assert_equals( + exp = 12 " Data Object with Expected Type + act = month " Data Object with Current Value + msg = 'Calculated date is wrong' " Message in Case of Error + ). + + ENDMETHOD. "months_between_two_dates +ENDCLASS. "zcl_date_calculation_test IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS zcl_helper DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_helper DEFINITION. + PUBLIC SECTION. + CLASS-METHODS: + load_image + IMPORTING + filename TYPE string + RETURNING value(r_image) TYPE xstring, + add_calendar + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + i_day_style TYPE zexcel_cell_style + i_cw_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet, + add_calendar_landscape + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + i_day_style TYPE zexcel_cell_style + i_cw_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet, + add_a2x_footer + IMPORTING + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet, + add_calender_week + IMPORTING + i_date TYPE datum + i_row TYPE zexcel_cell_row + i_col TYPE zexcel_cell_column_alpha + i_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet. +ENDCLASS. "zcl_helper DEFINITION + +*----------------------------------------------------------------------* +* CLASS zcl_helper IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_helper IMPLEMENTATION. + METHOD load_image. + "Load samle image + DATA: lt_bin TYPE solix_tab, + lv_len TYPE i. + + CALL METHOD cl_gui_frontend_services=>gui_upload + EXPORTING + filename = filename + filetype = 'BIN' + IMPORTING + filelength = lv_len + CHANGING + data_tab = lt_bin + 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 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_len + IMPORTING + buffer = r_image + TABLES + binary_tab = lt_bin + EXCEPTIONS + failed = 1 + OTHERS = 2. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + ENDMETHOD. "load_image + METHOD add_calendar. + DATA: day_names TYPE TABLE OF t246. + DATA: row TYPE zexcel_cell_row, + row_max TYPE i, + col_int TYPE zexcel_cell_column, + col_max TYPE i, + from_col_int TYPE zexcel_cell_column, + col TYPE zexcel_cell_column_alpha, + lr_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lr_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi. + DATA: lv_date TYPE datum, + value TYPE string, + weekday TYPE wotnr, + weekrow TYPE wotnr VALUE 1, + day TYPE i, + width TYPE f, + height TYPE f. + DATA: hyperlink TYPE REF TO zcl_excel_hyperlink. + + FIELD-SYMBOLS: <day_name> LIKE LINE OF day_names. + + lv_date = i_date_from. + from_col_int = zcl_excel_common=>convert_column2int( i_from_col ). + " Add description for Calendar Week + c_worksheet->set_cell( + EXPORTING + ip_column = i_from_col " Cell Column + ip_row = i_from_row " Cell Row + ip_value = 'CW'(001) " Cell Value + ip_style = i_cw_style + ). + + " Add Days + CALL FUNCTION 'DAY_NAMES_GET' + TABLES + day_names = day_names. + + LOOP AT day_names ASSIGNING <day_name>. + row = i_from_row. + col_int = from_col_int + <day_name>-wotnr. + col = zcl_excel_common=>convert_column2alpha( col_int ). + value = <day_name>-langt. + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_cw_style + ). + ENDLOOP. + + WHILE lv_date <= i_date_to. + day = lv_date+6(2). + CALL FUNCTION 'FIMA_X_DAY_IN_MONTH_COMPUTE' + EXPORTING + i_datum = lv_date + IMPORTING + e_wochentag_nr = weekday. + + row = i_from_row + weekrow. + col_int = from_col_int + weekday. + col = zcl_excel_common=>convert_column2alpha( col_int ). + + value = day. + CONDENSE value. + + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_day_style " Single-Character Indicator + ). + + IF weekday = 7. + " Add Calender Week + zcl_helper=>add_calender_week( + EXPORTING + i_date = lv_date + i_row = row + i_col = i_from_col + i_style = i_cw_style + CHANGING + c_worksheet = c_worksheet + ). + weekrow = weekrow + 1. + ENDIF. + lv_date = lv_date + 1. + ENDWHILE. + " Add Calender Week + zcl_helper=>add_calender_week( + EXPORTING + i_date = lv_date + i_row = row + i_col = i_from_col + i_style = i_cw_style + CHANGING + c_worksheet = c_worksheet + ). + " Add Created with abap2xlsx + row = row + 2. + zcl_helper=>add_a2x_footer( + EXPORTING + i_from_row = row + i_from_col = i_from_col + CHANGING + c_worksheet = c_worksheet + ). + col_int = from_col_int. + col_max = from_col_int + 7. + WHILE col_int <= col_max. + col = zcl_excel_common=>convert_column2alpha( col_int ). + IF sy-index = 1. + width = '5.0'. + ELSE. + width = '11.4'. + ENDIF. + lr_col_dim = c_worksheet->get_column_dimension( col ). + lr_col_dim->set_width( width ). + col_int = col_int + 1. + ENDWHILE. + row = i_from_row + 1. + row_max = i_from_row + 6. + WHILE row <= row_max. + height = 50. + lr_row_dim = c_worksheet->get_row_dimension( row ). + lr_row_dim->set_row_height( height ). + row = row + 1. + ENDWHILE. + ENDMETHOD. "add_calendar + METHOD add_a2x_footer. + DATA: value TYPE string, + hyperlink TYPE REF TO zcl_excel_hyperlink. + + value = 'Created with abap2xlsx. Find more information at http://abap2xlsx.org.'(002). + hyperlink = zcl_excel_hyperlink=>create_external_link( 'http://abap2xlsx.org' ). "#EC NOTEXT + c_worksheet->set_cell( + EXPORTING + ip_column = i_from_col " Cell Column + ip_row = i_from_row " Cell Row + ip_value = value " Cell Value + ip_hyperlink = hyperlink + ). + + ENDMETHOD. "add_a2x_footer + METHOD add_calendar_landscape. + DATA: day_names TYPE TABLE OF t246. + + DATA: lv_date TYPE datum, + day TYPE i, + value TYPE string, + weekday TYPE wotnr. + DATA: row TYPE zexcel_cell_row, + from_col_int TYPE zexcel_cell_column, + col_int TYPE zexcel_cell_column, + col TYPE zexcel_cell_column_alpha. + DATA: lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi. + + FIELD-SYMBOLS: <day_name> LIKE LINE OF day_names. + + lv_date = i_date_from. + " Add Days + CALL FUNCTION 'DAY_NAMES_GET' + TABLES + day_names = day_names. + + WHILE lv_date <= i_date_to. + day = lv_date+6(2). + CALL FUNCTION 'FIMA_X_DAY_IN_MONTH_COMPUTE' + EXPORTING + i_datum = lv_date + IMPORTING + e_wochentag_nr = weekday. + " Day name row + row = i_from_row. + col_int = from_col_int + day + 2. + col = zcl_excel_common=>convert_column2alpha( col_int ). + READ TABLE day_names ASSIGNING <day_name> + WITH KEY wotnr = weekday. + value = <day_name>-kurzt. + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_cw_style + ). + + " Day row + row = i_from_row + 1. + value = day. + CONDENSE value. + + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_day_style " Single-Character Indicator + ). + " width + lo_col_dim = c_worksheet->get_column_dimension( col ). + lo_col_dim->set_width( '3.6' ). + + + lv_date = lv_date + 1. + ENDWHILE. + " Add ABAP2XLSX Footer + row = i_from_row + 2. + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = ' ' " Cell Value + ). + lo_row_dim = c_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '5.0' ). + row = i_from_row + 3. + zcl_helper=>add_a2x_footer( + EXPORTING + i_from_row = row + i_from_col = i_from_col + CHANGING + c_worksheet = c_worksheet + ). + + " Set with for all 31 coulumns + WHILE day < 32. + day = day + 1. + col_int = from_col_int + day + 2. + col = zcl_excel_common=>convert_column2alpha( col_int ). + " width + lo_col_dim = c_worksheet->get_column_dimension( col ). + lo_col_dim->set_width( '3.6' ). + ENDWHILE. + ENDMETHOD. "ADD_CALENDAR_LANDSCAPE + + METHOD add_calender_week. + DATA: week TYPE kweek, + week_int TYPE i, + value TYPE string. + " Add Calender Week + CALL FUNCTION 'DATE_GET_WEEK' + EXPORTING + date = i_date " Date for which the week should be calculated + IMPORTING + week = week. " Week for date (format:YYYYWW) + value = week+4(2). + week_int = value. + value = week_int. + CONDENSE value. + c_worksheet->set_cell( + EXPORTING + ip_column = i_col " Cell Column + ip_row = i_row " Cell Row + ip_value = value " Cell Value + ip_style = i_style + ). + ENDMETHOD. "add_calender_week +ENDCLASS. "zcl_helper IMPLEMENTATION + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel. + +DATA: lv_workdir TYPE string, + lv_upfile TYPE string. + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = sy-lisel ). + CONCATENATE p_path sy-lisel '01_HelloWorld.xlsx' INTO lv_upfile. + + SUBMIT zdemo_excel1 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Hello world + SUBMIT zdemo_excel2 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Styles + SUBMIT zdemo_excel3 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: iTab binding + SUBMIT zdemo_excel4 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Multi sheets, page setup and sheet properties + SUBMIT zdemo_excel5 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Conditional formatting + SUBMIT zdemo_excel6 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Formulas + SUBMIT zdemo_excel7 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Conditional formatting + SUBMIT zdemo_excel8 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Ranges + SUBMIT zdemo_excel9 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Data validation + SUBMIT zdemo_excel10 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Bind table with field catalog + " zdemo_excel11 is not added because it has a selection screen and + " you also need to have business partners maintained in transaction BP + SUBMIT zdemo_excel12 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Column size + SUBMIT zdemo_excel13 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Merge cell + SUBMIT zdemo_excel14 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Alignment + SUBMIT zdemo_excel16 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Drawing + SUBMIT zdemo_excel17 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Lock sheet + SUBMIT zdemo_excel18 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Lock workbook + SUBMIT zdemo_excel19 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Set active sheet + " zdemo_excel20 is not added because it uses ALV and cannot be processed (OLE2) + SUBMIT zdemo_excel21 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Color Picker + SUBMIT zdemo_excel22 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Bind table with field catalog & sheet style + SUBMIT zdemo_excel23 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Multiple sheets with and w/o grid lines, print options + SUBMIT zdemo_excel24 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Multiple sheets with different default date formats + SUBMIT zdemo_excel25 AND RETURN. " abap2xlsx Demo: Create and xlsx on Application Server (could be executed in batch mode) + " zdemo_excel26 is not added because it uses ALV and cannot be processed (Native) + SUBMIT zdemo_excel27 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Conditional Formatting + SUBMIT zdemo_excel28 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: CSV writer + " SUBMIT zdemo_excel29 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Macro enabled workbook + SUBMIT zdemo_excel30 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: ABAP Cell data types + SUBMIT zdemo_excel31 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Autosize Column with different Font sizes + " zdemo_excel32 is not added because it uses ALV and cannot be processed (Native) + SUBMIT zdemo_excel33 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Table autofilter + SUBMIT zdemo_excel34 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Static Styles Chess + SUBMIT zdemo_excel35 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Static Styles + SUBMIT zdemo_excel36 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Style applied to sheet, column and single cell + SUBMIT zdemo_excel37 WITH p_upfile = lv_upfile + WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Simplest call of the reader and writer - passthrough data + SUBMIT zdemo_excel38 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Show off integration of drawings ( here using the SAP-Icons ) + SUBMIT ZDEMO_EXCEL39 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Charts + " + " Reader/Writer Demo must always run at the end + " to make sure all documents where created + " + SUBMIT zdemo_excel15 WITH p_path = p_path AND RETURN. " Read Excel and write it back + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel1. + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +CONSTANTS: gc_save_file_name TYPE string VALUE '01_HelloWorld.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). +* lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = sy-datum ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = sy-uzeit ). + lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'http://www.abap2xlsx.org' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 4 ip_value = 'Click here to visit abap2xlsx homepage' ip_hyperlink = lo_hyperlink ). + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + column_dimension->set_width( ip_width = 11 ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL10 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel10. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional2 TYPE REF TO zcl_excel_style_conditional, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings, + ls_iconset TYPE zexcel_conditional_iconset. + +CONSTANTS: gc_save_file_name TYPE string VALUE '10_iTabFieldCatalog.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + FIELD-SYMBOLS: <fs_field_catalog> TYPE zexcel_s_fieldcatalog. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Internal table' ). + + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_5arrows. + ls_iconset-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo1_value = '0'. + ls_iconset-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo2_value = '20'. + ls_iconset-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo3_value = '40'. + ls_iconset-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo4_value = '60'. + ls_iconset-cfvo5_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo5_value = '80'. + ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + "Conditional style + lo_style_conditional2 = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional2->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional2->mode_iconset = ls_iconset. + lo_style_conditional2->priority = 1. + + DATA lt_test TYPE TABLE OF sflight. + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_test ). + + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog>. + CASE <fs_field_catalog>-fieldname. + WHEN 'CARRID'. + <fs_field_catalog>-position = 3. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-totals_function = zcl_excel_table=>totals_function_count. + WHEN 'CONNID'. + <fs_field_catalog>-position = 4. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FLDATE'. + <fs_field_catalog>-position = 2. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'PRICE'. + <fs_field_catalog>-position = 1. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-totals_function = zcl_excel_table=>totals_function_sum. + <fs_field_catalog>-cond_style = lo_style_conditional2. + WHEN OTHERS. + <fs_field_catalog>-dynpfld = abap_false. + ENDCASE. + ENDLOOP. + + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium5. + + lo_worksheet->bind_table( ip_table = lt_test + is_table_settings = ls_table_settings + it_field_catalog = lt_field_catalog ). + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'D' ). "make date field a bit wider + column_dimension->set_width( ip_width = 13 ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL11 +*& Export Organisation and Contact Persons using ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel11. + +TYPE-POOLS: abap. + +DATA: central_search TYPE bapibus1006_central_search, + addressdata_search TYPE bapibus1006_addr_search, + others_search TYPE bapibus1006_other_data. +DATA: searchresult TYPE TABLE OF bapibus1006_bp_addr, + return TYPE TABLE OF bapiret2. +DATA: lines TYPE i. +FIELD-SYMBOLS: <searchresult_line> LIKE LINE OF searchresult. +DATA: centraldata TYPE bapibus1006_central, + centraldataperson TYPE bapibus1006_central_person, + centraldataorganization TYPE bapibus1006_central_organ. +DATA: addressdata TYPE bapibus1006_address. +DATA: relationships TYPE TABLE OF bapibus1006_relations. +FIELD-SYMBOLS: <relationship> LIKE LINE OF relationships. +DATA: relationship_centraldata TYPE bapibus1006002_central. +DATA: relationship_addresses TYPE TABLE OF bapibus1006002_addresses. +FIELD-SYMBOLS: <relationship_address> LIKE LINE OF relationship_addresses. + +DATA: lt_download TYPE TABLE OF zexcel_s_org_rel. +FIELD-SYMBOLS: <download> LIKE LINE OF lt_download. + +CONSTANTS: gc_save_file_name TYPE string VALUE '11_Export_Org_and_Contact.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +PARAMETERS: md TYPE flag RADIOBUTTON GROUP act. + +SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-00a. +PARAMETERS: partnerc TYPE bu_type DEFAULT 2, " Organizations + postlcod TYPE ad_pstcd1 DEFAULT '8334*', + country TYPE land1 DEFAULT 'DE', + maxsel TYPE bu_maxsel DEFAULT 100. +SELECTION-SCREEN END OF BLOCK a. + +PARAMETERS: rel TYPE flag RADIOBUTTON GROUP act DEFAULT 'X'. + +SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-00b. +PARAMETERS: reltyp TYPE bu_reltyp DEFAULT 'BUR011', + partner TYPE bu_partner DEFAULT '191'. +SELECTION-SCREEN END OF BLOCK b. + +START-OF-SELECTION. + IF md = abap_true. + " Read all Companies by Master Data + central_search-partnercategory = partnerc. + addressdata_search-postl_cod1 = postlcod. + addressdata_search-country = country. + others_search-maxsel = maxsel. + others_search-no_search_for_contactperson = 'X'. + + CALL FUNCTION 'BAPI_BUPA_SEARCH_2' + EXPORTING + centraldata = central_search + addressdata = addressdata_search + OTHERS = others_search + TABLES + searchresult = searchresult + return = return. + + SORT searchresult BY partner. + DELETE ADJACENT DUPLICATES FROM searchresult COMPARING partner. + ELSEIF rel = abap_true. + " Read by Relationship + SELECT but050~partner1 AS partner FROM but050 + INNER JOIN but000 ON but000~partner = but050~partner1 AND but000~type = '2' + INTO CORRESPONDING FIELDS OF TABLE searchresult + WHERE but050~partner2 = partner + AND but050~reltyp = reltyp. + ENDIF. + + DESCRIBE TABLE searchresult LINES lines. + WRITE: / 'Number of search results: ', lines. + + LOOP AT searchresult ASSIGNING <searchresult_line>. + " Read Details of Organization + CALL FUNCTION 'BAPI_BUPA_CENTRAL_GETDETAIL' + EXPORTING + businesspartner = <searchresult_line>-partner + IMPORTING + centraldataorganization = centraldataorganization. + " Read Standard Address of Organization + CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL' + EXPORTING + businesspartner = <searchresult_line>-partner + IMPORTING + addressdata = addressdata. + + " Add Organization to Download + APPEND INITIAL LINE TO lt_download ASSIGNING <download>. + " Fill Organization Partner Numbers + CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' + EXPORTING + businesspartner = <searchresult_line>-partner + IMPORTING + businesspartnerout = <download>-org_number + businesspartnerguidout = <download>-org_guid. + + MOVE-CORRESPONDING centraldataorganization TO <download>. + MOVE-CORRESPONDING addressdata TO <download>. + CLEAR: addressdata. + + " Read all Relationships + CLEAR: relationships. + CALL FUNCTION 'BAPI_BUPA_RELATIONSHIPS_GET' + EXPORTING + businesspartner = <searchresult_line>-partner + TABLES + relationships = relationships. + DELETE relationships WHERE relationshipcategory <> 'BUR001'. + LOOP AT relationships ASSIGNING <relationship>. + " Read details of Contact person + CALL FUNCTION 'BAPI_BUPA_CENTRAL_GETDETAIL' + EXPORTING + businesspartner = <relationship>-partner2 + IMPORTING + centraldata = centraldata + centraldataperson = centraldataperson. + " Read details of the Relationship + CALL FUNCTION 'BAPI_BUPR_CONTP_GETDETAIL' + EXPORTING + businesspartner = <relationship>-partner1 + contactperson = <relationship>-partner2 + IMPORTING + centraldata = relationship_centraldata. + " Read relationship address + CLEAR: relationship_addresses. + + CALL FUNCTION 'BAPI_BUPR_CONTP_ADDRESSES_GET' + EXPORTING + businesspartner = <relationship>-partner1 + contactperson = <relationship>-partner2 + TABLES + addresses = relationship_addresses. + + READ TABLE relationship_addresses + ASSIGNING <relationship_address> + WITH KEY standardaddress = 'X'. + + IF <relationship_address> IS ASSIGNED. + " Read Relationship Address + CLEAR addressdata. + CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL' + EXPORTING + businesspartner = <searchresult_line>-partner + addressguid = <relationship_address>-addressguid + IMPORTING + addressdata = addressdata. + + APPEND INITIAL LINE TO lt_download ASSIGNING <download>. + CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' + EXPORTING + businesspartner = <relationship>-partner1 + IMPORTING + businesspartnerout = <download>-org_number + businesspartnerguidout = <download>-org_guid. + + CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' + EXPORTING + businesspartner = <relationship>-partner2 + IMPORTING + businesspartnerout = <download>-contpers_number + businesspartnerguidout = <download>-contpers_guid. + + MOVE-CORRESPONDING centraldataorganization TO <download>. + MOVE-CORRESPONDING addressdata TO <download>. + MOVE-CORRESPONDING centraldataperson TO <download>. + MOVE-CORRESPONDING relationship_centraldata TO <download>. + + WRITE: / <relationship>-partner1, <relationship>-partner2. + WRITE: centraldataorganization-name1(20), centraldataorganization-name2(10). + WRITE: centraldataperson-firstname(15), centraldataperson-lastname(15). + WRITE: addressdata-street(25), addressdata-house_no, + addressdata-postl_cod1, addressdata-city(25). + ENDIF. + ENDLOOP. + + ENDLOOP. + + DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_body TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + + DATA: lv_style_body_even_guid TYPE zexcel_cell_style, + lv_style_body_green TYPE zexcel_cell_style. + + DATA: row TYPE zexcel_cell_row. + + DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + + DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings. + + DATA: column TYPE zexcel_cell_column, + column_alpha TYPE zexcel_cell_column_alpha, + value TYPE zexcel_cell_value. + + FIELD-SYMBOLS: <fs_field_catalog> TYPE zexcel_s_fieldcatalog. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + "Create style with border even + lo_style_body = lo_excel->add_new_style( ). + lo_style_body->fill->fgcolor-rgb = zcl_excel_style_color=>c_yellow. + lo_style_body->borders->allborders = lo_border_dark. + lv_style_body_even_guid = lo_style_body->get_guid( ). + "Create style with border and green fill + lo_style_body = lo_excel->add_new_style( ). + lo_style_body->fill->fgcolor-rgb = zcl_excel_style_color=>c_green. + lo_style_body->borders->allborders = lo_border_dark. + lv_style_body_green = lo_style_body->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Internal table' ). + + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_download ). + + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog>. + CASE <fs_field_catalog>-fieldname. + WHEN 'ORG_NUMBER'. + <fs_field_catalog>-position = 1. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'CONTPERS_NUMBER'. + <fs_field_catalog>-position = 2. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'NAME1'. + <fs_field_catalog>-position = 3. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'NAME2'. + <fs_field_catalog>-position = 4. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'STREET'. + <fs_field_catalog>-position = 5. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'HOUSE_NO'. + <fs_field_catalog>-position = 6. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'POSTL_COD1'. + <fs_field_catalog>-position = 7. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'CITY'. + <fs_field_catalog>-position = 8. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'COUNTRYISO'. + <fs_field_catalog>-position = 9. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FIRSTNAME'. + <fs_field_catalog>-position = 10. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'LASTNAME'. + <fs_field_catalog>-position = 11. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FUNCTIONNAME'. + <fs_field_catalog>-position = 12. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'DEPARTMENTNAME'. + <fs_field_catalog>-position = 13. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'TEL1_NUMBR'. + <fs_field_catalog>-position = 14. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'TEL1_EXT'. + <fs_field_catalog>-position = 15. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FAX_NUMBER'. + <fs_field_catalog>-position = 16. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FAX_EXTENS'. + <fs_field_catalog>-position = 17. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'E_MAIL'. + <fs_field_catalog>-position = 18. + <fs_field_catalog>-dynpfld = abap_true. + WHEN OTHERS. + <fs_field_catalog>-dynpfld = abap_false. + ENDCASE. + ENDLOOP. + + ls_table_settings-top_left_column = 'A'. + ls_table_settings-top_left_row = '2'. + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium5. + + lo_worksheet->bind_table( ip_table = lt_download + is_table_settings = ls_table_settings + it_field_catalog = lt_field_catalog ). + LOOP AT lt_download ASSIGNING <download>. + row = sy-tabix + 2. + IF NOT <download>-org_number IS INITIAL + AND <download>-contpers_number IS INITIAL. + " Mark fields of Organization which can be changed green + lo_worksheet->set_cell_style( + ip_column = 'C' + ip_row = row + ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'D' + ip_row = row + ip_style = lv_style_body_green + ). +* CATCH zcx_excel. " Exceptions for ABAP2XLSX + ELSEIF NOT <download>-org_number IS INITIAL + AND NOT <download>-contpers_number IS INITIAL. + " Mark fields of Relationship which can be changed green + lo_worksheet->set_cell_style( + ip_column = 'L' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'M' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'N' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'O' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'P' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'Q' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'R' ip_row = row ip_style = lv_style_body_green + ). + ENDIF. + ENDLOOP. + " Add Fieldnames in first row and hide the row + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog> + WHERE position <> '' AND dynpfld = abap_true. + column = <fs_field_catalog>-position. + column_alpha = zcl_excel_common=>convert_column2alpha( column ). + value = <fs_field_catalog>-fieldname. + lo_worksheet->set_cell( ip_column = column_alpha + ip_row = 1 + ip_value = value + ip_style = lv_style_body_even_guid ). + ENDLOOP. + " Hide first row + row_dimension = lo_worksheet->get_row_dimension( 1 ). + row_dimension->set_visible( abap_false ). + + DATA: highest_column TYPE zexcel_cell_column, + count TYPE int4, + col_alpha TYPE zexcel_cell_column_alpha. + + highest_column = lo_worksheet->get_highest_column( ). + count = 1. + WHILE count <= highest_column. + col_alpha = zcl_excel_common=>convert_column2alpha( ip_column = count ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = col_alpha ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + count = count + 1. + ENDWHILE. +* " Set Column width manuall +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). +* column_dimension->set_width( ip_width = 11 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). +* column_dimension->set_width( ip_width = 11 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). +* column_dimension->set_width( ip_width = 35 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'E' ). +* column_dimension->set_width( ip_width = 18 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'F' ). +* column_dimension->set_width( ip_width = 5 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'G' ). +* column_dimension->set_width( ip_width = 6 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'H' ). +* column_dimension->set_width( ip_width = 12 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'I' ). +* column_dimension->set_width( ip_width = 3 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'J' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'K' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'L' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'M' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'N' ). +* column_dimension->set_width( ip_width = 12 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'O' ). +* column_dimension->set_width( ip_width = 9 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'P' ). +* column_dimension->set_width( ip_width = 12 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'Q' ). +* column_dimension->set_width( ip_width = 9 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'R' ). +* column_dimension->set_width( ip_width = 40 ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL12 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel12. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: gc_save_file_name TYPE string VALUE '12_HideSizeOutlineRowsAndColumns.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world in AutoSize column' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Hello world in a column width size 50' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 4 ip_value = 'Hello world (hidden column)' ). + lo_worksheet->set_cell( ip_column = 'F' ip_row = 2 ip_value = 'Outline column level 0' ). + lo_worksheet->set_cell( ip_column = 'G' ip_row = 2 ip_value = 'Outline column level 1' ). + lo_worksheet->set_cell( ip_column = 'H' ip_row = 2 ip_value = 'Outline column level 2' ). + lo_worksheet->set_cell( ip_column = 'I' ip_row = 2 ip_value = 'Small' ). + + + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Hello world (hidden row)' ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = 5 ip_value = 'Hello world in a row height size 20' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = 'Outline row level 0' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Outline row level 1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Outline row level 2' ). + + lo_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_off. " By default is on + lo_worksheet->zif_excel_sheet_properties~summaryright = zif_excel_sheet_properties=>c_right_off. " By default is on + + " Column Settings + " Auto size + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'I' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + " Manual Width + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + column_dimension->set_width( ip_width = 50 ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'D' ). + column_dimension->set_visible( ip_visible = abap_false ). + " Implementation in the Writer is not working yet ===== TODO ===== + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'F' ). + column_dimension->set_outline_level( ip_outline_level = 0 ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'G' ). + column_dimension->set_outline_level( ip_outline_level = 1 ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'H' ). + column_dimension->set_outline_level( ip_outline_level = 2 ). + + row_dimension = lo_worksheet->get_row_dimension( ip_row = 1 ). + row_dimension->set_visible( ip_visible = abap_false ). + row_dimension = lo_worksheet->get_row_dimension( ip_row = 5 ). + row_dimension->set_row_height( ip_row_height = 20 ). + " Implementation in the Writer is not working yet ===== TODO ===== + row_dimension = lo_worksheet->get_row_dimension( ip_row = 6 ). + row_dimension->set_outline_level( ip_outline_level = 0 ). + row_dimension = lo_worksheet->get_row_dimension( ip_row = 7 ). + row_dimension->set_outline_level( ip_outline_level = 1 ). + row_dimension = lo_worksheet->get_row_dimension( ip_row = 8 ). + row_dimension->set_outline_level( ip_outline_level = 2 ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL13 +*& +*&---------------------------------------------------------------------* +*& Example by: Alvaro "Blag" Tejada Galindo. +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel13. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_style_bold_border_guid TYPE zexcel_cell_style, + lo_style_bold_border TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '13_MergedCells.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'sheet1' ). + + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + + lo_style_bold_border = lo_excel->add_new_style( ). + lo_style_bold_border->font->bold = abap_true. + lo_style_bold_border->font->italic = abap_false. + lo_style_bold_border->font->color-rgb = zcl_excel_style_color=>c_black. + lo_style_bold_border->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_bold_border->borders->allborders = lo_border_dark. + lv_style_bold_border_guid = lo_style_bold_border->get_guid( ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = 'Test' ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'B' ip_value = 'Banana' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'C' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'D' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'E' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'F' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'G' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'Apple' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'F' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'G' ip_value = '' ip_style = lv_style_bold_border_guid ). + + lo_worksheet->set_merge( ip_row = 4 ip_column_start = 'B' ip_column_end = 'G' ). + + " Test also if merge works when oher merged chells are empty + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Tomato' ). + lo_worksheet->set_merge( ip_row = 6 ip_column_start = 'B' ip_column_end = 'G' ). + + " Test the patch provided by Victor Alekhin to merge cells in one column + lo_worksheet->set_cell( ip_row = 8 ip_column = 'B' ip_value = 'Merge cells also over multiple rows by Victor Alekhin' ). + lo_worksheet->set_merge( ip_row = 8 ip_column_start = 'B' ip_column_end = 'G' ip_row_to = 10 ). + + " Test the patch provided by Alexander Budeyev with different column merges + lo_worksheet->set_cell( ip_row = 12 ip_column = 'B' ip_value = 'Merge cells with different merges by Alexander Budeyev' ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'B' ip_value = 'Test' ). + + lo_worksheet->set_cell( ip_row = 13 ip_column = 'D' ip_value = 'Banana' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'D' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'E' ip_value = 'Apple' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'F' ip_value = '' ip_style = lv_style_bold_border_guid ). + + " Test merge (issue) + lo_worksheet->set_merge( ip_row = 13 ip_column_start = 'B' ip_column_end = 'C' ip_row_to = 15 ). + lo_worksheet->set_merge( ip_row = 13 ip_column_start = 'D' ip_column_end = 'D' ip_row_to = 14 ). + lo_worksheet->set_merge( ip_row = 13 ip_column_start = 'E' ip_column_end = 'F' ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL14 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel14. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_center TYPE REF TO zcl_excel_style, + lo_style_right TYPE REF TO zcl_excel_style, + lo_style_left TYPE REF TO zcl_excel_style, + lo_style_general TYPE REF TO zcl_excel_style, + lo_style_bottom TYPE REF TO zcl_excel_style, + lo_style_middle TYPE REF TO zcl_excel_style, + lo_style_top TYPE REF TO zcl_excel_style, + lo_style_justify TYPE REF TO zcl_excel_style, + lo_style_mixed TYPE REF TO zcl_excel_style, + lo_style_mixed_wrap TYPE REF TO zcl_excel_style, + lo_style_rotated TYPE REF TO zcl_excel_style, + lo_style_shrink TYPE REF TO zcl_excel_style, + lo_style_indent TYPE REF TO zcl_excel_style, + lv_style_center_guid TYPE zexcel_cell_style, + lv_style_right_guid TYPE zexcel_cell_style, + lv_style_left_guid TYPE zexcel_cell_style, + lv_style_general_guid TYPE zexcel_cell_style, + lv_style_bottom_guid TYPE zexcel_cell_style, + lv_style_middle_guid TYPE zexcel_cell_style, + lv_style_top_guid TYPE zexcel_cell_style, + lv_style_justify_guid TYPE zexcel_cell_style, + lv_style_mixed_guid TYPE zexcel_cell_style, + lv_style_mixed_wrap_guid TYPE zexcel_cell_style, + lv_style_rotated_guid TYPE zexcel_cell_style, + lv_style_shrink_guid TYPE zexcel_cell_style, + lv_style_indent_guid TYPE zexcel_cell_style. + +DATA: lo_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + +CONSTANTS: gc_save_file_name TYPE string VALUE '14_Alignment.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'sheet1' ). + + "Center + lo_style_center = lo_excel->add_new_style( ). + lo_style_center->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lv_style_center_guid = lo_style_center->get_guid( ). + "Right + lo_style_right = lo_excel->add_new_style( ). + lo_style_right->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_right. + lv_style_right_guid = lo_style_right->get_guid( ). + "Left + lo_style_left = lo_excel->add_new_style( ). + lo_style_left->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_left. + lv_style_left_guid = lo_style_left->get_guid( ). + "General + lo_style_general = lo_excel->add_new_style( ). + lo_style_general->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_general. + lv_style_general_guid = lo_style_general->get_guid( ). + "Bottom + lo_style_bottom = lo_excel->add_new_style( ). + lo_style_bottom->alignment->vertical = zcl_excel_style_alignment=>c_vertical_bottom. + lv_style_bottom_guid = lo_style_bottom->get_guid( ). + "Middle + lo_style_middle = lo_excel->add_new_style( ). + lo_style_middle->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lv_style_middle_guid = lo_style_middle->get_guid( ). + "Top + lo_style_top = lo_excel->add_new_style( ). + lo_style_top->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top. + lv_style_top_guid = lo_style_top->get_guid( ). + "Justify + lo_style_justify = lo_excel->add_new_style( ). + lo_style_justify->alignment->vertical = zcl_excel_style_alignment=>c_vertical_justify. + lv_style_justify_guid = lo_style_justify->get_guid( ). + + "Shrink + lo_style_shrink = lo_excel->add_new_style( ). + lo_style_shrink->alignment->shrinktofit = abap_true. + lv_style_shrink_guid = lo_style_shrink->get_guid( ). + + "Indent + lo_style_indent = lo_excel->add_new_style( ). + lo_style_indent->alignment->indent = 5. + lv_style_indent_guid = lo_style_indent->get_guid( ). + + "Middle / Centered / Wrap + lo_style_mixed_wrap = lo_excel->add_new_style( ). + lo_style_mixed_wrap->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_mixed_wrap->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lo_style_mixed_wrap->alignment->wraptext = abap_true. + lv_style_mixed_wrap_guid = lo_style_mixed_wrap->get_guid( ). + + "Middle / Centered / Wrap + lo_style_mixed = lo_excel->add_new_style( ). + lo_style_mixed->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_mixed->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lv_style_mixed_guid = lo_style_mixed->get_guid( ). + + "Center + lo_style_rotated = lo_excel->add_new_style( ). + lo_style_rotated->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_rotated->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lo_style_rotated->alignment->textrotation = 165. " -75° == 90° + 75° + lv_style_rotated_guid = lo_style_rotated->get_guid( ). + + + " Set row size for first 7 rows to 40 + DO 7 TIMES. + lo_row_dimension = lo_worksheet->get_row_dimension( sy-index ). + lo_row_dimension->set_row_height( 40 ). + ENDDO. + + "Horizontal alignment + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'Centered Text' ip_style = lv_style_center_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'B' ip_value = 'Right Text' ip_style = lv_style_right_guid ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Left Text' ip_style = lv_style_left_guid ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'B' ip_value = 'General Text' ip_style = lv_style_general_guid ). + + " Shrink & indent + lo_worksheet->set_cell( ip_row = 4 ip_column = 'F' ip_value = 'Text shrinked' ip_style = lv_style_shrink_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'F' ip_value = 'Text indented' ip_style = lv_style_indent_guid ). + + "Vertical alignment + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'Bottom Text' ip_style = lv_style_bottom_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 'Middle Text' ip_style = lv_style_middle_guid ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'D' ip_value = 'Top Text' ip_style = lv_style_top_guid ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'D' ip_value = 'Justify Text' ip_style = lv_style_justify_guid ). + + " Wrapped + lo_worksheet->set_cell( ip_row = 10 ip_column = 'B' + ip_value = 'This is a wrapped text centered in the middle' + ip_style = lv_style_mixed_wrap_guid ). + + " Rotated + lo_worksheet->set_cell( ip_row = 10 ip_column = 'D' + ip_value = 'This is a centered text rotated by -75°' + ip_style = lv_style_rotated_guid ). + + " forced line break + DATA: lv_value TYPE string. + CONCATENATE 'This is a wrapped text centered in the middle' cl_abap_char_utilities=>cr_lf + 'and a manuall line break.' INTO lv_value. + lo_worksheet->set_cell( ip_row = 11 ip_column = 'B' + ip_value = lv_value + ip_style = lv_style_mixed_guid ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL15 +*& +*&---------------------------------------------------------------------* +*& 2010-10-30, Gregor Wolf: +*& Added the functionality to ouput the read table content +*& 2011-12-19, Shahrin Shahrulzaman: +*& Added the functionality to have multiple input and output files +*&---------------------------------------------------------------------* + +REPORT zdemo_excel15. + +TYPE-POOLS: abap. + +TYPES: + BEGIN OF t_demo_excel15, + input TYPE string, + END OF t_demo_excel15. + +DATA: excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + reader TYPE REF TO zif_excel_reader. + +DATA: ex TYPE REF TO zcx_excel, + msg TYPE string. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_workdir TYPE string, + output_file_path TYPE string, + input_file_path TYPE string, + lv_file_separator TYPE c. + +DATA: worksheet TYPE REF TO zcl_excel_worksheet, + highest_column TYPE zexcel_cell_column, + highest_row TYPE int4, + column TYPE zexcel_cell_column VALUE 1, + col_str TYPE zexcel_cell_column_alpha, + row TYPE int4 VALUE 1, + value TYPE zexcel_cell_value. + +DATA: + lt_files TYPE TABLE OF t_demo_excel15. +FIELD-SYMBOLS: <wa_files> TYPE t_demo_excel15. + +PARAMETERS: p_path TYPE zexcel_export_dir, + p_noout TYPE xfeld DEFAULT abap_true. + + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '01_HelloWorld.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '02_Styles.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '03_iTab.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '04_Sheets.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '08_Range.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '13_MergedCells.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '31_AutosizeWithDifferentFontSizes.xlsx'. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + + LOOP AT lt_files ASSIGNING <wa_files>. + CONCATENATE p_path lv_file_separator <wa_files>-input INTO input_file_path. + CONCATENATE p_path lv_file_separator '15_' <wa_files>-input INTO output_file_path. + REPLACE '.xlsx' IN output_file_path WITH 'FromReader.xlsx'. + + TRY. + CREATE OBJECT reader TYPE zcl_excel_reader_2007. + excel = reader->load_file( input_file_path ). + + IF p_noout EQ abap_false. + worksheet = excel->get_active_worksheet( ). + highest_column = worksheet->get_highest_column( ). + highest_row = worksheet->get_highest_row( ). + + WRITE: 'Highest column: ', highest_column, 'Highest row: ', highest_row. + WRITE: /. + + WHILE row <= highest_row. + WHILE column <= highest_column. + col_str = zcl_excel_common=>convert_column2alpha( column ). + worksheet->get_cell( + EXPORTING + ip_column = col_str + ip_row = row + IMPORTING + ep_value = value + ). + WRITE: value. + column = column + 1. + ENDWHILE. + WRITE: /. + column = 1. + row = row + 1. + ENDWHILE. + ENDIF. + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = output_file_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + CATCH zcx_excel INTO ex. " Exceptions for ABAP2XLSX + msg = ex->get_text( ). + WRITE: / msg. + ENDTRY. + ENDLOOP. + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL16 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel16. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_drawing TYPE REF TO zcl_excel_drawing. + + +DATA: ls_io TYPE skwf_io. + +CONSTANTS: gc_save_file_name TYPE string VALUE '16_Drawings.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_objid TYPE sdok_docid DEFAULT '456694429165174BE10000000A1550C0', " Question mark in standard Web Dynpro WDT_QUIZ + p_class TYPE sdok_class DEFAULT 'M_IMAGE_P', + pobjtype TYPE skwf_ioty DEFAULT 'P'. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + "Load samle image + DATA: lt_bin TYPE solix_tab, + lv_len TYPE i, + lv_content TYPE xstring, + ls_key TYPE wwwdatatab. + + CALL METHOD cl_gui_frontend_services=>gui_upload + EXPORTING + filename = 'c:\Program Files\SAP\FrontEnd\SAPgui\wwi\graphics\W_bio.bmp' + filetype = 'BIN' + IMPORTING + filelength = lv_len + CHANGING + data_tab = lt_bin + 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 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19. + IF sy-subrc <> 0. +* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno +* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_len + IMPORTING + buffer = lv_content + TABLES + binary_tab = lt_bin + EXCEPTIONS + failed = 1 + OTHERS = 2. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Image from web repository (SMW0)' ). + + " create global drawing, set position and media from web repository + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 3 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'SAPLOGO.GIF'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 166 + ip_height = 75 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " another drawing from a XSTRING read from a file + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Image from a file (c:\Program Files\SAP\FrontEnd\SAPgui\wwi\graphics\W_bio.bmp)' ). + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 9 + ip_from_col = 'B' ). + lo_drawing->set_media( ip_media = lv_content + ip_media_type = zcl_excel_drawing=>c_media_type_bmp + ip_width = 83 + ip_height = 160 ). + + lo_worksheet->add_drawing( lo_drawing ). + + ls_io-objid = p_objid. + ls_io-class = p_class. + ls_io-objtype = pobjtype. + IF ls_io IS NOT INITIAL. + " another drawing from a XSTRING read from a file + lo_worksheet->set_cell( ip_column = 'B' ip_row = 18 ip_value = 'Mime repository (by default Question mark in standard Web Dynpro WDT_QUIZ)' ). + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 19 + ip_from_col = 'B' ). + lo_drawing->set_media_mime( ip_io = ls_io + ip_width = 126 + ip_height = 145 ). + + lo_worksheet->add_drawing( lo_drawing ). + ENDIF. + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL17 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel17. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_protection TYPE REF TO zcl_excel_style, + lv_style_protection_guid TYPE zexcel_cell_style, + lo_style TYPE REF TO zcl_excel_style, + lv_style TYPE zexcel_cell_style. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '17_SheetProtection.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_pwd TYPE zexcel_aes_password LOWER CASE DEFAULT 'secret'. + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. +* lo_worksheet->zif_excel_sheet_protection~password = 'DAA7'. "it is the encoded word "secret" + lo_worksheet->zif_excel_sheet_protection~password = zcl_excel_common=>encrypt_password( p_pwd ). + lo_worksheet->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~objects = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=>c_active. + " First style to unlock a cell + lo_style_protection = lo_excel->add_new_style( ). + lo_style_protection->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. + lv_style_protection_guid = lo_style_protection->get_guid( ). + " Another style which should not affect the unlock style + lo_style = lo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FFCC3333'. + lv_style = lo_style->get_guid( ). + lo_worksheet->set_cell( ip_row = 3 ip_column = 'C' ip_value = 'This cell is locked locked and has the second formating' ip_style = lv_style ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 'This cell is locked as all the others empty cell' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'This cell is locked as all the others empty cell' ). + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL26 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel29. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_excel_reader TYPE REF TO zif_excel_reader. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_filename TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +PARAMETERS: p_path TYPE zexcel_export_dir OBLIGATORY. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + + DATA: lt_filetable TYPE filetable, + lv_rc TYPE i. + + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + + CALL METHOD cl_gui_frontend_services=>file_open_dialog + EXPORTING + window_title = 'Select Macro-Enabled Workbook template' + default_extension = '*.xlsm' + file_filter = 'Excel Macro-Enabled Workbook (*.xlsm)|*.xlsm' + initial_directory = lv_workdir + CHANGING + file_table = lt_filetable + rc = lv_rc + EXCEPTIONS + file_open_dialog_failed = 1 + cntl_error = 2 + error_no_gui = 3 + not_supported_by_gui = 4 + OTHERS = 5. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + READ TABLE lt_filetable INTO lv_filename INDEX 1. + p_path = lv_filename. + +START-OF-SELECTION. + + lv_full_path = p_path. + + CREATE OBJECT lo_excel_reader TYPE zcl_excel_reader_xlsm. + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_xlsm. + lo_excel = lo_excel_reader->load_file( lv_full_path ). + lv_file = lo_excel_writer->write_file( lo_excel ). + REPLACE '.xlsm' IN lv_full_path WITH 'FromReader.xlsm'. + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL28 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel28. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_file_name TYPE string, + lv_file_path TYPE string, + lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE '28_HelloWorld.csv'. + +PARAMETERS: p_path TYPE string. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = p_path + CHANGING selected_folder = p_path ). + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = sy-datum ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = sy-uzeit ). + + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_width( 11 ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the second sheet' ). + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_csv. + zcl_excel_writer_csv=>set_delimiter( ip_value = cl_abap_char_utilities=>horizontal_tab ). + zcl_excel_writer_csv=>set_enclosure( ip_value = '''' ). + zcl_excel_writer_csv=>set_endofline( ip_value = cl_abap_char_utilities=>cr_lf ). + + zcl_excel_writer_csv=>set_active_sheet_index( i_active_worksheet = 2 ). +* zcl_excel_writer_csv=>set_active_sheet_index_by_name( I_WORKSHEET_NAME = 'Sheet2' ). + + lv_file = lo_excel_writer->write_file( lo_excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + REPLACE FIRST OCCURRENCE OF '.csv' IN lv_full_path WITH '_Sheet2.csv'. + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + +* zcl_excel_writer_csv=>set_active_sheet_index( i_active_worksheet = 2 ). + zcl_excel_writer_csv=>set_active_sheet_index_by_name( I_WORKSHEET_NAME = 'Sheet1' ). + lv_file = lo_excel_writer->write_file( lo_excel ). + REPLACE FIRST OCCURRENCE OF '_Sheet2.csv' IN lv_full_path WITH '_Sheet1.csv'. + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL27 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel27. + +CONSTANTS: c_fish TYPE string VALUE 'Fish'. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lo_style_1 TYPE REF TO zcl_excel_style, + lo_style_2 TYPE REF TO zcl_excel_style, + lv_style_1_guid TYPE zexcel_cell_style, + lv_style_2_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis. + + +DATA: lv_title TYPE zexcel_sheet_title. + +CONSTANTS: gc_save_file_name TYPE string VALUE '27_ConditionalFormatting.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + + " Creates active sheet + CREATE OBJECT lo_excel. + + lo_style_1 = lo_excel->add_new_style( ). + lo_style_1->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_1->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. + lv_style_1_guid = lo_style_1->get_guid( ). + + lo_style_2 = lo_excel->add_new_style( ). + lo_style_2->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_2->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. + lv_style_2_guid = lo_style_2->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lv_title = 'Data Validation'. + lo_worksheet->set_title( lv_title ). + " Set values for dropdown + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = c_fish ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 'Anchovy' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 'Carp' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 'Catfish' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 'Cod' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 'Eel' ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'A' ip_value = 'Haddock' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_fish. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 9 ). + + " 1st validation + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_fish. + lo_data_validation->cell_row = 2. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 2 ip_column = 'C' ip_value = 'Select a value' ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '"Anchovy"'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_1_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 1. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 2 + ip_stop_column = 'C' + ip_stop_row = 2 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '"Carp"'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_2_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 2 + ip_stop_column = 'C' + ip_stop_row = 2 ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *--------------------------------------------------------------------* +* REPORT ZDEMO_EXCEL26 +* Demo for method zcl_excel_worksheet-bind_object: +* export data from ALV (CL_GUI_ALV_GRID) object or cl_salv_table object +* to Excel. +*--------------------------------------------------------------------* +report zdemo_excel26. + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +class lcl_handle_events definition. + public section. + methods: + on_user_command for event added_function of cl_salv_events + importing e_salv_function. +endclass. "lcl_handle_events DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +class lcl_handle_events implementation. + method on_user_command. + perform user_command." using e_salv_function text-i08. + endmethod. "on_user_command +endclass. "lcl_handle_events IMPLEMENTATION + +*--------------------------------------------------------------------* +* DATA DECLARATION +*--------------------------------------------------------------------* + +data: lo_excel type ref to zcl_excel, + lo_worksheet type ref to zcl_excel_worksheet, + lo_salv type ref to cl_salv_table, + gr_events type ref to lcl_handle_events, + lr_events type ref to cl_salv_events_table, + gt_sbook type table of sbook. + +data: l_path type string, " local dir + lv_workdir type string, + lv_file_separator type c. + +constants: + lv_default_file_name type string value '26_Bind_ALV.xlsx'. +*--------------------------------------------------------------------* +*START-OF-SELECTION +*--------------------------------------------------------------------* + +start-of-selection. + +* get data +* ------------------------------------------ + + select * + into table gt_sbook[] + from sbook "#EC CI_NOWHERE + up to 10 rows. + +* Display ALV +* ------------------------------------------ + + try. + cl_salv_table=>factory( + exporting + list_display = abap_false + importing + r_salv_table = lo_salv + changing + t_table = gt_sbook[] ). + catch cx_salv_msg . + endtry. + + try. + lo_salv->set_screen_status( + exporting + report = sy-repid + pfstatus = 'ALV_STATUS' + set_functions = lo_salv->c_functions_all ). + catch cx_salv_msg . + endtry. + + lr_events = lo_salv->get_event( ). + create object gr_events. + set handler gr_events->on_user_command for lr_events. + + lo_salv->display( ). + + +*&---------------------------------------------------------------------* +*& Form USER_COMMAND +*&---------------------------------------------------------------------* +* ALV user command +*--------------------------------------------------------------------* +form user_command . + if sy-ucomm = 'EXCEL'. + +* get save file path + cl_gui_frontend_services=>get_sapgui_workdir( changing sapworkdir = l_path ). + cl_gui_cfw=>flush( ). + cl_gui_frontend_services=>directory_browse( + exporting initial_folder = l_path + changing selected_folder = l_path ). + + if l_path is initial. + cl_gui_frontend_services=>get_sapgui_workdir( + changing sapworkdir = lv_workdir ). + l_path = lv_workdir. + endif. + + cl_gui_frontend_services=>get_file_separator( + changing file_separator = lv_file_separator ). + + concatenate l_path lv_file_separator lv_default_file_name + into l_path. + +* export file to save file path + perform export_to_excel. + + endif. +endform. " USER_COMMAND + +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +form export_to_excel. + data: lo_converter type ref to zcl_excel_converter. +* create zcl_excel_worksheet object + + create object lo_excel. + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + +* write to excel using method Bin_object + try. + lo_worksheet->bind_alv( + io_alv = lo_salv + it_table = gt_sbook + i_top = 2 + i_left = 1 + ). + catch zcx_excel . + endtry. + + perform write_file. + +endform. "EXPORT_TO_EXCEL +*&---------------------------------------------------------------------* +*& Form WRITE_FILE +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +* --> p1 text +* <-- p2 text +*----------------------------------------------------------------------* +form write_file . + data: lt_file type solix_tab, + l_bytecount type i, + l_file type xstring. + + data: lo_excel_writer type ref to zif_excel_writer. + + data: ls_seoclass type seoclass. + + create object lo_excel_writer type zcl_excel_writer_2007. + l_file = lo_excel_writer->write_file( lo_excel ). + + select single * into ls_seoclass + from seoclass + where clsname = 'CL_BCS_CONVERT'. + + if sy-subrc = 0. + call method (ls_seoclass-clsname)=>xstring_to_solix + exporting + iv_xstring = l_file + receiving + et_solix = lt_file. + + l_bytecount = xstrlen( l_file ). + else. + " Convert to binary + call function 'SCMS_XSTRING_TO_BINARY' + exporting + buffer = l_file + importing + output_length = l_bytecount + tables + binary_tab = lt_file. + endif. + + cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount + filename = l_path + filetype = 'BIN' + changing data_tab = lt_file ). + +endform. " WRITE_FILE + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL25 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel25. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_exception TYPE REF TO cx_root. + +DATA: lv_file TYPE xstring. + +CONSTANTS: lv_file_name TYPE string VALUE '25_HelloWorld.xlsx'. +DATA: lv_default_file_name TYPE string. +DATA: lv_error TYPE string. + +CALL FUNCTION 'FILE_GET_NAME_USING_PATH' + EXPORTING + logical_path = 'LOCAL_TEMPORARY_FILES' " Logical path' + file_name = lv_file_name " File name + IMPORTING + file_name_with_path = lv_default_file_name. " File name with path +" Creates active sheet +CREATE OBJECT lo_excel. + +" Get active sheet +lo_worksheet = lo_excel->get_active_worksheet( ). +lo_worksheet->set_title( ip_title = 'Sheet1' ). +lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + +CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. +lv_file = lo_excel_writer->write_file( lo_excel ). + +TRY. + OPEN DATASET lv_default_file_name FOR OUTPUT IN BINARY MODE. + TRANSFER lv_file TO lv_default_file_name. + CLOSE DATASET lv_default_file_name. + CATCH cx_root INTO lo_exception. + lv_error = lo_exception->get_text( ). + MESSAGE lv_error TYPE 'I'. +ENDTRY. + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL23 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel24. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +DATA: lv_value TYPE string. + +CONSTANTS: gc_save_file_name TYPE string VALUE '24_Sheets_with_different_default_date_formats.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Default Date Format' ). + " Insert current date + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Current Date:' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = sy-datum ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet2!A1' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 6 ip_value = 'This is a link to the second sheet' ip_hyperlink = lo_hyperlink ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + + " Second sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_default_excel_date_format( zcl_excel_style_number_format=>c_format_date_yyyymmdd ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Date Format set to YYYYMMDD' ). + " Insert current date + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Current Date:' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = sy-datum ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet3!B2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 6 ip_value = 'This is link to the third sheet' ip_hyperlink = lo_hyperlink ). + + " Third sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + " TODO: It seems that the zcl_excel_style_number_format=>c_format_date_yyyymmddslash + " does not produce a valid output + lo_worksheet->set_default_excel_date_format( zcl_excel_style_number_format=>c_format_date_yyyymmddslash ). + lo_worksheet->set_title( ip_title = 'Sheet3' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Date Format set to YYYY/MM/DD' ). + " Insert current date + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Current Date:' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = sy-datum ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet4!B2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 6 ip_value = 'This is link to the 4th sheet' ip_hyperlink = lo_hyperlink ). + + " 4th sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + " Illustrate the Problem caused by: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year. + " http://support.microsoft.com/kb/214326/en-us + lo_worksheet->set_title( ip_title = 'Sheet4' ). + " Loop from Start Date to the Max Date current data in daily steps + CONSTANTS: lv_max type d VALUE '19000302'. + + DATA: lv_date TYPE d VALUE '19000226', + lv_row TYPE i. + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'Formated date' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Integer value for this date' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 3 ip_value = 'Date as string' ). + + lv_row = 4. + WHILE lv_date < lv_max. + lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_row ip_value = lv_date ). + lv_value = zcl_excel_common=>date_to_excel_string( lv_date ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_row ip_value = lv_value ). + lv_value = lv_date. + lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_row ip_value = lv_value ). + lv_date = lv_date + 1. + lv_row = lv_row + 1. + ENDWHILE. + + lv_row = lv_row + 1. + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet1!B2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = lv_row ip_value = 'This is link to the first sheet' ip_hyperlink = lo_hyperlink ). + + lo_excel->set_active_sheet_index_by_name( 'Sheet1' ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL23 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel23. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '23_Sheets_with_and_without_grid_lines.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the first sheet with grid lines and print centered horizontal & vertical' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_true ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet2!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is a link to the second sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 150. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_NORMAL = 150. + + lo_worksheet->sheet_setup->vertical_centered = abap_true. + lo_worksheet->sheet_setup->horizontal_centered = abap_true. + + " Second sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the second sheet with grid lines in display and print' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_true ). + lo_worksheet->set_print_gridlines( i_print_gridlines = abap_true ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet3!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to the third sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 160. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_PAGELAYOUTVIEW = 200. + + " Third sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet3' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the third sheet without grid lines in display and print' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_false ). + lo_worksheet->set_print_gridlines( i_print_gridlines = abap_false ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet4!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to the fourth sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 170. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_SHEETLAYOUTVIEW = 150. + + " Fourth sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet4' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the fourth sheet with grid lines and print centered ONLY horizontal' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_true ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet1!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to the first sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 150. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_NORMAL = 150. + +" lo_worksheet->sheet_setup->vertical_centered = abap_true. + lo_worksheet->sheet_setup->horizontal_centered = abap_true. + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL18 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel18. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_style_protection_guid TYPE zexcel_cell_style. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '18_BookProtection.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_excel->zif_excel_book_protection~protected = zif_excel_book_protection=>c_protected. + lo_excel->zif_excel_book_protection~lockrevision = zif_excel_book_protection=>c_locked. + lo_excel->zif_excel_book_protection~lockstructure = zif_excel_book_protection=>c_locked. + lo_excel->zif_excel_book_protection~lockwindows = zif_excel_book_protection=>c_locked. + + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL19 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel19. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '19_SetActiveSheet.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_noout TYPE xfeld DEFAULT abap_true. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " First Worksheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'First' ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'This is Sheet 1' ). + + " Second Worksheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Second' ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'This is Sheet 2' ). + + " Third Worksheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Third' ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'This is Sheet 3' ). + + IF p_noout EQ abap_false. + " lo_excel->set_active_sheet_index_by_name( data_sheet_name ). + DATA: active_sheet_index TYPE zexcel_active_worksheet. + active_sheet_index = lo_excel->get_active_sheet_index( ). + WRITE: 'Sheet Index before: ', active_sheet_index. + ENDIF. + lo_excel->set_active_sheet_index( '2' ). + IF p_noout EQ abap_false. + active_sheet_index = lo_excel->get_active_sheet_index( ). + WRITE: 'Sheet Index after: ', active_sheet_index. + ENDIF. + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL2 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel2. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_bold TYPE REF TO zcl_excel_style, + lo_style_underline TYPE REF TO zcl_excel_style, + lo_style_filled TYPE REF TO zcl_excel_style, + lo_style_border TYPE REF TO zcl_excel_style, + lo_style_button TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lo_border_light TYPE REF TO zcl_excel_style_border. + +DATA: lv_style_bold_guid TYPE zexcel_cell_style, + lv_style_underline_guid TYPE zexcel_cell_style, + lv_style_filled_guid TYPE zexcel_cell_style, + lv_style_filled_green_guid TYPE zexcel_cell_style, + lv_style_border_guid TYPE zexcel_cell_style, + lv_style_button_guid TYPE zexcel_cell_style, + lv_style_filled_turquoise_guid TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: gc_save_file_name TYPE string VALUE '02_Styles.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + + +START-OF-SELECTION. + + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + CREATE OBJECT lo_border_light. + lo_border_light->border_color-rgb = zcl_excel_style_color=>c_gray. + lo_border_light->border_style = zcl_excel_style_border=>c_border_thin. + " Create a bold / italic style + lo_style_bold = lo_excel->add_new_style( ). + lo_style_bold->font->bold = abap_true. + lo_style_bold->font->italic = abap_true. + lo_style_bold->font->name = zcl_excel_style_font=>c_name_arial. + lo_style_bold->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_bold->font->color-rgb = zcl_excel_style_color=>c_red. + lv_style_bold_guid = lo_style_bold->get_guid( ). + " Create an underline double style + lo_style_underline = lo_excel->add_new_style( ). + lo_style_underline->font->underline = abap_true. + lo_style_underline->font->underline_mode = zcl_excel_style_font=>c_underline_double. + lo_style_underline->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_underline->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_underline->font->family = zcl_excel_style_font=>c_family_roman. + lv_style_underline_guid = lo_style_underline->get_guid( ). + " Create filled style yellow + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-theme = zcl_excel_style_color=>c_theme_accent6. + lv_style_filled_guid = lo_style_filled->get_guid( ). + " Create border with button effects + lo_style_button = lo_excel->add_new_style( ). + lo_style_button->borders->right = lo_border_dark. + lo_style_button->borders->down = lo_border_dark. + lo_style_button->borders->left = lo_border_light. + lo_style_button->borders->top = lo_border_light. + lv_style_button_guid = lo_style_button->get_guid( ). + "Create style with border + lo_style_border = lo_excel->add_new_style( ). + lo_style_border->borders->allborders = lo_border_dark. + lo_style_border->borders->diagonal = lo_border_dark. + lo_style_border->borders->diagonal_mode = zcl_excel_style_borders=>c_diagonal_both. + lv_style_border_guid = lo_style_border->get_guid( ). + " Create filled style green + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-rgb = zcl_excel_style_color=>c_green. + lo_style_filled->font->name = zcl_excel_style_font=>c_name_cambria. + lo_style_filled->font->scheme = zcl_excel_style_font=>c_scheme_major. + lv_style_filled_green_guid = lo_style_filled->get_guid( ). + + " Create filled style turquoise using legacy excel ver <= 2003 palette. (https://code.sdn.sap.com/spaces/abap2xlsx/tickets/92) + lo_style_filled = lo_excel->add_new_style( ). + lo_excel->legacy_palette->set_color( "replace built-in color from palette with out custom RGB turquoise + ip_index = 16 + ip_color = '0040E0D0' ). + + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-indexed = 16. + lv_style_filled_turquoise_guid = lo_style_filled->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Styles' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Bold text' ip_style = lv_style_bold_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 4 ip_value = 'Underlined text' ip_style = lv_style_underline_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 6 ip_value = 'Borders' ip_style = lv_style_border_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 7 ip_value = 'I''m not a button :)' ip_style = lv_style_button_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 9 ip_value = 'Modified color for Excel 2003' ip_style = lv_style_filled_turquoise_guid ). + " Fill the cell and apply one style + lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + " Change the style + lo_worksheet->set_cell_style( ip_column = 'B' ip_row = 6 ip_style = lv_style_filled_green_guid ). + " Add Style to an empty cell to test Fix for Issue + "#44 Exception ZCX_EXCEL thrown when style is set for an empty cell + " https://code.sdn.sap.com/spaces/abap2xlsx/tickets/44-exception-zcx_excel-thrown-when-style-is-set-for-an-empty-cell + lo_worksheet->set_cell_style( ip_column = 'E' ip_row = 6 ip_style = lv_style_filled_green_guid ). + +* CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. +* lv_file = lo_excel_writer->write_file( lo_excel ). +* +* " Convert to binary +* CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' +* EXPORTING +* buffer = lv_file +* IMPORTING +* output_length = lv_bytecount +* TABLES +* binary_tab = lt_file_tab. +** " This method is only available on AS ABAP > 6.40 +** lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +** lv_bytecount = xstrlen( lv_file ). +* +* " Save the file +* cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount +* filename = lv_full_path +* filetype = 'BIN' +* CHANGING data_tab = lt_file_tab ). + + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL22 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel22. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style TYPE REF TO zcl_excel_style, + lo_style_date TYPE REF TO zcl_excel_style, + lo_style_editable TYPE REF TO zcl_excel_style, + lo_data_validation TYPE REF TO zcl_excel_data_validation. + +DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings, + ls_table_settings_out TYPE zexcel_s_table_settings. + +DATA: lv_style_guid TYPE zexcel_cell_style. + +DATA: lv_row TYPE char10. + +FIELD-SYMBOLS: <fs_field_catalog> TYPE zexcel_s_fieldcatalog. + +CONSTANTS: gc_save_file_name TYPE string VALUE '22_itab_fieldcatalog.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'PN_MASSIVE'). + + DATA lt_test TYPE TABLE OF sflight. + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + + " sheet style (white background) + lo_style = lo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = zcl_excel_style_color=>c_white. + lv_style_guid = lo_style->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->zif_excel_sheet_properties~set_style( lv_style_guid ). + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_protection~password = zcl_excel_common=>encrypt_password( 'test' ). + lo_worksheet->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~objects = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=>c_active. + + " Create cell style for display only fields + lo_style = lo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = zcl_excel_style_color=>c_gray. + lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_text. + + " Create cell style for display only date field + lo_style_date = lo_excel->add_new_style( ). + lo_style_date->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_date->fill->fgcolor-rgb = zcl_excel_style_color=>c_gray. + lo_style_date->number_format->format_code = zcl_excel_style_number_format=>c_format_date_ddmmyyyy. + + " Create cell style for editable fields + lo_style_editable = lo_excel->add_new_style( ). + lo_style_editable->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. + + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_test ). + + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog>. + CASE <fs_field_catalog>-fieldname. + WHEN 'CARRID'. + <fs_field_catalog>-position = 3. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style->get_guid( ). + WHEN 'CONNID'. + <fs_field_catalog>-position = 1. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style->get_guid( ). + WHEN 'FLDATE'. + <fs_field_catalog>-position = 2. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style_date->get_guid( ). + WHEN 'PRICE'. + <fs_field_catalog>-position = 4. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style_editable->get_guid( ). + <fs_field_catalog>-totals_function = zcl_excel_table=>totals_function_sum. + WHEN OTHERS. + <fs_field_catalog>-dynpfld = abap_false. + ENDCASE. + ENDLOOP. + + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2. + ls_table_settings-show_row_stripes = abap_true. + + lo_worksheet->bind_table( EXPORTING + ip_table = lt_test + it_field_catalog = lt_field_catalog + is_table_settings = ls_table_settings + IMPORTING + es_table_settings = ls_table_settings_out ). + + lo_worksheet->freeze_panes( ip_num_rows = 3 ). "freeze column headers when scrolling + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_custom. + lv_row = ls_table_settings_out-top_left_row. + CONDENSE lv_row. + CONCATENATE 'ISNUMBER(' ls_table_settings_out-top_left_column lv_row ')' INTO lo_data_validation->formula1. + lo_data_validation->cell_row = ls_table_settings_out-top_left_row. + lo_data_validation->cell_column = ls_table_settings_out-top_left_column. + lo_data_validation->cell_row_to = ls_table_settings_out-bottom_right_row. + lo_data_validation->cell_column_to = ls_table_settings_out-bottom_right_column. + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL21 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel21. + +TYPES: + BEGIN OF t_color_style, + color TYPE zexcel_style_color_argb, + style TYPE zexcel_cell_style, + END OF t_color_style. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_filled TYPE REF TO zcl_excel_style. + +DATA: color_styles TYPE TABLE OF t_color_style. + +FIELD-SYMBOLS: <color_style> LIKE LINE OF color_styles. + +CONSTANTS: max TYPE i VALUE 255, + step TYPE i VALUE 51. + +DATA: red TYPE i, + green TYPE i, + blue TYPE i, + red_hex(1) TYPE x, + green_hex(1) TYPE x, + blue_hex(1) TYPE x, + red_str TYPE string, + green_str TYPE string, + blue_str TYPE string. + +DATA: color TYPE zexcel_style_color_argb, + tint TYPE zexcel_style_color_tint. + +DATA: row TYPE i, + row_tmp TYPE i, + column TYPE zexcel_cell_column VALUE 1, + col_str TYPE zexcel_cell_column_alpha. + +CONSTANTS: gc_save_file_name TYPE string VALUE '21_BackgroundColorPicker.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + WHILE red <= max. + green = 0. + WHILE green <= max. + blue = 0. + WHILE blue <= max. + red_hex = red. + red_str = red_hex. + green_hex = green. + green_str = green_hex. + blue_hex = blue. + blue_str = blue_hex. + " Create filled + CONCATENATE 'FF' red_str green_str blue_str INTO color. + APPEND INITIAL LINE TO color_styles ASSIGNING <color_style>. + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-rgb = color. + <color_style>-color = color. + <color_style>-style = lo_style_filled->get_guid( ). + blue = blue + step. + ENDWHILE. + green = green + step. + ENDWHILE. + red = red + step. + ENDWHILE. + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Color Picker' ). + LOOP AT color_styles ASSIGNING <color_style>. + row_tmp = ( max / step + 1 ) * 3. + IF row = row_tmp. + row = 0. + column = column + 1. + ENDIF. + row = row + 1. + col_str = zcl_excel_common=>convert_column2alpha( column ). + + " Fill the cell and apply one style + lo_worksheet->set_cell( ip_column = col_str + ip_row = row + ip_value = <color_style>-color + ip_style = <color_style>-style ). + ENDLOOP. + + row = row + 2. + tint = '-0.5'. + DO 10 TIMES. + column = 1. + DO 10 TIMES. + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-theme = sy-index - 1. + lo_style_filled->fill->fgcolor-tint = tint. + <color_style>-style = lo_style_filled->get_guid( ). + col_str = zcl_excel_common=>convert_column2alpha( column ). + lo_worksheet->set_cell_style( ip_column = col_str + ip_row = row + ip_style = <color_style>-style ). + + ADD 1 TO column. + ENDDO. + ADD '0.1' TO tint. + ADD 1 TO row. + ENDDO. + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *--------------------------------------------------------------------* +* REPORT ZDEMO_EXCEL20 +* Demo for method zcl_excel_worksheet-bind_alv: +* export data from ALV (CL_GUI_ALV_GRID) object to excel +*--------------------------------------------------------------------* +REPORT zdemo_excel20. + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events DEFINITION. + PUBLIC SECTION. + METHODS: + on_user_command FOR EVENT added_function OF cl_salv_events + IMPORTING e_salv_function. +ENDCLASS. "lcl_handle_events DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events IMPLEMENTATION. + METHOD on_user_command. + PERFORM user_command." using e_salv_function text-i08. + ENDMETHOD. "on_user_command +ENDCLASS. "lcl_handle_events IMPLEMENTATION + +*--------------------------------------------------------------------* +* DATA DECLARATION +*--------------------------------------------------------------------* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_alv TYPE REF TO cl_gui_alv_grid, + lo_salv TYPE REF TO cl_salv_table, + gr_events TYPE REF TO lcl_handle_events, + lr_events TYPE REF TO cl_salv_events_table, + gt_sbook TYPE TABLE OF sbook, + gt_listheader TYPE slis_t_listheader, + wa_listheader LIKE LINE OF gt_listheader. + +DATA: l_path TYPE string, " local dir + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: + lv_default_file_name TYPE string VALUE '20_BindAlv.xlsx'. +*--------------------------------------------------------------------* +*START-OF-SELECTION +*--------------------------------------------------------------------* + +START-OF-SELECTION. + +* get data +* ------------------------------------------ + + SELECT * + INTO TABLE gt_sbook[] + FROM sbook "#EC CI_NOWHERE + UP TO 10 ROWS. + +* Display ALV +* ------------------------------------------ + + TRY. + cl_salv_table=>factory( + EXPORTING + list_display = abap_false + IMPORTING + r_salv_table = lo_salv + CHANGING + t_table = gt_sbook[] ). + CATCH cx_salv_msg . + ENDTRY. + + TRY. + lo_salv->set_screen_status( + EXPORTING + report = sy-repid + pfstatus = 'ALV_STATUS' + set_functions = lo_salv->c_functions_all ). + CATCH cx_salv_msg . + ENDTRY. + + lr_events = lo_salv->get_event( ). + CREATE OBJECT gr_events. + SET HANDLER gr_events->on_user_command FOR lr_events. + + lo_salv->display( ). + + +*&---------------------------------------------------------------------* +*& Form USER_COMMAND +*&---------------------------------------------------------------------* +* ALV user command +*--------------------------------------------------------------------* +FORM user_command . + IF sy-ucomm = 'EXCEL'. + +* get save file path + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = l_path ). + cl_gui_cfw=>flush( ). + cl_gui_frontend_services=>directory_browse( + EXPORTING initial_folder = l_path + CHANGING selected_folder = l_path ). + + IF l_path IS INITIAL. + cl_gui_frontend_services=>get_sapgui_workdir( + CHANGING sapworkdir = lv_workdir ). + l_path = lv_workdir. + ENDIF. + + cl_gui_frontend_services=>get_file_separator( + CHANGING file_separator = lv_file_separator ). + + CONCATENATE l_path lv_file_separator lv_default_file_name + INTO l_path. + +* export file to save file path + + PERFORM export_to_excel. + + ENDIF. +ENDFORM. " USER_COMMAND + +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +FORM export_to_excel. + +* create zcl_excel_worksheet object + + CREATE OBJECT lo_excel. + lo_worksheet = lo_excel->get_active_worksheet( ). + +* get ALV object from screen + + CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' + IMPORTING + e_grid = lo_alv. + +* build list header + + wa_listheader-typ = 'H'. + wa_listheader-info = sy-title. + APPEND wa_listheader TO gt_listheader. + + wa_listheader-typ = 'S'. + wa_listheader-info = 'Created by: ABAP2XLSX Group'. + APPEND wa_listheader TO gt_listheader. + + wa_listheader-typ = 'A'. + wa_listheader-info = + 'Project hosting at https://cw.sdn.sap.com/cw/groups/abap2xlsx'. + APPEND wa_listheader TO gt_listheader. + +* write to excel using method Bin_ALV + + lo_worksheet->bind_alv_ole2( + EXPORTING +* I_DOCUMENT_URL = SPACE " excel template +* I_XLS = 'X' " create in xls format? + i_save_path = l_path + io_alv = lo_alv + it_listheader = gt_listheader + i_top = 2 + i_left = 1 +* I_COLUMNS_HEADER = 'X' +* I_COLUMNS_AUTOFIT = 'X' +* I_FORMAT_COL_HEADER = +* I_FORMAT_SUBTOTAL = +* I_FORMAT_TOTAL = + EXCEPTIONS + miss_guide = 1 + ex_transfer_kkblo_error = 2 + fatal_error = 3 + inv_data_range = 4 + dim_mismatch_vkey = 5 + dim_mismatch_sema = 6 + error_in_sema = 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. + ENDIF. + +ENDFORM. "EXPORT_TO_EXCEL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/ABAP2XLSX_V_7_0_1.nugg.zip b/build/ABAP2XLSX_V_7_0_1.nugg.zip new file mode 100644 index 0000000000000000000000000000000000000000..606a0c7ccdcfb4ce4cb2235758a8a41c6bda317f GIT binary patch literal 296803 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 #OrSRlO-uKPrO_bvO2uL>0&V{yWqf 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%0A{EeAQ}QhPa4r%@wYszha(1yw2& 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 z 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%0DFM^WIguoyjY80+Ew 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 L2oC{m00I3!w;JU~ literal 0 HcmV?d00001 diff --git a/build/ABAP2XLSX_V_7_0_1.zip b/build/ABAP2XLSX_V_7_0_1.zip new file mode 100644 index 0000000000000000000000000000000000000000..c2a828e7abae9e619db10695cdcb664efe800ee8 GIT binary patch literal 1521842 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

Q- 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

CQQIfWVTY2 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 M} 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

5vjSqP2P)E(LId_b1KI#Fdz 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 z zDtaBG1KbXZH}m)pu>gbR8~mG8rnIDDSqHX;7Jm}=+_eaOkm4oGuXP~a!AqgD$+xqOt)RN`?B zuX+%Z9N!SA)^g2%`#N=E9&pBE%)Y6~JhINn~3>}QI z`5_Hi`~*|~)xPfstb};~)jp=b+J`H!;y4>LK^G>A!!>UjA_V*%eEv@A2sGs!n=(?v zmM&GbzkE&m@I~hu9-g4$>i~cu+o7*2JjQV%ANdTETxE@V0lw}OMompO{K=y)Wc9cb znYZo{<&zF<8BV|l%v6&`NIQ_ujt{W=LPWw1X+MSkJ=}dionI&DBgxiHDfneKT7s#! zXE2{PhunVZiT|4R*T+}89QzMsdZge(>#9ahP~BLKp~Ezg6A(B$mm&uWG{9LznSKF) z>V_Q+F`evzVKwU0DB#gbJ1=IFt){scy$>LZMC=O#4C+~>$xN}u37J=cY7^Hx@N5d*J9LY~eP(y@@jhcQ9XG4XW$=cGm8_@~;Y0{OBc z*AfeOkB_EqLG;Zfp6NJdUr4lJo|$*f!6_yiET8dg z;@gMO8ojuEPOR~m+|Ulej)Cm1p%;Fa_Q#lDezC%<6Q+{H_|@`KOEL31N6UthMO9k` zRTY;^6e$&z?mWinP@s^?@dvPl%4~)CaE+mo>+lK@=d4X5D!5LTno~@rmL7DV{EuV^ zP(kGw3C#14hl7+ zRep=t(P#S%mgMVQ1Ex$D>9rXmX-nmEC%V;5yhZF@Efeuw?9*lC@n<3CE77PkHEH%$ zv+cHxf|fEduj=Da3v2w&BJxuF+c3J-mBkRz(E6bUn;cicLi*MGyBW)c4~DXlnfXZ1 zxT6D3r}lUXFbCF-r|wA!<(Hd$x?gXdkCHRtH(Xz?h*-5R`srY8y)#O*O%iU-nM%@> zv#Xfe%SyzaIkh=^#Z(NA-{Hm5lmr4j@}R(fOL9UR;P^a||JNCglsFye`{!m#Nl-YS z*q$|>YC9IssCZpfKZ;RtAiyy%MR&O%Ha5Siil z?&+f^g24w-P3E4OHZq(@L1GWWLuN!+*YnhHkTse=+T?;uD~)4S8)I)33MZ1jLoqdH zJsda=Gob=en5Yubb`_N~pNh@^)4VZHOuEDz4!mWs#md~*=Tu5O%u|OkjAZ`#$=_ai zrk{+SOXdv=dY$R(^V3IZZA|pLH;&d(S*a`5*(mUSpX{sxS79Byaz!E*MUdN{Xi%q;;~≠}GlhSxw5K6%|606WTPS4!`uZSX=19Jo1YRkkvKM79Cj66dO~Fi*9Ka znNsjK$M1ft>GdJrBT=`Zdo^0M6H3@-xZa)@e*gJ zYS)N6fW_Uf;g!;vXqeB&*pa*IsxfON`j-SJ${FUmHJ1np**-t1w3nq1+USY1#)^qv z-aaTVE=JHbGh#=S0ht6*^r&-}NYKRfY|)W#v5pI;lhnnoG;SynNnUM)#MDD`=wV;l zG;iDhJK#>BtZ+7WQ>nbuL`Lp?5}i#ue`~bwUj3S`5pPvzUKvdQFw|-m9&A`Qt3RFi z#vL5j3oKx@KXWeBP|_L1nQA$8=7n2v{6CzPp;8j!xP%xEl{Q=y2jaCA; ze-3^H!_;b=kE&j@Kym}IndfzGOj5^=p4HC-Mt{b%TIIK`N84<3bvo{{5BBViH)Y6{ zj7U$ji&)#5Vl+ye_OyGGb*yXW3Zu)b2w|{xre~6%)AGp#p#mV+(AN>!3&nf zsXL510=4Si_&a}caIk9N=9zvoy8e&>1YiQe*=*?zh`ikS0h%M`f#BVS-zVy}B842b zY~GZn8c>&wnH6B{=f(kifn1+cDIx*wiaA?Rjdy0;-rK>;>(M&kbu5F0R%pWk&Q2UxaHeJ~=Q<`&kEbOJ?jYs(KTA&qOTjQsMris!K_h zJ);icoDDWEMV9iE_K_?NHdg;sebfQ%DRLHb9^9{YMwD1sjOJ(h$ao+!>$i7P1A_G1 zAjXRW1dyk5Y)Xdd(HpM&o*gf}6?&lZu%;>P$h48)-vzS?Mn$^>Z)$vrB-I^LtCc(- zUBjFYSXdm?GgK?o*d7&7Uom*lUbK*$ASVdCyR_p-%Vs9c+izmc;rG7hU~ir?AuVo4 z-v4eo9RqlZ#v3B2W_Y4lH$uCxdD8tlOy&Ctch#O`uc4%t$l_R6qN>osg5Zd3-kTWH1@MFn6}6jx`xZX z3DtTXw0$dYEc0TzkV3RE^Py}(Yog!y{Y|G#al9J$v-1Iid6>#?jF?CIjm6-jw~k>0 zhLlgpd}Q7o{GI`nkWS3Rr=Cj}GLtica@UV)0`RHF^#y=N_#LN1S53~7L)r};^$=s} z1`vdvc0*nz{tT+%U=d3VjNpSTYtsS0dM@DZ+U6Z&X7R=S&U)bBRG25P_+SHzK>ck0 zvtA)~V7(`)8g!W9?w5nZvb`0e>)HcC2QC%J+0;Acg!p-9Ht3jNTU1#IJXS+h34}$Ce)wbFxFYg(}CBGx4bahjJL6@MCn*tBzy|Ko2c>rf^fYyR>ebpvP(` zzZ}zvZDrCVV=vcu{1Fy#LdN+(EL$Pk;1%{VL{7KT65s&e737F@{u$U(Wg~A(coIY+ zM!AYQ{&Y5$>F&+djWNbmlx$L8$&6!^e?dF?3lm^xNCse`Oa%M+$w6|&Z_Eond8O{; z@mjm$ZbNKOuDYv?kh$bG`@7_e%*1?{hB~w!0LI`m^w>+#1&0%OzEYRJyfErN6w5(F`_}F7E6}WQN=ZL7S2<68!)#pr_9Pq zFSdnIgtt$kBfZJ^Y(QX=6P27+KaZa`yv(f3ro~-ebv@kx+oeOEx;`N0K<$&VTn0*zIJmhA?{z5d6M>7;#@7#Fc`rBV9_myHipvei zevZo8nJfbVcMeOE$6xMv@LQN+FW*P{WxhxEQhwPb5g+`H(PSS(4n^D;wQ4=;sc_eg zlwEAEC9nQsP=_R^>Z~m{IZ&xvg|$i(m1GL=Ag8xa9eJV_ z56N&^wpJl1A_gr_tJt-N;9K`eigH*qNJHogH`Y>&_7&l;6?&1>zcX@ zHSFX<>uMI3_m85`7MCZ2%ie|=`(ObF7(FO{8{7BZ2zCPNH?Ddk5zKK;@{irc67rki zKMGXLU#ww`3D*Udk@rGKcR#!Op#!jsR=pyKm;qz@1S9%!~YoI^d+`;R|x_E=bIC!Ku} zzN3ME%;%W7tEoBr-_Q#~jjcxSbK%P;qirOZEgI{xH(@2PUGhF;^y*h<9_X~pV(_Eg3o#|wM1=Zhd@aw|q?tK}EH@;r@(wC?$3sm;F z1bs}xHFOWTpIYs#w>hqiXysBg>O1_^=e+hCYqbnC(uOYZSG4)aKhsyhuw-!7&1b>ES z=KYBjr{J`qDVd6;#~vn`8e`#}jd_vk^oSX6o?dBN$V;bH>t?mg=?xJYC9m&n@oQ^7Ff_MsWhik zG;k=T;+)3^XJZytY{<3DcH}+uXc1$ z*0u(M>cU+#(MG*5(F^e(-&Uaa$mN~PosNRN&yrQMm{qWQg^j#R#3ScXJwCkx-XkOH zNx;JC9@Wt;f@sRo$IS6bL)1Bgj{2QYzQX)eDCYU13zO7{ojep*+)<(-94@?0HO?Z9 z4#yJ0Kr6;WGpB{QJcr>8b=wFT_y%@EO?d*mkEWU&oH}933%0Vw_zTKxrTE}7F*;B~ zoDD}sp}_sz+t64Iy4gzU^sD2{pa0pY4DYh1lm4S;`TUj|)|h|u8Ok2eHBDl$?N(*p z7l{<(qUlqQ^;uD$$eOb5%jWA`o&MupbpK46T#pa}C9{WuX4E<{DfUa`lO4u-tS8cU zUpBcC^jiei@f(KQiz!6gmq@#;bRA~{xLt1OCz*L?&vC`(Gk9&tnPpfQ zC1>T8U%>i31NzNH5*!@lg3(CnVnBQ?hzFwY1B^;#D3o8ibHJ`WH!rK*Cu*AM`y`hW zVMP!`wp?L`8`z(3z+0%9uwfYk>%PARKPQeR)Q4&I3p!$WI+2Zu+*oJH|IsmgG&nL_ zd8~pkNH+Bc)yY6t`CYq0{MN@uwzSNRC#=1GM}Iw_gznm(4eN56{qYL3xkt`jA+7~M zHqIj2a=iK4q>zEnZ1|W1;uLF5(W1=H2Bl=NMkD<^k5_Tt)BL5j&ym)4o*fCi4}n%< zf^^d6{iAcuy35dB<2uC_otE|g;=np0hCIl40kOzVO0a0NouHd{JI&NP4}wPzQ`lr= zz6XD5A6!!Ebs+;cJCyX#xk2o{J>XZuaXnwRFD15n%xvI2dJ8EwfmOW+%|-2j39`7c zN+8RlPByB*&3=p1l~Q|CrckwmPNLI&adM=IK%?!rps9pCN_Pjm5Z6bV$2LJgZ^@CD z55W&D&a)iLkMtONs$E28MQ*|uCbK!2^&5!Nle`cuel3c2*IFj-D`A|F1cYG)8N5(c zvXVdaDwfmCDAM4R)TNOc&erZo|V783aQp38Nin2qe$(5wGt)S+q%Xi_e(5qh0MY?MNJo)7q=T33~i!XB5 zW-PRtg=`iwAYqSVZ7MRqk?*pf31W&G*ICgUPkw6EWO+oB?%@#nh*_U5J5*nPnk8NS zId5&g*kH5uvzP@_p|qulI!|* zH`bSc7LyRBF*&BpDtD#iYZ-?y}VwEIEZdxd-1oi1*?5Q4!*oMjfl{GB0XWE6fJeB9F0?XwM>OYbl>hmiNZDO#CA_G)MQ*XHQ!Nt zb)XjPKc7?8HJzooNxJ-glR?rAO9(FryO8WRB<+LVJnZy*LJCEKrw6o9$U5V|7C*iF z#7Wbh=e)l`+QLDqS5I_Unst|8=~lSG;Ht3Tb@skG+1K;dchoZx?BJ&gfus(OmhS8x z{lW&!u2>s2#2hj3pokPQFsm{Q6#Nqh9viBUP9Qx% zHQdokk5arJyU?uCwzQ(})vABqM_fWkj^rP_KDt0E?x$NDZMuy|y^$ci=Pf2;x4919PB^tWgBIw-e6nD45MPN6YKYYFd-mi9fCUc`>Sq_G6Z4 z$Kk`JFc7Ld3CpcIOaoTi+G@u{HDXr|=`I#d<0IqBE^OgVhXnDk<5z_mLLob=eRE8# z`R7$83B@i(=KKv4ms+Q@ksm*o-jFN2rk#?CR>X#QUY+LKfK?&NF70nz-J{i88;@Og zVQHW(xtbOu;Q1@HHCOHIN9%2i!>z^1BX9QuL9IKwO%Jv*7FZB|W;E`Dnze4rgU?3skz)815k=9S-*9_i-VZ+0WtM zeuUu|gPO;J@Aa4aCU%IHgAM%I^}V~ub<}5cG~3L0E4MsM%O-bjlH?G^rrH5HABdT7 zEo=3|+ffXD)cu(!13rGqS*nUDi@gXXNVwkm1<>7W4LGnZ4OCyt_KLb8S^_NebBuMI z(9oHO3h^ZQMI_8aA>W|k-g|h&D|ieGP>>rj;j?kGlK?+Jz`vXCDPoxIqZKB^V4dc3 zX`P|Abzyo2lBg#?qqiYwapw0Exp>qh!OjoyeP2>ifPgC-BOmWbf1wAt(|N6ibd=)U zuI@f(AwZW{mH1$WU1N87Xy0oDLb7ymZjyE9^BwCer+!B9^orT3Y?QO_5 zyO5Sn6EIqmxiF9(ZwZPdr8B_v_v)ege$FRmq@<$UMRl-~N;N!U@z#{zlP6%=79pLf z;ebwzXPI$o;@^HfnbpB{US1%~t>6z;qJEjFqJC*0HpdqTkMILkH=S1gk>E`J~^9?m2GDL87*#lq2;8cyK+h_tJf_;y< zIIB=f`trOKkO(G2T>C3y_|fMVYMAK^$c^=RBO>^qi!06bl)JJOsl59K6}oEFEsp=U0tZs!vcK=2-T(2%cZI}JCCRZAa5BQd8P5;)9?QD_ku2&&KN#xx!>=DTn)}Dn#I1;=)J*TpUUg$UepS4OKIJSq-~S0s zrQUJ2X~OS0zW#x)L`2cTuTJ5Uroopk`zE={KF%6ND+$|x>+&w@_E=^}WPmsC?_0Q{ z+Gl6qHSsTfkBo^nm7ab(mLQ)-KvP*E6dPfAd-||~g()Tx)DW*QyJ*QmQAsMVNqqh` z#CFdi%-|mJH?HOQz(`FgVie!>OdkVgM9BA4`PPX6ejU6SU4k+r%@KQ|72RsyDC>jC zOXX_fHw`9Hq$j8Kj8e?Tms}{y@y%q~7;EU#^_zMWiGDadznwlB zOPbBPaZ4Qo9gIK*4?)`fS>_J&+rICpvgw)ZG~w)RTu!Qyq5B zU(_X^WRF|286I;dQB_0mS>vdkN~71N8g_O-bkqXOQA-#eCU@I-B-EK9s-xNH=9+HrH=D(2r5+yo7J?1vr|oZqOZ# zqrs59E2lw4u0e&588bRyz_z^^&R{s;)8TOkvqrEpuzc)7TfuPHS;^0jbt|Di;L(OT z_$JffQrFHbiu<)E`n9YpS})0TVBU3)uq`TsmEm#02|LnrEplMmGoladozHb48n(1& z&QpJAyKOn2-8QD}({8W_8}y`@fsM5z=KwnT?M6aOpyga@o=BH`D|Gy${Apx;J%c7l?KE&Gkv)_Ioxt~)32!I@Rv2*2F* zD(TPWeVFFl$d zGLhUU&7MDNyiT8v>1$* zT>Es2(7s}imkewaZSK%l$zit#>75Z-Bim<;jcc9$rpuU_s)5b7HeYP9DGj}Sk(rUj zX3o5odw9(XhUzK0vq4w!gxf4~4wm0^Bsq0;SSsAUzX;XTJ+f=B9*>u9yKQ<>$ zNvme+F)A*aq5^8-C|roojK58d7?5f-oGu;g$rDaFW+7lPQLWscGd5KEJ#v#Ak^E0T z`N3U^A~$KV!rgwp3{{TIBjrmCthM|z`*@30tyw;u82F<5e+;c(Z#diVe~*yYG!wyr zzyBNuVw3#F4r9X2$NHXBSgP+wU7v^g!*5rGzUsuFn~Z`kFj~ zXoXj?Y*kI5=_Y*4zfv4wa*oKTzh^&KcAE+H{7@l@!JbAG<0jhkAUmSlzV8@Hnv`W* zhqcdQit_oF68^*1JYwdND!+C6q1F_nDHMvy$I{9@fc z5it+x5p_89q}hmd&@r@cxk&(tJD=ol0rc)OH+ebxkto@d55RIu?%!KZLEdXSBJevu zfr3`(IK|IUvRAiWqwq7#It zxvyH0NSA0$o+na2X+YiEV75%+&K~ke5a*SjmVQ< zp_3z&)sx_*T8JsSx1V*cks5BlTHESZzt8sec3f8sc2t8%jl2<8P`4r{XssD2cad9J z?7U55KN+_Q<1xh+PZ!@sE!edJ%+bhLP{Nu|NkYG3t~M=P^xJ>@Ce~TkN10y&%j9d5 z2f-i4!kJ!VFs|59>g!2TFsimzqz65KLx6fl)y{7u95`h3>tB)@m?Y<#l;?==#R$8m}NIk>cn5 zNx4={nDOV<9HNEkPb}kna{3aH3u0|(9wavzHCk7p#IMfn$*IOh?cPV`b%xH`QmZqy zid!T@5frnbi^HPE$$a4~8k}TqTf!Lf`*Ne7nFwO+c3VWqn|=}SWYg>0O9`IdZ&=2+ zcVJwj^FGPkq+UHUHf}qp>nRXV781UuwEccICJjq#wO&ls2C4wo{DQgVPg;X-FUP#R zcRiKbL@$#sO~$=cMjHR9#qZTgK~C(Skf?|B$F|stTGY&IE{)So$MT!LdnQt4x1j7o zoEfaOs`0$T@T6xea5&fT`RKV_UxG&8Hy&~Uxv%(_doPRK3%6#-Q^7yNuC|15* zSY0*dZqONFZ|0l29YcOdI+xt03;{2XS;-%3jm(^pKN4tqcE0j=P;Wm#+W;-kq(XFW zL)lz%>6LFyD0-gDLejeSFz|78O@xC)vn_d$FUAcFU)-zmL3;I%Ufub3m{dPn%}VCa zd3D758edn@iDdvlhX8V3ZfxqNFVHJ>fnC=D1PhTi3#t=r4S&v`d-FH|55{qoN(gBm zF`+P_o|h`V#nEev*QpY;j7BAV3zi7JR`aV4% z>xxCSTxQQ4gHh;2Jarnvbg6P&&DS^_Fk9Vhvpav+YOcAqyO9cW8<0{v&FEF>lpZ0F zVw#(#6Yn+V&fXhn-kw1sWSrU;aBr>j9?0diA14?u^4SXKh@OetioU`1B=*v@PYmE3 zhT?SrYt)pc*K68bq6&g*9yI;607{!vnN;1BY{nks$_|9U(aYmr&zKQ4ApUZjsYv&CI`uECC6)ZKZkoMN88L07;_6XyzpjH4 zL#2e-P+%UTj57g_mD*iH98uL1oZ^$jJ--vGS_uR@)Dxc-65$P`Pc>A*7jYDoVY(xv7yjV&x3-L2 zl`0Be_aH4FDH`<*)fBz*h$-vE{l?^i#w!K!UBQu5vk-=vqdaS=4SHcNw z(5-|Fzf{G~wV~WthClUz`gw9g?9(yvjI-=0o#ZKa8^}YNuK?rkIJsj`j0E}?1K^Xp zQJ;QzFsNKZ(oURLvlb8BE6nAGHw9i2zM6jle-ZR^XW;P(2~9qwveOH@f64Ch%usHYk-F~;WN#LUO0qv;2#?u&9z>$;SXMGeo|ZXVXYtpPC8239W3aLxAMEE;hm zWCG1JZKv5;dpmYGx$|MqY^wycvr584|M+w}s=8qBH(X|GJ~UwQ14a2u6&(2H&AOz( z(}<{`H8Mu!Jbp7frBjq>JH8@yDT8|!|f^)GZsDheu)_p^ZR4b4Jl5<9&kV)VETF;~d6 zbnVHm-@2p^P-w{sU337xKZo3_HTW$L*u&qRp_V$he$_eaS(|)8ULL`uDLSy;GijWR zv?nGM;yawIN=S2<&PeR_dZPbLs#P|bL^GZU2z%57-P>T-Jz=G?LN3}DbIYfgT45;Oka zK;cx4tO|#@O@01C_mKsOBgIz)9|DYyJ%oOi1>Dz2)C-C5&;}W}#Sm6M_S8;}sSWY% z5hN2MLI*{2DJpKsEvHLJ$TMc)Jo~vny(ooLoq(b8xpbSLjs@=S);)M@w3mcwjXB%Iy+s%!ztPc;)~1Atixe&!4K zSQ#;1M5f46>Za?pI&H^nJ>#>1`tW-jk-^=W5*1L{!{DxT)!!;)U@^f(1`2RoHD_hY zvX?PiKduaCzNwYr)|EZbL9;SXigUDbBM-e|Lz^2AN3@)rwP1L18&_56Xb?nYjhowk zs!l|_Yg(?6k62dmhIUT1t;RKTNz;D^;uCfc;I*fF@%-?)#!DwBA{7+&4t|1d6Ij^GW-Jq@qr z9{$SLe+@EMvCO|NDv&YZTfRInbMq9RSLl1L)vuQWphS5pXd^?$lDlckAH|z}hAbDc zcPm00w(a$q5>)0-Vt-E+6&p{-*M*HGZNNXjq`zP^{tbVCjF9M{>gq@16n&q5#8pB&)Y8CQ@z<1P4-e7 zO6HwX9E`lp-y+eXZ^D@MQ^GQ5r8QIr`+o-aNll?M-~^T5>DFT5AJ>Q#X*$!!f7GX* z-_qO~AFgXS08>zy`U76xmVXT}GSURY57Prw@2`tNGctjPAnW_uU;Za*qh}~&YoT&S zg4kQK8B@did+k&`J@*TOdC0r3K_8Kb|LAuSB|1zzJ-nwO=HUBqHs1}u0lWWw&e6hE z-AB&xhZ*yr==BVG^|l(NQ~rpfUWkv+LNGw*TcCk?HwD0;-$dW7MEo>D%dqC_vu0PzDxBa#;&k{}D}h^}2# zS&%g)XKfsnfe|m6p^+bXWnnryB7xcf$Ea0LDpe&n3Fi#ECx}Mn!4y(iN)wvBJR-lI zJr&5zuF$FRa2rVYGYD}=9IX;#K|l2xRG?E+)=}$Y+I((L7}vh^`a$#huX#K=CIAiTr7itKZ>jsF!t#Q)XpA zcj|Hd_ptS74?f~Av|4f< z4W=VC2;qkY#ls=VwjslAwzOk)b;NiBopsWnq8M=lOcSku&cOcvaL*5nD4Z?jYZzdQ z9I1t#1y!Mnjq1|>my-rbvu%VF1b6%I^^+TS@vnvMIh32r=bJa4&LkD+=(n8Yj$Z`2 zB&Qq7-eE8O5t&Z0MWy1>HRDZc=DREVpkBeua)De;%*RiQnUNf``DNptjdjfb^{0oc zKl~kHd*u^U@l0a>^yLk~jdP4`#A#PG~M?dnsP4ytowEsr{Uw z7M;J~Q3(fRhZ_s0DufUr!^BJBv4sm+WEqB($pGp&e>XK~@uCoBA`+jK2QVL^7L$8^e|+GUCc z#5B{ho7HW4`nGc6{MeOv-G>#6yykBxE!H7*EttEsd-u9xqYm4kyU{sqr9X8y#O@FE zg@SqahX{rlnb)yJCf9|DPZkO<@7#r693zGiYH3atIXvSdX91csNYoa7A!qYWPh}FP zj)W4Q_<0=D6ds`E{-j9GOt43=sNd{PO1rC|AI}hBC#s9zOS{JfqilCJkb%W>zUxRT zGCv#eisk&$W*H)^zY8UC?cmorMPewPb||`KDq`-y^xn+-{A!)5x|~O>d~80~5Y>*s zg~rt1CI5>!Y=|EHXr-_9^2sYE5GtKJ{WJydTOqN4gk@l$($tlPEwRvL<4iW6&{$Ht zjCtls*9uM45Sp!20@0I6A7`TZYW$=d@{XBCF)4Wz%GEyZv;`M=xhKzXo!Ehl%XRth z!CIz5u^Tr!iE7(G>sKXvhW;$`tGLgE9vEnUQro^zXJBiWY1N1o47P%Zzwm1onQ4c) zH$8_RmQ@eGeUC&;<^D3}b+yj}zoM;vEmX_0Q*ec0qtgZ|xwn6q$1LET& z;L_z|rOfC+*#Nou3}d{+Y%)w@qlzQoGdCrDR(cbKstNZ;4ZT=I`6$W1J<(~|Hqh?G z69JAd5qb^1qd{u?Na{WmOsGD$}M86n+$ zAf!ibnvg}&O4AVcb7fo@_)XQ!SgrD=Q|f%?%m4IW&0v=qL9>3M>V&&;W*A;i=n*J| z;X`mu_9gd^K-3Or$ywv{;>GRE-;y2vAmlpsf#~%K5>faP{-$BD1dEmY`u=|)d)8Py zvWUZ*UEl$6!leGL=1)ozu583hm@a&2i$-SKL2dx&WWkv)6O`>{Bfl3MdZInGmAG^7 z2&|nW#O)j=f!0hY0FR(Ia`BBseIu#tF#UD5seVZkSl^%mH>nP`Q$KMS0@)xl{iwGP ze}b{nwj`njXa;&LUqb3o4RZk;jc@TUZKf)BXZp|ebfpYS(TRf1V+<`l=m`>BopwV? zbz4+kk%f+*Gs|%HA~B-`63mnZvmc6cy#1B%J=&6}Qo<{M=(^(7^@@5NUA%qnc&~+7 zK(8%&r}Xe}wrV@Xm2j+58L7}I8&z6z*mRu=hBM6iyC1xg&TSiTf@gSoXEEMu6Ss^4 z8}vlu^@^iM)F57)qE$zU=oh_ky@q^OY&WdsCb#wmnRUK4B++;SFJGop(X*n_$Mf#z zfKX^U?u6TskiyoFHs-xac=pnXI{ibNg0hxJQpKL{K-j0Z}O^b#?w1`ddYq%C@$e%VSz*{4gUAD5e)_6qQKaIdm z@xq3>3<9s-Sz9F%=Ru$t2Vb`|VD`*Vz;X6$Q?<@R$?CVw%vt=->{(pGLlLQ)l1uC) z|BWu{xUun@*rxWBN_V@Os`tE>lS*TFq5CvZr;&uoN=tb`po>2BQb{1rxCbN0lQjWH zOOT4wq%St?&I8U;qajwqV zY|4s^m2RYOW=WiazcIQ;;X$M>R5H{-fE2ia;~4~h2PNoxe*d#@{0#lI(xKhbVsQ*@ z`6RD4hw+@-ZgJ&Wnf){_A7(ky+6(_v0d?Mm9L$OHrT6ufr$X<$D9#Fw@laR(Q@b5A z^b7pwtg1F3Oy#r5&wJ(y>&duRLQ6-tW;36VMJ5}SuxI`vT!P6Li3$m-k+Z!mxr)9v z|8y7MFSj;#I@K-xJFSJD>3dsAWuI1$bnI@ZOmXipI!pAi3Gu)DRqeT%h3 zJZoJ2>|5)5n*fPzLQZ(gO6s)tO|xI>MlaR38P`A@NwGw*NoAo$?~Q*6Da?Wb*$Nko zu~h;Vg0WOaO}XMifj7wY!XQz-1`hCsEEOlWmx^HKYupoCfuPP3>ab#wzr$0?Rj8}e@yBVX8c+`@m5Aw2n+>@PzN|Hu(rD}(X$|Bm|3 zm8>U#KtK8?JQUx$HKn`Bb=I)%VwKXGv z8a}-t#1OMF4D9^w?g>?JBdlik<*4CV^*ZmMvyHzr>~WLUmxZ`jD&+b-Rk`TLqffV& zvzKDn@C{}idwhUiRinGKQar4($yMdLB(sT+cS|3)I10B11$$QA)Np)4vYo9|qE;B& zsn69{9wa8n;rklI8a^;g6vNyau29MN`#hJYF4L!d2VR>{?Un;F1GnUN{xE)}ZG$=c z?l)@oWUJdgm5zLtsJD4E7fpg>^G)ck65~vM0G7%yQ14G1xXi+ZgFdfd#p-TBwK<5WjmhPa705Q~-fERm zX#oh(E-tJhMZ1v*e+s-=!ds>(Ha319$xn^>+k;h6x!I?~_@8K_d+n?c|Ys?~N!Z!S9Zc z)u@Fy_WYwe-xo}yVgLUXJdFQS!2^RASVe)bTyw|rb&7%jz-FGGE|s4m%lSXqV7e8R zu7R4ua(pk{Zop}K6^T01(Sqc47G!jCmyvK|1=qb^_sCt+)3o7xyt-VUcr52(Wb++v z@d%mF%%&EF1pr6|w~BxpQe5fm*?zywLyicRdLqiV({}3(<);4@3_RgM2c!|`0FD>l z2W~9JO~{v+7_yw-F!MZO5%Dz7$XSkCUeJ1}ym=>LN9@EHOAz5lcK8XL8rITx%kG9k*J1k}`h z=^klcW_lNhJO^9<#c+|VAW0WW=y$aG(#G6%obp{tzt;8Kfx-IhPi)DVp1fLGQ5*o3 zNjmGY*=_N>8Vl=Gk>Un)`8MoLap#NDM)MC=n^eDR=(;1c&1WI(L7aAR-!v08#LNDX zjDsjEcT$!V{QjA=WmNc+7gymWj>Bz7^*EkKnZ~sJf$k2zXshIEU>Oj`t$t%FAsH6< zC#Nh<%Ls2vxJgnJZm^T)*LTsPx9(w*3b3bJuxPG*F2P9WH&*q>Wfr9c@ZcL|&J+5g zb)-^J4eS<319Q$#K~;rL=1SdBVo|etzED1_Z|%KL#hPWNn$Nm6ZaecDtbz0eYtTUs z9`U1|-+rliGb_EuvQ*hQan$>u>FAUS=7Yqp=UR?Jld6V_-j95i(D*wnRXcLJVkA3q zB~=c<=x-HBF!jnC$Gfj<`_C2O&{85xPYC~iJv04R&-$lfd!&{bSQIU0arwR)@`4@F z$8*@yOCEfmL%n6yTJ?=Gs@@5HNgPZ0xHyL#Sw`X50Xr26{k4S}dKoO|7QFA`52fw( z*@(VI90pyMe+YVwD&Y&tP@0=^$g`x#E?;H9Xxbi2ethH3krv93-ZhHrFth){83LBD z{(1+dE{=Zxz8NlbzaEYEfi5_uJd2a&*Gk-dehi@)WajTEk z8HC(@w#aZmeWaTEs)^+*zrV)6D1inaj*4STGXFK#WJvZPm}VF}6>h%1#;Cm~Eq-lV zarQyGWl6H_`Iv{v&TpPqcFo{{K2OkysD9zqp57}f;y|N8I9GmpB&S;R>2nW5yq@xm zMyAHjp{Q{(NjTn2gru__X^8wj+9Ew!wsy!6XURHFYzO_5Kh8GND#Z?3=X9MG$V%lr zy#PMwr0_e0x*0~gdnX(gb{4as1;e*`t-+=KF^mrNOqz5lWPx<-o2yo?pP0CCZ3v>|A6OqfPYiLx=9`D#tzJl^ZCLb3MgVC0 zA5}|yBCdc%gO{!Tc$k~~%ayzFsWuIoNf=|oNj%gm+KeXp4pXC1bssFPma^2A_zDU~ z{pNO$Cg`oI-aaOCa-RLUCC9f_iE~g*m=r%Mv9M|q$*dXVE*|<$?yOqNx$;}aO0#M8 zy~>PjD|kPqX_b%3Kw3t*a%H~;QRLWtFZp}4z^DOLI%N;FlZbf)&{cF^>tl>X!|Es* z>rhg`$cEL{)=Od{FNOSHBvuxIkvo9k_QcsoAs4Dd=X9R4te)1c zmHN&H(cx^95Q>xBr7g^)$bBMh>3$Wcaj!GdZ->0+(Us^ho}abQj7?pJu$-{>d9Eob z57zZ1^2-k}+IA<(2vk(3i#E>%KRw=ZA3K<;;+#aqc&j_x)WJ@bn!q9ohCn((ix+QU z4yD^jiJ010$y^{T$AJEsAXdb6LBGZAvpwRkpuI)&DdJs&cTL2y1x zj(kr{+&KDA1TQ@g+2Sm!6ew44`xp9P#duI!{~1dA22M){eaVKI+|bs&+wh8-<|INS zQDMniP%(_O-%kACu1A6ySq0kRZQSvLAqg~};yOJ#eMe(Qcgv%pKP21bcDEi+$m;6D z>RNA$3B3;id5vgIOE9>-hr#=`Ew=bRPxpMy*x_?$uq^JnS!k`6zNq(p%IC4{mlQVs z;a+}buf+cTFJQg~KjuMV!c>Fxuy?0+A2s%t%Q#Hgy)ISoRPV_JHju(&-rFd?frFIS zK4%+6lcihyjO5RApnUf{EYI#)ZAE8vZKNYUb@JMQ9}8~lml>uG=5sWhY#fUt?BK9! z@yd`BNBSP|y6Muz88e_ErjqKL1*E3R0e&cv0vQe!v4XaTicFO=` z_RC%Cc6{6Z7GPMrvR^mR^0*0pJR!-5Qf)<5nEt+eLf9jxQ#0B?lINTG?K&}Bl0*5_ zo}9JFUF!@*a01a=cb&kq|IkV9!RXFy7?`BW_tQv%?(h~{#U{WstL8wbYz;@TRj;^U zb%k)&<2{?L{tq=`T~y!Vs}BM}ZX5Ub4Sd&a1))uI9o7HLk%S{Gswb-h+=v#c&N$0X zoPIZIu_yKP`)cu#$%J{xT$}UG^%?bu6qeoSj<)ttQ5jOSFX608b>TREFI7@fo>t!lShlO;j?Of5&WrY59!V?LbK1 zbKxKimC;I(V>-VqXT9~!shOuFBE`0D=|oNp0lYLw1`U8yRGHJznpCv$R@H&RzA;ycHJEkwvh&XbNUY|!IVx@N8|9T%{PYliozbu7Ie zV|ro~Z&)Pfp?cvXiQV@6o9#4`ZXXxUkakAKJ}Sx66yKx!Z&jOX%tW0#RF^YE&NmEp z|6cIy@q_h7+r;I5$=cx<@{$dHr;>yw=Sf^X%rr{57rwE&{O3z)m>ch{RWHvrn$34n zRK)G*2afEAyW51-WkZ$ zS%lhoY`4PMlslA;bNA0@EI>2w8it)x-DPP5-Ul+f zEjGMHS~X2g#4Q_rW9-`2`SX`>M2Lr-u^q+%PQn$?1|Y7GG> zcD6e!bmm8>oP8`i57#S;fXi^j7Mq-lhtsukdQnLn+b+ZB8h`bCK7VI(uhI(FFdE-Y zQ>xO+5H+>rWXhfPzRY#sH%X4}upz~_kFIz#&jz6vC})!32X;?Tv6}|?Z&KACGQtC{ zn^!}@ZKN0gw*(b9>(qjh|8Um`|5Ith-uz?d(|;Wk2}gCP(369?`Q9+{{C5-pt!Xd= zYn`ST1_h;)y&W<|(0ie8HA22GI&E1b(@H_gAWJ>Q;dm}Is=nBU;3yGAPyeHlck3A+ zNvwYeze8bY=ypU5JX2f$`GNC+zQrT#6*oFHSs(i>Q5I$IU4RUMMGPU0B)5`~u(>tP&$MaoYC=~_(s z#fk{?)PC(%IT}+jZ>HG5)~nOlnvL%F$Jhb_r@kR>djZ^46-<8FM~jSEjho!}f=Vqx z5rw{A0Jp1Kt+Z+S?!GUu4Wux79J2Wt6bg9M7w! z6O(k6AQ|e-&oU^T)2pAyR{5>xcJ2EcM26vg%*PD;5kfIFHj*0_Y_KtSGkv($V z{oTM9^M=hl=C}}oc>;1k8dUG-?-W@`&+L4qtx`@Ko%KVNK%;q4xLGx;C_kADUU_%F zDqg#&UeH4kmqhiYMVX1bZ!u23@agL6#tyqe-=pBD4LtOxyEfe%Kt8%4(no5iY0;M^ zO-Vu>x~)a@K{%Y)1sP`ZfC@QL)?m6V!3|!%PBz_4>qx#j7rJ_3h zdB#zKTVTTZd5NgTkZZb~o)n%BC@VZuq_ONcm>2GBiU@?PJkuR_U!|#tCXL1{uJJ6TYfhBf5FI1mc}1X5XJNFPcz z(5k-4der@c4pp%D8UEK5Sj}IorHC2Wl@Dk=5ZNxmkz<~4YCfbCE~-I5S+}?ibZ$zo zWJ^C8sblkM6%ZrIQ{(?t0*CnV8+zPnIE$qBhkJXB5edon?_57q{NVjU3WLN6F=~P# zACy@4MYFc=@0jUoffgNbUw~~PmSOxagK?4gpOE=n2vu0JL2VD&bT^VYt+X8+pVII4Nxy;hy|6Y&@V z-?|sr?0VfzW(x&gW3ir!>I1;HW0#L&#PG?f$z{Rl_1oR>+V@)sjY7>sRyIUJ&&EDy zm9oLKr>LgBE?LIMs9(hTUNLk^%2K{0ILF$6XZmFcjvZ(>RD<~d7u?m?~62wsJT5uD!N50y>M?dun z1v`l3H>3;?j%wREIRC){xY*lw3!bY&Y66(-w(eQ&w}{S1MD3JtbT+A??Sb@)>ev9Q z-$3hwqP6>yfh_N^vr3hAaE;=re-oM-yi)ttDZ!tnhvThjCVdw^w+8?PwNrQOP0vyC zfs423(3^Y@MzOa~VCMJs4fKq4sME4oJyl98_S)&2<~1!Rv=7I$Hmmb0?K_Jh7c(|7 zZhBJBFS-)X#0dp!-c{4GXLMbT8EMC{AcpyG9bPLb6W>|u zN1l;zpgoNv^55_F4|UGYP1&_M*4ExH*<-yakv*NRXo4zYvM)yN+Xh9<(>q!=MTZXH z`ww?AST71WlWW5U9RHSqeEGZeo+YUE0zLj<0K%u}PywF*NG@&X+_VRZXpyn#uh7fZ>_oxZyVPDT?rwov< z##UBpGBJ`|+WgHEBS)jE-i0wpU5bzo{bkPNlqH?$9qQ$M>oiX|Kn| zRhe8z(&3P;1uhXMrP5V3jEJcC>0+?=^Rrk2|AfYm!sn^< zbGgWeZN5<8XomvOfMCN!0rj7+5EpzQE=1Lv}irejwE)A8Zdh!s%{>$h$zl_kfp zzupF|+zIiX|8V@ziNXXi(>A%l`af};+}6b~OTmq$(qQXJYAbt)Dq;<~gH{6P%4Y0R z+P1%$a?Chl`P^2l+#O6j=Gdj7+}%G8b>Elx`0xKMF8_aFJ{bOi#Z+x18Vqnj0;5n) zIy(;a*Y`DFC$WGyzx3wI2l}sOs28im#G0{}HFt$(44FjQ@bK5k#lvL{kvnv&bh`0A zFox{mgkv7J81Cg+rL!iRTfoQWrsTOnPF{4&9Srvb+MB$EybkCXhN7>EXR zcpLguqu@^vum6q|#f$uS8`muu2EzpJjbOh~`i|-Bq+S?>kJW2dH@0P@8&r1ypjV$q zmxit&YuDabre(r$X!BQlpS#3~ChR6-W~qbV(#5`AJN`3u(bMrHtu3nG>3b@tqpaYE z!Fb4rYOp+m0XO-^fv`4L#(j;>C90Blm{+;|uJLL9`(ca4F%8d|6!X-<rSZkMuK^m?+^J(}2Dy348V7U|XEOZae@zIBdkOMnsNM!*3EM=^Qc{Wq!{mkHjRft>+5}KtG|q z}Up2@@z@*A$4}9((mHVVx-J*F$w{YY~Ba4%zdbNey`s2 zNkCKQv#Ry#dO(pP0M(zSd(tL09Y z^Z-~ur@w88{1@G?Xllz8Zr_Moi8CTvZZy7KHiQzNNa~O!Wvbf57z~w9V|Tb_%#>H{ zmfAh4%&FWa>?yQ+=+5=Xm4GMBC&E3F< z5SQ`Myb>u$0g|O!!=R$Nhc%}Oa8q1Gy}1jR_)pJe3V_P&sj+HPmUq&IQK7e10sa2x zd~epG^lxbIkC)VFK3FQWM-}WJxC{t2B>D|BiL;#fJ>$njabEAQjTd@Tn;EOkoU-B- z7OmZ0`B~eJ)~p;Q;{976Kw3?(%j$o<7dDJCR)4)0`$Z(bRd6&M2_=7N@FaFv1CJ_E zb3uxE6~CrwWrKjPWqOlQ`$hd!z5{pZANvze@ObCzjCJ<^46*Ti4L|t&i`V@ZJz@Qs zcVeO*nntNgg#L6)*J_pTPI?9p`V&C*<8iA|9bSqO+!o)%W>~Zd*Z`(WUe}(MiD6?5 znwgcnADlacsyM#_a9lJwiiOdM4ycxKu-#G+rTPHBT4D>q%W#Mfw=}i;!PbAzTfJEi zdlf=u{7#}nX!kK3Mr0`;eTZazrBeynK8=(QGo!D*38y< z3pp{OOU&qRlcp{tzE`nxV!Wm&;zR8nSz29Y5tQsLcj|pr;?XY+wu19SI|3yce=g<^ zvb8y@r*XgQ;xEaaVZf=8t_8ZCZ zM(S+#p($_o`Sj{wjsleqF#x|~Ej1THIDih-{MHSJ6cAhMaEPP6{Ee{7fI)6lQ}=4S zQQZfUlj+q97SA|2B$>V6i^SKsxQZo;;pTcpcY;sF{9{wWn%a%+gB^b~gQ|3WctFB>7pg}|PVUB9ral{v)hZ(uK9yO6q0USWyZaQo z6Wun6{rrny=1I)OQBU2$VZplje^z;S^f3^rL0B&<3CXqf4Y@(J+hqNSDwG|r+d$+4 zcZc2Dxy1%3OTmwqfw2{wz7w_Jnp}r{-gCetf_x%NUH-5~_MF7{%;M-4UkfIF6D)SC$H{D^Y?-h8FWcw(0-F@va}(#Z>CH?uw59pL{o7DVY+;`yq zH)(k%fZE$X({%xQXsOZ~1I;l+0#yTpauL^SKRUUGg8kzr6oofo`%jW?OzOp{-QtkA z5)GwCVoH0$$A_goo>EWT!^PkMQ;=L5(_qg^9xN=oNQhGKML3McJL({HTEZ68t&9pY z(75CHm}u~YQr}i{z@v?6;Mw*xFAo)T^1CfXAMtQ6{7KTKsEuX4$O-{DoKjK39jx(5 z%5Qu6f2e&HYnn5wB#Z3;YoPQW64W zmHA+I95`@-1E=F?f*RQzJdFR*tP9^jlIAJ1B8B5mPq&xUKioB!GmEcw1dwc1JJEBB4d#G*|f|(@OaQ zajbltU{Y`vUvmL5;MzT#J5tb!O{@?4yJ3Q5|$3 zZF{T&%<%1Kpz=Z}hniG?)ouFXFP<{DMLyl(gK+H4cLH=|C({6G_Ci~0inPcW0v-0t-M-`E=ckFk}`Zf@Gt`FXx(;mcRW zd4eS=)@e|x9JSsA^WS3gO$Sg<7M5mxu*9O;{igY zqjW6YnMKx-en^62CkK1RXW0;YZs4pf?j=vyNAG3AW>o_~CGZc?op+8$D1ue|dFGh? z+qR@^>o;lRDAqwQ$(NrU`Ki~%^|`05>ObLH-}4($k;RZ_?b4V9Hx&?*Y4#P^J>ih; z^4V|diWAm;Aj7&zy+$!(t$aVD$HG+B7$sH<+7o$54f%`C#)Hb-Y>IQ;0<~V~ns@K* z)|6T#m!!@%J;W_Ek+m)j)mIGR>OIHRub7k}X{j8cV6e5lLv{l<_Z#%6U)kPOwR5ol zAABZST-LzNVTl3orp`3?CeJVr1#j6IEvb$~m|NgDyBpF^vqv>g^3j45IFBZR163XX zh9-9vYP_Rt_`T%Gg~Vc?>y1|OWe7Dri4ig;xgM2&2p!q^Uf^F_&aD0Rma?&HdGhw= z#$A_#H#?j?vY7!0oy+M6?)VholNrX{li}e7cQzP^vBlOiQC3R(s27HBf7hrwns#x2 zmofPg=RJvOf#w)=fqqT$-AmLh>LRl3_cfwd&*XNr&kEhfNrUhto-+TmmtFgl^q0}~ zu;FK{Lz%-1aPX16ouH1F-qGf}+>i?Z8<|a%z{Vhn$pE%(20pD&tkClv(Z+B2&(Av~ zQy^(Z*bb9xSlP1qS*V%T ztF|8wfnG58XhIt|bD4C9imDim1Eq_qLctFu3J~MMD#l%L)dUsDj9J7cm1R;(FJ#~( zmfrfHn#wM&aHuYkpuTSft2d&ABLpm~QdbKZDE`~^h_bOzl0~l~3+vKKU@o+gYp4n> zU(#uzAA(`;F|R_mJ9!@(Z`kGmG33fJY#WfwO|~)1Q5?}KNv^*GIyM+G^?8x@KHb~) zJ`tMOMJz`x$7V1})3n;p=zWX{l+$fjK z2(VmkVjw>}qg5N*9gWCCoxFYz|2&PE^h-Gg@fAv))o) zavuh^HPIos(4<%{B;EIGvW>MuBVqejVR)X~TEeonU+o+~-?0Jn&)d72b`FkjB;bt{ z|4U*5*xI8YBOPiGLZYP};KVRLY++T8)VqUiNMFijvd#>gidmkB@HlDfujAD&`J-shKECAuw zadlt4zr-=HMAhv^U{1yVZDmU40+;da9CV;{Z{>FeOwX`r|9C}fvwSE*MW$iTVlBi; zX1*tkVYbg)h!ul1@7ZJj&gBfYT;4WnpE1$f@3f-t>Vx3vM*Xj6(vn5H>g+)e+wbz1 zb6!`BomC4#c&Lgc5`QkGV61DM1ic=-NjKjqAx~%a7`uMDJ0o`SCMLC+kb`ZF0mAI7 z7a2V(9ci6_+fj)}y72{e-xFSKldu$BeZG+EBhF-ZV?I@;;L3n9YB6=CW11+|Kb`)( zzkivTyQsu$E_Upq!CJIGbJKS^Wy$k1Z$los4Gz}**YRl5% z2BVSm_`o?o5s%dRlVaK}FRqZ#`133$=G<@}#_Vu30}>tZ#)lEh&ec%Y8O7~Ufjq49 z71bH~xz$moPxzR1qkgbBR+2Ll!e&QbsG5mwp%bv47b z;!%T~L(i|dnmaQFZlJx?lsVO)Z0Z=rzT<=QKlhqGi^_t&;QAUFer)y=M^M$gI+jiz z4^N;Gb?i%)iRHR?{CN?a_RCxP=R<*=wvv;Svn|f>@8&-ly45;n?6|HN*J^)#9R^-n zOZ*&dxZ&F4Bwpc-9GJuQjjv)(o6;wlXXHVT`B~$QeArWoo{PeRC-zD^#`L!6nAE#- zvbzmj85#rYG3_k7(GsYf%Tx(nrWRD3({SL@IB5fi?^K*YsGM5VDqW_0Ea+esAU>#0 zuE;;)i#-rCL46t@G}PU9-TIDTzLv)uQb}D|f=EIyXwE_BbSI37Ju=mf1|s6~tTH|5 z80$M&5a&NWVMl$euwN{S(d;~D;w(Do_XCI&ppMVH>5&Tj4%7jBLAyk2m_QTvmh~fh z&*!w^8zsgfE9@h);HMGd%Yx=_^MjIjVSSB%OexBBqzw~aDr#9{$#+H4V09*8ub_@^ zX~yleb2J4q6M4%dafRmn_WouwcGttqC-fUJ85RT?UdV~QxZ4SOy8q2)%niGUPT-NVX{cyPAC%)FsWg*k}y6S z$RmzqaSkMRrTivtRjn*Krt3|jvwE48YSJ#9jW-(ftZ=HtmmyNg@Wk-#JgEa#4j$UW zz6GR&)=BPi-O%y94;1PK%(SXbo+qOpp~5?dON!W1jCLwzV~r1UvZ|m}q6+}NKeTwy z>0V;#2TW0<1!1)P1pkOwRXc+Nv*t=KP*j#(_lqa}BU|JT#5mOS0Xb^SzcubqR%%3{ zM`at5k!J+-r=j0|M*z!h>S$;lX*q#!%)%Qs>za|(h@V-a(9u{B_NuT`78~o7D>6wh z4C0a=CFe)kHqXP^W6;Nk2E@cYMFsbLt^cH2LucF)@2&mbbChVed%-RRT={uVYSm~@ zQ|iD%&YCn&8p!^%1`+!hs51Fw`0oba^NrrHF`mpD^#B(_X#CK}Lp>P9pXw0ES4q9( zw62*Zivmab1IHQTS_ZRG3EDKPkJQZB!N}DcQ*quyKKh5BUAOB#pfw~j5*TW$jnqhm zTUO4R_{qA~+WmWO>}bdk!2RDCCrb@${J^XvRC)nn`cFFCQkY98+FI;z)MGss1XWUa ze^5p`D)!I3JYh+?L&@{4H|q%j)`a^RmD%c32_@O|ivr;)xacb^yRo0;1Q_jfqcL;U zu%>WnBU`XPpan(wl)%ZYXRKCWQYXvu`CeJ}h3K}L7-=meRXy8cH0W};a?oS3?MS0KqWm47mc)|OjbcAa{Zj%9e71E1H~S$LVBX#S@0}=IZzSN2 zH2O(+hP+x+yipMK0Zbl&^32{{PSBJt^HXPxZh6>&ifI;8)q|brz==w7kbG( zwI`WL%KtM;VbsmV)wUx&f{2cIScqLf17+K|-KYe_!XSQRkS55Ksm=OF`tWk*sj-8{Cd;oba)W$oYAx!HCg*& zOQrz7-nQM3>aa_jT}gR|hu{P~@c~}_=tCPKA^zTKxgL%Vw-6wLPa>Ie z;NcwZD)vo7hl4OTiu@d#x5*uUI#`F&5mcH+pEYpAyh+X x7lo^hdr+D@ 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

`gc=VDdIG+MZ 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

$YO(csK&3|Kfw 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

kup3g$QvT>DWwHb`rHIc1s|9BTy9E_o3akH01F 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 qg1`Sr{GZ

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�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 z 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ú$OoQ_gwBLyk>)GY8CTZN60+MTtGHi zF1li{am~!xV|9?&g0e;Onc>(w-dTz1*aLHQvBw(5=GPXZOj6&7legb}j`XB>^8E`d zVg&*RT%`x^O9Mn!jp}L^2GQ;ZxpDXVJxG-{t0He5R~|<<*)V#iGhJA^&!KSN_C^xU zs@19qr<_8%+uC-ae4UAp>(;7rSfrhB--6!vYd4B-Rz-;HczbqKl0%Q%1dXRBc+;<5 z!OeE}qW>sgx96rVIt|FTN4KOH7O{ks75UVugLN0(dJ>tFx_1+z%PmfQU6eIxUpML& zE(iLEH3T_@tRbh0H)KV9Z2X}A@hCKj%?pa+kb6YFS7~M6K2Sf87N)>zTd7u;Gm^XQ zR-Rj`0ys(H*Y}&d;dPAp#DOi+-p|23Z(dh-y3A5Fwhzg{#PMeKO!LysbkNZmiO7^+ z%t9gPIse<9i2^+6Yxg37^cjvdd1hNfN$Jb?{d!o)3N^0hTzH<#tRw?C0myU^^f{6* z?xaP!s=ABne9HZ7#z6r!PIY*hWT{s^X`)s1%E283sMV@7nk2giU8J%EPB3>bZY)_? zp|8OrEACIPZLxAsgYvxr(7j329c5|kjrz|uF2=kpZxs%0Y-f>M%I_Q|!kr&uO$r;Qs=qGV(*vKe7#}H#TJqmN^w!zoWF+Mw^KFodDeWVYXdLNb zxZ#S_B`o#+YzmU$ZO-Lio}MQhhWM!Qq3NNh-%$70v;fWXTVF0#_X(OwFHA57P852^ zA6+Eh^(9N2)!p1QnMhjpJx`NBcRaP-#zn4tZOiqN|Gd)u;vK-c^UQx(NvL;whUVy& zSoPZ1uD;_t*+)>Co7UurW3@ZD3E;-w6xS4S91Bu``6Pr9X6=|$*EhUh_wg?rA#*)B|>+bQdD z8X&z;7gS_wy7;i4s%0&$Sm8krv#ni#rm7yKRtZ%`Gc7`cpRUM8>ebLNijuu>d~~fy zLckGJB!GQnl!)Mwz~+8DaXoPlEBef+#ZAka;%!eFcjUT_(24H z-q;oVlBq0g$I)j6ysoH|A2d+}|AVn$Dq z0^d$Aoaw(;KQnX1L3bXt62uGRytG?pw~8-(T5{O8A7(p=yQ&QOEqz83KYsJEr1gz& z9e69WB5;=svtKX5b;7|+<^6i1ubNXD!vS&+M!x=`>&^5}tvSgVr^ZDW%0bVIP37Wi zLFY88=btEH71TuO%|#p+ZM_y8Wh7QbC2#l8min<_XXtD38rsin_R8<_+&}aTTGWlh z@jZ45;Ss25FKxyY(HRMNAnGVH?A6`sHIOBfo^<1Qxi#Ry%#TZV(bZ{hK^=W0?R&#bwL6_jVcOQo)?A|Td zlbBMk=%eF!k@~rW{G+!)M_Esvh=fRUX}wq9{`7%6&46MHe*0P5FSkc~C7lp4soM$8 z0PkoIKxi*N9RJS`XO8Bp_MCQ?+3|qbGV>AqIqg6HaGabwz`Ksbx9Cw#A;!yw#a|w% zDPp~qD_J@3bWOM!1`HeF&(yVf%CEdR^^Yk?P%{pi$*pZ*nto z*=9vCT*_{C^0Y1ZMKf41sS2xj`|c%|zsBHX=6UI7=8BXy%2hTXKQkW2oA+2Z9A}F8 ztpmV%+{Lk7x)euK1p3wbeqZTl{|h;DyYqL^?=Z!_s0F0q!`PEnpO$~_XBh6Vdjsgq zcfvC-OIm1V)(m*4ci+A;Lh$uI%H&%}MY4AFEA2wFH!?Q7`fok5f-wsoDb!$H@qxsTo*i2oz37^ z2FcP8^~|OcyM{HbJcla$1kJ2Vorj|mtx_X6I32sKB2az2um#5i)&MdUK+IJVW8&SF zB!l~O+Gb~$&ms!%;s}S3eBg@eTgw;Z8WRB5UZ|gtGT75)2zt^1?DY%bPrm$M_cqV; z%!0-^;2+7|BrT@Z0Z%jV~&^tF7nuW+u9ui!%yrxgezkU%6u+w%}2=O z&m9tm!Der!Sw?7lyR&Q$GqV9oQ6s<%{|rw?#%==&YxT$g3^`~eFpMqzy<3b zi67K^^C^8iTU~dMGFM-^ZLk!ZZQA$lmwrrS37+8v3Mzq}>nV1_8Z@;i`qx~GPa;4V z3=J*H_dCkzA64Z!m#mq@-3%ovs+A3feB?NvcW*7_9$Z_W><#?D)sQ~IrE<tbR~8VVdHW(By=ZHxpg-9q1vtr(bNRme zqBEACp;Fr}1ZFA+iljmcA#5IkmO4#bs0TxBGY--em zKD=kynBj2a2RzJr#=~Qx;{D;oO<}B7k>&??S}~EHKXYBFA$NF9+s)$0Yvtshyt&kAdcQ_G`&Rr=xN#zQVLw)^8M;)~=yU9ZOe! zJ@71?S>+X@=i3}fEv6ZVhOA4a4Zk3{XFmuYj&L>pw9AVz`P4VYK2PxBvY_7bjhult zqfc7x9)Zc|MXeJHC?SOu?qY96NasET4P3j`aQ$`+M1!2o^8c~+6;N?)S=vb;B)GeU z5Zv7%K@$k>9^4_gLxQ`zySsY@cM5kXyzs(Z{*c$5*E4_5boX?x#i97?L5b8rIlOSvE8~mj<_(fQvW*x&duy zw^4cUEn3~C+F8AI8OZ!Me!(DC&^Hu!u5WrnGfddbpf$X4I#ta$FyjZaSH={zZb*PN zUeN^nwab?ws}y%b$F_lui8@0Dt9Zs%LG5h#bUZNraJU&?lP|~+O&n$e(suSWiex5D z65dLI3k*Vpq*CBCXF7h;rT>^{DL@*IcY7-6;;~$X5+@;-_?eyN5p>V;5JJm@bZ8o~O zxKpxbAvHBjq=U*+`r}1GR1CG-&BZC;f%Enx9rSp+1_V61KYr)>LeAcj-N47XWW>JB zAB2d{R=04RpgDX?UV{iSkPRiB4Vxz>DHUx< z(}qV&b?BUtH%x#QFx}VY^0wsX9QCZ=7+aA$3lS=ZHadUa{>WX@r&ZZI+ z6?FM^Bd;StNoZ#=C^J(?!dFYZX23(fUEK8CUQxSmZHeit4dpA?Lt;lSW)Aqbuney4 z0*|{3!r!Olazo!>IRvo&bP34t&z*zUZ? zPJDfIT@dKzgnRz(IMNw~8yflNWj(}|W2ZL8QM?z*j75qiM_@2)Pd&xXz6cOP#v>8S zyBZa4!NSi?=w)FaoLl|&<%wAp;Dyzz(%O<;ncA(eZGxOzec5-cykg4f+!;PoMZO&*+r0{ZQySj+LH)S!o`yDc9XdC-6 z2QRNTbqFxj-PPvZ2O7Jh6;+2}oP+YH?i$2GQEMEs#B?6>?ZVg@#P>c_xLZ17E-)>@ zd4jVTN(?~$cEau-lacy!MT>}Uu6!&g^}WgZm4?>v!2ro-Jl@VK#49Q2D(T?z8dQIV zcyoca0Z)7b$Ao&88|Z^lhl`{x$4vuS{oL*KY;#I|<)*g>R(PO{NA`n_ghsicRhk)$ zS2JWK{KI#M3o?|iB!z=i)Q&U@e%NSNB_>Wq^tH7qo$))CJOxR0JK0{9>8|%W zeL%iSjW}~a7*;;pPdal|13=#+mq9N3Qsrg0;hM`;kZ%I!cTZcNl)Ak7E_jb6$8Kcr9SA*|;6b%Ugm|R@JG^D+`|8lPZvFG+D-2l{UWI;Tt z)JDEf5I0Eatz5VY(NIm9rjBIvhq@Kj^Ihf~*0pZ^*r{)UGGcUlOxR6Tv*5UKf~6WM zqb6)3wVK^^KbyClIACu3M&+&AA zmVlWPXK+3DO<4h3V{5hkrRZ&d27c03)G6=Hw?&fxHhrFyWH`~3;ORD0PkVrd4U*@C zvr3xAjj~c@-HMR;#{c{4+N(@E#6)_BrCvlPFNWXkT-%O@)s?Jeyvwv$ z%>a#aZR3y@NQ#XjyNA3<-_(e3eOI4jGjcL_mm-9}o>V{9EAeqh!*(A*YOmG7Dr1r? zC&(;EK|@b80x7Ct%k!ttgm%Vzn<@Akc+!TspN9xN)}Nd2(N$Megr$i3>Ek?s4Py_i zrR00|PZJu(7zIJXZ91CpMEi7PWTB+&$))3+dDHjhsyF2j*?(=I+^j-UBUmw>s09@XaZC!PXA`My zXMa-WMBe7nPex}eLU5tCajBJK+UpZQhZ*ZJlbsGy8)mPGvY0Fi3&?gOI#JA(O|&ZtT_F@_M6ITF=4< zGqeRaw#hcX+C$|SuMS;$;5&cM_Lsv}>DUCx%pco^(7eDIe>q;!MJMBH=2C$EBNR)Y z8!eDtWy7StN4%PDghkg8yzUzy)r)eR|_N9H7221pb4tzG%NL1+zxN&UATAOeA za$<>oSiY@ZSesTqYKxo;rMh+*+-H~SpHV;B`(ntEx3OoTxvy09*`z*5mO;!w^xc6{ zXm#@Z!_MftW)eCQdtWWFA3XxuTNS<6Cx;Xuc(;BjFQ+vf!1??XLR4yXZdYz-5gx-oycRDL$kOreO z;3_!e+56d3iIXwkL@_*To;NDt(pk$)z!&^7@6O)C45+n71ZD;-Mk;kMgdMbAQL%1e z+qUw0Q*q2OY;~j!Bw8Jc7oH6FyWDKOI~^X7EpoGMN^9d9cB{6DAqP$F+n-5Vd8q__H&G==_WKy}GnJpgY_4=_XM$DC^|v1OX;-!UNYAUw&p#h)@6AkG!lpOC9vBu@?d09g)9K{MDgOLy zlW+wG>olc!5o+tt#b|{MS~=s<#~rz!lWRteyAj1`WQXAcRC-wHxpj}h4Iu>v0e-5J z9Whrs&HN6oKk^|@jt52p=eut0pOdv>b*Y7bj(m>RT_H-7{KR8B?uhBc9F{he7kX$q zOs{$BtZ-g%=2cd{imvnc&M!!u5k6P!0WR4P`I3n#DtM8>^14#jQNSI%f313Oz(u&1 zNGJ@ts}E5r03@NvEEo-MZEGhn497+Bu(NV6p2Y#3KnqhfdR zKAgEV)}#E`b&k&?OXM!tCh962OwRdW2sK->a@AYquuXQbGV`r%9CHI{h7?aeoqmit zgTzC62M-KecCGDhavO4rlMZ|S)zil_#2|)bsW0_=%54Knj{4%Y4}|JI@Kol(#4kwp zY&2br)0?n)G8d1wr#-QJZ_>}Ve*4)BeaRil0hY_r-5r6v3z<7$ZAisx2b|y>FM)x1 z+Rm%-nv@sFRj3NtI86PTfx{E;jETMIKmyFZlKFg=Ye5@=gk`8j&e>M&Ku|tsZuj-R zRMA`ddW^e*$HABHbH1iUjo!Usp+adRJ+jSK!_s`9ylwM&-4ge9Q)uV>@_i;BWW@ZE z!mZ>xhuPo)f)!@-RN35=L+R#q@RC=yLWev0av0Vv|ACO$P4prupV+!%gNGRRIAmn# zByNke^{{=c<+ByzOmgmJT_nF$!TU&$S{3dHoF3eEWAc%5Aq?uarVp(5&~~I<9XVR6 z!J^$jHTXkiaRbKnb(WVW)p3b=fHKpw_xj+x42d zD=QS1Ma+@IU+2y3<_=Sj71LW-$1_AzAlp}@|D8XoIJ9!|B9HR9TDMorZVSUI|M(Cq~X=XZilZk9Zmb6VtX950uPEgR0z6X z8S7wak6(V7jpX7z+k&eSBI!H@$Da^}AF0$h1|9RhIsJN&FRbbUO^=S`KG{j+j?rB7 z%IplPP1?4n(1HOevm=_P2zr@dWd{X-X{-ud@JSOMT1o~u7;$X+B>TSb&~{zOfI z6YKe52f|dsI+uQE=5Srsnn3@Z2MW}whCg}1R&j-7miP#S z9raZ#pS6|-kZ#;3$|vYD^-?4_g=Nc^mI%|;m%L_sz;t8j1IPQOPr!`Q*0-PCyBg!< z;)`@YG2l(P`IXeT=AUOX7L51==XyA*fE}irFT52|4d$=8k3b>@eV36IM-S zH0F$D%){zR=UsrKd$cs`@L1zn@iyWvl)PE!q$Rz_E~P(_3Wz>+>mw3P+%25vFcC8V z)x95oopjY0!+hQUo!oOztzwA|la(yNa3HolPGs|x+ze-Zz{dCTsAI_nBXaIdwxmT-hx+urC6a~Q53M2rOUVF zj4F+G9bu6$c}KPJsg>HxO_Rd92XcvJ>3~{)aKvE_bJC-+tmdo^X4sG$BQO{eSsdvNH8NBgpxu&-Qv&Ym&!7mPVo20MX%I}gZ>3m~kBvaBx*NXsIUM~hrLOleT3>ubeqhV1x3-?<%pphHWKD-t{ z0>XjSj(1LW{j35$gbFb`&26LQ*~kca8;P5I5)^@{c}_gG;~r9oqi=lM60Q^0PRbiS zr_dMi{D3avUc$(Fo#Kus6OgvnwjpisHf+V;851Uf;EnnNuc$^~^rEXYi43mNb;~VIbHVjP|{fE&P*I@GJwtMfmb7Ukqwm8#?3HFecNXzA&^nn=J-A&lDU@J=Y0#H?b}V8 zi{HLG@zJf{DdCNy@q)C#g8@{{NvDTxyL{4>aw!4?KA(L9DPe;xPSfS4zR-TtInUJ9(u>0i8M?5C#=PbeFS>K5C+mv-jYi~5fx`K+WGVxog zI2^t2xR;2gL(YH$STZoRRGHJVjb^=6?OvX3I~!r@R}Cg%$l0>Uuo2K?NSfB!zD@g$ zP2I=xfDeXcz|(+R)S10}kQUX|h4x?aC~rwQ9{V_A!t<+`+9y<9G5=oj_}%Rv`GHqR zMxTC91()dwOWwSOevgwzl;Jq5uDp{|ZvyEAz)6vjb-E+4~C7Z`2W)C{>(w?($M{Ok^y1D3dsk0=PG}nb=II*L= z`k6=jQ`yUBGjbfLzjeSOJxmtEFN+cG(JOZ4MGtkV1)R}yp&ytkv#J5cB)UwY>gfaU zCQ}OB-)&EhofyI;l7!++_}?bpl_sw?K90wc7k{UUa+&`;0SQJJ5n%Bjyg=RPn?-Lvbjw3I%-NOd+u1{BToJOKAJX{8OEsR!j%(*{ly;_|C_ zV>b)`^)3kYAJshB4xEaAm#mw%#N8lA5c*)};!V`vY$^F(gm!{5_hU>}oVYLI8uU^P z_G&{(0-lV-ODAucu8?$HPae?7+PyIB>%6gN9L2p6K$e-m2Y@smL^*Me*OL!sQNYm+ z!y^va#kf2ULet}ABGUbaI)j`lbNqmx=hOqGH9mp{NnqrUX_clqf7v@}*=Z<@eQ?mK z4a4gwEY4rKW?uh`S3cwGjlAxif z%dfgL$!+?QJRme%=hU-qc^FQTp7&OBxl$kE*z#1zyez{nZ|#5ZxD?!~wZvN4 z6*S}ZQ^`x7A&G4_)j zo$hIvdwC3?a*%0 z=opqX#;FGsd)7T%*QPL&MbxR-$o%gGSGb2EnVd~|A0(YjR zwXcUQBpTPTq%T66bIq7T`wz4ab9D0;zAv6X96T?}v*jncVbp0WJK*=&_ADKSt++1B zWj;%}@M^-RmEI_9PS+$u$l@OZZ5fG^Iq1p1vYI`>{d+7kZp}`=JSzY_K*GNhnJW#? zZ!p^ubKfr*{@II^C(l|Cr1BQ;ja-blDY3O8c z?$B3ESdgxHPmTY1eDnpOAV0)mAGn4_I;oP`g`LgZjXuQK^(rsKOu@Lp!^9uvG)A^6 zYhyo@4We z^{(-DXMdVkZuS~iRU`eP;VzbHu@FIj0XHaBg!h4 zU$CL)R4otSz(0ZI*Cmt)ogbWdZ?GDjLlrT?-#&C&MpD1ka?5vLJSG4A!4G3Vl zHa?Z$LHy1@m+JE@8)oz>$;WM^$GI!xp$+gYAfu*+ryht{N)OClX2$mrzO1 zB-XumX;@I9yXHNI2XAO zIySh`#EYzgJgYt8!RNwGS5^`$$rq>mi|}N4sdg)k`w(EV73c`A+dKgr!)>i!hX%vm zC9;M8W;_{q9R5Yw_sqGL*$M6+(afmQGoH2>J@Q!oCu*X%{!uBAM#$6f_hg}biCIMw z=e76I6?9w2atnE-0x!%M>zhJjs@-nK-SvwNJ3SM+X%URbp?$F`PxffZj(Q(xXrXV* zVA>qpJhQ(bQN>>GEZ!T>tYM)KRd!;SDNU#-t7LV(U?>3>jD5YEL_k#f+_IJmj{h7t zTS2dyDoz~T>)y^^=V9y`!pNI)o4J*ONOkRlPUIer-IqYO7Prb3>AL1IqVUd>*Xw%Pa=}QsCAbm#pHbC+q6waR zTIN1yW`AT?{99bKEDlWeku_LPA6)0q)t)OZ2A>-=(>~lX!FyP;^|@&1C0Sp(FYd~ZCm_FP`UN$9)sMbK=zjxSSOLbZ0L z@bI-Q&!h^A-f+vyi-a$O+^a!ewq!^lJcshBnhW6;BRCQqtf)XIZmrwA4SF`*Q`mfh z)U7A(IlW=V&l`xdVY9?c4~zGg+skK8k6O%ob-Yj1b5b|FBKT=t<)<7HCB{6S64Z}q z;a}P+7rOR|A-ZM%3c&;@O8OTI2lh$<`=3x#HzjnKwKu$cS46I-coTBRIKmchLgjKX z8QP-5_X;PL#!Y48#@7Ie_a8lyhxh%C=t!Qgnm#+MTaN%Hs{dO|Q?u+pEkB?1pc~WA zxT5E^#D!?3Ks!A3&{3C%Hy&Lta_Ok1twMJOQD#jBF$Vu*I?FNl8LL%hTv5PcrA_SCD& zNAg76`VnB2mZ2OWC27WD6s93E!!4EozM7=9@& z#D{Z6lJDQY`)FAnOsC$D4q2z(E*^9IHsyb(F?DN+ew*!*q=YfT?Mj=`c z-Y=bzgY_Y859-Rpd-KqIB*pu4E7SphRYq?G^^d&m{*5PrNet#mFSh;oYjh9%NToc5vZ9#sc!~c@2pr{Zj!bgy)N|zo`8=#fmsoWZqMUz?_OjZ57mnA!CY)EA zGpzzp@^HU9jc|RZ!+s7pyQfhQrXW2m!E~I|c^qb;IZREbi+>E|Pmp$y*S=fT9Adiy z3jK=$%LQ%yg1FMyVe zL4E>7ko~9IG}~+trL?De$JNVlx|Nvu!126&8HQCVIwI{qyCD-)uJ?MU5z<)J%_mA} z{R4-GD0KZ8Ljs}lM@TOjoI=aPE-a=}ii)*m7#({{eo1|KUV801JD9&MX|+j=IQ6Ew z*$Y@=+^5aCHh16>7EO|M!2tnvZV{sM(Tf zO@mmidz(j|6euRai}*LEX+0k|yAICl7jLc(HzZ^*cL79VN?F2Re3*LBcsSb0;t6y0C)&Dv`0w_0sizS0_*ypI|GE~iZFiR1Z;r>8`La@3ReXLvJL!ti_k zhS&9+%H~w9xWoy=x>lw+tBUrQ3y7{R%)%n04f-{^o%l3=;yeEBEB24xLz*1ht);)S z?DaLk7v#R=-ED2?c}>QSvmRe+Z7yB$1I7099KCGD+EpzkHEp7buAfzv?t}m7K=B-T zs?&&S?>L-&D1Vc`83kOKTI5q*@?~q@KUfjd12w|I&ljMkpZL(yB$F?#DCEO8r=A#5 z##cwwtSKH20H1VwnkQ%r@94DJ-7MDm zWF1vXGxO9lVFgQ|KE8QJ7MHbjmU`1r#w$f_AvFJi_5<$|-qY6B$nOY|xMowBG z9RWLk7zJXxs0BlQ3)>gY=(ZDnJ=2UQcG1`Pg*sNl5$8r zld|0i7fX=)2veQ^XoyqC)#)5Iewk7f?q$O1VG1y^l0976?^D)c%=+b&=kob* z#4U2P;^ScHAKa3*XB`uE+@8f%KAY8REf+G`d(gilS`;_m`Vls)RLamm&PvBmzc4{|N_x86J*uV*8kXOHU-L>+7h%`BgFZ9L*|0FIc%u`R9E8v7Vx4 z5oDdWxdG!^Ccb=GJ8{(1W~*$JGV-!~#|dr;Q~vWvy5^*tT6CJK+vX` zx`nzg9~bviFB+QXNx0c_)!z$u*`ADT#Gk#xXp_T3$$3V^5Bl$czV4@B8}}+bf38Ne z+j*$XRTK-;z67FTB~)3;WN*5FUOa^>&d+;L_&;P~C8+~faKL1=;B=WY?4(iW_K#?*}jW!`|7bN>2? zCoW-+ik#B^xPWaXE?sB(JdR`7u z`XYGl+U0xS+}qZ-^NEdEmzrhGyieNrxxN0c+PG-dcx}{{=~gn(1I=J`pm_)U$K)M% z6a>E_I3~}0B+~DAwbV36g7Z3?(T#SoSEGZHM3Y@|%m*zN1^;rxrqnGl2v9H=z&f&n zeo#CUS44Gp(L$0W$w zb1p2-tRKrtA}YX&4}NT0by^w12A7}%nT7k(;Ys$!4*C)}*9&85eU&=iDI6bL-I=dv znzr50oqI-(xd%$Ve75q-hZINb$v*MDoXi|mwx)ZNW#P>N0KL(3Z4%<7t3HhA8B%so z9{lEgZ3*&`wNjhNBd^L|Mzdu5B$Q`vsTgZ)|J*3L905H&5ZnNELzq9+RICsdN(ZG^tfh}gCmE|-47L(ekXm$M zO#(8xelw{PtxHpQ`xY&wA30j`4$TJ;@Vs3VA%Q^or(3=3*;KT?g(DGgNqW)NjT=ZS>?OjD?Ou`*>suA5vTiK6f|@i}tT!aQeK!Y9}^y zJPUBF+LFgtJ3)`*y=~O`!!4>B9tPgNoPj6u6u5^ZdR6{a5mSCD;$ujr+x}n=G`7)! z+CQU+|F9EJ;@axhToXm+fbUPiaPUAw{j}fk*o6cM9I`ICF73Ck-_HKDU$aep@jK{h z)OIfStkmgztn!agUhWt&TxUZ6=p^(nb{hlerfb5{^Cz0tI3IWU#>JhW(|3+T`q}Az zj1a4(ZDS~C!q)uinhKn+A&}IjC~@o6TcarCEDV1>;fhVV>?ug-Arx-}{wtf2;TGOv zeWT^+zf6nrKT70g_~eP)?FIY}_H*pt{vPnOH=af5##$Cqwv@>KEjXw^CosrZcd`K9 zUaw+>;dSKAC0<*c)y4ozJ?kB`+z^UTOTD(Ci;2<5;!a|s&$I8Vu#Bgz`1P@_6^?|BNYAmTb`&|r$7sW6*#gK7V1wLJ+MKX zJw)qJ`|A-vf2x!d_sDy{)^;BFmyj*vdUh|UKLOl=~E=G<*D)wuYZJvt(>5_ ze$8MtJtO_ma`Ez`1k{8FobTEv{_I$CC%P|E?0w8}5py0G6Dw}BbJm%Rx3%39xwQG8 zzme`&S)OVXt`O3wblrVS#h5uEQWQ06SSj2bDPq^5aK>{SRn{*Gn3tr+-K?A)j% zyl^ar$&7%_5RhOUU8$|5xI3k~_I=T#IEEY2rWEX4yBa?eI#fq;8iJ$DcWTR*F62Bsoe&{L?8LUQ&d;3(z=po0^Maw!#vG! zeBp&#`B84AaD%0nVG=b-8mk=4oj4vYma(jygH2BAy)+WcJvkZ;akLK*8!DB#sA4;z5eoLvkz20S5?hBL@?6`A@uxD zY|M^$f}TneJQso$bNF3^K0meUi83eaXsm+yn2`MHg&tWFJ&jis%DW$ei#X{Yu=xGM z_XZ|RLZeuRo^(Rn1uO-=ptxq{c(eaJ?B`6w-t*Ph6D}kmj&2Zk$WfPh%!w-S|GB@Nogjb*I_@l;qT6P$>{A@~}#t^%L0VsQ(v{DsQeAlLyVbmN%TsfGBA zaYGU#08m@2Tn1Bm`7ML44RfCYRXgga5R3K~qXT-Rb~kfrjn5eX9c<@ro?VYB!oSE)i&G4VwqN%*rTYq9pd6A(JWbFOh zwHY}yTXcNEd2p!8*7ON?7|mXOk*Vcn%J`xwm+Qk0R_VA0w?S&&Qcsz~{Fqj4!o z-zL~kkjuXzpK|rDW19=%RDO8ta(s!n2Mj)u9J`jmOhs1wpI&@7IrQ$GffTgmv!AF> zdCgD&`UJ{gGj@q2eJ||+Q+n&F7`G9G!JQpkY(e+Fx0rP4`5HA7)Ko^LeQ<64Jaay2 zwBe(cv~>#)4rUiM>fM8^qYk&7vtDv&lW6%|Z_C!H6k}vQv2=McQ_EO3O`uP%D&Pap z`|kpQnd>%2t+>*;osIGv*81$TbxoL`RSg^WFG&_HZAEXFMu0N^z?HS2^um3D`A zG$j&F>Nl%E{$HCR^*`pQroBdF#Inp^H{NyDQ&SwGl4BO0OwJi^y6 zdLakb!FW?dhwFF8t_1Z09`QM%)e6xZ&zC^!4fn^*(~GO;;9o6LL?aK&-UDwCR|DBi z)!Y|TfxEg@2ar{_noeAlm*$sJRq;_ zQR%Mw0Hs+#KG_W?-=_phey`+bB8kW(ZLmLQxa>DMS#ISz+oBQWU5KgV#0}g`H_MF*X zbVPZ9%O~#wRcbxN_wajDtn3f)N8sevc#T{+-$9{&%4Y?|UDS~09A+WrLLccVL*LfQ z;TOHLhz0B!De|2k%tk`7C9s95bc~?y)$-{9<`S6<B9*n0oy|qnpnQ; z*xm|D>@x4syMGCdB?*V6l6#bKo0xY7f3JQAM|vFUDt~61D$VH;dhqf> zQQFgveXss8=Z>gdYCIxaRX=iFr^Rzb-)+fbM6cRIAmp;{rnDt=8{>lHOz1557sZNM z6Y1s>1}S6r^03^VeT6CjyxywmA)UcN&#UZb0Bq^)HoU)(U?YOxyG`9UZkaiD%|7Nw z@wdc*_V9XWI|{g14$@*Vse^uZAt->;*B71jo*@6=Qz5<0)<7VK10UCp=oT_cc^lQU#4sG_D&LARKj5Stsgz~0UOSEzHG$S!%>i+Q5+TDP~ z$6lp~FBm2Z5`lZyyIm_$Yovqq_`CCF?9%-q5|d!+`+4dRJinmY268P)Hs{+_j%wRl(M ztdPmWfERN+i9>)?L{Er9s-vzm)i~W0A8FAAUf-_I+lw|H$484-Zw2IFGyI*YCP0`4 zC5|6M!(q=AEQn$Zr1c|f&vRa>OWSwUxD+un08cdj?8$K%n4z*O!8duY9Y9-Emv;7L zuTUyMRhn*GwO-$uuBva|W!$?opIgU}Z>Kc7n&5B#NkQ78E&Jh-TO}>BB z{=86*Pw^gvKS&cPGCdtlG*p!T1ekcSDjSORdl#U_%;RS;k--s|%ekM(IY4!*4c2O( zl-wn=Ui6uMhZ@0pfCzbnYo2#xq%#v_(nbiBENQXwVSWLp57F3T`TwC z0IY4jo=*?<>yr1=;#i>)3&A+H++*PiyS?e5&m>leR$VPj_sNgI!;&Vrf1k!*L|)w? zF90h|!uBpLAvZ(`$Je>4rspv2`Q>@2rXb*N-^Mx*VZ+HRSQC-pE*ULCRVPb%9f+T}_< z*z7v45#+qPlkSZ< z!car46j*g$GvcUk`a$EM=}tt(ODNqTZ!FUF-~%o!aE=1E>PR@jl?KeFAMw_@T}|)! z!xl@WicQe>=4W$*)0P3e#*zPjY8K3B0hH-|-YaNSM1`ExhA=jP%yn!gyltkjy-_6OHcqqMf&RPs`ueyDT|hJe8q> zrmM2l|8v1NbFA|Z;+jq<(Nt(RH`jogAFU22U$ z1#xSBs#!ew`!^(RH7i$?fr0Ms2kUyh){K2lFk{InIw_GN^tB&l(3wcq#Wo^8DN?^Z zj1n?fygYDI>7$6K4zq=yF*Gjw%1H?zlPHiuMB&UT#YpKR80;`x8HywFr6rj+{HA(B zkF__LxXexSMc+js%0MMxp|W8@-Kd}Q=P&wA>jciQ6|#Bp4_2vU>$Fpe!Az>poLXhW zYxHuslT%q*?R%;p9j^%r*26@4Ps057Sk+tY<3d=L?0a(axr6CPcD5l+9$T-%!oX`_0gNbqvo&#A*(}Rd_$oWg{HV4nG~w zVwBCf4zU#LGE=|@I4ym}GfmtzpGvWa8*$=Srcv;~hpWbYGc{+*wLqIX_0DL=_VnDk zPL=zVtH4+7>Z5&~+6emxqeUC!Vz`HRIM3B{L0e=!{!|gLD$;a(b^PK?hNEatQH;10 z;c>m+vtZ(otOIUmsLXe}B6_-ghIHlnwj@Sz3uuxO4W*>O5-jyHd93wo4vNof!zIa4 z^+^Rz9az4yJeXCg>J65xR=5I9Bs$MqaH*_FS`>G+ie-}-x7=DAr3!Tv@trlV)Sp?2 z4lL*|<7N9X=eQ($*DF|kSUxeFLeD!0G|gqVyuheZ&5>B{xZ-w0QnDYi8-`N3@%Ja2 zZjvm~vTzZoY0@L`Zz17Q$&K6OX?l584CEUar+4qUh7Z#aZX+0Z6+pbg{hoehGr2{t zube#_tNG(nZuwC)2Z;so`D{F0kV~iD(20RD%eSNWmq%6a8yG|C++KM+tJ?|lcs}!S zA+RF!)h3CMdQ3Y5C>r(1E^zPuqv_q{`%RK2@_wd8KeNfYP#2rw+p|{(+i$1aujLNe z&%W0C^VU}p9%t}Yu-P6_N(2MjbzaYZE1Hn{A*8^!)xMDy28!3Al{)$QD(z~)61goV z_oV-pr~2}n7jRtncJ0`iHMDM(=zM>$>9kSkv|eA;;)*R7k?)3Xj~fT}^rEY3eiYwC z2s_s?&2&(0bF%d1&XiSW72_f@N7rpqNxriYDe*vO7MM(NVx1^myzU>vGP+)1LTCxRi_+DZfuB`HJVP7hpP~iCm~}Ui%`6yo5G>W5q6M+xLOS zq!mWL{0oh5H8zEPii5gU%dEZE#!Hvo+?ljnxYlzj7dV$gl6?O6-=E!ooXYh0s3y>y zhaT)hmXyQU3BeEZi*a0pTi#4ARj#R=P^ zg(B4?#KE29)B54-qvlE06gr2zGyn)I|IpR6!`41*YE84o4j0xsN*H;{? z75$zcqei$R22fdoenOc8`;t|ZYGsoiu|GE;Oa`e?3~Ew6YJXHr!1D$S3Fp7Pjjw;a zyV%n%2YrR2?e_CbnDNimG+gfi_=nDJe?#`axN7yMfa#+bJwCFUGD5Z>T=tJ`iwYyX zIaqf=-gF)CkfN_{VyY_gOb*7~VPkm~ygrT5+-!$Gv}vZiXikkDdkNjn*^CyI6AmQ| zKptn{=>9ou`E@LsuM4Z3E8&LL@87>VOQ7FI+oV4X-$`l9mroLR)i$s!a|Pxc?(Ls{ zorQ;KW3{ok*MnLt!K#02*+wi7@}ira>NvbPNPTvw7vZX!KD5B+;9{vSbaUa(VVL8G zg|bCGw51lM_IYV5+mF&(4lc`mGW7oMW(TFuElXQ-t$Ds?>#W=asD>$`B6gO7h#eFg zaz}=4!zQTsJzjnS#`{xswRgo@s^I5t)I@fZ>j{(byQc-K%(fZ7E1XEBUhX+Z^0+m- z36vMHwrog`IyryLSJdlAC#-SUrr)ruu`m}Exes=}l%kIG(1rQJPRdtR!jd$G)_m}i z??bA;G55FOt_G>E#1o}#*#)-D{502Y!q~Z77gy-}5bZ3238Ah7S~cw{#b~k~>}-#~ z#+EGGq5iDftJExBXJuu_yS;whJ0e0ktr_7*D$~4#xhhnC+I)kGN+~W-pg-;y6eH^K zz5KJffqtsB=&cWZD7+=RyCFaaS5l3=1wDS{F_51?HU28`5A53%-{Pe2NuZaS8LZhx zi$({tfpXR~Qp1Fqu$r^0K7-eW1_!FDhS!RF zR<=soSz;mc78(HgS(1s%C}6H7LTN7rgAik~1(lgV@|JQQK++XcciUpcv8VLJ8Mq$W=1vG4I?HFhUXS2)EGe z-V0nT)4Sg?cpXH?B~h|q^Er9T@jKt0{Gn%@g8w@6mA=6SmsC9#nFSO; z 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%0DB$f;cb#!6?4!3Poff>KxAKy$xG4%b+H`C!QRd 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