From d30855345c94bf190fd680f4b0b374eb4e62c89a Mon Sep 17 00:00:00 2001
From: sandraros <34005250+sandraros@users.noreply.github.com>
Date: Sun, 29 Oct 2023 18:11:02 +0100
Subject: [PATCH 1/4] XML I18N_LANGS/DD02_TEXTS - ZEXCEL_S_FIELDCATALOG (#1149)
New XML added by abapGit while serializing the DDIC structure ZEXCEL_S_FIELDCATALOG:
1
...
-
1
Fieldcatalog for Table Binding
...
---
src/zexcel_s_fieldcatalog.tabl.xml | 119 +++++++++++++++++++++++++++++
1 file changed, 119 insertions(+)
diff --git a/src/zexcel_s_fieldcatalog.tabl.xml b/src/zexcel_s_fieldcatalog.tabl.xml
index b7958b7..7adfa26 100644
--- a/src/zexcel_s_fieldcatalog.tabl.xml
+++ b/src/zexcel_s_fieldcatalog.tabl.xml
@@ -118,6 +118,125 @@
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
+
+
From cf8bb2c5012c42bd6fb4cea2caef4ad66fbab972 Mon Sep 17 00:00:00 2001
From: Daniel Wegner
Date: Sun, 29 Oct 2023 18:29:51 +0100
Subject: [PATCH 2/4] add iv_end_row to convert_to_table (#1148)
Co-authored-by: sandraros <34005250+sandraros@users.noreply.github.com>
---
src/zcl_excel_worksheet.clas.abap | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap
index c650015..cec706b 100644
--- a/src/zcl_excel_worksheet.clas.abap
+++ b/src/zcl_excel_worksheet.clas.abap
@@ -673,6 +673,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
@@ -2263,6 +2264,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.
From ccda3a0aa8ea4dbcabd8e7be46848af1849ab71e Mon Sep 17 00:00:00 2001
From: Arno <32099906+aspeitkamp@users.noreply.github.com>
Date: Sun, 29 Oct 2023 19:09:30 +0100
Subject: [PATCH 3/4] read all header/footer (odd/even) elements (#1144)
Previously only the "oddFooter" was read and stored. Read the missing elements as well.
---
src/zcl_excel_reader_2007.clas.abap | 15 +++++++++++++++
1 file changed, 15 insertions(+)
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.
From c1a20e870ba02482d1d7f276f8f8144ddcfe180d Mon Sep 17 00:00:00 2001
From: larsip <77494750+larsip@users.noreply.github.com>
Date: Sat, 4 Nov 2023 17:09:11 +0100
Subject: [PATCH 4/4] Convert currency amount to external format (#1147)
Fix #1145
* Convert currency amount to external format
Fetching currency reference field from ALV and use the value from this field convert the value to external format
* Missing field catalog update
* Little changes proposed
* Code best positioned, delete unused declaration
Latest changes proposed by darnoc312
---
src/zcl_excel_common.clas.abap | 25 +++++++--
src/zcl_excel_common.clas.testclasses.abap | 44 ++++++++++++++++
src/zcl_excel_worksheet.clas.abap | 61 +++++++++++++++-------
src/zexcel_s_fieldcatalog.tabl.xml | 6 +++
4 files changed, 111 insertions(+), 25 deletions(-)
diff --git a/src/zcl_excel_common.clas.abap b/src/zcl_excel_common.clas.abap
index 17263df..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 ).
@@ -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 f6a53af..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.
@@ -467,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.
* ========================
diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap
index cec706b..5cb1ce0 100644
--- a/src/zcl_excel_worksheet.clas.abap
+++ b/src/zcl_excel_worksheet.clas.abap
@@ -172,6 +172,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
@@ -499,6 +500,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
@@ -797,15 +799,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
@@ -975,7 +977,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,
@@ -1001,7 +1004,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.
@@ -1100,6 +1104,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.
@@ -1151,18 +1156,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.
@@ -1171,11 +1184,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.
@@ -3905,12 +3920,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/zexcel_s_fieldcatalog.tabl.xml b/src/zexcel_s_fieldcatalog.tabl.xml
index 7adfa26..f723983 100644
--- a/src/zexcel_s_fieldcatalog.tabl.xml
+++ b/src/zexcel_s_fieldcatalog.tabl.xml
@@ -117,6 +117,12 @@
0
E
+
+ CURRENCY_COLUMN
+ REFFIELD
+ 0
+ E
+
1