diff --git a/ZA2X/PROG/ZDEMO_CALENDAR.slnk b/ZA2X/PROG/ZDEMO_CALENDAR.slnk
index 5af10e6..12f5384 100644
--- a/ZA2X/PROG/ZDEMO_CALENDAR.slnk
+++ b/ZA2X/PROG/ZDEMO_CALENDAR.slnk
@@ -7,12 +7,15 @@
+
-
-
-
+
+
+
+
+
*&---------------------------------------------------------------------*
@@ -28,6 +31,7 @@
*& 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.
@@ -39,24 +43,25 @@
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_path TYPE zexcel_export_dir.
-PARAMETERS: p_from TYPE dfrom DEFAULT '20120101',
- p_to TYPE dto DEFAULT '20121231'.
+PARAMETERS: p_from TYPE dfrom DEFAULT '20130101',
+ p_to TYPE dto DEFAULT '20131231'.
-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.
+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.
@@ -64,7 +69,8 @@ START-OF-SELECTION.
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,
+ 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,
@@ -83,7 +89,9 @@ START-OF-SELECTION.
image_descr_path TYPE string,
lv_file_separator TYPE c.
DATA: lv_content TYPE xstring,
- width TYPE i.
+ width TYPE i,
+ lv_height TYPE i,
+ lv_from_row TYPE zexcel_cell_row.
DATA: month TYPE i,
month_nr TYPE fcmnr,
@@ -94,7 +102,9 @@ START-OF-SELECTION.
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.
@@ -104,15 +114,18 @@ START-OF-SELECTION.
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
- from_row TYPE zexcel_cell_row VALUE 28,
+ 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 TYPE i VALUE 450, " Image Height
+ 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.
@@ -187,7 +200,6 @@ START-OF-SELECTION.
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
@@ -221,68 +233,131 @@ START-OF-SELECTION.
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->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'.
+ 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' ).
- lo_col_dim = lo_worksheet->get_column_dimension( 'K' ).
- lo_col_dim->set_width( '3.0' ).
- lo_worksheet->sheet_setup->horizontal_centered = abap_true.
+ 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).
- READ TABLE month_names WITH KEY mnr = month_nr ASSIGNING <month_name>.
- CONCATENATE <month_name>-ltx ` ` date_from(4) INTO value.
- row = from_row - 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 = from_col " Cell Column
+ 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
- ).
+* 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.
- row = from_row - 3.
- lo_worksheet->set_cell(
- EXPORTING
- ip_column = from_col " Cell Column
- ip_row = row " Cell Row
- ip_value = value " Cell Value
- ).
+ 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 = c_height * c_factor.
+ 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 = c_height ).
+ ip_height = lv_height ).
lo_worksheet->add_drawing( lo_drawing ).
ENDIF.
@@ -292,74 +367,36 @@ START-OF-SELECTION.
day_in = date_from
IMPORTING
last_day_of_month = date_to.
-
- zcl_helper=>add_calendar(
- EXPORTING
- i_date_from = date_from
- i_date_to = date_to
- i_from_row = 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
- ).
-
+ 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 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
- EXCEPTIONS
- file_write_error = 1
- no_batch = 2
- gui_refuse_filetransfer = 3
- invalid_type = 4
- no_authority = 5
- unknown_error = 6
- header_not_allowed = 7
- separator_not_allowed = 8
- filesize_not_allowed = 9
- header_too_long = 10
- dp_error_create = 11
- dp_error_send = 12
- dp_error_write = 13
- unknown_dp_error = 14
- access_denied = 15
- dp_out_of_memory = 16
- disk_full = 17
- dp_timeout = 18
- file_not_found = 19
- dataprovider_exception = 20
- control_flush_error = 21
- not_supported_by_gui = 22
- error_no_gui = 23
- OTHERS = 24
-).
- IF sy-subrc <> 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
+*** Create output
+ lcl_output=>output( lo_excel ).
diff --git a/ZA2X/PROG/ZDEMO_CALENDAR_CLASSES.slnk b/ZA2X/PROG/ZDEMO_CALENDAR_CLASSES.slnk
index ed3ef40..8fadefd 100644
--- a/ZA2X/PROG/ZDEMO_CALENDAR_CLASSES.slnk
+++ b/ZA2X/PROG/ZDEMO_CALENDAR_CLASSES.slnk
@@ -1,5 +1,5 @@
-
-
+
+
@@ -130,6 +130,22 @@ CLASS zcl_helper DEFINITION.
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
@@ -200,6 +216,7 @@ CLASS zcl_helper IMPLEMENTATION.
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,
@@ -217,7 +234,6 @@ CLASS zcl_helper IMPLEMENTATION.
height TYPE f.
DATA: hyperlink TYPE REF TO zcl_excel_hyperlink.
- DATA: day_names TYPE TABLE OF t246.
FIELD-SYMBOLS: <day_name> LIKE LINE OF day_names.
lv_date = i_date_from.
@@ -300,14 +316,12 @@ CLASS zcl_helper IMPLEMENTATION.
).
" Add Created with abap2xlsx
row = row + 2.
- 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(
+ zcl_helper=>add_a2x_footer(
EXPORTING
- ip_column = i_from_col " Cell Column
- ip_row = row " Cell Row
- ip_value = value " Cell Value
- ip_hyperlink = hyperlink
+ 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.
@@ -331,6 +345,113 @@ CLASS zcl_helper IMPLEMENTATION.
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,