Merge branch 'main' into main

This commit is contained in:
Domi Bigl 2023-08-01 15:06:47 +02:00 committed by GitHub
commit 4cac24da1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 187 additions and 17 deletions

View File

@ -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.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXCEL_CONVERTER_SALV_MODEL</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>SALV model utility methods</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -74,8 +74,18 @@ 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.
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.

View File

@ -1548,10 +1548,13 @@ CLASS zcl_excel_ole IMPLEMENTATION.
CLEAR contentsitem-value.
* if type is not numeric -> dun display with zero
IF <item> CO '0123456789.,-+E '.
WRITE <item> TO contentsitem-value NO-ZERO.
WRITE <item> TO contentsitem-value NO-ZERO.
SHIFT contentsitem-value LEFT DELETING LEADING space.
SHIFT contentsitem-value LEFT DELETING LEADING space.
ELSE.
WRITE <item> TO contentsitem-value.
ENDIF.
ENDIF.
APPEND contentsitem TO contents.

View File

@ -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.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>

View File

@ -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