Merge branch 'main' into hvam/normalize1212

This commit is contained in:
Lars Hvam 2024-01-16 10:14:56 +01:00 committed by GitHub
commit 2d8c664abf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 524 additions and 95 deletions

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_COLUMN_ID</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<HEADLEN>30</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>15</SCRLEN2>
<SCRLEN3>20</SCRLEN3>
<DDTEXT>ALV control: Column ID</DDTEXT>
<REPTEXT>Column ID</REPTEXT>
<SCRTEXT_S>Column ID</SCRTEXT_S>
<SCRTEXT_M>Column ID</SCRTEXT_M>
<SCRTEXT_L>Column ID</SCRTEXT_L>
<DTELMASTER>D</DTELMASTER>
<DATATYPE>INT4</DATATYPE>
<LENG>000010</LENG>
<OUTPUTLEN>000011</OUTPUTLEN>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_COMPONENT_POSITION</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<HEADLEN>06</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>15</SCRLEN2>
<SCRLEN3>20</SCRLEN3>
<DDTEXT>Position of the field in the table</DDTEXT>
<REPTEXT>TabPos</REPTEXT>
<SCRTEXT_S>Table pos.</SCRTEXT_S>
<SCRTEXT_M>Table position</SCRTEXT_M>
<SCRTEXT_L>Table position</SCRTEXT_L>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
<DTELMASTER>D</DTELMASTER>
<DATATYPE>NUMC</DATATYPE>
<LENG>000004</LENG>
<OUTPUTLEN>000004</OUTPUTLEN>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DOMA" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD01V>
<DOMNAME>ZEXCEL_CONVEXIT</DOMNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DATATYPE>CHAR</DATATYPE>
<LENG>000005</LENG>
<OUTPUTLEN>000005</OUTPUTLEN>
<DDTEXT>Conversion routine</DDTEXT>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
</DD01V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_CONVEXIT</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMNAME>ZEXCEL_CONVEXIT</DOMNAME>
<HEADLEN>30</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>15</SCRLEN2>
<SCRLEN3>20</SCRLEN3>
<DDTEXT>Conversion Routine</DDTEXT>
<REPTEXT>Conversion Routine</REPTEXT>
<SCRTEXT_S>Conv.Rout.</SCRTEXT_S>
<SCRTEXT_M>Convers. Rout.</SCRTEXT_M>
<SCRTEXT_L>Conversion Routine</SCRTEXT_L>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
<DTELMASTER>D</DTELMASTER>
<REFKIND>D</REFKIND>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DOMA" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD01V>
<DOMNAME>ZEXCEL_DDIC_FLAG</DOMNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<OUTPUTLEN>000001</OUTPUTLEN>
<VALEXI>X</VALEXI>
<DDTEXT>Flag (X or blank)</DDTEXT>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
</DD01V>
<DD07V_TAB>
<DD07V>
<VALPOS>0001</VALPOS>
<DDLANGUAGE>E</DDLANGUAGE>
<DDTEXT>Do not set flag</DDTEXT>
</DD07V>
<DD07V>
<VALPOS>0002</VALPOS>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMVALUE_L>X</DOMVALUE_L>
<DDTEXT>Set flag</DDTEXT>
</DD07V>
</DD07V_TAB>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DOMA" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD01V>
<DOMNAME>ZEXCEL_DISP_TEXT_LONG</DOMNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DATATYPE>CHAR</DATATYPE>
<LENG>000040</LENG>
<OUTPUTLEN>000040</OUTPUTLEN>
<LOWERCASE>X</LOWERCASE>
<DDTEXT>Long keyword</DDTEXT>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
</DD01V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_DISP_TEXT_LONG</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMNAME>ZEXCEL_DISP_TEXT_LONG</DOMNAME>
<HEADLEN>30</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>15</SCRLEN2>
<SCRLEN3>20</SCRLEN3>
<DDTEXT>Long Field Label</DDTEXT>
<REPTEXT>Long Field Label</REPTEXT>
<SCRTEXT_S>Long</SCRTEXT_S>
<SCRTEXT_M>Long Fld Label</SCRTEXT_M>
<SCRTEXT_L>Long field label</SCRTEXT_L>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
<DTELMASTER>D</DTELMASTER>
<DEFFDNAME>SCRTEXT_L</DEFFDNAME>
<REFKIND>D</REFKIND>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DOMA" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD01V>
<DOMNAME>ZEXCEL_DISP_TEXT_MEDIUM</DOMNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DATATYPE>CHAR</DATATYPE>
<LENG>000020</LENG>
<OUTPUTLEN>000020</OUTPUTLEN>
<LOWERCASE>X</LOWERCASE>
<DDTEXT>Medium keyword</DDTEXT>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
</DD01V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_DISP_TEXT_MEDIUM</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMNAME>ZEXCEL_DISP_TEXT_MEDIUM</DOMNAME>
<HEADLEN>30</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>15</SCRLEN2>
<SCRLEN3>20</SCRLEN3>
<DDTEXT>Medium Field Label</DDTEXT>
<REPTEXT>Medium Field Label</REPTEXT>
<SCRTEXT_S>Medium</SCRTEXT_S>
<SCRTEXT_M>Medium Label</SCRTEXT_M>
<SCRTEXT_L>Medium Field Label</SCRTEXT_L>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
<DTELMASTER>D</DTELMASTER>
<DEFFDNAME>SCRTEXT_M</DEFFDNAME>
<REFKIND>D</REFKIND>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DOMA" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD01V>
<DOMNAME>ZEXCEL_DISP_TEXT_SHORT</DOMNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DATATYPE>CHAR</DATATYPE>
<LENG>000010</LENG>
<OUTPUTLEN>000010</OUTPUTLEN>
<LOWERCASE>X</LOWERCASE>
<DDTEXT>Short keyword</DDTEXT>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
</DD01V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_DISP_TEXT_SHORT</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMNAME>ZEXCEL_DISP_TEXT_SHORT</DOMNAME>
<HEADLEN>30</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>15</SCRLEN2>
<SCRLEN3>20</SCRLEN3>
<DDTEXT>Short Field Label</DDTEXT>
<REPTEXT>Short field label</REPTEXT>
<SCRTEXT_S>Short</SCRTEXT_S>
<SCRTEXT_M>ShortFieldLabel</SCRTEXT_M>
<SCRTEXT_L>Short field label</SCRTEXT_L>
<APPLCLASS>SDIC</APPLCLASS>
<AUTHCLASS>01</AUTHCLASS>
<DTELMASTER>D</DTELMASTER>
<DEFFDNAME>SCRTEXT_S</DEFFDNAME>
<REFKIND>D</REFKIND>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_KEY_COLOR_OVERRIDE</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMNAME>CHAR1</DOMNAME>
<DDTEXT>ALV control: Override key color</DDTEXT>
<DTELMASTER>D</DTELMASTER>
<REFKIND>D</REFKIND>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -7,6 +7,7 @@
<DDLANGUAGE>E</DDLANGUAGE> <DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS> <TABCLASS>INTTAB</TABCLASS>
<DDTEXT>Color information for cells</DDTEXT> <DDTEXT>Color information for cells</DDTEXT>
<MASTERLANG>E</MASTERLANG>
<EXCLASS>3</EXCLASS> <EXCLASS>3</EXCLASS>
</DD02V> </DD02V>
<DD03P_TABLE> <DD03P_TABLE>
@ -36,7 +37,7 @@
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>NOKEYCOL</FIELDNAME> <FIELDNAME>NOKEYCOL</FIELDNAME>
<ROLLNAME>LVC_NOKEYC</ROLLNAME> <ROLLNAME>ZEXCEL_KEY_COLOR_OVERRIDE</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>

