ip_columnrow in SET_CELL and other methods (#930)

* get_cell, set_cell, set_area, set_merge

* Test classes + Fixes

* demo simple set_cell in zdemo_excel1

* rename the "normalize" methods + cleanup

* Demonstration programs and few fixes

* added "raising cx_static_check"

* zdemo_excel40 call methods with only IP_RANGE

Co-authored-by: sandraros <sandra.rossi@gmail.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Abo <andrea@borgia.bo.it>
This commit is contained in:
sandraros 2022-01-06 09:44:09 +01:00 committed by GitHub
parent 87b8291ea2
commit 6fcbc5c8a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 820 additions and 488 deletions

View File

@ -32,7 +32,7 @@ START-OF-SELECTION.
lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = lv_date ).
lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = lv_time ).
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'https://abap2xlsx.github.io/abap2xlsx' ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 4 ip_value = 'Click here to visit abap2xlsx homepage' ip_hyperlink = lo_hyperlink ).
lo_worksheet->set_cell( ip_columnrow = 'B4' ip_value = 'Click here to visit abap2xlsx homepage' ip_hyperlink = lo_hyperlink ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = '你好,世界' ).
lo_worksheet->set_cell( ip_column = 'C' ip_row = 6 ip_value = '(Chinese)' ).

View File

@ -56,12 +56,10 @@ START-OF-SELECTION.
lo_worksheet->set_merge( ip_row = 4 ip_column_start = 'B' ip_column_end = 'G' ).
" Test also if merge works when oher merged chells are empty
lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Tomato' ).
lo_worksheet->set_merge( ip_row = 6 ip_column_start = 'B' ip_column_end = 'G' ).
lo_worksheet->set_merge( ip_range = 'B6:G6' ip_value = 'Tomato' ).
" Test the patch provided by Victor Alekhin to merge cells in one column
lo_worksheet->set_cell( ip_row = 8 ip_column = 'B' ip_value = 'Merge cells also over multiple rows by Victor Alekhin' ).
lo_worksheet->set_merge( ip_row = 8 ip_column_start = 'B' ip_column_end = 'G' ip_row_to = 10 ).
lo_worksheet->set_merge( ip_range = 'B8:G10' ip_value = 'Merge cells also over multiple rows by Victor Alekhin' ).
" Test the patch provided by Alexander Budeyev with different column merges
lo_worksheet->set_cell( ip_row = 12 ip_column = 'B' ip_value = 'Merge cells with different merges by Alexander Budeyev' ).

View File

@ -127,8 +127,7 @@ START-OF-SELECTION.
IF <wa_files>-input = sheet_with_date_formats.
worksheet->get_cell(
EXPORTING
ip_column = 'A'
ip_row = 4
ip_columnrow = 'A4'
IMPORTING
ep_value = value
).

View File

@ -123,7 +123,7 @@ START-OF-SELECTION.
" Get active sheet
lo_worksheet = lo_excel->get_active_worksheet( ).
lo_worksheet->set_title( ip_title = 'Styles' ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ).
lo_worksheet->set_cell( ip_columnrow = 'B2' ip_value = 'Hello world' ).
lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Bold text' ip_style = lv_style_bold_guid ).
lo_worksheet->set_cell( ip_column = 'D' ip_row = 4 ip_value = 'Underlined text' ip_style = lv_style_underline_guid ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'Filled text' ip_style = lv_style_filled_guid ).
@ -133,7 +133,7 @@ START-OF-SELECTION.
" Fill the cell and apply one style
lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = 'Filled text' ip_style = lv_style_filled_guid ).
" Change the style
lo_worksheet->set_cell_style( ip_column = 'B' ip_row = 6 ip_style = lv_style_filled_green_guid ).
lo_worksheet->set_cell_style( ip_columnrow = 'B6' ip_style = lv_style_filled_green_guid ).
" Add Style to an empty cell to test Fix for Issue
"#44 Exception ZCX_EXCEL thrown when style is set for an empty cell
" https://code.sdn.sap.com/spaces/abap2xlsx/tickets/44-exception-zcx_excel-thrown-when-style-is-set-for-an-empty-cell
@ -142,8 +142,7 @@ START-OF-SELECTION.
* Demonstrate how to retroactivly change the cellstyle
*Filled text and underlinded text
lo_worksheet->change_cell_style( ip_column = 'B'
ip_row = 5
lo_worksheet->change_cell_style( ip_columnrow = 'B5'
ip_font_bold = abap_true
ip_font_italic = abap_true ).

View File

@ -31,10 +31,7 @@ START-OF-SELECTION.
* These marked cells will be used for repeatable rows/columns on printpages
*--------------------------------------------------------------------*
lo_worksheet->set_area(
ip_column_start = 1
ip_column_end = 20
ip_row = 1
ip_row_to = 100
ip_range = 'A1:T100'
ip_formula = 'CHAR(64+COLUMN())&TEXT(ROW(),"????????0")'
ip_area = lo_worksheet->c_area-whole ).
@ -42,19 +39,13 @@ START-OF-SELECTION.
lo_style_changer->set_fill_filltype( zcl_excel_style_fill=>c_fill_solid ).
lo_style_changer->set_fill_fgcolor_rgb( zcl_excel_style_color=>c_yellow ).
lo_worksheet->change_area_style(
ip_column_start = 1
ip_column_end = 20
ip_row = 1
ip_row_to = 3
ip_range = 'A1:T3'
ip_style_changer = lo_style_changer ).
lo_style_changer = zcl_excel_style_changer=>create( lo_excel ).
lo_style_changer->set_font_color_rgb( zcl_excel_style_color=>c_red ).
lo_worksheet->change_area_style(
ip_column_start = 1
ip_column_end = 4
ip_row = 1
ip_row_to = 100
ip_range = 'A1:D100'
ip_style_changer = lo_style_changer ).
*--------------------------------------------------------------------*

View File

@ -43,14 +43,19 @@ CLASS zcl_excel_common DEFINITION
!i_columnrow TYPE clike
EXPORTING
!e_column TYPE zexcel_cell_column_alpha
!e_row TYPE zexcel_cell_row .
!e_column_int TYPE zexcel_cell_column
!e_row TYPE zexcel_cell_row
RAISING
zcx_excel.
CLASS-METHODS convert_range2column_a_row
IMPORTING
!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_start_int TYPE zexcel_cell_column
!e_column_end TYPE zexcel_cell_column_alpha
!e_column_end_int TYPE zexcel_cell_column
!e_row_start TYPE zexcel_cell_row
!e_row_end TYPE zexcel_cell_row
!e_sheet TYPE clike
@ -493,6 +498,9 @@ CLASS zcl_excel_common IMPLEMENTATION.
FIND REGEX '^(\D+)(\d+)$' IN lv_columnrow SUBMATCHES e_column
pane_cell_row_a.
IF e_column_int IS SUPPLIED.
e_column_int = convert_column2int( ip_column = e_column ).
ENDIF.
e_row = pane_cell_row_a.
ENDMETHOD.
@ -589,6 +597,13 @@ CLASS zcl_excel_common IMPLEMENTATION.
e_row = e_row_end ).
ENDIF.
IF e_column_start_int IS SUPPLIED AND e_column_start IS NOT INITIAL.
e_column_start_int = convert_column2int( e_column_start ).
ENDIF.
IF e_column_end_int IS SUPPLIED AND e_column_end IS NOT INITIAL.
e_column_end_int = convert_column2int( e_column_end ).
ENDIF.
e_sheet = unescape_string( lv_sheet ). " Return in unescaped form
ENDMETHOD.

View File

