mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 05:04:11 +08:00
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:
parent
87b8291ea2
commit
6fcbc5c8a8
|
@ -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)' ).
|
||||
|
|
|
@ -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' ).
|
||||
|
|
|
@ -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
|
||||
).
|
||||
|
|
|
@ -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 ).
|
||||
|
||||
|
|
|
@ -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 ).
|
||||
|
||||
*--------------------------------------------------------------------*
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue
Block a user