View File

@ -7,15 +7,14 @@
<DDLANGUAGE>E</DDLANGUAGE> <DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS> <TABCLASS>INTTAB</TABCLASS>
<DDTEXT>Field catalog for converter</DDTEXT> <DDTEXT>Field catalog for converter</DDTEXT>
<MASTERLANG>E</MASTERLANG>
<EXCLASS>4</EXCLASS> <EXCLASS>4</EXCLASS>
</DD02V> </DD02V>
<DD03P_TABLE> <DD03P_TABLE>
<DD03P> <DD03P>
<FIELDNAME>TABNAME</FIELDNAME> <FIELDNAME>TABNAME</FIELDNAME>
<ROLLNAME>TABNAME</ROLLNAME> <ROLLNAME>TABNAME</ROLLNAME>
<CHECKTABLE>DD02L</CHECKTABLE>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<SHLPORIGIN>P</SHLPORIGIN>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
@ -32,7 +31,7 @@
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>POSITION</FIELDNAME> <FIELDNAME>POSITION</FIELDNAME>
<ROLLNAME>TABFDPOS</ROLLNAME> <ROLLNAME>ZEXCEL_COMPONENT_POSITION</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
@ -54,19 +53,19 @@
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>SCRTEXT_S</FIELDNAME> <FIELDNAME>SCRTEXT_S</FIELDNAME>
<ROLLNAME>SCRTEXT_S</ROLLNAME> <ROLLNAME>ZEXCEL_DISP_TEXT_SHORT</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>SCRTEXT_M</FIELDNAME> <FIELDNAME>SCRTEXT_M</FIELDNAME>
<ROLLNAME>SCRTEXT_M</ROLLNAME> <ROLLNAME>ZEXCEL_DISP_TEXT_MEDIUM</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>SCRTEXT_L</FIELDNAME> <FIELDNAME>SCRTEXT_L</FIELDNAME>
<ROLLNAME>SCRTEXT_L</ROLLNAME> <ROLLNAME>ZEXCEL_DISP_TEXT_LONG</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
@ -160,53 +159,17 @@
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>COL_ID</FIELDNAME> <FIELDNAME>COL_ID</FIELDNAME>
<ROLLNAME>LVC_COLID</ROLLNAME> <ROLLNAME>ZEXCEL_COLUMN_ID</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>CONVEXIT</FIELDNAME> <FIELDNAME>CONVEXIT</FIELDNAME>
<ROLLNAME>CONVEXIT</ROLLNAME> <ROLLNAME>ZEXCEL_CONVEXIT</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
</DD03P_TABLE> </DD03P_TABLE>
<DD05M_TABLE>
<DD05M>
<FIELDNAME>TABNAME</FIELDNAME>
<FORTABLE>ZEXCEL_S_CONVERTER_FCAT</FORTABLE>
<FORKEY>TABNAME</FORKEY>
<CHECKTABLE>DD02L</CHECKTABLE>
<CHECKFIELD>TABNAME</CHECKFIELD>
<PRIMPOS>0001</PRIMPOS>
<DOMNAME>AS4TAB</DOMNAME>
<DATATYPE>CHAR</DATATYPE>
</DD05M>
<DD05M>
<FIELDNAME>TABNAME</FIELDNAME>
<FORTABLE>&apos;A&apos;</FORTABLE>
<CHECKTABLE>DD02L</CHECKTABLE>
<CHECKFIELD>AS4LOCAL</CHECKFIELD>
<PRIMPOS>0002</PRIMPOS>
<DOMNAME>AS4LOCAL</DOMNAME>
<DATATYPE>CHAR</DATATYPE>
</DD05M>
<DD05M>
<FIELDNAME>TABNAME</FIELDNAME>
<FORTABLE>&apos;0000&apos;</FORTABLE>
<CHECKTABLE>DD02L</CHECKTABLE>
<CHECKFIELD>AS4VERS</CHECKFIELD>
<PRIMPOS>0003</PRIMPOS>
<DOMNAME>AS4VERS</DOMNAME>
<DATATYPE>NUMC</DATATYPE>
</DD05M>
</DD05M_TABLE>
<DD08V_TABLE>
<DD08V>
<FIELDNAME>TABNAME</FIELDNAME>
<CHECKTABLE>DD02L</CHECKTABLE>
</DD08V>
</DD08V_TABLE>
</asx:values> </asx:values>
</asx:abap> </asx:abap>
</abapGit> </abapGit>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ZEXCEL_SCREEN_DISPLAY</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMNAME>ZEXCEL_DDIC_FLAG</DOMNAME>
<HEADLEN>02</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>15</SCRLEN2>
<SCRLEN3>20</SCRLEN3>
<DDTEXT>Flag: Field is displayed on dynpro</DDTEXT>
<REPTEXT>SF</REPTEXT>
<SCRTEXT_S>Dynpro</SCRTEXT_S>
<SCRTEXT_M>Screen field</SCRTEXT_M>
<SCRTEXT_L>Screen field</SCRTEXT_L>
<APPLCLASS>SDIC</APPLCLASS>
<DTELMASTER>D</DTELMASTER>
<REFKIND>D</REFKIND>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -3,7 +3,7 @@
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values> <asx:values>
<DEVC> <DEVC>
<CTEXT>Spreadsheet libraries</CTEXT> <CTEXT>ABAP2XLSX</CTEXT>
</DEVC> </DEVC>
</asx:values> </asx:values>
</asx:abap> </asx:abap>

