From 829529cf6af19f7bae822c80eda006cf45226e87 Mon Sep 17 00:00:00 2001 From: sandraros <34005250+sandraros@users.noreply.github.com> Date: Mon, 8 May 2023 20:18:18 +0200 Subject: [PATCH 1/5] don't run SALV get_metadata if not displayed yet (#1109) fix #1097 * don't run SALV get_metadata if not displayed yet --------- Co-authored-by: Sandra Rossi --- .../zcl_excel_converter_salv_model.clas.abap | 39 +++++++++++++++++++ .../zcl_excel_converter_salv_model.clas.xml | 16 ++++++++ .../zcl_excel_converter_salv_table.clas.abap | 11 +++++- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/not_cloud/zcl_excel_converter_salv_model.clas.abap create mode 100644 src/not_cloud/zcl_excel_converter_salv_model.clas.xml diff --git a/src/not_cloud/zcl_excel_converter_salv_model.clas.abap b/src/not_cloud/zcl_excel_converter_salv_model.clas.abap new file mode 100644 index 0000000..59d1b6e --- /dev/null +++ b/src/not_cloud/zcl_excel_converter_salv_model.clas.abap @@ -0,0 +1,39 @@ +CLASS zcl_excel_converter_salv_model DEFINITION + PUBLIC + INHERITING FROM cl_salv_model + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + CLASS-METHODS is_get_metadata_callable + IMPORTING + io_salv TYPE REF TO cl_salv_table + RETURNING + VALUE(result) TYPE abap_bool. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS zcl_excel_converter_salv_model IMPLEMENTATION. + + METHOD is_get_metadata_callable. + DATA: lo_object TYPE REF TO object, + lo_model TYPE REF TO cl_salv_model. + + " In 7.52 and older versions, we have a short dump with CL_SALV_TABLE->GET_METADATA if the ALV is not displayed + " (due to io_salv->r_controller->r_adapter not instantiated yet). That's later fixed by SAP (no short dump in 7.57). + " NB: r_controller is always instantiated. + lo_object = io_salv. + TRY. + lo_model ?= lo_object. + CATCH cx_sy_move_cast_error. + " In 7.57, CL_SALV_TABLE is no more a subclass of CL_SALV_MODEL, but CL_SALV_TABLE->GET_METADATA can be called. + result = abap_true. + RETURN. + ENDTRY. + result = boolc( lo_model->r_controller->r_adapter IS BOUND ). + ENDMETHOD. + +ENDCLASS. diff --git a/src/not_cloud/zcl_excel_converter_salv_model.clas.xml b/src/not_cloud/zcl_excel_converter_salv_model.clas.xml new file mode 100644 index 0000000..48ae985 --- /dev/null +++ b/src/not_cloud/zcl_excel_converter_salv_model.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_EXCEL_CONVERTER_SALV_MODEL + E + SALV model utility methods + 1 + X + X + X + + + + diff --git a/src/not_cloud/zcl_excel_converter_salv_table.clas.abap b/src/not_cloud/zcl_excel_converter_salv_table.clas.abap index 3f0f899..1678bf2 100644 --- a/src/not_cloud/zcl_excel_converter_salv_table.clas.abap +++ b/src/not_cloud/zcl_excel_converter_salv_table.clas.abap @@ -75,7 +75,16 @@ CLASS zcl_excel_converter_salv_table IMPLEMENTATION. ls_vari-handle = ls_layout_key-handle. ls_vari-log_group = ls_layout_key-logical_group. ELSE. - io_salv->get_metadata( ) . + IF zcl_excel_converter_salv_model=>is_get_metadata_callable( io_salv ) = abap_true. + io_salv->get_metadata( ) . + ELSE. + " (do same as offline below) + cl_salv_controller_metadata=>get_variant( + EXPORTING + r_layout = lo_layout + CHANGING + s_variant = ls_vari ). + ENDIF. ENDIF. ELSE. * If we are offline we need to build this. From 2b01655cabf56441eff6ceba69741c144a9628eb Mon Sep 17 00:00:00 2001 From: Domi Bigl Date: Fri, 26 May 2023 07:47:59 +0200 Subject: [PATCH 2/5] do not use NO-ZERO for none numeric cell values (#1100) --- src/not_cloud/zcl_excel_ole.clas.abap | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/not_cloud/zcl_excel_ole.clas.abap b/src/not_cloud/zcl_excel_ole.clas.abap index f32c37e..f507a38 100644 --- a/src/not_cloud/zcl_excel_ole.clas.abap +++ b/src/not_cloud/zcl_excel_ole.clas.abap @@ -1548,10 +1548,13 @@ CLASS zcl_excel_ole IMPLEMENTATION. CLEAR contentsitem-value. * if type is not numeric -> dun display with zero + IF CO '0123456789.,-+E '. + WRITE TO contentsitem-value NO-ZERO. - WRITE TO contentsitem-value NO-ZERO. - - SHIFT contentsitem-value LEFT DELETING LEADING space. + SHIFT contentsitem-value LEFT DELETING LEADING space. + ELSE. + WRITE TO contentsitem-value. + ENDIF. ENDIF. APPEND contentsitem TO contents. From 1fe298d5bebc01982d90efeef37b14e46a4eb7d3 Mon Sep 17 00:00:00 2001 From: Matthias <134483348+oberhm@users.noreply.github.com> Date: Mon, 10 Jul 2023 14:07:26 +0200 Subject: [PATCH 3/5] Update zcl_excel_converter_salv_table.clas.abap (#1120) fix issue #1119 --- src/not_cloud/zcl_excel_converter_salv_table.clas.abap | 1 + 1 file changed, 1 insertion(+) diff --git a/src/not_cloud/zcl_excel_converter_salv_table.clas.abap b/src/not_cloud/zcl_excel_converter_salv_table.clas.abap index 1678bf2..cc906c2 100644 --- a/src/not_cloud/zcl_excel_converter_salv_table.clas.abap +++ b/src/not_cloud/zcl_excel_converter_salv_table.clas.abap @@ -74,6 +74,7 @@ CLASS zcl_excel_converter_salv_table IMPLEMENTATION. ls_vari-report = ls_layout_key-report. ls_vari-handle = ls_layout_key-handle. ls_vari-log_group = ls_layout_key-logical_group. + ls_vari-variant = lo_layout->get_initial_layout( ). ELSE. IF zcl_excel_converter_salv_model=>is_get_metadata_callable( io_salv ) = abap_true. io_salv->get_metadata( ) . From ac78cd87d271cc85498da034cede9438499961e6 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 28 Jul 2023 07:00:11 +0200 Subject: [PATCH 4/5] split unit test `delete_merge` (#1121) * split unit test delete_merge into one unit test per test * add unit test get_rows_iterator --- src/zcl_excel_worksheet.clas.testclasses.abap | 86 ++++++++++++++++--- 1 file changed, 73 insertions(+), 13 deletions(-) diff --git a/src/zcl_excel_worksheet.clas.testclasses.abap b/src/zcl_excel_worksheet.clas.testclasses.abap index 65d9be1..3493506 100644 --- a/src/zcl_excel_worksheet.clas.testclasses.abap +++ b/src/zcl_excel_worksheet.clas.testclasses.abap @@ -30,9 +30,15 @@ CLASS lcl_excel_worksheet_test DEFINITION FOR TESTING METHODS: setup. METHODS: teardown. METHODS: set_merge FOR TESTING RAISING cx_static_check. - METHODS: delete_merge FOR TESTING RAISING cx_static_check. - METHODS: get_dimension_range FOR TESTING RAISING cx_static_check. -ENDCLASS. "lcl_Excel_Worksheet_Test + METHODS delete_merge1 FOR TESTING RAISING cx_static_check. + METHODS delete_merge2 FOR TESTING RAISING cx_static_check. + METHODS delete_merge3 FOR TESTING RAISING cx_static_check. + METHODS delete_merge4 FOR TESTING RAISING cx_static_check. + METHODS delete_merge5 FOR TESTING RAISING cx_static_check. + METHODS delete_merge6 FOR TESTING RAISING cx_static_check. + METHODS get_dimension_range FOR TESTING RAISING cx_static_check. + METHODS get_rows_iterator FOR TESTING RAISING cx_static_check. +ENDCLASS. CLASS ltc_calculate_table_bottom_rig DEFINITION FOR TESTING @@ -465,12 +471,11 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. ENDMETHOD. - METHOD delete_merge. + METHOD delete_merge1. * ==================== DATA lt_merge TYPE string_table. DATA lv_merge TYPE string. DATA lv_size TYPE i. - DATA lv_index TYPE i. * Test 1. Simple test delete all merges @@ -491,6 +496,13 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. msg = 'Expect merge table with 1 line fully cleared' level = if_aunit_constants=>critical ). + ENDMETHOD. + + METHOD delete_merge2. +* ==================== + DATA lt_merge TYPE string_table. + DATA lv_merge TYPE string. + DATA lv_size TYPE i. * Test 2. Simple test delete all merges @@ -513,7 +525,14 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. msg = 'Expect merge table with few lines fully cleared' level = if_aunit_constants=>critical ). + ENDMETHOD. + METHOD delete_merge3. +* ==================== + DATA lt_merge TYPE string_table. + DATA lv_merge TYPE string. + DATA lv_size TYPE i. + DATA lv_index TYPE i. * Test 3. Delete concrete merge with success DO 4 TIMES. @@ -529,10 +548,14 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. ). CASE lv_index. - WHEN 1. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 2 ). - WHEN 2. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 3 ). - WHEN 3. f_cut->delete_merge( ip_cell_column = 3 ip_cell_row = 2 ). - WHEN 4. f_cut->delete_merge( ip_cell_column = 3 ip_cell_row = 3 ). + WHEN 1. + f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 2 ). + WHEN 2. + f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 3 ). + WHEN 3. + f_cut->delete_merge( ip_cell_column = 3 ip_cell_row = 2 ). + WHEN 4. + f_cut->delete_merge( ip_cell_column = 3 ip_cell_row = 3 ). ENDCASE. lt_merge = f_cut->get_merge( ). @@ -545,7 +568,14 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. level = if_aunit_constants=>critical ). ENDDO. + ENDMETHOD. + METHOD delete_merge4. +* ==================== + DATA lt_merge TYPE string_table. + DATA lv_merge TYPE string. + DATA lv_size TYPE i. + DATA lv_index TYPE i. * Test 4. Delete concrete merge with fail DO 4 TIMES. @@ -561,10 +591,14 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. ). CASE lv_index. - WHEN 1. f_cut->delete_merge( ip_cell_column = 1 ip_cell_row = 2 ). - WHEN 2. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 1 ). - WHEN 3. f_cut->delete_merge( ip_cell_column = 4 ip_cell_row = 2 ). - WHEN 4. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 4 ). + WHEN 1. + f_cut->delete_merge( ip_cell_column = 1 ip_cell_row = 2 ). + WHEN 2. + f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 1 ). + WHEN 3. + f_cut->delete_merge( ip_cell_column = 4 ip_cell_row = 2 ). + WHEN 4. + f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 4 ). ENDCASE. lt_merge = f_cut->get_merge( ). @@ -577,6 +611,13 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. level = if_aunit_constants=>critical ). ENDDO. + ENDMETHOD. + + METHOD delete_merge5. +* ==================== + DATA lt_merge TYPE string_table. + DATA lv_merge TYPE string. + DATA lv_size TYPE i. * Test 5. Delete concrete merge #1 @@ -614,6 +655,13 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. msg = 'Expect delete B2:C3 merge' level = if_aunit_constants=>critical ). + ENDMETHOD. + + METHOD delete_merge6. +* ==================== + DATA lt_merge TYPE string_table. + DATA lv_merge TYPE string. + DATA lv_size TYPE i. * Test 6. Delete concrete merge #2 @@ -682,6 +730,18 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION. ). ENDMETHOD. + METHOD get_rows_iterator. + DATA lo_iterator TYPE REF TO zcl_excel_collection_iterator. + DATA lv_index TYPE i. + + f_cut->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_iterator = f_cut->get_rows_iterator( ). + lv_index = lo_iterator->get_index( ). + cl_abap_unit_assert=>assert_equals( + act = lv_index + exp = 0 ). + ENDMETHOD. + ENDCLASS. "lcl_Excel_Worksheet_Test From 425b6a2b7dd7aff6f4f2bc8559c47d0660d1b52a Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 28 Jul 2023 07:02:16 +0200 Subject: [PATCH 5/5] add basic unit test for style changer (#1123) * add basic unit test for style changer * xml * revert --- ..._excel_style_changer.clas.testclasses.abap | 41 +++++++++++++++++++ src/zcl_excel_style_changer.clas.xml | 1 + 2 files changed, 42 insertions(+) create mode 100644 src/zcl_excel_style_changer.clas.testclasses.abap diff --git a/src/zcl_excel_style_changer.clas.testclasses.abap b/src/zcl_excel_style_changer.clas.testclasses.abap new file mode 100644 index 0000000..352d324 --- /dev/null +++ b/src/zcl_excel_style_changer.clas.testclasses.abap @@ -0,0 +1,41 @@ +CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. + + PRIVATE SECTION. + DATA mi_cut TYPE REF TO zif_excel_style_changer. + DATA mo_excel TYPE REF TO zcl_excel. + DATA mo_worksheet TYPE REF TO zcl_excel_worksheet. + + METHODS setup RAISING cx_static_check. + METHODS apply FOR TESTING RAISING cx_static_check. +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD setup. + CREATE OBJECT mo_excel. + mo_worksheet = mo_excel->get_active_worksheet( ). + mi_cut = zcl_excel_style_changer=>create( mo_excel ). + ENDMETHOD. + + METHOD apply. + + DATA lv_guid TYPE zexcel_cell_style. + + mo_worksheet->set_cell( + ip_column = 'B' + ip_row = 2 + ip_value = 'Hello' ). + + mi_cut->set_font_bold( abap_true ). + + lv_guid = mi_cut->apply( + ip_worksheet = mo_worksheet + ip_column = 'B' + ip_row = 2 ). + + mo_excel->get_style_to_guid( lv_guid ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zcl_excel_style_changer.clas.xml b/src/zcl_excel_style_changer.clas.xml index 5b262b8..a357d83 100644 --- a/src/zcl_excel_style_changer.clas.xml +++ b/src/zcl_excel_style_changer.clas.xml @@ -10,6 +10,7 @@ X X X + X