@ -12,6 +12,15 @@ CLASS lcl_excel_common_test DEFINITION FOR TESTING
PRIVATE SECTION.
* ================
TYPES: BEGIN OF ty_convert_range2column_a_row,
column_start TYPE zexcel_cell_column_alpha,
column_start_int TYPE zexcel_cell_column,
column_end TYPE zexcel_cell_column_alpha,
column_end_int TYPE zexcel_cell_column,
row_start TYPE zexcel_cell_row,
row_end TYPE zexcel_cell_row,
sheet TYPE string,
END OF ty_convert_range2column_a_row.
DATA:
lx_excel TYPE REF TO zcx_excel,
ls_symsg_act LIKE sy, " actual messageinformation of exception
@ -24,9 +33,11 @@ CLASS lcl_excel_common_test DEFINITION FOR TESTING
METHODS: convert_column2alpha_last FOR TESTING.
METHODS: convert_column2alpha_oob FOR TESTING.
METHODS convert_column2int_basic FOR TESTING.
METHODS convert_column2int_from_int FOR TESTING RAISING cx_static_check.
METHODS convert_column2int_maxcol FOR TESTING.
METHODS convert_column2int_oob_empty FOR TESTING.
METHODS convert_column2int_oob_invalid FOR TESTING.
METHODS convert_columnrow2column_a_row FOR TESTING RAISING cx_static_check.
METHODS date_to_excel_string1 FOR TESTING RAISING cx_static_check.
METHODS date_to_excel_string2 FOR TESTING RAISING cx_static_check.
METHODS date_to_excel_string3 FOR TESTING RAISING cx_static_check.
@ -46,6 +57,13 @@ CLASS lcl_excel_common_test DEFINITION FOR TESTING
METHODS time_to_excel_string4 FOR TESTING RAISING cx_static_check.
METHODS: split_file FOR TESTING.
METHODS: convert_range2column_a_row FOR TESTING RAISING cx_static_check.
METHODS: assert_convert_range2column_a_
IMPORTING
i_range TYPE clike
i_allow_1dim_range TYPE abap_bool DEFAULT abap_false
is_exp TYPE ty_convert_range2column_a_row
RAISING
cx_static_check.
METHODS: describe_structure FOR TESTING.
METHODS macro_calculate_cell_distance
IMPORTING
@ -238,6 +256,17 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
ENDMETHOD. "convert_column2int_basic.
METHOD convert_column2int_from_int.
DATA ep_column TYPE zexcel_cell_column.
ep_column = zcl_excel_common=>convert_column2int( 5 ).
cl_abap_unit_assert=>assert_equals( act = ep_column exp = 5 ).
ENDMETHOD.
METHOD convert_column2int_maxcol.
* ==========================
* Test 2. Max column
@ -309,6 +338,27 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
ENDMETHOD. "convert_column2int_oob_invalid.
METHOD convert_columnrow2column_a_row.
DATA: column TYPE zexcel_cell_column_alpha,
column_int TYPE zexcel_cell_column,
row TYPE zexcel_cell_row.
zcl_excel_common=>convert_columnrow2column_a_row(
EXPORTING
i_columnrow = 'B6'
IMPORTING
e_column = column
e_column_int = column_int
e_row = row ).
cl_abap_unit_assert=>assert_equals( act = column exp = 'B' msg = 'Invalid column (alpha)' ).
cl_abap_unit_assert=>assert_equals( act = column_int exp = 2 msg = 'Invalid column (numeric)' ).
cl_abap_unit_assert=>assert_equals( act = row exp = 6 msg = 'Invalid row' ).
ENDMETHOD.
METHOD date_to_excel_string1.
DATA ep_value TYPE zexcel_cell_value.
@ -764,261 +814,147 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
ENDMETHOD. "split_file
METHOD convert_range2column_a_row.
DATA: lv_range TYPE string.
DATA: lv_column_start TYPE zexcel_cell_column_alpha,
lv_column_end TYPE zexcel_cell_column_alpha,
lv_row_start TYPE zexcel_cell_row,
lv_row_end TYPE zexcel_cell_row,
lv_sheet TYPE string.
DATA: lv_range TYPE string,
ls_exp TYPE ty_convert_range2column_a_row.
* a) input empty --> nothing to do
zcl_excel_common=>convert_range2column_a_row(
EXPORTING
i_range = lv_range
IMPORTING
e_column_start = lv_column_start " Cell Column Start
e_column_end = lv_column_end " Cell Column End
e_row_start = lv_row_start " Cell Row
e_row_end = lv_row_end " Cell Row
e_sheet = lv_sheet " Title
).
lv_range = ''.
CLEAR ls_exp.
assert_convert_range2column_a_( i_range = lv_range is_exp = ls_exp ).
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 ).
* b) sheetname existing - starts with ' example 'Sheet 1'!$B$6:$D$13
lv_range = `'Sheet 1'!$B$6:$D$13`.
zcl_excel_common=>convert_range2column_a_row(
EXPORTING
i_range = lv_range
IMPORTING
e_column_start = lv_column_start " Cell Column Start
e_column_end = lv_column_end " Cell Column End
e_row_start = lv_row_start " Cell Row
e_row_end = lv_row_end " Cell Row
e_sheet = lv_sheet " Title
).
cl_abap_unit_assert=>assert_equals(
act = lv_column_start
exp = 'B'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_column_end
exp = 'D'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_row_start
exp = '6'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_row_end
exp = '13'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_sheet
exp = 'Sheet 1'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
CLEAR ls_exp.
ls_exp-column_start = 'B'.
ls_exp-column_start_int = 2.
ls_exp-column_end = 'D'.
ls_exp-column_end_int = 4.
ls_exp-row_start = 6.
ls_exp-row_end = 13.
ls_exp-sheet = 'Sheet 1'.
assert_convert_range2column_a_( i_range = lv_range is_exp = ls_exp ).
* c) sheetname existing - does not start with ' example Sheet1!$B$6:$D$13
lv_range = `Sheet1!B6:$D$13`.
zcl_excel_common=>convert_range2column_a_row(
EXPORTING
i_range = lv_range
IMPORTING
e_column_start = lv_column_start " Cell Column Start
e_column_end = lv_column_end " Cell Column End
e_row_start = lv_row_start " Cell Row
e_row_end = lv_row_end " Cell Row
e_sheet = lv_sheet " Title
).
cl_abap_unit_assert=>assert_equals(
act = lv_column_start
exp = 'B'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_column_end
exp = 'D'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_row_start
exp = '6'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_row_end
exp = '13'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_sheet
exp = 'Sheet1'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
CLEAR ls_exp.
ls_exp-column_start = 'B'.
ls_exp-column_start_int = 2.
ls_exp-column_end = 'D'.
ls_exp-column_end_int = 4.
ls_exp-row_start = 6.
ls_exp-row_end = 13.
ls_exp-sheet = 'Sheet1'.
assert_convert_range2column_a_( i_range = lv_range is_exp = ls_exp ).
* d) no sheetname - just area example $B$6:$D$13
lv_range = `$B$6:D13`.
zcl_excel_common=>convert_range2column_a_row(
EXPORTING
i_range = lv_range
IMPORTING
e_column_start = lv_column_start " Cell Column Start
e_column_end = lv_column_end " Cell Column End
e_row_start = lv_row_start " Cell Row
e_row_end = lv_row_end " Cell Row
e_sheet = lv_sheet " Title
).
cl_abap_unit_assert=>assert_equals(
act = lv_column_start
exp = 'B'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_column_end
exp = 'D'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_row_start
exp = '6'
msg = 'Conversion of range failed'
level = if_aunit_constants=>critical ).
cl_abap_unit_assert=>assert_equals(
act = lv_row_end
exp = '13'
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 ).
CLEAR ls_exp.
ls_exp-column_start = 'B'.
ls_exp-column_start_int = 2.
ls_exp-column_end = 'D'.
ls_exp-column_end_int = 4.
ls_exp-row_start = 6.
ls_exp-row_end = 13.
assert_convert_range2column_a_( i_range = lv_range is_exp = ls_exp ).
**********************************************************************
* 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 ).
CLEAR ls_exp.
assert_convert_range2column_a_( i_range = lv_range i_allow_1dim_range = abap_false is_exp = ls_exp ).
***
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 ).
CLEAR ls_exp.
ls_exp-row_start = 2.
ls_exp-row_end = 7.
assert_convert_range2column_a_( i_range = lv_range i_allow_1dim_range = abap_true is_exp = ls_exp ).
***
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 ).
CLEAR ls_exp.
ls_exp-column_start = 'D'.
ls_exp-column_start_int = 4.
ls_exp-column_end = 'I'.
ls_exp-column_end_int = 9.
ls_exp-sheet = 'Sheet3'.
assert_convert_range2column_a_( i_range = lv_range i_allow_1dim_range = abap_true is_exp = ls_exp ).
ENDMETHOD. "convert_range2column_a_row
METHOD assert_convert_range2column_a_.
DATA: ls_act TYPE ty_convert_range2column_a_row,
lv_message TYPE string.
zcl_excel_common=>convert_range2column_a_row(
EXPORTING
i_range = i_range
i_allow_1dim_range = i_allow_1dim_range
IMPORTING
e_column_start = ls_act-column_start
e_column_start_int = ls_act-column_start_int
e_column_end = ls_act-column_end
e_column_end_int = ls_act-column_end_int
e_row_start = ls_act-row_start
e_row_end = ls_act-row_end
e_sheet = ls_act-sheet ).
lv_message = `Invalid column start (alpha) for ` && i_range.
cl_abap_unit_assert=>assert_equals(
act = ls_act-column_start
exp = is_exp-column_start
msg = lv_message ).
lv_message = `Invalid column start (numeric) for ` && i_range.
cl_abap_unit_assert=>assert_equals(
act = ls_act-column_start_int
exp = is_exp-column_start_int
msg = lv_message ).
lv_message = `Invalid column end (alpha) for ` && i_range.
cl_abap_unit_assert=>assert_equals(
act = ls_act-column_end
exp = is_exp-column_end
msg = lv_message ).
lv_message = `Invalid column end (numeric) for ` && i_range.
cl_abap_unit_assert=>assert_equals(
act = ls_act-column_end_int
exp = is_exp-column_end_int
msg = lv_message ).
lv_message = `Invalid row start for ` && i_range.
cl_abap_unit_assert=>assert_equals(
act = ls_act-row_start
exp = is_exp-row_start
msg = lv_message ).
lv_message = `Invalid row end for ` && i_range.
cl_abap_unit_assert=>assert_equals(
act = ls_act-row_end
exp = is_exp-row_end
msg = lv_message ).
lv_message = `Invalid sheet for ` && i_range.
cl_abap_unit_assert=>assert_equals(
act = ls_act-sheet
exp = is_exp-sheet
msg = lv_message ).
ENDMETHOD.
METHOD describe_structure.
DATA: ls_test TYPE zexcel_pane.
DATA: lo_structdescr TYPE REF TO cl_abap_structdescr.