View File

@ -106,6 +106,13 @@ CLASS zcl_excel_reader_2007 DEFINITION
END OF t_shared_string . END OF t_shared_string .
TYPES: TYPES:
t_shared_strings TYPE STANDARD TABLE OF t_shared_string WITH DEFAULT KEY . 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 shared_strings TYPE t_shared_strings .
DATA styles TYPE t_style_refs . DATA styles TYPE t_style_refs .
@ -268,6 +275,15 @@ CLASS zcl_excel_reader_2007 DEFINITION
!io_worksheet TYPE REF TO zcl_excel_worksheet !io_worksheet TYPE REF TO zcl_excel_worksheet
RAISING RAISING
zcx_excel . zcx_excel .
"! <p class="shorttext synchronized" lang="en">Load worksheet tables</p>
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 CLASS-METHODS resolve_path
IMPORTING IMPORTING
!ip_path TYPE string !ip_path TYPE string
@ -291,6 +307,11 @@ CLASS zcl_excel_reader_2007 DEFINITION
!ip_excel TYPE REF TO zcl_excel !ip_excel TYPE REF TO zcl_excel
RAISING 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, CONSTANTS: BEGIN OF namespace,
x14ac TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac', 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_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_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'. 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, DATA: lo_ixml_worksheet TYPE REF TO if_ixml_document,
lo_ixml_cells TYPE REF TO if_ixml_node_collection, 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_datavalidation_range TYPE TABLE OF string,
lt_rtf TYPE zexcel_t_rtf, lt_rtf TYPE zexcel_t_rtf,
ex TYPE REF TO cx_root. ex TYPE REF TO cx_root.
DATA lt_tables TYPE t_tables.
DATA ls_table TYPE t_table.
FIELD-SYMBOLS: FIELD-SYMBOLS:
<ls_shared_string> TYPE t_shared_string. <ls_shared_string> TYPE t_shared_string.
@ -2478,6 +2502,10 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
CATCH zcx_excel. CATCH zcx_excel.
ENDTRY. ENDTRY.
WHEN lc_rel_table.
MOVE-CORRESPONDING ls_relationship TO ls_table.
INSERT ls_table INTO TABLE lt_tables.
WHEN OTHERS. WHEN OTHERS.
ENDCASE. ENDCASE.
@ -2501,6 +2529,16 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ENDIF. ENDIF.
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_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_iterator = lo_ixml_rows->create_iterator( ).
lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ).
@ -3885,6 +3923,130 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ENDMETHOD. 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 <ls_table> LIKE LINE OF it_tables.
FIELD-SYMBOLS <lt_table> TYPE STANDARD TABLE.
FIELD-SYMBOLS <ls_field> TYPE zexcel_s_fieldcatalog.
LOOP AT it_tables ASSIGNING <ls_table>.
CONCATENATE iv_dirname <ls_table>-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 <ls_field>.
CLEAR ls_component.
ls_component-name = <ls_field>-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 <lt_table>.
lv_num_lines = ls_table_settings-bottom_right_row - ls_table_settings-top_left_row.
DO lv_num_lines TIMES.
APPEND INITIAL LINE TO <lt_table>.
ENDDO.
io_worksheet->bind_table(
EXPORTING
ip_table = <lt_table>
it_field_catalog = lt_field_catalog
is_table_settings = ls_table_settings ).
ENDLOOP.
ENDMETHOD.
METHOD read_from_applserver. METHOD read_from_applserver.
DATA: lv_filelength TYPE i, DATA: lv_filelength TYPE i,
@ -4123,17 +4285,21 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
METHOD unescape_string_value. METHOD unescape_string_value.
DATA: lt_character_positions TYPE TABLE OF i, 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 TYPE i,
lv_character_position_plus_2 TYPE i, lv_character_position_plus_2 TYPE i,
lv_character_position_plus_6 TYPE i, lv_character_position_plus_6 TYPE i,
lv_unescaped_value TYPE string. 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 " The text "_x...._", with "_x" not "_X". Each "." represents one character, being 0-9 a-f or A-F (case insensitive),
" like Unicode character U+.... (e.g. "_x0041_" is rendered like "A") is for characters. " 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_". " To not interpret it, Excel replaces the first "_" with "_x005f_".
result = i_value. result = i_value.
IF result CS '_x'.
IF provided_string_is_escaped( i_value ) = abap_true.
CLEAR lt_character_positions. CLEAR lt_character_positions.
APPEND sy-fdpos TO lt_character_positions. APPEND sy-fdpos TO lt_character_positions.
lv_character_position = sy-fdpos + 1. lv_character_position = sy-fdpos + 1.
@ -4146,11 +4312,12 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
LOOP AT lt_character_positions INTO lv_character_position. LOOP AT lt_character_positions INTO lv_character_position.
lv_character_position_plus_2 = lv_character_position + 2. lv_character_position_plus_2 = lv_character_position + 2.
lv_character_position_plus_6 = lv_character_position + 6. lv_character_position_plus_6 = lv_character_position + 6.
IF substring( val = result off = lv_character_position_plus_2 len = 4 ) CO '0123456789ABCDEFGHIJKLMNOPQRSTUVWabcdefghijklmnopqrstuvw' IF substring( val = result off = lv_character_position_plus_2 len = 4 ) CO '0123456789ABCDEFabcdef'.
AND substring( val = result off = lv_character_position_plus_6 len = 1 ) = '_'. 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 ) ) ). 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. REPLACE SECTION OFFSET lv_character_position LENGTH 7 OF result WITH lv_unescaped_value.
ENDIF. ENDIF.
ENDIF.
ENDLOOP. ENDLOOP.
ENDIF. ENDIF.
@ -4272,4 +4439,19 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
iv_zcl_excel_classname = iv_zcl_excel_classname ). iv_zcl_excel_classname = iv_zcl_excel_classname ).
ENDMETHOD. 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. ENDCLASS.

