diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap
index 097da72..a622db8 100644
--- a/src/zcl_excel_reader_2007.clas.abap
+++ b/src/zcl_excel_reader_2007.clas.abap
@@ -158,6 +158,11 @@ CLASS zcl_excel_reader_2007 DEFINITION
!ip_xml TYPE REF TO if_ixml_document
RETURNING
VALUE(ep_fills) TYPE t_fills .
+ METHODS load_style_font
+ IMPORTING
+ !io_xml_element TYPE REF TO if_ixml_element
+ RETURNING
+ VALUE(ro_font) TYPE REF TO zcl_excel_style_font .
METHODS load_style_fonts
IMPORTING
!ip_xml TYPE REF TO if_ixml_document
@@ -1481,36 +1486,14 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ENDMETHOD.
- METHOD load_style_fonts.
+ METHOD load_style_font.
-*--------------------------------------------------------------------*
-* issue #230 - Pimp my Code
-* - Stefan Schmoecker, (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
-*
-*
-*
-*
-*
-*
-*
-*--------------------------------------------------------------------*
- lo_node_font ?= ip_xml->find_from_name( 'font' ).
- WHILE lo_node_font IS BOUND.
+ lo_node_font = io_xml_element.
CREATE OBJECT lo_font.
*--------------------------------------------------------------------*
@@ -1597,6 +1580,41 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
lo_font->color-tint = ls_color-tint.
ENDIF.
+ ro_font = lo_font.
+
+ ENDMETHOD.
+
+
+ METHOD load_style_fonts.
+
+*--------------------------------------------------------------------*
+* issue #230 - Pimp my Code
+* - Stefan Schmoecker, (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_font TYPE REF TO zcl_excel_style_font.
+
+*--------------------------------------------------------------------*
+* 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
+*
+*
+*
+*
+*
+*
+*
+*--------------------------------------------------------------------*
+ lo_node_font ?= ip_xml->find_from_name( 'font' ).
+ WHILE lo_node_font IS BOUND.
+
+ lo_font = load_style_font( lo_node_font ).
INSERT lo_font INTO TABLE ep_fonts.
lo_node_font ?= lo_node_font->get_next( ).
diff --git a/src/zcl_excel_writer_2007.clas.abap b/src/zcl_excel_writer_2007.clas.abap
index 9d5c714..ad008ba 100644
--- a/src/zcl_excel_writer_2007.clas.abap
+++ b/src/zcl_excel_writer_2007.clas.abap
@@ -139,6 +139,11 @@ CLASS zcl_excel_writer_2007 DEFINITION
!io_parent TYPE REF TO if_ixml_element
!iv_color_elem_name TYPE string DEFAULT 'color'
!is_color TYPE zexcel_s_style_color .
+ METHODS create_xl_styles_font_node
+ IMPORTING
+ !io_document TYPE REF TO if_ixml_document
+ !io_parent TYPE REF TO if_ixml_element
+ !is_font TYPE zexcel_s_style_font .
METHODS create_xl_table
IMPORTING
!io_table TYPE REF TO zcl_excel_table
@@ -6085,15 +6090,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
" 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',
@@ -6425,69 +6422,9 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
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.
+ create_xl_styles_font_node( io_document = lo_document
+ io_parent = lo_element_font
+ is_font = ls_font ).
lo_element_fonts->append_child( new_child = lo_element_font ).
ENDLOOP.
@@ -7092,6 +7029,95 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
ENDMETHOD.
+ METHOD create_xl_styles_font_node.
+
+ CONSTANTS: 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_name TYPE string VALUE 'name',
+ lc_xml_node_family TYPE string VALUE 'family',
+ lc_xml_node_scheme TYPE string VALUE 'scheme',
+ lc_xml_attr_val TYPE string VALUE 'val'.
+
+ DATA: lo_document TYPE REF TO if_ixml_document,
+ lo_element_font TYPE REF TO if_ixml_element,
+ ls_font TYPE zexcel_s_style_font,
+ lo_sub_element TYPE REF TO if_ixml_element,
+ lv_value TYPE string.
+
+ lo_document = io_document.
+ lo_element_font = io_parent.
+ ls_font = is_font.
+
+ 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.
+
+ ENDMETHOD.
+
+
METHOD create_xl_table.
DATA: lc_xml_node_table TYPE string VALUE 'table',