mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-06 20:26:20 +08:00
Merge branch 'main' into main
This commit is contained in:
commit
4cac24da1e
39
src/not_cloud/zcl_excel_converter_salv_model.clas.abap
Normal file
39
src/not_cloud/zcl_excel_converter_salv_model.clas.abap
Normal 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.
|
16
src/not_cloud/zcl_excel_converter_salv_model.clas.xml
Normal file
16
src/not_cloud/zcl_excel_converter_salv_model.clas.xml
Normal 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>
|
|
@ -74,8 +74,18 @@ CLASS zcl_excel_converter_salv_table IMPLEMENTATION.
|
||||||
ls_vari-report = ls_layout_key-report.
|
ls_vari-report = ls_layout_key-report.
|
||||||
ls_vari-handle = ls_layout_key-handle.
|
ls_vari-handle = ls_layout_key-handle.
|
||||||
ls_vari-log_group = ls_layout_key-logical_group.
|
ls_vari-log_group = ls_layout_key-logical_group.
|
||||||
|
ls_vari-variant = lo_layout->get_initial_layout( ).
|
||||||
ELSE.
|
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.
|
ENDIF.
|
||||||
ELSE.
|
ELSE.
|
||||||
* If we are offline we need to build this.
|
* If we are offline we need to build this.
|
||||||
|
|
|
@ -1548,10 +1548,13 @@ CLASS zcl_excel_ole IMPLEMENTATION.
|
||||||
CLEAR contentsitem-value.
|
CLEAR contentsitem-value.
|
||||||
|
|
||||||
* if type is not numeric -> dun display with zero
|
* 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.
|
||||||
|
ELSE.
|
||||||
SHIFT contentsitem-value LEFT DELETING LEADING space.
|
WRITE <item> TO contentsitem-value.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
APPEND contentsitem TO contents.
|
APPEND contentsitem TO contents.
|
||||||
|
|
41
src/zcl_excel_style_changer.clas.testclasses.abap
Normal file
41
src/zcl_excel_style_changer.clas.testclasses.abap
Normal 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.
|
|
@ -10,6 +10,7 @@
|
||||||
<CLSCCINCL>X</CLSCCINCL>
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
<FIXPT>X</FIXPT>
|
<FIXPT>X</FIXPT>
|
||||||
<UNICODE>X</UNICODE>
|
<UNICODE>X</UNICODE>
|
||||||
|
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||||
</VSEOCLASS>
|
</VSEOCLASS>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
</asx:abap>
|
</asx:abap>
|
||||||
|
|
|
@ -30,9 +30,15 @@ CLASS lcl_excel_worksheet_test DEFINITION FOR TESTING
|
||||||
METHODS: setup.
|
METHODS: setup.
|
||||||
METHODS: teardown.
|
METHODS: teardown.
|
||||||
METHODS: set_merge FOR TESTING RAISING cx_static_check.
|
METHODS: set_merge FOR TESTING RAISING cx_static_check.
|
||||||
METHODS: delete_merge FOR TESTING RAISING cx_static_check.
|
METHODS delete_merge1 FOR TESTING RAISING cx_static_check.
|
||||||
METHODS: get_dimension_range FOR TESTING RAISING cx_static_check.
|
METHODS delete_merge2 FOR TESTING RAISING cx_static_check.
|
||||||
ENDCLASS. "lcl_Excel_Worksheet_Test
|
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
|
CLASS ltc_calculate_table_bottom_rig DEFINITION FOR TESTING
|
||||||
|
@ -465,12 +471,11 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD delete_merge.
|
METHOD delete_merge1.
|
||||||
* ====================
|
* ====================
|
||||||
DATA lt_merge TYPE string_table.
|
DATA lt_merge TYPE string_table.
|
||||||
DATA lv_merge TYPE string.
|
DATA lv_merge TYPE string.
|
||||||
DATA lv_size TYPE i.
|
DATA lv_size TYPE i.
|
||||||
DATA lv_index TYPE i.
|
|
||||||
|
|
||||||
* Test 1. Simple test delete all merges
|
* 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'
|
msg = 'Expect merge table with 1 line fully cleared'
|
||||||
level = if_aunit_constants=>critical
|
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
|
* 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'
|
msg = 'Expect merge table with few lines fully cleared'
|
||||||
level = if_aunit_constants=>critical
|
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
|
* Test 3. Delete concrete merge with success
|
||||||
|
|
||||||
DO 4 TIMES.
|
DO 4 TIMES.
|
||||||
|
@ -529,10 +548,14 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
|
||||||
).
|
).
|
||||||
|
|
||||||
CASE lv_index.
|
CASE lv_index.
|
||||||
WHEN 1. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 2 ).
|
WHEN 1.
|
||||||
WHEN 2. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 3 ).
|
f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 2 ).
|
||||||
WHEN 3. f_cut->delete_merge( ip_cell_column = 3 ip_cell_row = 2 ).
|
WHEN 2.
|
||||||
WHEN 4. f_cut->delete_merge( ip_cell_column = 3 ip_cell_row = 3 ).
|
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.
|
ENDCASE.
|
||||||
|
|
||||||
lt_merge = f_cut->get_merge( ).
|
lt_merge = f_cut->get_merge( ).
|
||||||
|
@ -545,7 +568,14 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
|
||||||
level = if_aunit_constants=>critical
|
level = if_aunit_constants=>critical
|
||||||
).
|
).
|
||||||
ENDDO.
|
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
|
* Test 4. Delete concrete merge with fail
|
||||||
|
|
||||||
DO 4 TIMES.
|
DO 4 TIMES.
|
||||||
|
@ -561,10 +591,14 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
|
||||||
).
|
).
|
||||||
|
|
||||||
CASE lv_index.
|
CASE lv_index.
|
||||||
WHEN 1. f_cut->delete_merge( ip_cell_column = 1 ip_cell_row = 2 ).
|
WHEN 1.
|
||||||
WHEN 2. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 1 ).
|
f_cut->delete_merge( ip_cell_column = 1 ip_cell_row = 2 ).
|
||||||
WHEN 3. f_cut->delete_merge( ip_cell_column = 4 ip_cell_row = 2 ).
|
WHEN 2.
|
||||||
WHEN 4. f_cut->delete_merge( ip_cell_column = 2 ip_cell_row = 4 ).
|
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.
|
ENDCASE.
|
||||||
|
|
||||||
lt_merge = f_cut->get_merge( ).
|
lt_merge = f_cut->get_merge( ).
|
||||||
|
@ -577,6 +611,13 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
|
||||||
level = if_aunit_constants=>critical
|
level = if_aunit_constants=>critical
|
||||||
).
|
).
|
||||||
ENDDO.
|
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
|
* Test 5. Delete concrete merge #1
|
||||||
|
|
||||||
|
@ -614,6 +655,13 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
|
||||||
msg = 'Expect delete B2:C3 merge'
|
msg = 'Expect delete B2:C3 merge'
|
||||||
level = if_aunit_constants=>critical
|
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
|
* Test 6. Delete concrete merge #2
|
||||||
|
|
||||||
|
@ -682,6 +730,18 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
|
||||||
).
|
).
|
||||||
ENDMETHOD.
|
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
|
ENDCLASS. "lcl_Excel_Worksheet_Test
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user