View File

@ -15,6 +15,7 @@ CLASS ltc_unescape_string_value DEFINITION
METHODS no_escaping FOR TESTING. METHODS no_escaping FOR TESTING.
METHODS one_escaped_character FOR TESTING. METHODS one_escaped_character FOR TESTING.
METHODS two_escaped_characters FOR TESTING. METHODS two_escaped_characters FOR TESTING.
METHODS skip_when_not_escaped FOR TESTING RAISING cx_static_check.
METHODS run_cut METHODS run_cut
IMPORTING 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' ) }| ). run_cut( input = '_x0000_ and _xFFFF_' exp = |{ cl_abap_conv_in_ce=>uccp( '0000' ) } and { cl_abap_conv_in_ce=>uccp( 'FFFF' ) }| ).
ENDMETHOD. 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. ENDCLASS.

View File

@ -253,6 +253,11 @@
<LANGU>E</LANGU> <LANGU>E</LANGU>
<DESCRIPT>Loads pagemargings of worksheet</DESCRIPT> <DESCRIPT>Loads pagemargings of worksheet</DESCRIPT>
</SEOCOMPOTX> </SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>LOAD_WORKSHEET_TABLES</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Load worksheet tables</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX> <SEOCOMPOTX>
<CMPNAME>MT_DXF_STYLES</CMPNAME> <CMPNAME>MT_DXF_STYLES</CMPNAME>
<LANGU>E</LANGU> <LANGU>E</LANGU>

