mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 14:16:30 +08:00
Merge branch 'main' into fix-issue-1013-part2
This commit is contained in:
commit
22b622c5a5
|
@ -136,7 +136,9 @@
|
|||
"local_class_naming": false,
|
||||
"main_file_contents": true,
|
||||
"message_exists": false,
|
||||
"msag_consistency": true,
|
||||
"msag_consistency": {
|
||||
"numericParamters": false
|
||||
},
|
||||
"newline_between_methods": false,
|
||||
"no_public_attributes": false,
|
||||
"object_naming": {
|
||||
|
|
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-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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -48,7 +48,7 @@ CLASS zcl_excel_common DEFINITION
|
|||
zcx_excel.
|
||||
CLASS-METHODS convert_columnrow2column_a_row
|
||||
IMPORTING
|
||||
!i_columnrow TYPE clike
|
||||
!i_columnrow TYPE clike
|
||||
EXPORTING
|
||||
!e_column TYPE zexcel_cell_column_alpha
|
||||
!e_column_int TYPE zexcel_cell_column
|
||||
|
@ -77,7 +77,7 @@ CLASS zcl_excel_common DEFINITION
|
|||
!e_row TYPE zexcel_cell_row .
|
||||
CLASS-METHODS clone_ixml_with_namespaces
|
||||
IMPORTING
|
||||
element TYPE REF TO if_ixml_element
|
||||
element TYPE REF TO if_ixml_element
|
||||
RETURNING
|
||||
VALUE(result) TYPE REF TO if_ixml_element.
|
||||
CLASS-METHODS date_to_excel_string
|
||||
|
@ -133,6 +133,7 @@ CLASS zcl_excel_common DEFINITION
|
|||
CLASS-METHODS number_to_excel_string
|
||||
IMPORTING
|
||||
VALUE(ip_value) TYPE numeric
|
||||
ip_currency TYPE waers_curc OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ep_value) TYPE zexcel_cell_value .
|
||||
CLASS-METHODS recursive_class_to_struct
|
||||
|
@ -498,8 +499,8 @@ CLASS zcl_excel_common IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD convert_column_a_row2columnrow.
|
||||
DATA: lv_row_alpha TYPE string,
|
||||
lv_column_alpha TYPE zexcel_cell_column_alpha.
|
||||
DATA: lv_row_alpha TYPE string,
|
||||
lv_column_alpha TYPE zexcel_cell_column_alpha.
|
||||
|
||||
lv_row_alpha = i_row.
|
||||
lv_column_alpha = zcl_excel_common=>convert_column2alpha( i_column ).
|
||||
|
@ -846,7 +847,7 @@ CLASS zcl_excel_common IMPLEMENTATION.
|
|||
lv_value = ip_value.
|
||||
|
||||
|
||||
FIND REGEX `\s|'` IN lv_value. " \s finds regular and white spaces
|
||||
FIND REGEX `\s|'|-` IN lv_value. " \s finds regular and white spaces
|
||||
IF sy-subrc = 0.
|
||||
REPLACE ALL OCCURRENCES OF `'` IN lv_value WITH `''`.
|
||||
CONCATENATE `'` lv_value `'` INTO lv_value .
|
||||
|
@ -944,6 +945,15 @@ CLASS zcl_excel_common IMPLEMENTATION.
|
|||
<fcat>-scrtext_s = ls_salv_t_column_ref-r_column->get_short_text( ).
|
||||
<fcat>-scrtext_m = ls_salv_t_column_ref-r_column->get_medium_text( ).
|
||||
<fcat>-scrtext_l = ls_salv_t_column_ref-r_column->get_long_text( ).
|
||||
<fcat>-currency_column = ls_salv_t_column_ref-r_column->get_currency_column( ).
|
||||
" If currency column not in structure then clear the field again
|
||||
IF <fcat>-currency_column IS NOT INITIAL.
|
||||
READ TABLE lt_salv_t_column_ref WITH KEY columnname = <fcat>-currency_column TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
CLEAR <fcat>-currency_column.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF ip_conv_exit_length = abap_false.
|
||||
<fcat>-abap_type = lo_salv_column_table->get_ddic_inttype( ).
|
||||
ENDIF.
|
||||
|
@ -1007,7 +1017,11 @@ CLASS zcl_excel_common IMPLEMENTATION.
|
|||
METHOD number_to_excel_string.
|
||||
DATA: lv_value_c TYPE c LENGTH 100.
|
||||
|
||||
WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN.
|
||||
IF ip_currency IS INITIAL.
|
||||
WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN.
|
||||
ELSE.
|
||||
WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN CURRENCY ip_currency.
|
||||
ENDIF.
|
||||
REPLACE ALL OCCURRENCES OF ',' IN lv_value_c WITH '.'.
|
||||
|
||||
ep_value = lv_value_c.
|
||||
|
@ -1691,4 +1705,5 @@ CLASS zcl_excel_common IMPLEMENTATION.
|
|||
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -45,6 +45,9 @@ CLASS lcl_excel_common_test DEFINITION FOR TESTING
|
|||
METHODS date_to_excel_string4 FOR TESTING RAISING cx_static_check.
|
||||
METHODS date_to_excel_string5 FOR TESTING RAISING cx_static_check.
|
||||
METHODS date_to_excel_string6 FOR TESTING RAISING cx_static_check.
|
||||
METHODS amount_to_excel_string1 FOR TESTING RAISING cx_static_check.
|
||||
METHODS amount_to_excel_string2 FOR TESTING RAISING cx_static_check.
|
||||
METHODS amount_to_excel_string3 FOR TESTING RAISING cx_static_check.
|
||||
METHODS: encrypt_password FOR TESTING.
|
||||
METHODS: excel_string_to_date FOR TESTING.
|
||||
METHODS excel_string_to_time1 FOR TESTING RAISING cx_static_check.
|
||||
|
@ -122,6 +125,12 @@ CLASS lcl_excel_common_test DEFINITION FOR TESTING
|
|||
METHODS is_cell_in_range_upperside_out FOR TESTING.
|
||||
METHODS is_cell_in_range_rightside_out FOR TESTING.
|
||||
METHODS is_cell_in_range_lowerside_out FOR TESTING.
|
||||
METHODS escape_string_whitespace1 FOR TESTING.
|
||||
METHODS escape_string_whitespace2 FOR TESTING.
|
||||
METHODS escape_string_whitespace3 FOR TESTING.
|
||||
METHODS escape_string_quote FOR TESTING.
|
||||
METHODS escape_string_hyphen FOR TESTING.
|
||||
METHODS escape_string_regular FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -461,6 +470,47 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD amount_to_excel_string1.
|
||||
DATA ep_value TYPE zexcel_cell_value.
|
||||
|
||||
ep_value = zcl_excel_common=>number_to_excel_string( ip_value = '1003.99'
|
||||
ip_currency = 'EUR' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ep_value
|
||||
exp = '1003.99'
|
||||
msg = 'Wrong currency amount conversion'
|
||||
level = if_aunit_constants=>critical ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD amount_to_excel_string2.
|
||||
DATA ep_value TYPE zexcel_cell_value.
|
||||
|
||||
ep_value = zcl_excel_common=>number_to_excel_string( ip_value = '-1003.99'
|
||||
ip_currency = 'HUF' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ep_value
|
||||
exp = '-100399'
|
||||
msg = 'Wrong currency amount conversion'
|
||||
level = if_aunit_constants=>critical ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD amount_to_excel_string3.
|
||||
DATA ep_value TYPE zexcel_cell_value.
|
||||
|
||||
ep_value = zcl_excel_common=>number_to_excel_string( ip_value = '0'
|
||||
ip_currency = 'HUF' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ep_value
|
||||
exp = '0'
|
||||
msg = 'Wrong currency amount conversion'
|
||||
level = if_aunit_constants=>critical ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD encrypt_password.
|
||||
* ========================
|
||||
|
@ -1597,4 +1647,88 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
|
|||
ENDTRY.
|
||||
ENDMETHOD. "is_cell_in_range_lowerside_out.
|
||||
|
||||
METHOD escape_string_hyphen.
|
||||
DATA: name TYPE string,
|
||||
escaped_name TYPE string.
|
||||
|
||||
name = `A-B`.
|
||||
|
||||
escaped_name = zcl_excel_common=>escape_string( name ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = escaped_name
|
||||
exp = `'A-B'`
|
||||
msg = 'Escaping - failed' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD escape_string_quote.
|
||||
DATA: name TYPE string,
|
||||
escaped_name TYPE string.
|
||||
|
||||
name = `A'B`.
|
||||
|
||||
escaped_name = zcl_excel_common=>escape_string( name ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = escaped_name
|
||||
exp = `'A''B'`
|
||||
msg = `Escaping ' failed` ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD escape_string_regular.
|
||||
DATA: name TYPE string,
|
||||
escaped_name TYPE string.
|
||||
|
||||
name = `Ab1`.
|
||||
|
||||
escaped_name = zcl_excel_common=>escape_string( name ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = escaped_name
|
||||
exp = `Ab1`
|
||||
msg = 'Escaped for no reason' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD escape_string_whitespace1.
|
||||
DATA: name TYPE string,
|
||||
escaped_name TYPE string.
|
||||
|
||||
name = `A B`.
|
||||
|
||||
escaped_name = zcl_excel_common=>escape_string( name ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = escaped_name
|
||||
exp = `'A B'`
|
||||
msg = `Escaping ' ' (space) failed` ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD escape_string_whitespace2.
|
||||
DATA: name TYPE string,
|
||||
escaped_name TYPE string.
|
||||
|
||||
name = `A` && cl_abap_char_utilities=>horizontal_tab && `B`.
|
||||
|
||||
escaped_name = zcl_excel_common=>escape_string( name ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = escaped_name
|
||||
exp = `'A` && cl_abap_char_utilities=>horizontal_tab && `B'`
|
||||
msg = `Escaping TAB failed` ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD escape_string_whitespace3.
|
||||
DATA: name TYPE string,
|
||||
escaped_name TYPE string.
|
||||
|
||||
name = `A` && cl_abap_char_utilities=>newline && `B`.
|
||||
|
||||
escaped_name = zcl_excel_common=>escape_string( name ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = escaped_name
|
||||
exp = `'A` && cl_abap_char_utilities=>newline && `B'`
|
||||
msg = `Escaping LF failed` ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -2859,6 +2859,21 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
|||
ls_odd_footer-left_value = lo_ixml_hf_value_elem->get_value( ).
|
||||
ENDIF.
|
||||
|
||||
lo_ixml_hf_value_elem = lo_ixml_headerfooter_elem->find_from_name_ns( name = 'oddHeader' uri = namespace-main ).
|
||||
IF lo_ixml_hf_value_elem IS NOT INITIAL.
|
||||
ls_odd_header-left_value = lo_ixml_hf_value_elem->get_value( ).
|
||||
ENDIF.
|
||||
|
||||
lo_ixml_hf_value_elem = lo_ixml_headerfooter_elem->find_from_name_ns( name = 'evenFooter' uri = namespace-main ).
|
||||
IF lo_ixml_hf_value_elem IS NOT INITIAL.
|
||||
ls_even_footer-left_value = lo_ixml_hf_value_elem->get_value( ).
|
||||
ENDIF.
|
||||
|
||||
lo_ixml_hf_value_elem = lo_ixml_headerfooter_elem->find_from_name_ns( name = 'evenHeader' uri = namespace-main ).
|
||||
IF lo_ixml_hf_value_elem IS NOT INITIAL.
|
||||
ls_even_header-left_value = lo_ixml_hf_value_elem->get_value( ).
|
||||
ENDIF.
|
||||
|
||||
* 2do§1 Header/footer
|
||||
" TODO.. get the rest.
|
||||
|
||||
|
|
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>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
|
@ -100,7 +100,7 @@ CLASS zcl_excel_theme_color_scheme IMPLEMENTATION.
|
|||
parent = lo_elements ).
|
||||
lo_scheme_element->set_attribute( name = c_name value = name ).
|
||||
|
||||
"! Adding colors to scheme
|
||||
" Adding colors to scheme
|
||||
lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix
|
||||
name = c_dark1
|
||||
parent = lo_scheme_element ).
|
||||
|
|
|
@ -174,6 +174,7 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
VALUE(iv_default_descr) TYPE c OPTIONAL
|
||||
!iv_no_line_if_empty TYPE abap_bool DEFAULT abap_false
|
||||
!ip_conv_exit_length TYPE abap_bool DEFAULT abap_false
|
||||
!ip_conv_curr_amt_ext TYPE abap_bool DEFAULT abap_false
|
||||
EXPORTING
|
||||
!es_table_settings TYPE zexcel_s_table_settings
|
||||
RAISING
|
||||
|
@ -501,6 +502,7 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
!ip_hyperlink TYPE REF TO zcl_excel_hyperlink OPTIONAL
|
||||
!ip_data_type TYPE zexcel_cell_data_type OPTIONAL
|
||||
!ip_abap_type TYPE abap_typekind OPTIONAL
|
||||
!ip_currency TYPE waers_curc OPTIONAL
|
||||
!it_rtf TYPE zexcel_t_rtf OPTIONAL
|
||||
!ip_column_formula_id TYPE mty_s_column_formula-id OPTIONAL
|
||||
!ip_conv_exit_length TYPE abap_bool DEFAULT abap_false
|
||||
|
@ -675,6 +677,7 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
IMPORTING
|
||||
!it_field_catalog TYPE zexcel_t_fieldcatalog OPTIONAL
|
||||
!iv_begin_row TYPE int4 DEFAULT 2
|
||||
!iv_end_row TYPE int4 DEFAULT 0
|
||||
EXPORTING
|
||||
!et_data TYPE STANDARD TABLE
|
||||
!er_data TYPE REF TO data
|
||||
|
@ -798,15 +801,15 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
iv_default_descr TYPE c
|
||||
it_field_catalog TYPE zexcel_t_fieldcatalog
|
||||
RETURNING
|
||||
VALUE(result) TYPE zexcel_t_fieldcatalog.
|
||||
VALUE(result) TYPE zexcel_t_fieldcatalog.
|
||||
METHODS normalize_columnrow_parameter
|
||||
IMPORTING
|
||||
ip_columnrow TYPE csequence OPTIONAL
|
||||
ip_column TYPE simple OPTIONAL
|
||||
ip_row TYPE zexcel_cell_row OPTIONAL
|
||||
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
|
||||
ep_column TYPE zexcel_cell_column
|
||||
ep_row TYPE zexcel_cell_row
|
||||
RAISING
|
||||
zcx_excel.
|
||||
METHODS normalize_range_parameter
|
||||
|
@ -976,7 +979,8 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
|
||||
CONSTANTS:
|
||||
lc_top_left_column TYPE zexcel_cell_column_alpha VALUE 'A',
|
||||
lc_top_left_row TYPE zexcel_cell_row VALUE 1.
|
||||
lc_top_left_row TYPE zexcel_cell_row VALUE 1,
|
||||
lc_no_currency TYPE waers_curc VALUE IS INITIAL.
|
||||
|
||||
DATA:
|
||||
lv_row_int TYPE zexcel_cell_row,
|
||||
|
@ -1002,7 +1006,8 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
<ls_field_catalog> TYPE zexcel_s_fieldcatalog,
|
||||
<ls_field_catalog_custom> TYPE zexcel_s_fieldcatalog,
|
||||
<fs_table_line> TYPE any,
|
||||
<fs_fldval> TYPE any.
|
||||
<fs_fldval> TYPE any,
|
||||
<fs_fldval_currency> TYPE waers.
|
||||
|
||||
ls_settings = is_table_settings.
|
||||
|
||||
|
@ -1101,6 +1106,7 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
LOOP AT ip_table ASSIGNING <fs_table_line>.
|
||||
|
||||
ASSIGN COMPONENT <ls_field_catalog>-fieldname OF STRUCTURE <fs_table_line> TO <fs_fldval>.
|
||||
|
||||
" issue #290 Add formula support in table
|
||||
IF <ls_field_catalog>-formula EQ abap_true.
|
||||
IF <ls_field_catalog>-style IS NOT INITIAL.
|
||||
|
@ -1152,18 +1158,26 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
ip_column_formula_id = ls_column_formula-id ).
|
||||
ENDIF.
|
||||
ELSE.
|
||||
IF <ls_field_catalog>-currency_column IS INITIAL OR ip_conv_curr_amt_ext = abap_false.
|
||||
ASSIGN lc_no_currency TO <fs_fldval_currency>.
|
||||
ELSE.
|
||||
ASSIGN COMPONENT <ls_field_catalog>-currency_column OF STRUCTURE <fs_table_line> TO <fs_fldval_currency>.
|
||||
ENDIF.
|
||||
|
||||
IF <ls_field_catalog>-style IS NOT INITIAL.
|
||||
IF <ls_field_catalog>-abap_type IS NOT INITIAL.
|
||||
me->set_cell( ip_column = lv_column_alpha
|
||||
ip_row = lv_row_int
|
||||
ip_value = <fs_fldval>
|
||||
ip_abap_type = <ls_field_catalog>-abap_type
|
||||
ip_style = <ls_field_catalog>-style
|
||||
ip_conv_exit_length = ip_conv_exit_length ).
|
||||
me->set_cell( ip_column = lv_column_alpha
|
||||
ip_row = lv_row_int
|
||||
ip_value = <fs_fldval>
|
||||
ip_abap_type = <ls_field_catalog>-abap_type
|
||||
ip_currency = <fs_fldval_currency>
|
||||
ip_style = <ls_field_catalog>-style
|
||||
ip_conv_exit_length = ip_conv_exit_length ).
|
||||
ELSE.
|
||||
me->set_cell( ip_column = lv_column_alpha
|
||||
ip_row = lv_row_int
|
||||
ip_value = <fs_fldval>
|
||||
ip_currency = <fs_fldval_currency>
|
||||
ip_style = <ls_field_catalog>-style
|
||||
ip_conv_exit_length = ip_conv_exit_length ).
|
||||
ENDIF.
|
||||
|
@ -1172,11 +1186,13 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
me->set_cell( ip_column = lv_column_alpha
|
||||
ip_row = lv_row_int
|
||||
ip_abap_type = <ls_field_catalog>-abap_type
|
||||
ip_currency = <fs_fldval_currency>
|
||||
ip_value = <fs_fldval>
|
||||
ip_conv_exit_length = ip_conv_exit_length ).
|
||||
ELSE.
|
||||
me->set_cell( ip_column = lv_column_alpha
|
||||
ip_row = lv_row_int
|
||||
ip_currency = <fs_fldval_currency>
|
||||
ip_value = <fs_fldval>
|
||||
ip_conv_exit_length = ip_conv_exit_length ).
|
||||
ENDIF.
|
||||
|
@ -2265,6 +2281,10 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
|
||||
LOOP AT me->sheet_content ASSIGNING <ls_sheet_content> FROM lv_index.
|
||||
AT NEW cell_row.
|
||||
IF iv_end_row <> 0
|
||||
AND <ls_sheet_content>-cell_row > iv_end_row.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
" New line
|
||||
APPEND INITIAL LINE TO <lt_data> ASSIGNING <ls_data>.
|
||||
lv_index = sy-tabix.
|
||||
|
@ -3902,12 +3922,18 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
cl_abap_typedescr=>typekind_decfloat OR
|
||||
cl_abap_typedescr=>typekind_decfloat16 OR
|
||||
cl_abap_typedescr=>typekind_decfloat34.
|
||||
lo_addit = cl_abap_elemdescr=>get_f( ).
|
||||
CREATE DATA lo_value_new TYPE HANDLE lo_addit.
|
||||
ASSIGN lo_value_new->* TO <fs_numeric>.
|
||||
IF sy-subrc = 0.
|
||||
<fs_numeric> = <fs_value>.
|
||||
lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ).
|
||||
IF lv_value_type = cl_abap_typedescr=>typekind_packed
|
||||
AND ip_currency IS NOT INITIAL.
|
||||
lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_value>
|
||||
ip_currency = ip_currency ).
|
||||
ELSE.
|
||||
lo_addit = cl_abap_elemdescr=>get_f( ).
|
||||
CREATE DATA lo_value_new TYPE HANDLE lo_addit.
|
||||
ASSIGN lo_value_new->* TO <fs_numeric>.
|
||||
IF sy-subrc = 0.
|
||||
<fs_numeric> = <fs_value>.
|
||||
lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
WHEN cl_abap_typedescr=>typekind_char OR cl_abap_typedescr=>typekind_string OR cl_abap_typedescr=>typekind_num OR
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -60,6 +60,10 @@ CLASS zcl_excel_writer_csv IMPLEMENTATION.
|
|||
|
||||
* .csv format with ; delimiter
|
||||
|
||||
* Start of insertion # issue 1134 - Dateretention of cellstyles(issue #139)
|
||||
me->excel->add_static_styles( ).
|
||||
* End of insertion # issue 1134 - Dateretention of cellstyles(issue #139)
|
||||
|
||||
ep_excel = me->create_csv( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -42,6 +42,14 @@
|
|||
<LFD_NUM>0001</LFD_NUM>
|
||||
</SOTR_USE>
|
||||
</SOTR_USE>
|
||||
<SOTS_USE>
|
||||
<SOTR_USEU>
|
||||
<PGMID>LIMU</PGMID>
|
||||
<OBJECT>CPUB</OBJECT>
|
||||
<OBJ_NAME>ZCX_EXCEL</OBJ_NAME>
|
||||
<LFD_NUM>0001</LFD_NUM>
|
||||
</SOTR_USEU>
|
||||
</SOTS_USE>
|
||||
<DESCRIPTIONS>
|
||||
<SEOCOMPOTX>
|
||||
<CMPNAME>CONSTRUCTOR</CMPNAME>
|
||||
|
|
|
@ -117,7 +117,132 @@
|
|||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>CURRENCY_COLUMN</FIELDNAME>
|
||||
<ROLLNAME>ZEXCEL_FIELDNAME</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
<I18N_LANGS>
|
||||
<LANGU>1</LANGU>
|
||||
<LANGU>4</LANGU>
|
||||
<LANGU>5</LANGU>
|
||||
<LANGU>6</LANGU>
|
||||
<LANGU>8</LANGU>
|
||||
<LANGU>B</LANGU>
|
||||
<LANGU>C</LANGU>
|
||||
<LANGU>F</LANGU>
|
||||
<LANGU>G</LANGU>
|
||||
<LANGU>H</LANGU>
|
||||
<LANGU>K</LANGU>
|
||||
<LANGU>L</LANGU>
|
||||
<LANGU>N</LANGU>
|
||||
<LANGU>O</LANGU>
|
||||
<LANGU>Q</LANGU>
|
||||
<LANGU>R</LANGU>
|
||||
<LANGU>S</LANGU>
|
||||
<LANGU>T</LANGU>
|
||||
<LANGU>U</LANGU>
|
||||
<LANGU>V</LANGU>
|
||||
<LANGU>W</LANGU>
|
||||
<LANGU>c</LANGU>
|
||||
<LANGU>d</LANGU>
|
||||
</I18N_LANGS>
|
||||
<DD02_TEXTS>
|
||||
<item>
|
||||
<DDLANGUAGE>1</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>4</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>5</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>6</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>8</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>B</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>C</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>F</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>G</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>H</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>K</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>L</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>N</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>O</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>Q</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>R</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>S</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>T</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>U</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>V</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>W</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>c</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
<item>
|
||||
<DDLANGUAGE>d</DDLANGUAGE>
|
||||
<DDTEXT>Fieldcatalog for Table Binding</DDTEXT>
|
||||
</item>
|
||||
</DD02_TEXTS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
|
|
Loading…
Reference in New Issue
Block a user