Merge branch 'main' into fix-issue-1013-part2

This commit is contained in:
Lars Hvam 2023-12-11 08:12:14 +01:00 committed by GitHub
commit 22b622c5a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 544 additions and 45 deletions

View File

@ -136,7 +136,9 @@
"local_class_naming": false, "local_class_naming": false,
"main_file_contents": true, "main_file_contents": true,
"message_exists": false, "message_exists": false,
"msag_consistency": true, "msag_consistency": {
"numericParamters": false
},
"newline_between_methods": false, "newline_between_methods": false,
"no_public_attributes": false, "no_public_attributes": false,
"object_naming": { "object_naming": {

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

View File

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

View File

@ -48,7 +48,7 @@ CLASS zcl_excel_common DEFINITION
zcx_excel. zcx_excel.
CLASS-METHODS convert_columnrow2column_a_row CLASS-METHODS convert_columnrow2column_a_row
IMPORTING IMPORTING
!i_columnrow TYPE clike !i_columnrow TYPE clike
EXPORTING EXPORTING
!e_column TYPE zexcel_cell_column_alpha !e_column TYPE zexcel_cell_column_alpha
!e_column_int TYPE zexcel_cell_column !e_column_int TYPE zexcel_cell_column
@ -77,7 +77,7 @@ CLASS zcl_excel_common DEFINITION
!e_row TYPE zexcel_cell_row . !e_row TYPE zexcel_cell_row .
CLASS-METHODS clone_ixml_with_namespaces CLASS-METHODS clone_ixml_with_namespaces
IMPORTING IMPORTING
element TYPE REF TO if_ixml_element element TYPE REF TO if_ixml_element
RETURNING RETURNING
VALUE(result) TYPE REF TO if_ixml_element. VALUE(result) TYPE REF TO if_ixml_element.
CLASS-METHODS date_to_excel_string CLASS-METHODS date_to_excel_string
@ -133,6 +133,7 @@ CLASS zcl_excel_common DEFINITION
CLASS-METHODS number_to_excel_string CLASS-METHODS number_to_excel_string
IMPORTING IMPORTING
VALUE(ip_value) TYPE numeric VALUE(ip_value) TYPE numeric
ip_currency TYPE waers_curc OPTIONAL
RETURNING RETURNING
VALUE(ep_value) TYPE zexcel_cell_value . VALUE(ep_value) TYPE zexcel_cell_value .
CLASS-METHODS recursive_class_to_struct CLASS-METHODS recursive_class_to_struct
@ -498,8 +499,8 @@ CLASS zcl_excel_common IMPLEMENTATION.
METHOD convert_column_a_row2columnrow. METHOD convert_column_a_row2columnrow.
DATA: lv_row_alpha TYPE string, DATA: lv_row_alpha TYPE string,
lv_column_alpha TYPE zexcel_cell_column_alpha. lv_column_alpha TYPE zexcel_cell_column_alpha.
lv_row_alpha = i_row. lv_row_alpha = i_row.
lv_column_alpha = zcl_excel_common=>convert_column2alpha( i_column ). lv_column_alpha = zcl_excel_common=>convert_column2alpha( i_column ).
@ -846,7 +847,7 @@ CLASS zcl_excel_common IMPLEMENTATION.
lv_value = ip_value. 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. IF sy-subrc = 0.
REPLACE ALL OCCURRENCES OF `'` IN lv_value WITH `''`. REPLACE ALL OCCURRENCES OF `'` IN lv_value WITH `''`.
CONCATENATE `'` lv_value `'` INTO lv_value . 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_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_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>-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. IF ip_conv_exit_length = abap_false.
<fcat>-abap_type = lo_salv_column_table->get_ddic_inttype( ). <fcat>-abap_type = lo_salv_column_table->get_ddic_inttype( ).
ENDIF. ENDIF.
@ -1007,7 +1017,11 @@ CLASS zcl_excel_common IMPLEMENTATION.
METHOD number_to_excel_string. METHOD number_to_excel_string.
DATA: lv_value_c TYPE c LENGTH 100. 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 '.'. REPLACE ALL OCCURRENCES OF ',' IN lv_value_c WITH '.'.
ep_value = lv_value_c. ep_value = lv_value_c.
@ -1691,4 +1705,5 @@ CLASS zcl_excel_common IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -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_string4 FOR TESTING RAISING cx_static_check.
METHODS date_to_excel_string5 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 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: encrypt_password FOR TESTING.
METHODS: excel_string_to_date FOR TESTING. METHODS: excel_string_to_date FOR TESTING.
METHODS excel_string_to_time1 FOR TESTING RAISING cx_static_check. 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_upperside_out FOR TESTING.
METHODS is_cell_in_range_rightside_out FOR TESTING. METHODS is_cell_in_range_rightside_out FOR TESTING.
METHODS is_cell_in_range_lowerside_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. ENDCLASS.
@ -461,6 +470,47 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
ENDMETHOD. 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. METHOD encrypt_password.
* ======================== * ========================
@ -1597,4 +1647,88 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
ENDTRY. ENDTRY.
ENDMETHOD. "is_cell_in_range_lowerside_out. 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. ENDCLASS.

View File

@ -2859,6 +2859,21 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ls_odd_footer-left_value = lo_ixml_hf_value_elem->get_value( ). ls_odd_footer-left_value = lo_ixml_hf_value_elem->get_value( ).
ENDIF. 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 * 2do§1 Header/footer
" TODO.. get the rest. " TODO.. get the rest.

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

View File

@ -100,7 +100,7 @@ CLASS zcl_excel_theme_color_scheme IMPLEMENTATION.
parent = lo_elements ). parent = lo_elements ).
lo_scheme_element->set_attribute( name = c_name value = name ). 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 lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix
name = c_dark1 name = c_dark1
parent = lo_scheme_element ). parent = lo_scheme_element ).

