From 2de54c6cbba46ec23bdeb2dcaa678ddd54c4a8d1 Mon Sep 17 00:00:00 2001 From: Gregor Wolf Date: Thu, 3 Jan 2013 10:22:31 +0000 Subject: [PATCH] Support also landscape output for the calendar demo git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@403 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049 --- ZA2X/PROG/ZDEMO_CALENDAR.slnk | 259 +++++++++++++++----------- ZA2X/PROG/ZDEMO_CALENDAR_CLASSES.slnk | 141 +++++++++++++- 2 files changed, 279 insertions(+), 121 deletions(-) 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,