View File

@ -181,17 +181,19 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS change_area_style
IMPORTING
!ip_column_start TYPE simple
!ip_range TYPE csequence OPTIONAL
!ip_column_start TYPE simple OPTIONAL
!ip_column_end TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_row_to TYPE zexcel_cell_row OPTIONAL
!ip_style_changer TYPE REF TO zif_excel_style_changer
RAISING
zcx_excel .
METHODS change_cell_style
IMPORTING
!ip_column TYPE simple
!ip_row TYPE zexcel_cell_row
!ip_columnrow TYPE csequence OPTIONAL
!ip_column TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_complete TYPE zexcel_s_cstyle_complete OPTIONAL
!ip_xcomplete TYPE zexcel_s_cstylex_complete OPTIONAL
!ip_font TYPE zexcel_s_cstyle_font OPTIONAL
@ -333,8 +335,9 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS get_cell
IMPORTING
!ip_column TYPE simple
!ip_row TYPE zexcel_cell_row
!ip_columnrow TYPE csequence OPTIONAL
!ip_column TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row OPTIONAL
EXPORTING
!ep_value TYPE zexcel_cell_value
!ep_rc TYPE sysubrc
@ -483,8 +486,9 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS set_cell
IMPORTING
!ip_column TYPE simple
!ip_row TYPE zexcel_cell_row
!ip_columnrow TYPE csequence OPTIONAL
!ip_column TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_value TYPE simple OPTIONAL
!ip_formula TYPE zexcel_cell_formula OPTIONAL
!ip_style TYPE zexcel_cell_style OPTIONAL
@ -497,15 +501,17 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS set_cell_formula
IMPORTING
!ip_column TYPE simple
!ip_row TYPE zexcel_cell_row
!ip_columnrow TYPE csequence OPTIONAL
!ip_column TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_formula TYPE zexcel_cell_formula
RAISING
zcx_excel .
METHODS set_cell_style
IMPORTING
!ip_column TYPE simple
!ip_row TYPE zexcel_cell_row
!ip_columnrow TYPE csequence OPTIONAL
!ip_column TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_style TYPE zexcel_cell_style
RAISING
zcx_excel .
@ -526,10 +532,11 @@ CLASS zcl_excel_worksheet DEFINITION
!it_ignored_errors TYPE mty_th_ignored_errors .
METHODS set_merge
IMPORTING
!ip_column_start TYPE simple DEFAULT zcl_excel_common=>c_excel_sheet_min_col
!ip_column_end TYPE simple DEFAULT zcl_excel_common=>c_excel_sheet_max_col
!ip_row TYPE zexcel_cell_row DEFAULT zcl_excel_common=>c_excel_sheet_min_row
!ip_row_to TYPE zexcel_cell_row DEFAULT zcl_excel_common=>c_excel_sheet_max_row
!ip_range TYPE csequence OPTIONAL
!ip_column_start TYPE simple OPTIONAL
!ip_column_end TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_row_to TYPE zexcel_cell_row OPTIONAL
!ip_style TYPE zexcel_cell_style OPTIONAL "added parameter
!ip_value TYPE simple OPTIONAL "added parameter
!ip_formula TYPE zexcel_cell_formula OPTIONAL "added parameter
@ -589,6 +596,7 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS set_merge_style
IMPORTING
!ip_range TYPE csequence OPTIONAL
!ip_column_start TYPE simple OPTIONAL
!ip_column_end TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row OPTIONAL
@ -598,9 +606,10 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS set_area_formula
IMPORTING
!ip_column_start TYPE simple
!ip_range TYPE csequence OPTIONAL
!ip_column_start TYPE simple OPTIONAL
!ip_column_end TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_row_to TYPE zexcel_cell_row OPTIONAL
!ip_formula TYPE zexcel_cell_formula
!ip_merge TYPE abap_bool OPTIONAL
@ -609,9 +618,10 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS set_area_style
IMPORTING
!ip_column_start TYPE simple
!ip_range TYPE csequence OPTIONAL
!ip_column_start TYPE simple OPTIONAL
!ip_column_end TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_row_to TYPE zexcel_cell_row OPTIONAL
!ip_style TYPE zexcel_cell_style
!ip_merge TYPE abap_bool OPTIONAL
@ -619,9 +629,10 @@ CLASS zcl_excel_worksheet DEFINITION
zcx_excel .
METHODS set_area
IMPORTING
!ip_column_start TYPE simple
!ip_range TYPE csequence OPTIONAL
!ip_column_start TYPE simple OPTIONAL
!ip_column_end TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_row_to TYPE zexcel_cell_row OPTIONAL
!ip_value TYPE simple OPTIONAL
!ip_formula TYPE zexcel_cell_formula OPTIONAL
@ -638,9 +649,10 @@ CLASS zcl_excel_worksheet DEFINITION
VALUE(rt_drawings) TYPE zexcel_t_drawings .
METHODS set_area_hyperlink
IMPORTING
!ip_column_start TYPE simple
!ip_range TYPE csequence OPTIONAL
!ip_column_start TYPE simple OPTIONAL
!ip_column_end TYPE simple OPTIONAL
!ip_row TYPE zexcel_cell_row
!ip_row TYPE zexcel_cell_row OPTIONAL
!ip_row_to TYPE zexcel_cell_row OPTIONAL
!ip_url TYPE string
!ip_is_internal TYPE abap_bool
@ -730,6 +742,30 @@ CLASS zcl_excel_worksheet DEFINITION
CHANGING
cs_complete_style_border TYPE zexcel_s_cstyle_border
cs_complete_stylex_border TYPE zexcel_s_cstylex_border.
METHODS normalize_columnrow_parameter
IMPORTING
ip_columnrow TYPE csequence OPTIONAL
ip_column TYPE simple OPTIONAL
ip_row TYPE zexcel_cell_row OPTIONAL
EXPORTING
ep_column TYPE zexcel_cell_column
ep_row TYPE zexcel_cell_row
RAISING
zcx_excel.
METHODS normalize_range_parameter
IMPORTING
ip_range TYPE csequence OPTIONAL
ip_column_start TYPE simple OPTIONAL
ip_column_end TYPE simple OPTIONAL
ip_row TYPE zexcel_cell_row OPTIONAL
ip_row_to TYPE zexcel_cell_row OPTIONAL
EXPORTING
ep_column_start TYPE zexcel_cell_column
ep_column_end TYPE zexcel_cell_column
ep_row TYPE zexcel_cell_row
ep_row_to TYPE zexcel_cell_row
RAISING
zcx_excel.
METHODS print_title_set_range .
METHODS update_dimension_range
RAISING
@ -1402,45 +1438,20 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
DATA: lv_row TYPE zexcel_cell_row,
lv_row_start TYPE zexcel_cell_row,
lv_row_to TYPE zexcel_cell_row,
lv_column_int TYPE zexcel_cell_column_alpha,
lv_column TYPE zexcel_cell_column_alpha,
lv_column_start TYPE zexcel_cell_column_alpha,
lv_column_end TYPE zexcel_cell_column_alpha,
lv_column_start_int TYPE zexcel_cell_column_alpha,
lv_column_end_int TYPE zexcel_cell_column_alpha.
lv_column_int TYPE zexcel_cell_column,
lv_column_start_int TYPE zexcel_cell_column,
lv_column_end_int TYPE zexcel_cell_column.
lv_row_to = ip_row_to.
lv_row = ip_row.
IF lv_row_to IS INITIAL OR ip_row_to IS NOT SUPPLIED.
lv_row_to = lv_row.
ENDIF.
lv_column_start = ip_column_start.
lv_column_end = ip_column_end.
IF lv_column_end IS INITIAL OR ip_column_end IS NOT SUPPLIED.
lv_column_end = lv_column_start.
ENDIF.
lv_column_start_int = zcl_excel_common=>convert_column2int( lv_column_start ).
lv_column_end_int = zcl_excel_common=>convert_column2int( lv_column_end ).
IF lv_column_start_int > lv_column_end_int OR lv_row > lv_row_to.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = 'Wrong Merging Parameters'.
ENDIF.
normalize_range_parameter( EXPORTING ip_range = ip_range
ip_column_start = ip_column_start ip_column_end = ip_column_end
ip_row = ip_row ip_row_to = ip_row_to
IMPORTING ep_column_start = lv_column_start_int ep_column_end = lv_column_end_int
ep_row = lv_row_start ep_row_to = lv_row_to ).
lv_column_int = lv_column_start_int.
lv_row_start = lv_row.
WHILE lv_column_int <= lv_column_end_int.
lv_column = zcl_excel_common=>convert_column2alpha( lv_column_int ).
lv_row = lv_row_start.
WHILE lv_row <= lv_row_to.
ip_style_changer->apply( ip_worksheet = me
@ -1458,8 +1469,15 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD change_cell_style.
DATA: changer TYPE REF TO zif_excel_style_changer.
DATA: changer TYPE REF TO zif_excel_style_changer,
column TYPE zexcel_cell_column,
row TYPE zexcel_cell_row.
normalize_columnrow_parameter( EXPORTING ip_columnrow = ip_columnrow
ip_column = ip_column
ip_row = ip_row
IMPORTING ep_column = column
ep_row = row ).
changer = zcl_excel_style_changer=>create( excel = excel ).
@ -1822,8 +1840,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ep_guid = changer->apply( ip_worksheet = me
ip_column = ip_column
ip_row = ip_row ).
ip_column = column
ip_row = row ).
ENDMETHOD. "CHANGE_CELL_STYLE
@ -2091,11 +2109,16 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD get_cell.
DATA: lv_column TYPE zexcel_cell_column,
lv_row TYPE zexcel_cell_row,
ls_sheet_content TYPE zexcel_s_cell_data.
lv_column = zcl_excel_common=>convert_column2int( ip_column ).
normalize_columnrow_parameter( EXPORTING ip_columnrow = ip_columnrow
ip_column = ip_column
ip_row = ip_row
IMPORTING ep_column = lv_column
ep_row = lv_row ).
READ TABLE sheet_content INTO ls_sheet_content WITH TABLE KEY cell_row = ip_row
READ TABLE sheet_content INTO ls_sheet_content WITH TABLE KEY cell_row = lv_row
cell_column = lv_column.
ep_rc = sy-subrc.
@ -2867,6 +2890,86 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDMETHOD.
METHOD normalize_columnrow_parameter.
IF ( ( ip_column IS NOT INITIAL OR ip_row IS NOT INITIAL ) AND ip_columnrow IS NOT INITIAL )
OR ( ip_column IS INITIAL AND ip_row IS INITIAL AND ip_columnrow IS INITIAL ).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = 'Please provide either row and column, or cell reference'.
ENDIF.
IF ip_columnrow IS NOT INITIAL.
zcl_excel_common=>convert_columnrow2column_a_row(
EXPORTING
i_columnrow = ip_columnrow
IMPORTING
e_column_int = ep_column
e_row = ep_row ).
ELSE.
ep_column = zcl_excel_common=>convert_column2int( ip_column ).
ep_row = ip_row.
ENDIF.
ENDMETHOD.
METHOD normalize_range_parameter.
DATA: lv_errormessage TYPE string.
IF ( ( ip_column_start IS NOT INITIAL OR ip_column_end IS NOT INITIAL
OR ip_row IS NOT INITIAL OR ip_row_to IS NOT INITIAL ) AND ip_range IS NOT INITIAL )
OR ( ip_column_start IS INITIAL AND ip_column_end IS INITIAL
AND ip_row IS INITIAL AND ip_row_to IS INITIAL AND ip_range IS INITIAL ).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = 'Please provide either row and column interval, or range reference'.
ENDIF.
IF ip_range IS NOT INITIAL.
zcl_excel_common=>convert_range2column_a_row(
EXPORTING
i_range = ip_range
IMPORTING
e_column_start_int = ep_column_start
e_column_end_int = ep_column_end
e_row_start = ep_row
e_row_end = ep_row_to ).
ELSE.
IF ip_column_start IS INITIAL.
ep_column_start = zcl_excel_common=>c_excel_sheet_min_col.
ELSE.
ep_column_start = zcl_excel_common=>convert_column2int( ip_column_start ).
ENDIF.
IF ip_column_end IS INITIAL.
ep_column_end = ep_column_start.
ELSE.
ep_column_end = zcl_excel_common=>convert_column2int( ip_column_end ).
ENDIF.
ep_row = ip_row.
IF ep_row IS INITIAL.
ep_row = zcl_excel_common=>c_excel_sheet_min_row.
ENDIF.
ep_row_to = ip_row_to.
IF ep_row_to IS INITIAL.
ep_row_to = ep_row.
ENDIF.
ENDIF.
IF ep_row > ep_row_to.
lv_errormessage = 'First row larger than last row'(405).
zcx_excel=>raise_text( lv_errormessage ).
ENDIF.
IF ep_column_start > ep_column_end.
lv_errormessage = 'First column larger than last column'(406).
zcx_excel=>raise_text( lv_errormessage ).
ENDIF.
ENDMETHOD.
METHOD print_title_set_range.
*--------------------------------------------------------------------*
* issue#235 - repeat rows/columns
@ -2971,37 +3074,16 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
DATA: lv_row TYPE zexcel_cell_row,
lv_row_start TYPE zexcel_cell_row,
lv_row_end TYPE zexcel_cell_row,
lv_column_int TYPE zexcel_cell_column_alpha,
lv_column_int TYPE zexcel_cell_column,
lv_column TYPE zexcel_cell_column_alpha,
lv_column_start TYPE zexcel_cell_column_alpha,
lv_column_end TYPE zexcel_cell_column_alpha,
lv_column_start_int TYPE zexcel_cell_column_alpha,
lv_column_end_int TYPE zexcel_cell_column_alpha.
lv_column_start_int TYPE zexcel_cell_column,
lv_column_end_int TYPE zexcel_cell_column.
lv_row_end = ip_row_to.
lv_row = ip_row.
IF lv_row_end IS INITIAL OR ip_row_to IS NOT SUPPLIED.
lv_row_end = lv_row.
ENDIF.
lv_column_start = ip_column_start.
lv_column_end = ip_column_end.
IF lv_column_end IS INITIAL OR ip_column_end IS NOT SUPPLIED.
lv_column_end = lv_column_start.
ENDIF.
lv_column_start_int = zcl_excel_common=>convert_column2int( lv_column_start ).
lv_column_end_int = zcl_excel_common=>convert_column2int( lv_column_end ).
IF lv_column_start_int > lv_column_end_int OR lv_row > lv_row_end.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = 'Wrong Merging Parameters'.
ENDIF.
normalize_range_parameter( EXPORTING ip_range = ip_range
ip_column_start = ip_column_start ip_column_end = ip_column_end
ip_row = ip_row ip_row_to = ip_row_to
IMPORTING ep_column_start = lv_column_start_int ep_column_end = lv_column_end_int
ep_row = lv_row_start ep_row_to = lv_row_end ).
" IP_AREA has been added to maintain ascending compatibility (see discussion in PR 869)
IF ip_merge = abap_true OR ip_area = c_area-topleft.
@ -3009,8 +3091,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
IF ip_data_type IS SUPPLIED OR
ip_abap_type IS SUPPLIED.
me->set_cell( ip_column = lv_column_start
ip_row = lv_row
me->set_cell( ip_column = lv_column_start_int
ip_row = lv_row_start
ip_value = ip_value
ip_formula = ip_formula
ip_style = ip_style
@ -3020,8 +3102,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ELSE.
me->set_cell( ip_column = lv_column_start
ip_row = lv_row
me->set_cell( ip_column = lv_column_start_int
ip_row = lv_row_start
ip_value = ip_value
ip_formula = ip_formula
ip_style = ip_style
@ -3032,7 +3114,6 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ELSE.
lv_column_int = lv_column_start_int.
lv_row_start = lv_row.
WHILE lv_column_int <= lv_column_end_int.
lv_column = zcl_excel_common=>convert_column2alpha( lv_column_int ).
@ -3073,18 +3154,18 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
IF ip_style IS SUPPLIED.
me->set_area_style( ip_column_start = lv_column_start
ip_column_end = lv_column_end
ip_row = lv_row
me->set_area_style( ip_column_start = lv_column_start_int
ip_column_end = lv_column_end_int
ip_row = lv_row_start
ip_row_to = lv_row_end
ip_style = ip_style ).
ENDIF.
IF ip_merge IS SUPPLIED AND ip_merge = abap_true.
me->set_merge( ip_column_start = lv_column_start
ip_column_end = lv_column_end
ip_row = lv_row
me->set_merge( ip_column_start = lv_column_start_int
ip_column_end = lv_column_end_int
ip_row = lv_row_start
ip_row_to = lv_row_end ).
ENDIF.
@ -3097,41 +3178,25 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ld_row_start TYPE zexcel_cell_row,
ld_row_end TYPE zexcel_cell_row,
ld_column TYPE zexcel_cell_column_alpha,
ld_column_end TYPE zexcel_cell_column_alpha,
ld_column_int TYPE zexcel_cell_column_alpha,
ld_column_end_int TYPE zexcel_cell_column_alpha.
ld_column_int TYPE zexcel_cell_column,
ld_column_start_int TYPE zexcel_cell_column,
ld_column_end_int TYPE zexcel_cell_column.
ld_row_end = ip_row_to.
ld_row = ip_row.
IF ld_row_end IS INITIAL OR ip_row_to IS NOT SUPPLIED.
ld_row_end = ld_row.
ENDIF.
ld_column = ip_column_start.
ld_column_end = ip_column_end.
IF ld_column_end IS INITIAL OR ip_column_end IS NOT SUPPLIED.
ld_column_end = ld_column.
ENDIF.
ld_column_int = zcl_excel_common=>convert_column2int( ld_column ).
ld_column_end_int = zcl_excel_common=>convert_column2int( ld_column_end ).
IF ld_column_int > ld_column_end_int OR ld_row > ld_row_end.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = 'Wrong Merging Parameters'.
ENDIF.
normalize_range_parameter( EXPORTING ip_range = ip_range
ip_column_start = ip_column_start ip_column_end = ip_column_end
ip_row = ip_row ip_row_to = ip_row_to
IMPORTING ep_column_start = ld_column_start_int ep_column_end = ld_column_end_int
ep_row = ld_row_start ep_row_to = ld_row_end ).
" IP_AREA has been added to maintain ascending compatibility (see discussion in PR 869)
IF ip_merge = abap_true OR ip_area = c_area-topleft.
me->set_cell_formula( ip_column = ld_column ip_row = ld_row
me->set_cell_formula( ip_column = ld_column_start_int ip_row = ld_row_start
ip_formula = ip_formula ).
ELSE.
ld_row_start = ld_row.
ld_column_int = ld_column_start_int.
WHILE ld_column_int <= ld_column_end_int.
ld_column = zcl_excel_common=>convert_column2alpha( ld_column_int ).
@ -3150,8 +3215,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDIF.
IF ip_merge IS SUPPLIED AND ip_merge = abap_true.
me->set_merge( ip_column_start = ld_column ip_row = ld_row
ip_column_end = ld_column_end ip_row_to = ld_row_end ).
me->set_merge( ip_column_start = ld_column_start_int ip_row = ld_row_start
ip_column_end = ld_column_end_int ip_row_to = ld_row_end ).
ENDIF.
ENDMETHOD. "set_area_formula
@ -3159,32 +3224,30 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD set_area_hyperlink.
DATA: ld_row_start TYPE zexcel_cell_row,
ld_row_end TYPE zexcel_cell_row,
ld_column_int TYPE zexcel_cell_column,
ld_column_start_int TYPE zexcel_cell_column,
ld_column_end_int TYPE zexcel_cell_column,
ld_current_column TYPE zexcel_cell_column_alpha,
ld_current_row TYPE zexcel_cell_row,
ld_value TYPE string.
DATA: lv_column TYPE zexcel_cell_column,
lo_hyperlink TYPE REF TO zcl_excel_hyperlink.
ld_value TYPE string,
ld_formula TYPE string.
DATA: lo_hyperlink TYPE REF TO zcl_excel_hyperlink.
ld_row_end = ip_row_to.
ld_row_start = ip_row.
IF ld_row_end IS INITIAL OR ip_row_to IS NOT SUPPLIED.
ld_row_end = ld_row_start.
ENDIF.
ld_column_start_int = zcl_excel_common=>convert_column2int( ip_column_start ).
ld_column_end_int = zcl_excel_common=>convert_column2int( ip_column_end ).
IF ld_column_end_int IS INITIAL OR ip_column_end IS NOT SUPPLIED.
ld_column_end_int = ld_column_start_int.
ENDIF.
normalize_range_parameter( EXPORTING ip_range = ip_range
ip_column_start = ip_column_start ip_column_end = ip_column_end
ip_row = ip_row ip_row_to = ip_row_to
IMPORTING ep_column_start = ld_column_start_int ep_column_end = ld_column_end_int
ep_row = ld_row_start ep_row_to = ld_row_end ).
WHILE ld_column_start_int <= ld_column_end_int.
ld_current_column = zcl_excel_common=>convert_column2alpha( ld_column_start_int ).
ld_column_int = ld_column_start_int.
WHILE ld_column_int <= ld_column_end_int.
ld_current_column = zcl_excel_common=>convert_column2alpha( ld_column_int ).
ld_current_row = ld_row_start.
WHILE ld_current_row <= ld_row_end.
me->get_cell( EXPORTING ip_column = ld_current_column ip_row = ld_current_row
IMPORTING ep_value = ld_value ).
IMPORTING ep_value = ld_value
ep_formula = ld_formula ).
IF ip_is_internal = abap_true.
lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = ip_url ).
@ -3192,11 +3255,11 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = ip_url ).
ENDIF.
me->set_cell( ip_column = ld_current_column ip_row = ld_current_row ip_value = ld_value ip_hyperlink = lo_hyperlink ).
me->set_cell( ip_column = ld_current_column ip_row = ld_current_row ip_value = ld_value ip_formula = ld_formula ip_hyperlink = lo_hyperlink ).
ADD 1 TO ld_current_row.
ENDWHILE.
ADD 1 TO ld_column_start_int.
ADD 1 TO ld_column_int.
ENDWHILE.
ENDMETHOD. "SET_AREA_HYPERLINK
@ -3205,35 +3268,32 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD set_area_style.
DATA: ld_row_start TYPE zexcel_cell_row,
ld_row_end TYPE zexcel_cell_row,
ld_column_int TYPE zexcel_cell_column,
ld_column_start_int TYPE zexcel_cell_column,
ld_column_end_int TYPE zexcel_cell_column,
ld_current_column TYPE zexcel_cell_column_alpha,
ld_current_row TYPE zexcel_cell_row.
ld_row_end = ip_row_to.
ld_row_start = ip_row.
IF ld_row_end IS INITIAL OR ip_row_to IS NOT SUPPLIED.
ld_row_end = ld_row_start.
ENDIF.
ld_column_start_int = zcl_excel_common=>convert_column2int( ip_column_start ).
ld_column_end_int = zcl_excel_common=>convert_column2int( ip_column_end ).
IF ld_column_end_int IS INITIAL OR ip_column_end IS NOT SUPPLIED.
ld_column_end_int = ld_column_start_int.
ENDIF.
normalize_range_parameter( EXPORTING ip_range = ip_range
ip_column_start = ip_column_start ip_column_end = ip_column_end
ip_row = ip_row ip_row_to = ip_row_to
IMPORTING ep_column_start = ld_column_start_int ep_column_end = ld_column_end_int
ep_row = ld_row_start ep_row_to = ld_row_end ).
WHILE ld_column_start_int <= ld_column_end_int.
ld_current_column = zcl_excel_common=>convert_column2alpha( ld_column_start_int ).
ld_column_int = ld_column_start_int.
WHILE ld_column_int <= ld_column_end_int.
ld_current_column = zcl_excel_common=>convert_column2alpha( ld_column_int ).
ld_current_row = ld_row_start.
WHILE ld_current_row <= ld_row_end.
me->set_cell_style( ip_row = ld_current_row ip_column = ld_current_column
ip_style = ip_style ).
ADD 1 TO ld_current_row.
ENDWHILE.
ADD 1 TO ld_column_start_int.
ADD 1 TO ld_column_int.
ENDWHILE.
IF ip_merge IS SUPPLIED AND ip_merge = abap_true.
me->set_merge( ip_column_start = ip_column_start ip_row = ld_row_start
ip_column_end = ld_current_column ip_row_to = ld_row_end ).
me->set_merge( ip_column_start = ld_column_start_int ip_row = ld_row_start
ip_column_end = ld_column_end_int ip_row_to = ld_row_end ).
ENDIF.
ENDMETHOD. "SET_AREA_STYLE
@ -3242,6 +3302,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
DATA: lv_column TYPE zexcel_cell_column,
ls_sheet_content TYPE zexcel_s_cell_data,
lv_row TYPE zexcel_cell_row,
lv_row_alpha TYPE string,
lv_col_alpha TYPE zexcel_cell_column_alpha,
lv_value TYPE zexcel_cell_value,
@ -3268,18 +3329,23 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
zcx_excel=>raise_text( 'Please provide the value or formula' ).
ENDIF.
normalize_columnrow_parameter( EXPORTING ip_columnrow = ip_columnrow
ip_column = ip_column
ip_row = ip_row
IMPORTING ep_column = lv_column
ep_row = lv_row ).
* Begin of change issue #152 - don't touch exisiting style if only value is passed
lv_column = zcl_excel_common=>convert_column2int( ip_column ).
IF ip_column_formula_id <> 0.
check_cell_column_formula(
it_column_formulas = column_formulas
ip_column_formula_id = ip_column_formula_id
ip_formula = ip_formula
ip_value = ip_value
ip_row = ip_row
ip_row = lv_row
ip_column = lv_column ).
ENDIF.
READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH TABLE KEY cell_row = ip_row " Changed to access via table key , Stefan Schmöcker, 2013-08-03
READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH TABLE KEY cell_row = lv_row " Changed to access via table key , Stefan Schmöcker, 2013-08-03
cell_column = lv_column.
IF sy-subrc = 0.
IF ip_style IS INITIAL.
@ -3393,8 +3459,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDIF.
IF ip_hyperlink IS BOUND.
ip_hyperlink->set_cell_reference( ip_column = ip_column
ip_row = ip_row ).
ip_hyperlink->set_cell_reference( ip_column = lv_column
ip_row = lv_row ).
me->hyperlinks->add( ip_hyperlink ).
ENDIF.
@ -3420,16 +3486,16 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
<fs_sheet_content>-cell_style = lv_style_guid.
<fs_sheet_content>-data_type = lv_data_type.
ELSE.
ls_sheet_content-cell_row = ip_row.
ls_sheet_content-cell_row = lv_row.
ls_sheet_content-cell_column = lv_column.
ls_sheet_content-cell_value = lv_value.
ls_sheet_content-cell_formula = ip_formula.
ls_sheet_content-column_formula_id = ip_column_formula_id.
ls_sheet_content-cell_style = lv_style_guid.
ls_sheet_content-data_type = lv_data_type.
lv_row_alpha = ip_row.
lv_row_alpha = lv_row.
CONDENSE lv_row_alpha NO-GAPS. "ins #152 - replaced 2 shifts - should be faster
lv_col_alpha = zcl_excel_common=>convert_column2alpha( ip_column ). " issue #155 - less restrictive typing for ip_column
lv_col_alpha = zcl_excel_common=>convert_column2alpha( lv_column ). " issue #155 - less restrictive typing for ip_column
CONCATENATE lv_col_alpha lv_row_alpha INTO ls_sheet_content-cell_coords. " issue #155 - less restrictive typing for ip_column
INSERT ls_sheet_content INTO TABLE sheet_content ASSIGNING <fs_sheet_content>. "ins #152 - Now <fs_sheet_content> always holds the data
@ -3461,8 +3527,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ELSE.
lo_format_code_datetime = stylemapping-complete_style-number_format-format_code.
ENDIF.
me->change_cell_style( ip_column = ip_column
ip_row = ip_row
me->change_cell_style( ip_column = lv_column
ip_row = lv_row
ip_number_format_format_code = lo_format_code_datetime ).
WHEN cl_abap_typedescr=>typekind_time.
@ -3476,8 +3542,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ELSE.
lo_format_code_datetime = stylemapping-complete_style-number_format-format_code.
ENDIF.
me->change_cell_style( ip_column = ip_column
ip_row = ip_row
me->change_cell_style( ip_column = lv_column
ip_row = lv_row
ip_number_format_format_code = lo_format_code_datetime ).
ENDCASE.
@ -3486,8 +3552,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
* Fix issue #162
lv_value = ip_value.
IF lv_value CS cl_abap_char_utilities=>cr_lf.
me->change_cell_style( ip_column = ip_column
ip_row = ip_row
me->change_cell_style( ip_column = lv_column
ip_row = lv_row
ip_alignment_wraptext = abap_true ).
ENDIF.
* End of Fix issue #162
@ -3498,6 +3564,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD set_cell_formula.
DATA:
lv_column TYPE zexcel_cell_column,
lv_row TYPE zexcel_cell_row,
ls_sheet_content LIKE LINE OF me->sheet_content.
FIELD-SYMBOLS:
@ -3506,12 +3573,17 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
*--------------------------------------------------------------------*
* Get cell to set formula into
*--------------------------------------------------------------------*
lv_column = zcl_excel_common=>convert_column2int( ip_column ).
READ TABLE me->sheet_content ASSIGNING <sheet_content> WITH TABLE KEY cell_row = ip_row
normalize_columnrow_parameter( EXPORTING ip_columnrow = ip_columnrow
ip_column = ip_column
ip_row = ip_row
IMPORTING ep_column = lv_column
ep_row = lv_row ).
READ TABLE me->sheet_content ASSIGNING <sheet_content> WITH TABLE KEY cell_row = lv_row
cell_column = lv_column.
IF sy-subrc <> 0. " Create new entry in sheet_content if necessary
CHECK ip_formula IS NOT INITIAL. " only create new entry in sheet_content when a formula is passed
ls_sheet_content-cell_row = ip_row.
ls_sheet_content-cell_row = lv_row.
ls_sheet_content-cell_column = lv_column.
INSERT ls_sheet_content INTO TABLE me->sheet_content ASSIGNING <sheet_content>.
ENDIF.
@ -3528,15 +3600,20 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD set_cell_style.
DATA: lv_column TYPE zexcel_cell_column,
lv_row TYPE zexcel_cell_row,
lv_style_guid TYPE zexcel_cell_style.
FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data.
lv_style_guid = ip_style.
lv_column = zcl_excel_common=>convert_column2int( ip_column ).
normalize_columnrow_parameter( EXPORTING ip_columnrow = ip_columnrow
ip_column = ip_column
ip_row = ip_row
IMPORTING ep_column = lv_column
ep_row = lv_row ).
READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH KEY cell_row = ip_row
READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH KEY cell_row = lv_row
cell_column = lv_column.
IF sy-subrc EQ 0.
@ -3594,53 +3671,44 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD set_merge.
DATA: ls_merge TYPE mty_merge,
lv_column_start TYPE zexcel_cell_column,
lv_column_end TYPE zexcel_cell_column,
lv_row TYPE zexcel_cell_row,
lv_row_to TYPE zexcel_cell_row,
lv_errormessage TYPE string.
...
"just after variables definition
normalize_range_parameter( EXPORTING ip_range = ip_range
ip_column_start = ip_column_start ip_column_end = ip_column_end
ip_row = ip_row ip_row_to = ip_row_to
IMPORTING ep_column_start = lv_column_start ep_column_end = lv_column_end
ep_row = lv_row ep_row_to = lv_row_to ).
IF ip_value IS SUPPLIED OR ip_formula IS SUPPLIED.
" if there is a value or formula set the value to the top-left cell
"maybe it is necessary to support other paramters for set_cell
IF ip_value IS SUPPLIED.
me->set_cell( ip_row = ip_row ip_column = ip_column_start
me->set_cell( ip_row = lv_row ip_column = lv_column_start
ip_value = ip_value ).
ENDIF.
IF ip_formula IS SUPPLIED.
me->set_cell( ip_row = ip_row ip_column = ip_column_start
me->set_cell( ip_row = lv_row ip_column = lv_column_start
ip_value = ip_formula ).
ENDIF.
ENDIF.
"call to set_merge_style to apply the style to all cells at the matrix
IF ip_style IS SUPPLIED.
me->set_merge_style( ip_row = ip_row ip_column_start = ip_column_start
ip_row_to = ip_row_to ip_column_end = ip_column_end
me->set_merge_style( ip_row = lv_row ip_column_start = lv_column_start
ip_row_to = lv_row_to ip_column_end = lv_column_end
ip_style = ip_style ).
ENDIF.
...
*--------------------------------------------------------------------*
* Build new range area to insert into range table
*--------------------------------------------------------------------*
ls_merge-row_from = ip_row.
IF ip_row IS SUPPLIED AND ip_row IS NOT INITIAL AND ip_row_to IS NOT SUPPLIED.
ls_merge-row_to = ls_merge-row_from.
ELSE.
ls_merge-row_to = ip_row_to.
ENDIF.
IF ls_merge-row_from > ls_merge-row_to.
lv_errormessage = 'Merge: First row larger then last row'(405).
zcx_excel=>raise_text( lv_errormessage ).
ENDIF.
ls_merge-col_from = zcl_excel_common=>convert_column2int( ip_column_start ).
IF ip_column_start IS SUPPLIED AND ip_column_start IS NOT INITIAL AND ip_column_end IS NOT SUPPLIED.
ls_merge-col_to = ls_merge-col_from.
ELSE.
ls_merge-col_to = zcl_excel_common=>convert_column2int( ip_column_end ).
ENDIF.
IF ls_merge-col_from > ls_merge-col_to.
lv_errormessage = 'Merge: First column larger then last column'(406).
zcx_excel=>raise_text( lv_errormessage ).
ENDIF.
ls_merge-row_from = lv_row.
ls_merge-row_to = lv_row_to.
ls_merge-col_from = lv_column_start.
ls_merge-col_to = lv_column_end.
*--------------------------------------------------------------------*
* Check merge not overlapping with existing merges
@ -3665,31 +3733,29 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD set_merge_style.
DATA: ld_row_start TYPE zexcel_cell_row,
ld_row_end TYPE zexcel_cell_row,
ld_column_int TYPE zexcel_cell_column,
ld_column_start TYPE zexcel_cell_column,
ld_column_end TYPE zexcel_cell_column,
ld_current_column TYPE zexcel_cell_column_alpha,
ld_current_row TYPE zexcel_cell_row.
ld_row_end = ip_row_to.
ld_row_start = ip_row.
IF ld_row_end IS INITIAL.
ld_row_end = ld_row_start.
ENDIF.
ld_column_start = zcl_excel_common=>convert_column2int( ip_column_start ).
ld_column_end = zcl_excel_common=>convert_column2int( ip_column_end ).
IF ld_column_end IS INITIAL.
ld_column_end = ld_column_start.
ENDIF.
normalize_range_parameter( EXPORTING ip_range = ip_range
ip_column_start = ip_column_start ip_column_end = ip_column_end
ip_row = ip_row ip_row_to = ip_row_to
IMPORTING ep_column_start = ld_column_start ep_column_end = ld_column_end
ep_row = ld_row_start ep_row_to = ld_row_end ).
"set the style cell by cell
WHILE ld_column_start <= ld_column_end.
ld_current_column = zcl_excel_common=>convert_column2alpha( ld_column_start ).
ld_column_int = ld_column_start.
WHILE ld_column_int <= ld_column_end.
ld_current_column = zcl_excel_common=>convert_column2alpha( ld_column_int ).
ld_current_row = ld_row_start.
WHILE ld_current_row <= ld_row_end.
me->set_cell_style( ip_row = ld_current_row ip_column = ld_current_column
ip_style = ip_style ).
ADD 1 TO ld_current_row.
ENDWHILE.
ADD 1 TO ld_column_start.
ADD 1 TO ld_column_int.
ENDWHILE.
ENDMETHOD. "set_merge_style

View File

@ -1,5 +1,9 @@
CLASS ltc_normalize_columnrow_param DEFINITION DEFERRED.
CLASS ltc_normalize_range_param DEFINITION DEFERRED.
CLASS ltc_check_cell_column_formula DEFINITION DEFERRED.
CLASS zcl_excel_worksheet DEFINITION LOCAL FRIENDS
ltc_normalize_columnrow_param
ltc_normalize_range_param
ltc_check_cell_column_formula.
CLASS lcl_excel_worksheet_test DEFINITION FOR TESTING
@ -55,6 +59,87 @@ CLASS ltc_check_cell_column_formula DEFINITION FOR TESTING
ENDCLASS.
CLASS ltc_normalize_columnrow_param DEFINITION FOR TESTING
RISK LEVEL HARMLESS
DURATION SHORT.
PRIVATE SECTION.
TYPES : BEGIN OF ty_parameters,
BEGIN OF input,
columnrow TYPE string,
column TYPE string,
row TYPE zexcel_cell_row,
END OF input,
BEGIN OF output,
fails TYPE abap_bool,
column TYPE zexcel_cell_column,
row TYPE zexcel_cell_row,
END OF output,
END OF ty_parameters.
DATA:
cut TYPE REF TO zcl_excel_worksheet. "class under test
METHODS setup.
METHODS:
test FOR TESTING RAISING cx_static_check,
all_parameters_passed FOR TESTING RAISING cx_static_check,
none_parameter_passed FOR TESTING RAISING cx_static_check.
METHODS assert
IMPORTING
input TYPE ty_parameters-input
exp TYPE ty_parameters-output
RAISING
cx_static_check.
ENDCLASS.
CLASS ltc_normalize_range_param DEFINITION FOR TESTING
RISK LEVEL HARMLESS
DURATION SHORT.
PRIVATE SECTION.
TYPES : BEGIN OF ty_parameters,
BEGIN OF input,
range TYPE string,
column_start TYPE string,
column_end TYPE string,
row TYPE zexcel_cell_row,
row_to TYPE zexcel_cell_row,
END OF input,
BEGIN OF output,
fails TYPE abap_bool,
column_start TYPE zexcel_cell_column,
column_end TYPE zexcel_cell_column,
row_start TYPE zexcel_cell_row,
row_end TYPE zexcel_cell_row,
END OF output,
END OF ty_parameters.
DATA:
cut TYPE REF TO zcl_excel_worksheet. "class under test
METHODS setup.
METHODS:
range_one_cell FOR TESTING RAISING cx_static_check,
relative_range FOR TESTING RAISING cx_static_check,
invalid_range FOR TESTING RAISING cx_static_check,
absolute_range FOR TESTING RAISING cx_static_check,
reverse_range_not_supported FOR TESTING RAISING cx_static_check,
all_parameters_passed FOR TESTING RAISING cx_static_check,
none_parameter_passed FOR TESTING RAISING cx_static_check,
start_without_end FOR TESTING RAISING cx_static_check.
METHODS assert
IMPORTING
input TYPE ty_parameters-input
exp TYPE ty_parameters-output
RAISING
cx_static_check.
ENDCLASS.
CLASS lcl_excel_worksheet_test IMPLEMENTATION.
* ==============================================
@ -540,3 +625,246 @@ CLASS ltc_check_cell_column_formula IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
CLASS ltc_normalize_columnrow_param IMPLEMENTATION.
METHOD setup.
DATA: lo_excel TYPE REF TO zcl_excel.
CREATE OBJECT lo_excel.
TRY.
CREATE OBJECT cut
EXPORTING
ip_excel = lo_excel.
CATCH zcx_excel.
cl_abap_unit_assert=>fail( 'Could not create instance' ).
ENDTRY.
ENDMETHOD.
METHOD test.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
input-columnrow = 'B4'.
exp-column = 2.
exp-row = 4.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD all_parameters_passed.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
input-columnrow = 'B4'.
input-column = 'B'.
input-row = 4.
exp-fails = abap_true.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD none_parameter_passed.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
exp-fails = abap_true.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD assert.
DATA: act TYPE ty_parameters-output,
error TYPE REF TO zcx_excel,
input_text TYPE string,
message TYPE string.
TRY.
cut->normalize_columnrow_parameter( EXPORTING ip_columnrow = input-columnrow
ip_column = input-column
ip_row = input-row
IMPORTING ep_column = act-column
ep_row = act-row ).
IF exp-fails = abap_true.
message = |Should have failed for { input_text }|.
cl_abap_unit_assert=>fail( msg = message ).
ENDIF.
CATCH zcx_excel INTO error.
IF exp-fails = abap_false.
RAISE EXCEPTION error.
ENDIF.
RETURN.
ENDTRY.
input_text = |input column/row { input-columnrow }, column { input-column }, row { input-row }|.
message = |Invalid column for { input_text }|.
cl_abap_unit_assert=>assert_equals( msg = message exp = exp-column act = act-column ).
message = |Invalid row for { input_text }|.
cl_abap_unit_assert=>assert_equals( msg = message exp = exp-row act = act-row ).
ENDMETHOD.
ENDCLASS.
CLASS ltc_normalize_range_param IMPLEMENTATION.
METHOD setup.
DATA: lo_excel TYPE REF TO zcl_excel.
CREATE OBJECT lo_excel.
TRY.
CREATE OBJECT cut
EXPORTING
ip_excel = lo_excel.
CATCH zcx_excel.
cl_abap_unit_assert=>fail( 'Could not create instance' ).
ENDTRY.
ENDMETHOD.
METHOD range_one_cell.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
CLEAR: input, exp.
input-range = 'B4:B4'.
exp-column_start = 2.
exp-column_end = 2.
exp-row_start = 4.
exp-row_end = 4.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD relative_range.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
CLEAR: input, exp.
input-range = 'B4:AA10'.
exp-column_start = 2.
exp-column_end = 27.
exp-row_start = 4.
exp-row_end = 10.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD absolute_range.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
CLEAR: input, exp.
input-range = '$B$4:$AA$10'.
exp-column_start = 2.
exp-column_end = 27.
exp-row_start = 4.
exp-row_end = 10.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD invalid_range.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
CLEAR: input, exp.
input-range = 'B4'.
exp-fails = abap_true.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD reverse_range_not_supported.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
CLEAR: input, exp.
input-range = 'B4:A1'.
exp-fails = abap_true.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD all_parameters_passed.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
input-range = 'B4:B4'.
input-column_start = 'B'.
input-row = 4.
exp-fails = abap_true.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD none_parameter_passed.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
exp-fails = abap_true.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD start_without_end.
DATA: input TYPE ty_parameters-input,
exp TYPE ty_parameters-output.
input-column_start = 'B'.
input-row = 4.
exp-column_start = 2.
exp-column_end = 2.
exp-row_start = 4.
exp-row_end = 4.
assert( input = input exp = exp ).
ENDMETHOD.
METHOD assert.
DATA: act TYPE ty_parameters-output,
error TYPE REF TO zcx_excel,
input_text TYPE string,
message TYPE string.
input_text = |input range { input-range }, column start { input-column_start }, column end { input-column_end }|.
TRY.
cut->normalize_range_parameter( EXPORTING ip_range = input-range
ip_column_start = input-column_start ip_column_end = input-column_end
ip_row = input-row ip_row_to = input-row_to
IMPORTING ep_column_start = act-column_start ep_column_end = act-column_end
ep_row = act-row_start ep_row_to = act-row_end ).
IF exp-fails = abap_true.
message = |Should have failed for { input_text }|.
cl_abap_unit_assert=>fail( msg = message ).
ENDIF.
CATCH zcx_excel INTO error.
IF exp-fails = abap_false.
RAISE EXCEPTION error.
ENDIF.
RETURN.
ENDTRY.
message = |Invalid column start for { input_text }|.
cl_abap_unit_assert=>assert_equals( msg = message exp = exp-column_start act = act-column_start ).
message = |Invalid column end for { input_text }|.
cl_abap_unit_assert=>assert_equals( msg = message exp = exp-column_end act = act-column_end ).
message = |Invalid row start for { input_text }|.
cl_abap_unit_assert=>assert_equals( msg = message exp = exp-row_start act = act-row_start ).
message = |Invalid row start for { input_text }|.
cl_abap_unit_assert=>assert_equals( msg = message exp = exp-row_end act = act-row_end ).
ENDMETHOD.
ENDCLASS.

View File

@ -52,13 +52,13 @@
<item>
<ID>I</ID>
<KEY>405</KEY>
<ENTRY>Merge: First row larger then last row</ENTRY>
<ENTRY>First row larger than last row</ENTRY>
<LENGTH>60</LENGTH>
</item>
<item>
<ID>I</ID>
<KEY>406</KEY>
<ENTRY>Merge: First column larger then last column</ENTRY>
<ENTRY>First column larger than last column</ENTRY>
<LENGTH>60</LENGTH>
</item>
</TPOOL>