View File

@ -25,31 +25,31 @@
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>POSITION</FIELDNAME> <FIELDNAME>POSITION</FIELDNAME>
<ROLLNAME>TABFDPOS</ROLLNAME> <ROLLNAME>ZEXCEL_COMPONENT_POSITION</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>SCRTEXT_S</FIELDNAME> <FIELDNAME>SCRTEXT_S</FIELDNAME>
<ROLLNAME>SCRTEXT_S</ROLLNAME> <ROLLNAME>ZEXCEL_DISP_TEXT_SHORT</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>SCRTEXT_M</FIELDNAME> <FIELDNAME>SCRTEXT_M</FIELDNAME>
<ROLLNAME>SCRTEXT_M</ROLLNAME> <ROLLNAME>ZEXCEL_DISP_TEXT_MEDIUM</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>SCRTEXT_L</FIELDNAME> <FIELDNAME>SCRTEXT_L</FIELDNAME>
<ROLLNAME>SCRTEXT_L</ROLLNAME> <ROLLNAME>ZEXCEL_DISP_TEXT_LONG</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE> <COMPTYPE>E</COMPTYPE>
</DD03P> </DD03P>
<DD03P> <DD03P>
<FIELDNAME>DYNPFLD</FIELDNAME> <FIELDNAME>DYNPFLD</FIELDNAME>
<ROLLNAME>DYNPROFLD</ROLLNAME> <ROLLNAME>ZEXCEL_SCREEN_DISPLAY</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD> <ADMINFIELD>0</ADMINFIELD>
<VALEXI>X</VALEXI> <VALEXI>X</VALEXI>
<SHLPORIGIN>F</SHLPORIGIN> <SHLPORIGIN>F</SHLPORIGIN>

View File

@ -1,19 +0,0 @@
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
<tt:root name="ROOT"/>
<tt:template>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance" tt:ref="ROOT" tt:extensible="deep-dynamic">
<dc:creator tt:value-ref="CREATOR"/>
<dc:description tt:value-ref="DESCRIPTION"/>
<cp:lastModifiedBy tt:value-ref="LAST_MODIFIED_BY"/>
<dcterms:created tt:value-ref="CREATED" xsi:type="dcterms:W3CDTF"/>
<dcterms:modified tt:value-ref="MODIFIED" xsi:type="dcterms:W3CDTF"/>
</cp:coreProperties>
</tt:template>
</tt:transform>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_XSLT" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<ATTRIBUTES>
<XSLTDESC>ZEXCEL_TR_DOCPROPS_CORE</XSLTDESC>
<LANGU>E</LANGU>
<DESCRIPT>docProps/core.xml</DESCRIPT>
</ATTRIBUTES>
</asx:values>
</asx:abap>
</abapGit>