mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 07:56:15 +08:00

Removing the statement ixml_element->get_attribute( 'xmlns:a' ) is anyway a good thing because getting a namespace attribute this way is not supported by IXML and it is always returning an empty string even if this "attribute" exists.
230 lines
8.0 KiB
ABAP
230 lines
8.0 KiB
ABAP
CLASS zcl_excel_theme DEFINITION
|
|
PUBLIC
|
|
CREATE PUBLIC .
|
|
|
|
PUBLIC SECTION.
|
|
|
|
CONSTANTS c_theme_elements TYPE string VALUE 'themeElements'. "#EC NOTEXT
|
|
CONSTANTS c_theme_object_def TYPE string VALUE 'objectDefaults'. "#EC NOTEXT
|
|
CONSTANTS c_theme_extra_color TYPE string VALUE 'extraClrSchemeLst'. "#EC NOTEXT
|
|
CONSTANTS c_theme_extlst TYPE string VALUE 'extLst'. "#EC NOTEXT
|
|
CONSTANTS c_theme TYPE string VALUE 'theme'. "#EC NOTEXT
|
|
CONSTANTS c_theme_name TYPE string VALUE 'name'. "#EC NOTEXT
|
|
CONSTANTS c_theme_xmlns TYPE string VALUE 'xmlns:a'. "#EC NOTEXT
|
|
CONSTANTS c_theme_prefix TYPE string VALUE 'a'. "#EC NOTEXT
|
|
CONSTANTS c_theme_prefix_write TYPE string VALUE 'a:'. "#EC NOTEXT
|
|
CONSTANTS c_theme_xmlns_val TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main'. "#EC NOTEXT
|
|
|
|
METHODS constructor .
|
|
METHODS read_theme
|
|
IMPORTING
|
|
VALUE(io_theme_xml) TYPE REF TO if_ixml_document .
|
|
METHODS write_theme
|
|
RETURNING
|
|
VALUE(rv_xstring) TYPE xstring .
|
|
METHODS set_color
|
|
IMPORTING
|
|
VALUE(iv_type) TYPE string
|
|
VALUE(iv_srgb) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL
|
|
VALUE(iv_syscolorname) TYPE string OPTIONAL
|
|
VALUE(iv_syscolorlast) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL .
|
|
METHODS set_color_scheme_name
|
|
IMPORTING
|
|
iv_name TYPE string .
|
|
METHODS set_font
|
|
IMPORTING
|
|
iv_type TYPE string
|
|
iv_script TYPE string
|
|
iv_typeface TYPE string .
|
|
METHODS set_latin_font
|
|
IMPORTING
|
|
VALUE(iv_type) TYPE string
|
|
VALUE(iv_typeface) TYPE string
|
|
VALUE(iv_panose) TYPE string OPTIONAL
|
|
VALUE(iv_pitchfamily) TYPE string OPTIONAL
|
|
VALUE(iv_charset) TYPE string OPTIONAL .
|
|
METHODS set_ea_font
|
|
IMPORTING
|
|
VALUE(iv_type) TYPE string
|
|
VALUE(iv_typeface) TYPE string
|
|
VALUE(iv_panose) TYPE string OPTIONAL
|
|
VALUE(iv_pitchfamily) TYPE string OPTIONAL
|
|
VALUE(iv_charset) TYPE string OPTIONAL .
|
|
METHODS set_cs_font
|
|
IMPORTING
|
|
VALUE(iv_type) TYPE string
|
|
VALUE(iv_typeface) TYPE string
|
|
VALUE(iv_panose) TYPE string OPTIONAL
|
|
VALUE(iv_pitchfamily) TYPE string OPTIONAL
|
|
VALUE(iv_charset) TYPE string OPTIONAL .
|
|
METHODS set_font_scheme_name
|
|
IMPORTING
|
|
VALUE(iv_name) TYPE string .
|
|
METHODS set_theme_name
|
|
IMPORTING
|
|
VALUE(iv_name) TYPE string .
|
|
PROTECTED SECTION.
|
|
|
|
DATA elements TYPE REF TO zcl_excel_theme_elements .
|
|
DATA objectdefaults TYPE REF TO zcl_excel_theme_objectdefaults .
|
|
DATA extclrschemelst TYPE REF TO zcl_excel_theme_eclrschemelst .
|
|
DATA extlst TYPE REF TO zcl_excel_theme_extlst .
|
|
PRIVATE SECTION.
|
|
|
|
DATA name TYPE string .
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_excel_theme IMPLEMENTATION.
|
|
|
|
|
|
METHOD constructor.
|
|
CREATE OBJECT elements.
|
|
CREATE OBJECT objectdefaults.
|
|
CREATE OBJECT extclrschemelst.
|
|
CREATE OBJECT extlst.
|
|
ENDMETHOD. "class_constructor
|
|
|
|
|
|
METHOD read_theme.
|
|
DATA: lo_node_theme TYPE REF TO if_ixml_element.
|
|
DATA: lo_theme_children TYPE REF TO if_ixml_node_list.
|
|
DATA: lo_theme_iterator TYPE REF TO if_ixml_node_iterator.
|
|
DATA: lo_theme_element TYPE REF TO if_ixml_element.
|
|
CHECK io_theme_xml IS NOT INITIAL.
|
|
|
|
lo_node_theme = io_theme_xml->get_root_element( )." find_from_name( name = c_theme ).
|
|
IF lo_node_theme IS BOUND.
|
|
name = lo_node_theme->get_attribute( name = c_theme_name ).
|
|
lo_theme_children = lo_node_theme->get_children( ).
|
|
lo_theme_iterator = lo_theme_children->create_iterator( ).
|
|
lo_theme_element ?= lo_theme_iterator->get_next( ).
|
|
WHILE lo_theme_element IS BOUND.
|
|
CASE lo_theme_element->get_name( ).
|
|
WHEN c_theme_elements.
|
|
elements->load( io_elements = lo_theme_element ).
|
|
WHEN c_theme_object_def.
|
|
objectdefaults->load( io_object_def = lo_theme_element ).
|
|
WHEN c_theme_extra_color.
|
|
extclrschemelst->load( io_extra_color = lo_theme_element ).
|
|
WHEN c_theme_extlst.
|
|
extlst->load( io_extlst = lo_theme_element ).
|
|
ENDCASE.
|
|
lo_theme_element ?= lo_theme_iterator->get_next( ).
|
|
ENDWHILE.
|
|
ENDIF.
|
|
ENDMETHOD. "read_theme
|
|
|
|
|
|
METHOD set_color.
|
|
elements->color_scheme->set_color(
|
|
EXPORTING
|
|
iv_type = iv_type
|
|
iv_srgb = iv_srgb
|
|
iv_syscolorname = iv_syscolorname
|
|
iv_syscolorlast = iv_syscolorlast
|
|
).
|
|
ENDMETHOD. "set_color
|
|
|
|
|
|
METHOD set_color_scheme_name.
|
|
elements->color_scheme->set_name( iv_name = iv_name ).
|
|
ENDMETHOD. "set_color_scheme_name
|
|
|
|
|
|
METHOD set_cs_font.
|
|
elements->font_scheme->modify_cs_font(
|
|
EXPORTING
|
|
iv_type = iv_type
|
|
iv_typeface = iv_typeface
|
|
iv_panose = iv_panose
|
|
iv_pitchfamily = iv_pitchfamily
|
|
iv_charset = iv_charset
|
|
).
|
|
ENDMETHOD. "set_cs_font
|
|
|
|
|
|
METHOD set_ea_font.
|
|
elements->font_scheme->modify_ea_font(
|
|
EXPORTING
|
|
iv_type = iv_type
|
|
iv_typeface = iv_typeface
|
|
iv_panose = iv_panose
|
|
iv_pitchfamily = iv_pitchfamily
|
|
iv_charset = iv_charset
|
|
).
|
|
ENDMETHOD. "set_ea_font
|
|
|
|
|
|
METHOD set_font.
|
|
elements->font_scheme->modify_font(
|
|
EXPORTING
|
|
iv_type = iv_type
|
|
iv_script = iv_script
|
|
iv_typeface = iv_typeface
|
|
).
|
|
ENDMETHOD. "set_font
|
|
|
|
|
|
METHOD set_font_scheme_name.
|
|
elements->font_scheme->set_name( iv_name = iv_name ).
|
|
ENDMETHOD. "set_font_scheme_name
|
|
|
|
|
|
METHOD set_latin_font.
|
|
elements->font_scheme->modify_latin_font(
|
|
EXPORTING
|
|
iv_type = iv_type
|
|
iv_typeface = iv_typeface
|
|
iv_panose = iv_panose
|
|
iv_pitchfamily = iv_pitchfamily
|
|
iv_charset = iv_charset
|
|
).
|
|
ENDMETHOD. "set_latin_font
|
|
|
|
|
|
METHOD set_theme_name.
|
|
name = iv_name.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD write_theme.
|
|
DATA: lo_ixml TYPE REF TO if_ixml,
|
|
lo_element_root TYPE REF TO if_ixml_element,
|
|
lo_encoding TYPE REF TO if_ixml_encoding.
|
|
DATA: lo_streamfactory TYPE REF TO if_ixml_stream_factory.
|
|
DATA: lo_ostream TYPE REF TO if_ixml_ostream.
|
|
DATA: lo_renderer TYPE REF TO if_ixml_renderer.
|
|
DATA: lo_document TYPE REF TO if_ixml_document.
|
|
lo_ixml = cl_ixml=>create( ).
|
|
|
|
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 ).
|
|
lo_document->set_namespace_prefix( prefix = 'a' ).
|
|
|
|
lo_element_root = lo_document->create_simple_element_ns( prefix = c_theme_prefix
|
|
name = c_theme
|
|
parent = lo_document
|
|
).
|
|
lo_element_root->set_attribute_ns( name = c_theme_xmlns
|
|
value = c_theme_xmlns_val ).
|
|
lo_element_root->set_attribute_ns( name = c_theme_name
|
|
value = name ).
|
|
|
|
elements->build_xml( io_document = lo_document ).
|
|
objectdefaults->build_xml( io_document = lo_document ).
|
|
extclrschemelst->build_xml( io_document = lo_document ).
|
|
extlst->build_xml( io_document = lo_document ).
|
|
|
|
lo_streamfactory = lo_ixml->create_stream_factory( ).
|
|
lo_ostream = lo_streamfactory->create_ostream_xstring( string = rv_xstring ).
|
|
lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ).
|
|
lo_renderer->render( ).
|
|
|
|
ENDMETHOD. "write_theme
|
|
ENDCLASS.
|