From 6d12c57f274c13d814f9f776dd5a0acf021d7aeb Mon Sep 17 00:00:00 2001 From: Domi Bigl Date: Sat, 30 Oct 2021 19:54:46 +0200 Subject: [PATCH] fix print titles range read and write #801 (#862) * fix print titles range read and write * remove empty line in method definition --- src/zcl_excel_common.clas.abap | 61 ++++++++++---- src/zcl_excel_common.clas.testclasses.abap | 94 ++++++++++++++++++++++ src/zcl_excel_reader_2007.clas.abap | 23 +++--- 3 files changed, 152 insertions(+), 26 deletions(-) diff --git a/src/zcl_excel_common.clas.abap b/src/zcl_excel_common.clas.abap index 3dc9729..6bc1490 100644 --- a/src/zcl_excel_common.clas.abap +++ b/src/zcl_excel_common.clas.abap @@ -46,15 +46,22 @@ CLASS zcl_excel_common DEFINITION !e_row TYPE zexcel_cell_row . CLASS-METHODS convert_range2column_a_row IMPORTING - !i_range TYPE clike + !i_range TYPE clike + !i_allow_1dim_range TYPE abap_bool DEFAULT abap_false EXPORTING - !e_column_start TYPE zexcel_cell_column_alpha - !e_column_end TYPE zexcel_cell_column_alpha - !e_row_start TYPE zexcel_cell_row - !e_row_end TYPE zexcel_cell_row - !e_sheet TYPE clike + !e_column_start TYPE zexcel_cell_column_alpha + !e_column_end TYPE zexcel_cell_column_alpha + !e_row_start TYPE zexcel_cell_row + !e_row_end TYPE zexcel_cell_row + !e_sheet TYPE clike RAISING zcx_excel . + CLASS-METHODS convert_columnrow2column_o_row + IMPORTING + !i_columnrow TYPE clike + EXPORTING + !e_column TYPE zexcel_cell_column_alpha + !e_row TYPE zexcel_cell_row . CLASS-METHODS date_to_excel_string IMPORTING !ip_value TYPE d @@ -570,21 +577,43 @@ CLASS ZCL_EXCEL_COMMON IMPLEMENTATION. REPLACE ALL OCCURRENCES OF '$' IN lv_range WITH ''. SPLIT lv_range AT ':' INTO lv_columnrow_start lv_columnrow_end. - convert_columnrow2column_a_row( EXPORTING - i_columnrow = lv_columnrow_start - IMPORTING - e_column = e_column_start - e_row = e_row_start ). - convert_columnrow2column_a_row( EXPORTING - i_columnrow = lv_columnrow_end - IMPORTING - e_column = e_column_end - e_row = e_row_end ). + IF i_allow_1dim_range = abap_true. + convert_columnrow2column_o_row( EXPORTING i_columnrow = lv_columnrow_start + IMPORTING e_column = e_column_start + e_row = e_row_start ). + convert_columnrow2column_o_row( EXPORTING i_columnrow = lv_columnrow_end + IMPORTING e_column = e_column_end + e_row = e_row_end ). + ELSE. + convert_columnrow2column_a_row( EXPORTING i_columnrow = lv_columnrow_start + IMPORTING e_column = e_column_start + e_row = e_row_start ). + convert_columnrow2column_a_row( EXPORTING i_columnrow = lv_columnrow_end + IMPORTING e_column = e_column_end + e_row = e_row_end ). + ENDIF. e_sheet = unescape_string( lv_sheet ). " Return in unescaped form ENDMETHOD. + METHOD convert_columnrow2column_o_row. + + DATA: row TYPE string. + DATA: columnrow TYPE string. + + CLEAR e_column. + + columnrow = i_columnrow. + + FIND REGEX '^(\D*)(\d*)$' IN columnrow SUBMATCHES e_column + row. + + e_row = row. + + ENDMETHOD. + + METHOD date_to_excel_string. DATA: lv_date_diff TYPE i. diff --git a/src/zcl_excel_common.clas.testclasses.abap b/src/zcl_excel_common.clas.testclasses.abap index af79da0..618bad0 100644 --- a/src/zcl_excel_common.clas.testclasses.abap +++ b/src/zcl_excel_common.clas.testclasses.abap @@ -842,6 +842,100 @@ CLASS lcl_excel_common_test IMPLEMENTATION. exp = '' msg = 'Conversion of range failed' level = if_aunit_constants=>critical ). + +********************************************************************** +* 1 Dimensional Ranges - Ros or Cols Only (eg Print Tiles) +* + lv_range = `$2:$7`. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range + i_allow_1dim_range = abap_false + IMPORTING e_column_start = lv_column_start + e_column_end = lv_column_end + e_row_start = lv_row_start + e_row_end = lv_row_end + e_sheet = lv_sheet ). + + cl_abap_unit_assert=>assert_equals( act = lv_column_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_column_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_row_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_row_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_sheet + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + +*** + lv_range = `$2:$7`. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range + i_allow_1dim_range = abap_true + IMPORTING e_column_start = lv_column_start + e_column_end = lv_column_end + e_row_start = lv_row_start + e_row_end = lv_row_end + e_sheet = lv_sheet ). + + cl_abap_unit_assert=>assert_equals( act = lv_column_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_column_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_row_start + exp = '2' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_row_end + exp = '7' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_sheet + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). +*** + lv_range = `Sheet3!$D:$I`. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range + i_allow_1dim_range = abap_true + IMPORTING e_column_start = lv_column_start + e_column_end = lv_column_end + e_row_start = lv_row_start + e_row_end = lv_row_end + e_sheet = lv_sheet ). + + cl_abap_unit_assert=>assert_equals( act = lv_column_start + exp = 'D' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_column_end + exp = 'I' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_row_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_row_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + cl_abap_unit_assert=>assert_equals( act = lv_sheet + exp = 'Sheet3' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). ENDMETHOD. "convert_range2column_a_row diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap index b4aab67..b8902cb 100644 --- a/src/zcl_excel_reader_2007.clas.abap +++ b/src/zcl_excel_reader_2007.clas.abap @@ -2081,6 +2081,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. *--------------------------------------------------------------------* WHEN zif_excel_sheet_printsettings=>gcv_print_title_name. lo_range = -worksheet->add_new_range( ). + lo_range->name = zif_excel_sheet_printsettings=>gcv_print_title_name. *--------------------------------------------------------------------* * This might be a temporary solution. Maybe ranges get be reworked * to support areas consisting of multiple rectangles @@ -2107,11 +2108,12 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. ENDIF. ENDIF. * 1st range - zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1 - IMPORTING e_column_start = lv_col_start_alpha - e_column_end = lv_col_end_alpha - e_row_start = lv_row_start - e_row_end = lv_row_end ). + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1 + i_allow_1dim_range = abap_true + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). IF lv_col_start_alpha IS NOT INITIAL. -worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha iv_columns_to = lv_col_end_alpha ). @@ -2122,11 +2124,12 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. ENDIF. * 2nd range - zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2 - IMPORTING e_column_start = lv_col_start_alpha - e_column_end = lv_col_end_alpha - e_row_start = lv_row_start - e_row_end = lv_row_end ). + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2 + i_allow_1dim_range = abap_true + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). IF lv_col_start_alpha IS NOT INITIAL. -worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha iv_columns_to = lv_col_end_alpha ).