diff --git a/abaplint.json b/abaplint.json
index 3b1b9b7..cd2a0bd 100644
--- a/abaplint.json
+++ b/abaplint.json
@@ -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": {
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..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,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.
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.
diff --git a/src/zcl_excel_common.clas.abap b/src/zcl_excel_common.clas.abap
index ab317bf..9d9300a 100644
--- a/src/zcl_excel_common.clas.abap
+++ b/src/zcl_excel_common.clas.abap
@@ -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.
-scrtext_s = ls_salv_t_column_ref-r_column->get_short_text( ).
-scrtext_m = ls_salv_t_column_ref-r_column->get_medium_text( ).
-scrtext_l = ls_salv_t_column_ref-r_column->get_long_text( ).
+ -currency_column = ls_salv_t_column_ref-r_column->get_currency_column( ).
+ " If currency column not in structure then clear the field again
+ IF -currency_column IS NOT INITIAL.
+ READ TABLE lt_salv_t_column_ref WITH KEY columnname = -currency_column TRANSPORTING NO FIELDS.
+ IF sy-subrc <> 0.
+ CLEAR -currency_column.
+ ENDIF.
+ ENDIF.
+
IF ip_conv_exit_length = abap_false.
-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.
diff --git a/src/zcl_excel_common.clas.testclasses.abap b/src/zcl_excel_common.clas.testclasses.abap
index e4b0987..26313f7 100644
--- a/src/zcl_excel_common.clas.testclasses.abap
+++ b/src/zcl_excel_common.clas.testclasses.abap
@@ -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.
diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap
index f7afd92..1c89b39 100644
--- a/src/zcl_excel_reader_2007.clas.abap
+++ b/src/zcl_excel_reader_2007.clas.abap
@@ -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.
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
diff --git a/src/zcl_excel_theme_color_scheme.clas.abap b/src/zcl_excel_theme_color_scheme.clas.abap
index eb0cc04..887b64f 100644
--- a/src/zcl_excel_theme_color_scheme.clas.abap
+++ b/src/zcl_excel_theme_color_scheme.clas.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 ).
diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap
index 315933c..65edeee 100644
--- a/src/zcl_excel_worksheet.clas.abap
+++ b/src/zcl_excel_worksheet.clas.abap
@@ -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.
TYPE zexcel_s_fieldcatalog,
TYPE zexcel_s_fieldcatalog,
TYPE any,
- TYPE any.
+ TYPE any,
+ TYPE waers.
ls_settings = is_table_settings.
@@ -1101,6 +1106,7 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
LOOP AT ip_table ASSIGNING .
ASSIGN COMPONENT -fieldname OF STRUCTURE TO .
+
" issue #290 Add formula support in table
IF -formula EQ abap_true.
IF -style IS NOT INITIAL.
@@ -1152,18 +1158,26 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
ip_column_formula_id = ls_column_formula-id ).
ENDIF.
ELSE.
+ IF -currency_column IS INITIAL OR ip_conv_curr_amt_ext = abap_false.
+ ASSIGN lc_no_currency TO .
+ ELSE.
+ ASSIGN COMPONENT -currency_column OF STRUCTURE TO .
+ ENDIF.
+
IF -style IS NOT INITIAL.
IF -abap_type IS NOT INITIAL.
- me->set_cell( ip_column = lv_column_alpha
- ip_row = lv_row_int
- ip_value =
- ip_abap_type = -abap_type
- ip_style = -style
- ip_conv_exit_length = ip_conv_exit_length ).
+ me->set_cell( ip_column = lv_column_alpha
+ ip_row = lv_row_int
+ ip_value =
+ ip_abap_type = -abap_type
+ ip_currency =
+ ip_style = -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 =
+ ip_currency =
ip_style = -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 = -abap_type
+ ip_currency =
ip_value =
ip_conv_exit_length = ip_conv_exit_length ).
ELSE.
me->set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
+ ip_currency =
ip_value =
ip_conv_exit_length = ip_conv_exit_length ).
ENDIF.
@@ -2265,6 +2281,10 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
LOOP AT me->sheet_content ASSIGNING FROM lv_index.
AT NEW cell_row.
+ IF iv_end_row <> 0
+ AND -cell_row > iv_end_row.
+ EXIT.
+ ENDIF.
" New line
APPEND INITIAL LINE TO ASSIGNING .
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 .
- IF sy-subrc = 0.
- = .
- lv_value = zcl_excel_common=>number_to_excel_string( ip_value = ).
+ 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 =
+ 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 .
+ IF sy-subrc = 0.
+ = .
+ lv_value = zcl_excel_common=>number_to_excel_string( ip_value = ).
+ ENDIF.
ENDIF.
WHEN cl_abap_typedescr=>typekind_char OR cl_abap_typedescr=>typekind_string OR cl_abap_typedescr=>typekind_num OR
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
diff --git a/src/zcl_excel_writer_csv.clas.abap b/src/zcl_excel_writer_csv.clas.abap
index 5c1bd82..23f6853 100644
--- a/src/zcl_excel_writer_csv.clas.abap
+++ b/src/zcl_excel_writer_csv.clas.abap
@@ -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.
diff --git a/src/zcx_excel.clas.xml b/src/zcx_excel.clas.xml
index 5bbc56e..23ddcb3 100644
--- a/src/zcx_excel.clas.xml
+++ b/src/zcx_excel.clas.xml
@@ -42,6 +42,14 @@
0001
+
+
+ LIMU
+
+ ZCX_EXCEL
+ 0001
+
+
CONSTRUCTOR
diff --git a/src/zexcel_s_fieldcatalog.tabl.xml b/src/zexcel_s_fieldcatalog.tabl.xml
index b7958b7..8bdbe28 100644
--- a/src/zexcel_s_fieldcatalog.tabl.xml
+++ b/src/zexcel_s_fieldcatalog.tabl.xml
@@ -117,7 +117,132 @@
0
E
+
+ CURRENCY_COLUMN
+ ZEXCEL_FIELDNAME
+ 0
+ E
+
+
+ 1
+ 4
+ 5
+ 6
+ 8
+ B
+ C
+ F
+ G
+ H
+ K
+ L
+ N
+ O
+ Q
+ R
+ S
+ T
+ U
+ V
+ W
+ c
+ d
+
+
+
-
+ 1
+ Fieldcatalog for Table Binding
+
+ -
+ 4
+ Fieldcatalog for Table Binding
+
+ -
+ 5
+ Fieldcatalog for Table Binding
+
+ -
+ 6
+ Fieldcatalog for Table Binding
+
+ -
+ 8
+ Fieldcatalog for Table Binding
+
+ -
+ B
+ Fieldcatalog for Table Binding
+
+ -
+ C
+ Fieldcatalog for Table Binding
+
+ -
+ F
+ Fieldcatalog for Table Binding
+
+ -
+ G
+ Fieldcatalog for Table Binding
+
+ -
+ H
+ Fieldcatalog for Table Binding
+
+ -
+ K
+ Fieldcatalog for Table Binding
+
+ -
+ L
+ Fieldcatalog for Table Binding
+
+ -
+ N
+ Fieldcatalog for Table Binding
+
+ -
+ O
+ Fieldcatalog for Table Binding
+
+ -
+ Q
+ Fieldcatalog for Table Binding
+
+ -
+ R
+ Fieldcatalog for Table Binding
+
+ -
+ S
+ Fieldcatalog for Table Binding
+
+ -
+ T
+ Fieldcatalog for Table Binding
+
+ -
+ U
+ Fieldcatalog for Table Binding
+
+ -
+ V
+ Fieldcatalog for Table Binding
+
+ -
+ W
+ Fieldcatalog for Table Binding
+
+ -
+ c
+ Fieldcatalog for Table Binding
+
+ -
+ d
+ Fieldcatalog for Table Binding
+
+