View File

@ -174,6 +174,7 @@ CLASS zcl_excel_worksheet DEFINITION
VALUE(iv_default_descr) TYPE c OPTIONAL VALUE(iv_default_descr) TYPE c OPTIONAL
!iv_no_line_if_empty TYPE abap_bool DEFAULT abap_false !iv_no_line_if_empty TYPE abap_bool DEFAULT abap_false
!ip_conv_exit_length 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 EXPORTING
!es_table_settings TYPE zexcel_s_table_settings !es_table_settings TYPE zexcel_s_table_settings
RAISING RAISING
@ -501,6 +502,7 @@ CLASS zcl_excel_worksheet DEFINITION
!ip_hyperlink TYPE REF TO zcl_excel_hyperlink OPTIONAL !ip_hyperlink TYPE REF TO zcl_excel_hyperlink OPTIONAL
!ip_data_type TYPE zexcel_cell_data_type OPTIONAL !ip_data_type TYPE zexcel_cell_data_type OPTIONAL
!ip_abap_type TYPE abap_typekind OPTIONAL !ip_abap_type TYPE abap_typekind OPTIONAL
!ip_currency TYPE waers_curc OPTIONAL
!it_rtf TYPE zexcel_t_rtf OPTIONAL !it_rtf TYPE zexcel_t_rtf OPTIONAL
!ip_column_formula_id TYPE mty_s_column_formula-id OPTIONAL !ip_column_formula_id TYPE mty_s_column_formula-id OPTIONAL
!ip_conv_exit_length TYPE abap_bool DEFAULT abap_false !ip_conv_exit_length TYPE abap_bool DEFAULT abap_false
@ -675,6 +677,7 @@ CLASS zcl_excel_worksheet DEFINITION
IMPORTING IMPORTING
!it_field_catalog TYPE zexcel_t_fieldcatalog OPTIONAL !it_field_catalog TYPE zexcel_t_fieldcatalog OPTIONAL
!iv_begin_row TYPE int4 DEFAULT 2 !iv_begin_row TYPE int4 DEFAULT 2
!iv_end_row TYPE int4 DEFAULT 0
EXPORTING EXPORTING
!et_data TYPE STANDARD TABLE !et_data TYPE STANDARD TABLE
!er_data TYPE REF TO data !er_data TYPE REF TO data
@ -798,15 +801,15 @@ CLASS zcl_excel_worksheet DEFINITION
iv_default_descr TYPE c iv_default_descr TYPE c
it_field_catalog TYPE zexcel_t_fieldcatalog it_field_catalog TYPE zexcel_t_fieldcatalog
RETURNING RETURNING
VALUE(result) TYPE zexcel_t_fieldcatalog. VALUE(result) TYPE zexcel_t_fieldcatalog.
METHODS normalize_columnrow_parameter METHODS normalize_columnrow_parameter
IMPORTING IMPORTING
ip_columnrow TYPE csequence OPTIONAL ip_columnrow TYPE csequence OPTIONAL
ip_column TYPE simple OPTIONAL ip_column TYPE simple OPTIONAL
ip_row TYPE zexcel_cell_row OPTIONAL ip_row TYPE zexcel_cell_row OPTIONAL
EXPORTING EXPORTING
ep_column TYPE zexcel_cell_column ep_column TYPE zexcel_cell_column
ep_row TYPE zexcel_cell_row ep_row TYPE zexcel_cell_row
RAISING RAISING
zcx_excel. zcx_excel.
METHODS normalize_range_parameter METHODS normalize_range_parameter
@ -976,7 +979,8 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
CONSTANTS: CONSTANTS:
lc_top_left_column TYPE zexcel_cell_column_alpha VALUE 'A', 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: DATA:
lv_row_int TYPE zexcel_cell_row, 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> TYPE zexcel_s_fieldcatalog,
<ls_field_catalog_custom> TYPE zexcel_s_fieldcatalog, <ls_field_catalog_custom> TYPE zexcel_s_fieldcatalog,
<fs_table_line> TYPE any, <fs_table_line> TYPE any,
<fs_fldval> TYPE any. <fs_fldval> TYPE any,
<fs_fldval_currency> TYPE waers.
ls_settings = is_table_settings. ls_settings = is_table_settings.
@ -1101,6 +1106,7 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
LOOP AT ip_table ASSIGNING <fs_table_line>. LOOP AT ip_table ASSIGNING <fs_table_line>.
ASSIGN COMPONENT <ls_field_catalog>-fieldname OF STRUCTURE <fs_table_line> TO <fs_fldval>. ASSIGN COMPONENT <ls_field_catalog>-fieldname OF STRUCTURE <fs_table_line> TO <fs_fldval>.
" issue #290 Add formula support in table " issue #290 Add formula support in table
IF <ls_field_catalog>-formula EQ abap_true. IF <ls_field_catalog>-formula EQ abap_true.
IF <ls_field_catalog>-style IS NOT INITIAL. 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 ). ip_column_formula_id = ls_column_formula-id ).
ENDIF. ENDIF.
ELSE. 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>-style IS NOT INITIAL.
IF <ls_field_catalog>-abap_type IS NOT INITIAL. IF <ls_field_catalog>-abap_type IS NOT INITIAL.
me->set_cell( ip_column = lv_column_alpha me->set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int ip_row = lv_row_int
ip_value = <fs_fldval> ip_value = <fs_fldval>
ip_abap_type = <ls_field_catalog>-abap_type ip_abap_type = <ls_field_catalog>-abap_type
ip_style = <ls_field_catalog>-style ip_currency = <fs_fldval_currency>
ip_conv_exit_length = ip_conv_exit_length ). ip_style = <ls_field_catalog>-style
ip_conv_exit_length = ip_conv_exit_length ).
ELSE. ELSE.
me->set_cell( ip_column = lv_column_alpha me->set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int ip_row = lv_row_int
ip_value = <fs_fldval> ip_value = <fs_fldval>
ip_currency = <fs_fldval_currency>
ip_style = <ls_field_catalog>-style ip_style = <ls_field_catalog>-style
ip_conv_exit_length = ip_conv_exit_length ). ip_conv_exit_length = ip_conv_exit_length ).
ENDIF. ENDIF.
@ -1172,11 +1186,13 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
me->set_cell( ip_column = lv_column_alpha me->set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int ip_row = lv_row_int
ip_abap_type = <ls_field_catalog>-abap_type ip_abap_type = <ls_field_catalog>-abap_type
ip_currency = <fs_fldval_currency>
ip_value = <fs_fldval> ip_value = <fs_fldval>
ip_conv_exit_length = ip_conv_exit_length ). ip_conv_exit_length = ip_conv_exit_length ).
ELSE. ELSE.
me->set_cell( ip_column = lv_column_alpha me->set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int ip_row = lv_row_int
ip_currency = <fs_fldval_currency>
ip_value = <fs_fldval> ip_value = <fs_fldval>
ip_conv_exit_length = ip_conv_exit_length ). ip_conv_exit_length = ip_conv_exit_length ).
ENDIF. ENDIF.
@ -2265,6 +2281,10 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
LOOP AT me->sheet_content ASSIGNING <ls_sheet_content> FROM lv_index. LOOP AT me->sheet_content ASSIGNING <ls_sheet_content> FROM lv_index.
AT NEW cell_row. AT NEW cell_row.
IF iv_end_row <> 0
AND <ls_sheet_content>-cell_row > iv_end_row.
EXIT.
ENDIF.
" New line " New line
APPEND INITIAL LINE TO <lt_data> ASSIGNING <ls_data>. APPEND INITIAL LINE TO <lt_data> ASSIGNING <ls_data>.
lv_index = sy-tabix. lv_index = sy-tabix.
@ -3902,12 +3922,18 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
cl_abap_typedescr=>typekind_decfloat OR cl_abap_typedescr=>typekind_decfloat OR
cl_abap_typedescr=>typekind_decfloat16 OR cl_abap_typedescr=>typekind_decfloat16 OR
cl_abap_typedescr=>typekind_decfloat34. cl_abap_typedescr=>typekind_decfloat34.
lo_addit = cl_abap_elemdescr=>get_f( ). IF lv_value_type = cl_abap_typedescr=>typekind_packed
CREATE DATA lo_value_new TYPE HANDLE lo_addit. AND ip_currency IS NOT INITIAL.
ASSIGN lo_value_new->* TO <fs_numeric>. lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_value>
IF sy-subrc = 0. ip_currency = ip_currency ).
<fs_numeric> = <fs_value>. ELSE.
lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ). 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. ENDIF.
WHEN cl_abap_typedescr=>typekind_char OR cl_abap_typedescr=>typekind_string OR cl_abap_typedescr=>typekind_num OR WHEN cl_abap_typedescr=>typekind_char OR cl_abap_typedescr=>typekind_string OR cl_abap_typedescr=>typekind_num OR

View File

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

View File

@ -60,6 +60,10 @@ CLASS zcl_excel_writer_csv IMPLEMENTATION.
* .csv format with ; delimiter * .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( ). ep_excel = me->create_csv( ).
ENDMETHOD. ENDMETHOD.

View File

@ -42,6 +42,14 @@
<LFD_NUM>0001</LFD_NUM> <LFD_NUM>0001</LFD_NUM>
</SOTR_USE> </SOTR_USE>
</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> <DESCRIPTIONS>
<SEOCOMPOTX> <SEOCOMPOTX>
<CMPNAME>CONSTRUCTOR</CMPNAME> <CMPNAME>CONSTRUCTOR</CMPNAME>

View File

@ -117,7 +117,132 @@
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P>
<FIELDNAME>CURRENCY_COLUMN</FIELDNAME>
<ROLLNAME>ZEXCEL_FIELDNAME</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE>
</DD03P>
</DD03P_TABLE> </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:values>
</asx:abap> </asx:abap>
</abapGit> </abapGit>