*"* 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 classABAPmethod 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.