diff --git a/src/not_cloud/zexcel_column_id.dtel.xml b/src/not_cloud/zexcel_column_id.dtel.xml
new file mode 100644
index 0000000..2644390
--- /dev/null
+++ b/src/not_cloud/zexcel_column_id.dtel.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+ ZEXCEL_COLUMN_ID
+ E
+ 30
+ 10
+ 15
+ 20
+ ALV control: Column ID
+ Column ID
+ Column ID
+ Column ID
+ Column ID
+ D
+ INT4
+ 000010
+ 000011
+
+
+
+
diff --git a/src/not_cloud/zexcel_component_position.dtel.xml b/src/not_cloud/zexcel_component_position.dtel.xml
new file mode 100644
index 0000000..fab73ef
--- /dev/null
+++ b/src/not_cloud/zexcel_component_position.dtel.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ ZEXCEL_COMPONENT_POSITION
+ E
+ 06
+ 10
+ 15
+ 20
+ Position of the field in the table
+ TabPos
+ Table pos.
+ Table position
+ Table position
+ SDIC
+ 01
+ D
+ NUMC
+ 000004
+ 000004
+
+
+
+
diff --git a/src/not_cloud/zexcel_convexit.doma.xml b/src/not_cloud/zexcel_convexit.doma.xml
new file mode 100644
index 0000000..9658b25
--- /dev/null
+++ b/src/not_cloud/zexcel_convexit.doma.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ ZEXCEL_CONVEXIT
+ E
+ CHAR
+ 000005
+ 000005
+ Conversion routine
+ SDIC
+ 01
+
+
+
+
diff --git a/src/not_cloud/zexcel_convexit.dtel.xml b/src/not_cloud/zexcel_convexit.dtel.xml
new file mode 100644
index 0000000..be27ee0
--- /dev/null
+++ b/src/not_cloud/zexcel_convexit.dtel.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ZEXCEL_CONVEXIT
+ E
+ ZEXCEL_CONVEXIT
+ 30
+ 10
+ 15
+ 20
+ Conversion Routine
+ Conversion Routine
+ Conv.Rout.
+ Convers. Rout.
+ Conversion Routine
+ SDIC
+ 01
+ D
+ D
+
+
+
+
diff --git a/src/not_cloud/zexcel_ddic_flag.doma.xml b/src/not_cloud/zexcel_ddic_flag.doma.xml
new file mode 100644
index 0000000..b09e22e
--- /dev/null
+++ b/src/not_cloud/zexcel_ddic_flag.doma.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+ ZEXCEL_DDIC_FLAG
+ E
+ CHAR
+ 000001
+ 000001
+ X
+ Flag (X or blank)
+ SDIC
+ 01
+
+
+
+ 0001
+ E
+ Do not set flag
+
+
+ 0002
+ E
+ X
+ Set flag
+
+
+
+
+
diff --git a/src/not_cloud/zexcel_disp_text_long.doma.xml b/src/not_cloud/zexcel_disp_text_long.doma.xml
new file mode 100644
index 0000000..47a1290
--- /dev/null
+++ b/src/not_cloud/zexcel_disp_text_long.doma.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZEXCEL_DISP_TEXT_LONG
+ E
+ CHAR
+ 000040
+ 000040
+ X
+ Long keyword
+ SDIC
+ 01
+
+
+
+
diff --git a/src/not_cloud/zexcel_disp_text_long.dtel.xml b/src/not_cloud/zexcel_disp_text_long.dtel.xml
new file mode 100644
index 0000000..61b0229
--- /dev/null
+++ b/src/not_cloud/zexcel_disp_text_long.dtel.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ ZEXCEL_DISP_TEXT_LONG
+ E
+ ZEXCEL_DISP_TEXT_LONG
+ 30
+ 10
+ 15
+ 20
+ Long Field Label
+ Long Field Label
+ Long
+ Long Fld Label
+ Long field label
+ SDIC
+ 01
+ D
+ SCRTEXT_L
+ D
+
+
+
+
diff --git a/src/not_cloud/zexcel_disp_text_medium.doma.xml b/src/not_cloud/zexcel_disp_text_medium.doma.xml
new file mode 100644
index 0000000..96832cd
--- /dev/null
+++ b/src/not_cloud/zexcel_disp_text_medium.doma.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZEXCEL_DISP_TEXT_MEDIUM
+ E
+ CHAR
+ 000020
+ 000020
+ X
+ Medium keyword
+ SDIC
+ 01
+
+
+
+
diff --git a/src/not_cloud/zexcel_disp_text_medium.dtel.xml b/src/not_cloud/zexcel_disp_text_medium.dtel.xml
new file mode 100644
index 0000000..d4676ee
--- /dev/null
+++ b/src/not_cloud/zexcel_disp_text_medium.dtel.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ ZEXCEL_DISP_TEXT_MEDIUM
+ E
+ ZEXCEL_DISP_TEXT_MEDIUM
+ 30
+ 10
+ 15
+ 20
+ Medium Field Label
+ Medium Field Label
+ Medium
+ Medium Label
+ Medium Field Label
+ SDIC
+ 01
+ D
+ SCRTEXT_M
+ D
+
+
+
+
diff --git a/src/not_cloud/zexcel_disp_text_short.doma.xml b/src/not_cloud/zexcel_disp_text_short.doma.xml
new file mode 100644
index 0000000..283f0a5
--- /dev/null
+++ b/src/not_cloud/zexcel_disp_text_short.doma.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZEXCEL_DISP_TEXT_SHORT
+ E
+ CHAR
+ 000010
+ 000010
+ X
+ Short keyword
+ SDIC
+ 01
+
+
+
+
diff --git a/src/not_cloud/zexcel_disp_text_short.dtel.xml b/src/not_cloud/zexcel_disp_text_short.dtel.xml
new file mode 100644
index 0000000..c322e85
--- /dev/null
+++ b/src/not_cloud/zexcel_disp_text_short.dtel.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ ZEXCEL_DISP_TEXT_SHORT
+ E
+ ZEXCEL_DISP_TEXT_SHORT
+ 30
+ 10
+ 15
+ 20
+ Short Field Label
+ Short field label
+ Short
+ ShortFieldLabel
+ Short field label
+ SDIC
+ 01
+ D
+ SCRTEXT_S
+ D
+
+
+
+
diff --git a/src/not_cloud/zexcel_key_color_override.dtel.xml b/src/not_cloud/zexcel_key_color_override.dtel.xml
new file mode 100644
index 0000000..4f09479
--- /dev/null
+++ b/src/not_cloud/zexcel_key_color_override.dtel.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ ZEXCEL_KEY_COLOR_OVERRIDE
+ E
+ CHAR1
+ ALV control: Override key color
+ D
+ D
+
+
+
+
diff --git a/src/zexcel_s_converter_col.tabl.xml b/src/not_cloud/zexcel_s_converter_col.tabl.xml
similarity index 93%
rename from src/zexcel_s_converter_col.tabl.xml
rename to src/not_cloud/zexcel_s_converter_col.tabl.xml
index 15120b6..3532afa 100644
--- a/src/zexcel_s_converter_col.tabl.xml
+++ b/src/not_cloud/zexcel_s_converter_col.tabl.xml
@@ -7,6 +7,7 @@
E
INTTAB
Color information for cells
+ E
3
@@ -36,7 +37,7 @@
NOKEYCOL
- LVC_NOKEYC
+ ZEXCEL_KEY_COLOR_OVERRIDE
0
E
diff --git a/src/zexcel_s_converter_fcat.tabl.xml b/src/not_cloud/zexcel_s_converter_fcat.tabl.xml
similarity index 77%
rename from src/zexcel_s_converter_fcat.tabl.xml
rename to src/not_cloud/zexcel_s_converter_fcat.tabl.xml
index b0281b5..23bc9e0 100644
--- a/src/zexcel_s_converter_fcat.tabl.xml
+++ b/src/not_cloud/zexcel_s_converter_fcat.tabl.xml
@@ -7,15 +7,14 @@
E
INTTAB
Field catalog for converter
+ E
4
TABNAME
TABNAME
- DD02L
0
- P
E
@@ -32,7 +31,7 @@
POSITION
- TABFDPOS
+ ZEXCEL_COMPONENT_POSITION
0
E
@@ -54,19 +53,19 @@
SCRTEXT_S
- SCRTEXT_S
+ ZEXCEL_DISP_TEXT_SHORT
0
E
SCRTEXT_M
- SCRTEXT_M
+ ZEXCEL_DISP_TEXT_MEDIUM
0
E
SCRTEXT_L
- SCRTEXT_L
+ ZEXCEL_DISP_TEXT_LONG
0
E
@@ -160,53 +159,17 @@
COL_ID
- LVC_COLID
+ ZEXCEL_COLUMN_ID
0
E
CONVEXIT
- CONVEXIT
+ ZEXCEL_CONVEXIT
0
E
-
-
- TABNAME
- ZEXCEL_S_CONVERTER_FCAT
- TABNAME
- DD02L
- TABNAME
- 0001
- AS4TAB
- CHAR
-
-
- TABNAME
- 'A'
- DD02L
- AS4LOCAL
- 0002
- AS4LOCAL
- CHAR
-
-
- TABNAME
- '0000'
- DD02L
- AS4VERS
- 0003
- AS4VERS
- NUMC
-
-
-
-
- TABNAME
- DD02L
-
-
diff --git a/src/not_cloud/zexcel_screen_display.dtel.xml b/src/not_cloud/zexcel_screen_display.dtel.xml
new file mode 100644
index 0000000..524eeac
--- /dev/null
+++ b/src/not_cloud/zexcel_screen_display.dtel.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+ ZEXCEL_SCREEN_DISPLAY
+ E
+ ZEXCEL_DDIC_FLAG
+ 02
+ 10
+ 15
+ 20
+ Flag: Field is displayed on dynpro
+ SF
+ Dynpro
+ Screen field
+ Screen field
+ SDIC
+ D
+ D
+
+
+
+
diff --git a/src/zexcel_t_converter_col.ttyp.xml b/src/not_cloud/zexcel_t_converter_col.ttyp.xml
similarity index 100%
rename from src/zexcel_t_converter_col.ttyp.xml
rename to src/not_cloud/zexcel_t_converter_col.ttyp.xml
diff --git a/src/zexcel_t_converter_fcat.ttyp.xml b/src/not_cloud/zexcel_t_converter_fcat.ttyp.xml
similarity index 100%
rename from src/zexcel_t_converter_fcat.ttyp.xml
rename to src/not_cloud/zexcel_t_converter_fcat.ttyp.xml
diff --git a/src/zif_excel_converter.intf.abap b/src/not_cloud/zif_excel_converter.intf.abap
similarity index 100%
rename from src/zif_excel_converter.intf.abap
rename to src/not_cloud/zif_excel_converter.intf.abap
diff --git a/src/zif_excel_converter.intf.xml b/src/not_cloud/zif_excel_converter.intf.xml
similarity index 100%
rename from src/zif_excel_converter.intf.xml
rename to src/not_cloud/zif_excel_converter.intf.xml
diff --git a/src/package.devc.xml b/src/package.devc.xml
index 90924fd..cf411f3 100644
--- a/src/package.devc.xml
+++ b/src/package.devc.xml
@@ -3,7 +3,7 @@
- Spreadsheet libraries
+ ABAP2XLSX
diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap
index 1c89b39..9eef36a 100644
--- a/src/zcl_excel_reader_2007.clas.abap
+++ b/src/zcl_excel_reader_2007.clas.abap
@@ -106,6 +106,13 @@ CLASS zcl_excel_reader_2007 DEFINITION
END OF t_shared_string .
TYPES:
t_shared_strings TYPE STANDARD TABLE OF t_shared_string WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF t_table,
+ id TYPE string,
+ target TYPE string,
+ END OF t_table .
+ TYPES:
+ t_tables TYPE HASHED TABLE OF t_table WITH UNIQUE KEY id .
DATA shared_strings TYPE t_shared_strings .
DATA styles TYPE t_style_refs .
@@ -268,6 +275,15 @@ CLASS zcl_excel_reader_2007 DEFINITION
!io_worksheet TYPE REF TO zcl_excel_worksheet
RAISING
zcx_excel .
+ "! Load worksheet tables
+ METHODS load_worksheet_tables
+ IMPORTING
+ io_ixml_worksheet TYPE REF TO if_ixml_document
+ io_worksheet TYPE REF TO zcl_excel_worksheet
+ iv_dirname TYPE string
+ it_tables TYPE t_tables
+ RAISING
+ zcx_excel .
CLASS-METHODS resolve_path
IMPORTING
!ip_path TYPE string
@@ -290,7 +306,12 @@ CLASS zcl_excel_reader_2007 DEFINITION
iv_path TYPE string
!ip_excel TYPE REF TO zcl_excel
RAISING
- zcx_excel .
+ zcx_excel.
+ METHODS provided_string_is_escaped
+ IMPORTING
+ !value TYPE string
+ RETURNING
+ VALUE(is_escaped) TYPE abap_bool.
CONSTANTS: BEGIN OF namespace,
x14ac TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',
@@ -2314,6 +2335,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
lc_rel_hyperlink TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',
lc_rel_comments TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',
lc_rel_printer TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings'.
+ CONSTANTS lc_rel_table TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table'.
DATA: lo_ixml_worksheet TYPE REF TO if_ixml_document,
lo_ixml_cells TYPE REF TO if_ixml_node_collection,
@@ -2408,6 +2430,8 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
lt_datavalidation_range TYPE TABLE OF string,
lt_rtf TYPE zexcel_t_rtf,
ex TYPE REF TO cx_root.
+ DATA lt_tables TYPE t_tables.
+ DATA ls_table TYPE t_table.
FIELD-SYMBOLS:
TYPE t_shared_string.
@@ -2478,6 +2502,10 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
CATCH zcx_excel.
ENDTRY.
+ WHEN lc_rel_table.
+ MOVE-CORRESPONDING ls_relationship TO ls_table.
+ INSERT ls_table INTO TABLE lt_tables.
+
WHEN OTHERS.
ENDCASE.
@@ -2501,6 +2529,16 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ENDIF.
ENDIF.
+ " Read tables (must be done before loading sheet contents)
+ TRY.
+ me->load_worksheet_tables( io_ixml_worksheet = lo_ixml_worksheet
+ io_worksheet = io_worksheet
+ iv_dirname = lv_dirname
+ it_tables = lt_tables ).
+ CATCH zcx_excel. " Ignore reading errors - pass everything we were able to identify
+ ENDTRY.
+
+ " Sheet contents
lo_ixml_rows = lo_ixml_worksheet->get_elements_by_tag_name_ns( name = 'row' uri = namespace-main ).
lo_ixml_iterator = lo_ixml_rows->create_iterator( ).
lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ).
@@ -3885,6 +3923,130 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ENDMETHOD.
+ METHOD load_worksheet_tables.
+
+ DATA lo_ixml_table_columns TYPE REF TO if_ixml_node_collection.
+ DATA lo_ixml_table_column TYPE REF TO if_ixml_element.
+ DATA lo_ixml_table TYPE REF TO if_ixml_element.
+ DATA lo_ixml_table_style TYPE REF TO if_ixml_element.
+ DATA lt_field_catalog TYPE zexcel_t_fieldcatalog.
+ DATA ls_field_catalog TYPE zexcel_s_fieldcatalog.
+ DATA lo_ixml_iterator TYPE REF TO if_ixml_node_iterator.
+ DATA ls_table_settings TYPE zexcel_s_table_settings.
+ DATA lv_path TYPE string.
+ DATA lt_components TYPE abap_component_tab.
+ DATA ls_component TYPE abap_componentdescr.
+ DATA lo_rtti_table TYPE REF TO cl_abap_tabledescr.
+ DATA lv_dref_table TYPE REF TO data.
+ DATA lv_num_lines TYPE i.
+ DATA lo_line_type TYPE REF TO cl_abap_structdescr.
+
+ DATA: BEGIN OF ls_table,
+ id TYPE string,
+ name TYPE string,
+ displayname TYPE string,
+ ref TYPE string,
+ totalsrowshown TYPE string,
+ END OF ls_table.
+
+ DATA: BEGIN OF ls_table_style,
+ name TYPE string,
+ showrowstripes TYPE string,
+ showcolumnstripes TYPE string,
+ END OF ls_table_style.
+
+ DATA: BEGIN OF ls_table_column,
+ id TYPE string,
+ name TYPE string,
+ END OF ls_table_column.
+
+ FIELD-SYMBOLS LIKE LINE OF it_tables.
+ FIELD-SYMBOLS TYPE STANDARD TABLE.
+ FIELD-SYMBOLS TYPE zexcel_s_fieldcatalog.
+
+ LOOP AT it_tables ASSIGNING .
+
+ CONCATENATE iv_dirname -target INTO lv_path.
+ lv_path = resolve_path( lv_path ).
+
+ lo_ixml_table = me->get_ixml_from_zip_archive( lv_path )->get_root_element( ).
+ fill_struct_from_attributes( EXPORTING
+ ip_element = lo_ixml_table
+ CHANGING
+ cp_structure = ls_table ).
+
+ lo_ixml_table_style ?= lo_ixml_table->find_from_name( 'tableStyleInfo' ).
+ fill_struct_from_attributes( EXPORTING
+ ip_element = lo_ixml_table_style
+ CHANGING
+ cp_structure = ls_table_style ).
+
+ ls_table_settings-table_name = ls_table-name.
+ ls_table_settings-table_style = ls_table_style-name.
+ ls_table_settings-show_column_stripes = boolc( ls_table_style-showcolumnstripes = '1' ).
+ ls_table_settings-show_row_stripes = boolc( ls_table_style-showrowstripes = '1' ).
+
+ zcl_excel_common=>convert_range2column_a_row(
+ EXPORTING
+ i_range = ls_table-ref
+ IMPORTING
+ e_column_start = ls_table_settings-top_left_column
+ e_column_end = ls_table_settings-bottom_right_column
+ e_row_start = ls_table_settings-top_left_row
+ e_row_end = ls_table_settings-bottom_right_row ).
+
+ lo_ixml_table_columns = lo_ixml_table->get_elements_by_tag_name( name = 'tableColumn' ).
+ lo_ixml_iterator = lo_ixml_table_columns->create_iterator( ).
+ lo_ixml_table_column ?= lo_ixml_iterator->get_next( ).
+ CLEAR lt_field_catalog.
+ WHILE lo_ixml_table_column IS BOUND.
+
+ CLEAR ls_table_column.
+ fill_struct_from_attributes( EXPORTING
+ ip_element = lo_ixml_table_column
+ CHANGING
+ cp_structure = ls_table_column ).
+
+ ls_field_catalog-position = lines( lt_field_catalog ) + 1.
+ ls_field_catalog-fieldname = |COMP_{ ls_field_catalog-position PAD = '0' ALIGN = RIGHT WIDTH = 4 }|.
+ ls_field_catalog-scrtext_l = ls_table_column-name.
+ ls_field_catalog-dynpfld = abap_true.
+ ls_field_catalog-abap_type = cl_abap_typedescr=>typekind_string.
+ APPEND ls_field_catalog TO lt_field_catalog.
+
+ lo_ixml_table_column ?= lo_ixml_iterator->get_next( ).
+
+ ENDWHILE.
+
+ CLEAR lt_components.
+ LOOP AT lt_field_catalog ASSIGNING .
+ CLEAR ls_component.
+ ls_component-name = -fieldname.
+ ls_component-type = cl_abap_elemdescr=>get_string( ).
+ APPEND ls_component TO lt_components.
+ ENDLOOP.
+
+ lo_line_type = cl_abap_structdescr=>get( lt_components ).
+ lo_rtti_table = cl_abap_tabledescr=>get( lo_line_type ).
+ CREATE DATA lv_dref_table TYPE HANDLE lo_rtti_table.
+ ASSIGN lv_dref_table->* TO .
+
+ lv_num_lines = ls_table_settings-bottom_right_row - ls_table_settings-top_left_row.
+ DO lv_num_lines TIMES.
+ APPEND INITIAL LINE TO .
+ ENDDO.
+
+ io_worksheet->bind_table(
+ EXPORTING
+ ip_table =
+ it_field_catalog = lt_field_catalog
+ is_table_settings = ls_table_settings ).
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+
METHOD read_from_applserver.
DATA: lv_filelength TYPE i,
@@ -4123,17 +4285,21 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
METHOD unescape_string_value.
- DATA: lt_character_positions TYPE TABLE OF i,
- lv_character_position TYPE i,
- lv_character_position_plus_2 TYPE i,
- lv_character_position_plus_6 TYPE i,
- lv_unescaped_value TYPE string.
+ DATA:
+ "Marks the Position before the searched Pattern occurs in the String
+ "For example in String A_X_TEST_X, the Table is filled with 1 and 8
+ lt_character_positions TYPE TABLE OF i,
+ lv_character_position TYPE i,
+ lv_character_position_plus_2 TYPE i,
+ lv_character_position_plus_6 TYPE i,
+ lv_unescaped_value TYPE string.
- " The text "_x...._", with "_x" not "_X", with exactly 4 ".", each being 0-9 a-f or A-F (case insensitive), is interpreted
- " like Unicode character U+.... (e.g. "_x0041_" is rendered like "A") is for characters.
+ " The text "_x...._", with "_x" not "_X". Each "." represents one character, being 0-9 a-f or A-F (case insensitive),
+ " is interpreted like Unicode character U+.... (e.g. "_x0041_" is rendered like "A") is for characters.
" To not interpret it, Excel replaces the first "_" with "_x005f_".
result = i_value.
- IF result CS '_x'.
+
+ IF provided_string_is_escaped( i_value ) = abap_true.
CLEAR lt_character_positions.
APPEND sy-fdpos TO lt_character_positions.
lv_character_position = sy-fdpos + 1.
@@ -4146,10 +4312,11 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
LOOP AT lt_character_positions INTO lv_character_position.
lv_character_position_plus_2 = lv_character_position + 2.
lv_character_position_plus_6 = lv_character_position + 6.
- IF substring( val = result off = lv_character_position_plus_2 len = 4 ) CO '0123456789ABCDEFGHIJKLMNOPQRSTUVWabcdefghijklmnopqrstuvw'
- AND substring( val = result off = lv_character_position_plus_6 len = 1 ) = '_'.
- lv_unescaped_value = cl_abap_conv_in_ce=>uccp( to_upper( substring( val = result off = lv_character_position_plus_2 len = 4 ) ) ).
- REPLACE SECTION OFFSET lv_character_position LENGTH 7 OF result WITH lv_unescaped_value.
+ IF substring( val = result off = lv_character_position_plus_2 len = 4 ) CO '0123456789ABCDEFabcdef'.
+ IF substring( val = result off = lv_character_position_plus_6 len = 1 ) = '_'.
+ lv_unescaped_value = cl_abap_conv_in_ce=>uccp( to_upper( substring( val = result off = lv_character_position_plus_2 len = 4 ) ) ).
+ REPLACE SECTION OFFSET lv_character_position LENGTH 7 OF result WITH lv_unescaped_value.
+ ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
@@ -4272,4 +4439,19 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
iv_zcl_excel_classname = iv_zcl_excel_classname ).
ENDMETHOD.
+ METHOD provided_string_is_escaped.
+
+ "Check if passed value is really an escaped Character
+ IF value CS '_x'.
+ is_escaped = abap_true.
+ TRY.
+ IF substring( val = value off = sy-fdpos + 6 len = 1 ) <> '_'.
+ is_escaped = abap_false.
+ ENDIF.
+ CATCH cx_sy_range_out_of_bounds.
+ is_escaped = abap_false.
+ ENDTRY.
+ ENDIF.
+ ENDMETHOD.
+
ENDCLASS.
diff --git a/src/zcl_excel_reader_2007.clas.testclasses.abap b/src/zcl_excel_reader_2007.clas.testclasses.abap
index 8d0f7a9..9d47491 100644
--- a/src/zcl_excel_reader_2007.clas.testclasses.abap
+++ b/src/zcl_excel_reader_2007.clas.testclasses.abap
@@ -15,6 +15,7 @@ CLASS ltc_unescape_string_value DEFINITION
METHODS no_escaping FOR TESTING.
METHODS one_escaped_character FOR TESTING.
METHODS two_escaped_characters FOR TESTING.
+ METHODS skip_when_not_escaped FOR TESTING RAISING cx_static_check.
METHODS run_cut
IMPORTING
@@ -52,4 +53,18 @@ CLASS ltc_unescape_string_value IMPLEMENTATION.
run_cut( input = '_x0000_ and _xFFFF_' exp = |{ cl_abap_conv_in_ce=>uccp( '0000' ) } and { cl_abap_conv_in_ce=>uccp( 'FFFF' ) }| ).
ENDMETHOD.
+ METHOD skip_when_not_escaped.
+ DATA: lo_excel TYPE REF TO zcl_excel_reader_2007,
+ value TYPE string VALUE 'TEST_X'.
+
+ CREATE OBJECT lo_excel.
+
+ "Method is used to check for "_x", but its not an escaped charcater, output should input.
+ lo_excel->unescape_string_value( i_value = value ).
+
+ cl_abap_unit_assert=>assert_equals(
+ exp = value
+ act = value ).
+ ENDMETHOD.
+
ENDCLASS.
diff --git a/src/zcl_excel_reader_2007.clas.xml b/src/zcl_excel_reader_2007.clas.xml
index d7843d3..e03ffa7 100644
--- a/src/zcl_excel_reader_2007.clas.xml
+++ b/src/zcl_excel_reader_2007.clas.xml
@@ -253,6 +253,11 @@
E
Loads pagemargings of worksheet
+
+ LOAD_WORKSHEET_TABLES
+ E
+ Load worksheet tables
+
MT_DXF_STYLES
E
diff --git a/src/zexcel_s_fieldcatalog.tabl.xml b/src/zexcel_s_fieldcatalog.tabl.xml
index 8bdbe28..2b77705 100644
--- a/src/zexcel_s_fieldcatalog.tabl.xml
+++ b/src/zexcel_s_fieldcatalog.tabl.xml
@@ -25,31 +25,31 @@
POSITION
- TABFDPOS
+ ZEXCEL_COMPONENT_POSITION
0
E
SCRTEXT_S
- SCRTEXT_S
+ ZEXCEL_DISP_TEXT_SHORT
0
E
SCRTEXT_M
- SCRTEXT_M
+ ZEXCEL_DISP_TEXT_MEDIUM
0
E
SCRTEXT_L
- SCRTEXT_L
+ ZEXCEL_DISP_TEXT_LONG
0
E
DYNPFLD
- DYNPROFLD
+ ZEXCEL_SCREEN_DISPLAY
0
X
F
diff --git a/src/zexcel_tr_docprops_core.xslt.source.xml b/src/zexcel_tr_docprops_core.xslt.source.xml
deleted file mode 100644
index 674d63a..0000000
--- a/src/zexcel_tr_docprops_core.xslt.source.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/zexcel_tr_docprops_core.xslt.xml b/src/zexcel_tr_docprops_core.xslt.xml
deleted file mode 100644
index 0cb8203..0000000
--- a/src/zexcel_tr_docprops_core.xslt.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
- ZEXCEL_TR_DOCPROPS_CORE
- E
- docProps/core.xml
-
-
-
-