Merge branch 'main' into main

This commit is contained in:
sandraros 2024-04-14 10:23:37 +02:00 committed by GitHub
commit 72c8bf9669
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
48 changed files with 1187 additions and 224 deletions

17
.github/workflows/unit.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: unit
on:
pull_request:
permissions:
contents: read
jobs:
unit:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm install
- run: npm test

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
node_modules/
package-lock.json
output
foo.zip
foo.xlsx
foo

1
.npmrc Normal file
View File

@ -0,0 +1 @@
ignore-scripts=true

View File

@ -186,7 +186,7 @@ Apache License
same "printed page" as the copyright notice for easier same "printed page" as the copyright notice for easier
identification within third-party archives. identification within third-party archives.
Copyright {yyyy} {name of copyright owner} Copyright 2010 abap2xlsx Contributors
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

60
abap_transpile.json Normal file
View File

@ -0,0 +1,60 @@
{
"input_folder": "{src,test}",
"input_filter": [
"src/zcl_excel_a",
"src/zcl_excel_c",
"src/zcl_excel_d",
"src/zcl_excel_fill_template",
"src/zcl_excel_font TODO, missing TDFONTSIZE",
"src/zcl_excel_g",
"src/zcl_excel_h",
"src/zcl_excel_l",
"src/zcl_excel_o",
"src/zcl_excel_r",
"src/zcl_excel_s",
"src/zcl_excel_t",
"src/zcl_excel_w",
"src/zcl_excel.clas",
"src/zcx_",
"src/zexcel_.*doma",
"src/zexcel_.*dtel",
"src/not_cloud/zexcel_.*dtel",
"src/not_cloud/zexcel_.*doma",
"src/zexcel_c",
"src/zexcel_p",
"src/zexcel_s",
"src/zexcel_t",
"src/zif_",
"test/"
],
"output_folder": "output",
"lib": "https://github.com/open-abap/open-abap",
"write_unit_tests": true,
"write_source_map": true,
"options": {
"ignoreSyntaxCheck": false,
"addFilenames": true,
"addCommonJS": true,
"unknownTypes": "runtimeError",
"skip": [
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_number", "note": "SXML in open-abap currently only handles json, todo"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_shared_string", "note": "SXML in open-abap currently only handles json, todo"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_shared_string_missing", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_inline_string", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_empty_cells", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_boolean", "note": "SXML in open-abap currently only handles json, todo"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_style", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_style_missing", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_formula", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_read_shared_strings", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_shared_string_some_empty", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_shared_string_multi_style", "note": "??"},
{"object": "ZCL_EXCEL_READER_HUGE_FILE", "class": "lcl_test", "method": "test_skip_to_inexistent", "note": "??"},
{"object": "ZCL_EXCEL_WRITER_2007", "class": "ltc_column_formula", "method": "one_column_formula", "note": "?? CALL TRANSFORMATION xml_header = 'no'"},
{"object": "ZCL_EXCEL_WRITER_2007", "class": "ltc_column_formula", "method": "two_column_formulas", "note": "??"},
{"object": "ZCL_EXCEL_COMMON", "class": "lcl_excel_common_test", "method": "convert_column2int_oob_empty", "note": "?? sy value defaults"}
]
}
}

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": {

16
package.json Normal file
View File

@ -0,0 +1,16 @@
{
"license": "MIT",
"private": true,
"scripts": {
"test": "rm -rf output && abap_transpile abap_transpile.json && echo RUNNING && node output/index.mjs"
},
"repository": {
"type": "git",
"url": "git+https://github.com/abap2xlsx/abap2xlsx.git"
},
"devDependencies": {
"@abaplint/cli": "^2.105.14",
"@abaplint/transpiler-cli": "^2.7.153",
"@abaplint/runtime": "^2.7.153"
}
}

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

@ -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
@ -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.
IF ip_currency IS INITIAL.
WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN. 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,12 +125,14 @@ 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 recursive_struct_to_class FOR TESTING RAISING cx_static_check.
METHODS escape_string_whitespace1 FOR TESTING. METHODS escape_string_whitespace1 FOR TESTING.
METHODS escape_string_whitespace2 FOR TESTING. METHODS escape_string_whitespace2 FOR TESTING.
METHODS escape_string_whitespace3 FOR TESTING. METHODS escape_string_whitespace3 FOR TESTING.
METHODS escape_string_quote FOR TESTING. METHODS escape_string_quote FOR TESTING.
METHODS escape_string_hyphen FOR TESTING. METHODS escape_string_hyphen FOR TESTING.
METHODS escape_string_regular FOR TESTING. METHODS escape_string_regular FOR TESTING.
ENDCLASS. ENDCLASS.
@ -467,6 +472,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.
* ======================== * ========================
@ -1603,6 +1649,29 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
ENDTRY. ENDTRY.
ENDMETHOD. "is_cell_in_range_lowerside_out. ENDMETHOD. "is_cell_in_range_lowerside_out.
METHOD recursive_struct_to_class.
DATA style TYPE REF TO zcl_excel_style.
DATA complete_style TYPE zexcel_s_cstyle_complete.
DATA complete_stylex TYPE zexcel_s_cstylex_complete.
CREATE OBJECT style.
complete_style-number_format-format_code = 'hello'.
complete_stylex-number_format-format_code = abap_true.
zcl_excel_common=>recursive_struct_to_class(
EXPORTING
i_source = complete_style
i_sourcex = complete_stylex
CHANGING
e_target = style ).
cl_abap_unit_assert=>assert_equals(
act = style->number_format->format_code
exp = 'hello' ).
ENDMETHOD.
METHOD escape_string_hyphen. METHOD escape_string_hyphen.
DATA: name TYPE string, DATA: name TYPE string,
escaped_name TYPE string. escaped_name TYPE string.

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',
@ -2234,10 +2255,14 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
TYPES: BEGIN OF lty_sheetview, TYPES: BEGIN OF lty_sheetview,
showgridlines TYPE zexcel_show_gridlines, showgridlines TYPE zexcel_show_gridlines,
tabselected TYPE string, tabselected TYPE string,
zoomscale TYPE string,
zoomscalenormal TYPE string, zoomscalenormal TYPE string,
zoomscalepagelayoutview TYPE string,
zoomscalesheetlayoutview TYPE string,
workbookviewid TYPE string, workbookviewid TYPE string,
showrowcolheaders TYPE string, showrowcolheaders TYPE string,
righttoleft TYPE string, righttoleft TYPE string,
topleftcell TYPE string,
END OF lty_sheetview. END OF lty_sheetview.
TYPES: BEGIN OF lty_mergecell, TYPES: BEGIN OF lty_mergecell,
@ -2314,6 +2339,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 +2434,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 +2506,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 +2533,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( ).
@ -2767,7 +2809,13 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
OR ls_sheetview-righttoleft = lc_xml_attr_true_int. OR ls_sheetview-righttoleft = lc_xml_attr_true_int.
io_worksheet->zif_excel_sheet_properties~set_right_to_left( abap_true ). io_worksheet->zif_excel_sheet_properties~set_right_to_left( abap_true ).
ENDIF. ENDIF.
io_worksheet->zif_excel_sheet_properties~zoomscale = ls_sheetview-zoomscale.
io_worksheet->zif_excel_sheet_properties~zoomscale_normal = ls_sheetview-zoomscalenormal.
io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = ls_sheetview-zoomscalepagelayoutview.
io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = ls_sheetview-zoomscalesheetlayoutview.
IF ls_sheetview-topleftcell IS NOT INITIAL.
io_worksheet->set_sheetview_top_left_cell( ls_sheetview-topleftcell ).
ENDIF.
"Add merge cell information "Add merge cell information
lo_ixml_mergecells = lo_ixml_worksheet->get_elements_by_tag_name_ns( name = 'mergeCell' uri = namespace-main ). lo_ixml_mergecells = lo_ixml_worksheet->get_elements_by_tag_name_ns( name = 'mergeCell' uri = namespace-main ).
@ -2859,6 +2907,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.
@ -2869,21 +2932,12 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ENDIF. ENDIF.
" Start fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007
" Read pane " Read pane
lo_ixml_pane_elem = lo_ixml_sheetview_elem->find_from_name_ns( name = 'pane' uri = namespace-main ). lo_ixml_pane_elem = lo_ixml_sheetview_elem->find_from_name_ns( name = 'pane' uri = namespace-main ).
IF lo_ixml_pane_elem IS BOUND. IF lo_ixml_pane_elem IS BOUND.
fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_pane_elem CHANGING cp_structure = ls_excel_pane ). fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_pane_elem CHANGING cp_structure = ls_excel_pane ).
" Issue #194 lv_pane_cell_col = ls_excel_pane-xsplit.
" Replace REGEX with method from the common class lv_pane_cell_row = ls_excel_pane-ysplit.
zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING
i_columnrow = ls_excel_pane-topleftcell
IMPORTING
e_column = lv_pane_cell_col_a " Cell Column
e_row = lv_pane_cell_row ). " Natural number
lv_pane_cell_col = zcl_excel_common=>convert_column2int( lv_pane_cell_col_a ).
SUBTRACT 1 FROM: lv_pane_cell_col,
lv_pane_cell_row.
IF lv_pane_cell_col > 0 IF lv_pane_cell_col > 0
AND lv_pane_cell_row > 0. AND lv_pane_cell_row > 0.
io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row
@ -2893,8 +2947,10 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ELSE. ELSE.
io_worksheet->freeze_panes( ip_num_columns = lv_pane_cell_col ). io_worksheet->freeze_panes( ip_num_columns = lv_pane_cell_col ).
ENDIF. ENDIF.
IF ls_excel_pane-topleftcell IS NOT INITIAL.
io_worksheet->set_pane_top_left_cell( ls_excel_pane-topleftcell ).
ENDIF.
ENDIF. ENDIF.
" End fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007
" Start fix 276 Read data validations " Start fix 276 Read data validations
lo_ixml_datavalidations = lo_ixml_worksheet->get_elements_by_tag_name_ns( name = 'dataValidation' uri = namespace-main ). lo_ixml_datavalidations = lo_ixml_worksheet->get_elements_by_tag_name_ns( name = 'dataValidation' uri = namespace-main ).
@ -3870,6 +3926,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,
@ -4108,17 +4288,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.
@ -4131,11 +4315,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.
@ -4257,4 +4442,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

@ -71,10 +71,7 @@ CLASS zcl_excel_theme DEFINITION
DATA extlst TYPE REF TO zcl_excel_theme_extlst . DATA extlst TYPE REF TO zcl_excel_theme_extlst .
PRIVATE SECTION. PRIVATE SECTION.
DATA theme_changed TYPE abap_bool .
DATA theme_read TYPE abap_bool .
DATA name TYPE string . DATA name TYPE string .
DATA xmls_a TYPE string .
ENDCLASS. ENDCLASS.
@ -100,7 +97,6 @@ CLASS zcl_excel_theme IMPLEMENTATION.
lo_node_theme = io_theme_xml->get_root_element( )." find_from_name( name = c_theme ). lo_node_theme = io_theme_xml->get_root_element( )." find_from_name( name = c_theme ).
IF lo_node_theme IS BOUND. IF lo_node_theme IS BOUND.
name = lo_node_theme->get_attribute( name = c_theme_name ). name = lo_node_theme->get_attribute( name = c_theme_name ).
xmls_a = lo_node_theme->get_attribute( name = c_theme_xmlns ).
lo_theme_children = lo_node_theme->get_children( ). lo_theme_children = lo_node_theme->get_children( ).
lo_theme_iterator = lo_theme_children->create_iterator( ). lo_theme_iterator = lo_theme_children->create_iterator( ).
lo_theme_element ?= lo_theme_iterator->get_next( ). lo_theme_element ?= lo_theme_iterator->get_next( ).
@ -208,7 +204,6 @@ CLASS zcl_excel_theme IMPLEMENTATION.
lo_document = lo_ixml->create_document( ). lo_document = lo_ixml->create_document( ).
lo_document->set_encoding( lo_encoding ). lo_document->set_encoding( lo_encoding ).
lo_document->set_standalone( abap_true ). lo_document->set_standalone( abap_true ).
lo_document->set_namespace_prefix( prefix = 'a' ).
lo_element_root = lo_document->create_simple_element_ns( prefix = c_theme_prefix lo_element_root = lo_document->create_simple_element_ns( prefix = c_theme_prefix
name = c_theme name = c_theme

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

@ -102,6 +102,8 @@ CLASS zcl_excel_worksheet DEFINITION
formula_in_other_column TYPE string, formula_in_other_column TYPE string,
END OF c_messages . END OF c_messages .
DATA mt_merged_cells TYPE mty_ts_merge READ-ONLY . DATA mt_merged_cells TYPE mty_ts_merge READ-ONLY .
DATA pane_top_left_cell TYPE string READ-ONLY.
DATA sheetview_top_left_cell TYPE string READ-ONLY.
METHODS add_comment METHODS add_comment
IMPORTING IMPORTING
@ -172,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
@ -499,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
@ -547,6 +551,11 @@ CLASS zcl_excel_worksheet DEFINITION
!ip_formula TYPE zexcel_cell_formula OPTIONAL "added parameter !ip_formula TYPE zexcel_cell_formula OPTIONAL "added parameter
RAISING RAISING
zcx_excel . zcx_excel .
METHODS set_pane_top_left_cell
IMPORTING
!iv_columnrow TYPE csequence
RAISING
zcx_excel.
METHODS set_print_gridlines METHODS set_print_gridlines
IMPORTING IMPORTING
!i_print_gridlines TYPE zexcel_print_gridlines . !i_print_gridlines TYPE zexcel_print_gridlines .
@ -563,6 +572,11 @@ CLASS zcl_excel_worksheet DEFINITION
!iv_collapsed TYPE abap_bool !iv_collapsed TYPE abap_bool
RAISING RAISING
zcx_excel . zcx_excel .
METHODS set_sheetview_top_left_cell
IMPORTING
!iv_columnrow TYPE csequence
RAISING
zcx_excel.
METHODS set_show_gridlines METHODS set_show_gridlines
IMPORTING IMPORTING
!i_show_gridlines TYPE zexcel_show_gridlines . !i_show_gridlines TYPE zexcel_show_gridlines .
@ -673,6 +687,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
@ -974,7 +989,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,
@ -1000,7 +1016,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.
@ -1099,6 +1116,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.
@ -1150,18 +1168,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_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 ).
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.
@ -1170,11 +1196,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.
@ -2263,6 +2291,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.
@ -3900,6 +3932,11 @@ 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.
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 = <fs_value>
ip_currency = ip_currency ).
ELSE.
lo_addit = cl_abap_elemdescr=>get_f( ). lo_addit = cl_abap_elemdescr=>get_f( ).
CREATE DATA lo_value_new TYPE HANDLE lo_addit. CREATE DATA lo_value_new TYPE HANDLE lo_addit.
ASSIGN lo_value_new->* TO <fs_numeric>. ASSIGN lo_value_new->* TO <fs_numeric>.
@ -3907,6 +3944,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
<fs_numeric> = <fs_value>. <fs_numeric> = <fs_value>.
lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ). 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
cl_abap_typedescr=>typekind_hex. cl_abap_typedescr=>typekind_hex.
@ -4284,6 +4322,25 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDMETHOD. "set_merge_style ENDMETHOD. "set_merge_style
METHOD set_pane_top_left_cell.
DATA lv_column_int TYPE zexcel_cell_column.
DATA lv_row TYPE zexcel_cell_row.
" Validate input value
zcl_excel_common=>convert_columnrow2column_a_row(
EXPORTING
i_columnrow = iv_columnrow
IMPORTING
e_column_int = lv_column_int
e_row = lv_row ).
IF lv_column_int NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_col AND zcl_excel_common=>c_excel_sheet_max_col
OR lv_row NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_row AND zcl_excel_common=>c_excel_sheet_max_row.
RAISE EXCEPTION TYPE zcx_excel EXPORTING error = 'Invalid column/row coordinates (valid values: A1 to XFD1048576)'.
ENDIF.
pane_top_left_cell = iv_columnrow.
ENDMETHOD.
METHOD set_print_gridlines. METHOD set_print_gridlines.
me->print_gridlines = i_print_gridlines. me->print_gridlines = i_print_gridlines.
ENDMETHOD. "SET_PRINT_GRIDLINES ENDMETHOD. "SET_PRINT_GRIDLINES
@ -4340,6 +4397,25 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDMETHOD. "SET_ROW_OUTLINE ENDMETHOD. "SET_ROW_OUTLINE
METHOD set_sheetview_top_left_cell.
DATA lv_column_int TYPE zexcel_cell_column.
DATA lv_row TYPE zexcel_cell_row.
" Validate input value
zcl_excel_common=>convert_columnrow2column_a_row(
EXPORTING
i_columnrow = iv_columnrow
IMPORTING
e_column_int = lv_column_int
e_row = lv_row ).
IF lv_column_int NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_col AND zcl_excel_common=>c_excel_sheet_max_col
OR lv_row NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_row AND zcl_excel_common=>c_excel_sheet_max_row.
RAISE EXCEPTION TYPE zcx_excel EXPORTING error = 'Invalid column/row coordinates (valid values: A1 to XFD1048576)'.
ENDIF.
sheetview_top_left_cell = iv_columnrow.
ENDMETHOD.
METHOD set_show_gridlines. METHOD set_show_gridlines.
me->show_gridlines = i_show_gridlines. me->show_gridlines = i_show_gridlines.
ENDMETHOD. "SET_SHOW_GRIDLINES ENDMETHOD. "SET_SHOW_GRIDLINES
@ -4357,7 +4433,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD set_table. METHOD set_table.
DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr, DATA: lo_structdescr TYPE REF TO cl_abap_structdescr,
lr_data TYPE REF TO data, lr_data TYPE REF TO data,
lt_dfies TYPE ddfields, lt_dfies TYPE ddfields,
lv_row_int TYPE zexcel_cell_row, lv_row_int TYPE zexcel_cell_row,
@ -4375,9 +4451,9 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
CREATE DATA lr_data LIKE LINE OF ip_table. CREATE DATA lr_data LIKE LINE OF ip_table.
lo_tabdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ).
lt_dfies = lo_tabdescr->get_ddic_field_list( ). lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ).
* It is better to loop column by column * It is better to loop column by column
LOOP AT lt_dfies ASSIGNING <fs_dfies>. LOOP AT lt_dfies ASSIGNING <fs_dfies>.

View File

@ -2666,7 +2666,6 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
METHOD create_xl_drawings_vml. METHOD create_xl_drawings_vml.
DATA: DATA:
lo_xml_document TYPE REF TO cl_xml_document,
ld_stream TYPE string. ld_stream TYPE string.
@ -2677,11 +2676,6 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
* BODY * BODY
ld_stream = set_vml_string( ). ld_stream = set_vml_string( ).
CREATE OBJECT lo_xml_document.
CALL METHOD lo_xml_document->parse_string
EXPORTING
stream = ld_stream.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING' CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING EXPORTING
text = ld_stream text = ld_stream
@ -3334,8 +3328,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
ls_odd_footer TYPE zexcel_s_worksheet_head_foot, ls_odd_footer TYPE zexcel_s_worksheet_head_foot,
ls_even_header TYPE zexcel_s_worksheet_head_foot, ls_even_header TYPE zexcel_s_worksheet_head_foot,
ls_even_footer TYPE zexcel_s_worksheet_head_foot, ls_even_footer TYPE zexcel_s_worksheet_head_foot,
lv_content TYPE string, lv_content TYPE string.
lo_xml_document TYPE REF TO cl_xml_document.
* INIT_RESULT * INIT_RESULT
@ -3383,11 +3376,6 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
ld_7 ld_7
INTO lv_content. INTO lv_content.
CREATE OBJECT lo_xml_document.
CALL METHOD lo_xml_document->parse_string
EXPORTING
stream = lv_content.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING' CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING EXPORTING
text = lv_content text = lv_content

View File

@ -327,6 +327,7 @@ CLASS lcl_create_xl_sheet IMPLEMENTATION.
value = '0' ). value = '0' ).
ENDIF. ENDIF.
" Zoom scale " Zoom scale
IF o_worksheet->zif_excel_sheet_properties~zoomscale NE 0.
IF o_worksheet->zif_excel_sheet_properties~zoomscale GT 400. IF o_worksheet->zif_excel_sheet_properties~zoomscale GT 400.
o_worksheet->zif_excel_sheet_properties~zoomscale = 400. o_worksheet->zif_excel_sheet_properties~zoomscale = 400.
ELSEIF o_worksheet->zif_excel_sheet_properties~zoomscale LT 10. ELSEIF o_worksheet->zif_excel_sheet_properties~zoomscale LT 10.
@ -336,6 +337,7 @@ CLASS lcl_create_xl_sheet IMPLEMENTATION.
CONDENSE lv_value. CONDENSE lv_value.
lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscale lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscale
value = lv_value ). value = lv_value ).
ENDIF.
IF o_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0. IF o_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0.
IF o_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400. IF o_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400.
o_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400. o_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400.
@ -393,6 +395,11 @@ CLASS lcl_create_xl_sheet IMPLEMENTATION.
value = '0' ). value = '0' ).
ENDIF. ENDIF.
IF o_worksheet->sheetview_top_left_cell IS NOT INITIAL.
lo_element_2->set_attribute_ns( name = 'topLeftCell'
value = o_worksheet->sheetview_top_left_cell ).
ENDIF.
" freeze panes " freeze panes
o_worksheet->get_freeze_cell( IMPORTING ep_row = lv_freeze_cell_row o_worksheet->get_freeze_cell( IMPORTING ep_row = lv_freeze_cell_row
ep_column = lv_freeze_cell_column ). ep_column = lv_freeze_cell_column ).
@ -415,11 +422,15 @@ CLASS lcl_create_xl_sheet IMPLEMENTATION.
value = lv_value ). value = lv_value ).
ENDIF. ENDIF.
lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ). IF o_worksheet->pane_top_left_cell IS NOT INITIAL.
lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ). lo_element_3->set_attribute_ns( name = 'topLeftCell'
CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value. value = o_worksheet->pane_top_left_cell ).
ELSE.
lv_value = zcl_excel_common=>convert_column_a_row2columnrow( i_column = lv_freeze_cell_column
i_row = lv_freeze_cell_row ).
lo_element_3->set_attribute_ns( name = 'topLeftCell' lo_element_3->set_attribute_ns( name = 'topLeftCell'
value = lv_value ). value = lv_value ).
ENDIF.
lo_element_3->set_attribute_ns( name = 'activePane' lo_element_3->set_attribute_ns( name = 'activePane'
value = 'bottomRight' ). value = 'bottomRight' ).

View File

@ -9,6 +9,9 @@ CLASS zcl_excel_writer_csv DEFINITION
INTERFACES zif_excel_writer . INTERFACES zif_excel_writer .
"! Default value for initial dates e.g. user's format (DD.MM.YYYY, MM.DD.YYYY, etc.)
CONSTANTS c_default TYPE c LENGTH 10 VALUE 'DEFAULT' ##NO_TEXT.
CLASS-METHODS set_delimiter CLASS-METHODS set_delimiter
IMPORTING IMPORTING
VALUE(ip_value) TYPE c DEFAULT ';' . VALUE(ip_value) TYPE c DEFAULT ';' .
@ -24,7 +27,10 @@ CLASS zcl_excel_writer_csv DEFINITION
CLASS-METHODS set_active_sheet_index_by_name CLASS-METHODS set_active_sheet_index_by_name
IMPORTING IMPORTING
!i_worksheet_name TYPE zexcel_worksheets_name . !i_worksheet_name TYPE zexcel_worksheets_name .
*"* protected components of class ZCL_EXCEL_WRITER_2007 CLASS-METHODS set_initial_ext_date
IMPORTING
!ip_value TYPE char10 DEFAULT c_default .
*"* protected components of class ZCL_EXCEL_WRITER_CSV
*"* do not include other source files here!!! *"* do not include other source files here!!!
PROTECTED SECTION. PROTECTED SECTION.
*"* private components of class ZCL_EXCEL_WRITER_CSV *"* private components of class ZCL_EXCEL_WRITER_CSV
@ -38,6 +44,7 @@ CLASS zcl_excel_writer_csv DEFINITION
eol TYPE c LENGTH 2 VALUE cl_abap_char_utilities=>cr_lf ##NO_TEXT. eol TYPE c LENGTH 2 VALUE cl_abap_char_utilities=>cr_lf ##NO_TEXT.
CLASS-DATA worksheet_name TYPE zexcel_worksheets_name . CLASS-DATA worksheet_name TYPE zexcel_worksheets_name .
CLASS-DATA worksheet_index TYPE zexcel_active_worksheet . CLASS-DATA worksheet_index TYPE zexcel_active_worksheet .
CLASS-DATA initial_ext_date TYPE char10 VALUE c_default.
METHODS create METHODS create
RETURNING RETURNING
@ -53,13 +60,17 @@ ENDCLASS.
CLASS zcl_excel_writer_csv IMPLEMENTATION. CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
METHOD create. METHOD create.
* .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.
@ -216,6 +227,9 @@ CLASS zcl_excel_writer_csv IMPLEMENTATION.
CASE <fs_sheet_content>-data_type. CASE <fs_sheet_content>-data_type.
WHEN 'd' OR 'D'. WHEN 'd' OR 'D'.
IF <fs_sheet_content>-cell_value IS INITIAL AND initial_ext_date <> c_default.
lc_value = initial_ext_date.
ELSE.
lc_value = zcl_excel_common=>excel_string_to_date( ip_value = <fs_sheet_content>-cell_value ). lc_value = zcl_excel_common=>excel_string_to_date( ip_value = <fs_sheet_content>-cell_value ).
TRY. TRY.
lv_date = lc_value. lv_date = lc_value.
@ -234,6 +248,7 @@ CLASS zcl_excel_writer_csv IMPLEMENTATION.
CATCH cx_sy_conversion_no_number. CATCH cx_sy_conversion_no_number.
ENDTRY. ENDTRY.
ENDIF.
WHEN 't' OR 'T'. WHEN 't' OR 'T'.
lc_value = zcl_excel_common=>excel_string_to_time( ip_value = <fs_sheet_content>-cell_value ). lc_value = zcl_excel_common=>excel_string_to_time( ip_value = <fs_sheet_content>-cell_value ).
@ -298,6 +313,11 @@ CLASS zcl_excel_writer_csv IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD set_initial_ext_date.
initial_ext_date = ip_value.
ENDMETHOD.
METHOD zif_excel_writer~write_file. METHOD zif_excel_writer~write_file.
me->excel = io_excel. me->excel = io_excel.
ep_file = me->create( ). ep_file = me->create( ).

View File

@ -32,6 +32,11 @@
<LANGU>I</LANGU> <LANGU>I</LANGU>
<DESCRIPT>Create CSV ; Delimited format</DESCRIPT> <DESCRIPT>Create CSV ; Delimited format</DESCRIPT>
</SEOCOMPOTX> </SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>C_DEFAULT</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Constant for string &apos;DEFAULT&apos;</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX> <SEOCOMPOTX>
<CMPNAME>DELIMITER</CMPNAME> <CMPNAME>DELIMITER</CMPNAME>
<LANGU>E</LANGU> <LANGU>E</LANGU>
@ -72,6 +77,11 @@
<LANGU>I</LANGU> <LANGU>I</LANGU>
<DESCRIPT>Excel creator</DESCRIPT> <DESCRIPT>Excel creator</DESCRIPT>
</SEOCOMPOTX> </SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>INITIAL_EXT_DATE</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Initial External Date</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX> <SEOCOMPOTX>
<CMPNAME>SET_ACTIVE_SHEET_INDEX</CMPNAME> <CMPNAME>SET_ACTIVE_SHEET_INDEX</CMPNAME>
<LANGU>E</LANGU> <LANGU>E</LANGU>
@ -122,6 +132,11 @@
<LANGU>I</LANGU> <LANGU>I</LANGU>
<DESCRIPT>Set End Of Line character</DESCRIPT> <DESCRIPT>Set End Of Line character</DESCRIPT>
</SEOCOMPOTX> </SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>SET_INITIAL_EXT_DATE</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Set Initial External Date (replacing default &apos;00.00.0000&apos;)</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX> <SEOCOMPOTX>
<CMPNAME>WORKSHEET_INDEX</CMPNAME> <CMPNAME>WORKSHEET_INDEX</CMPNAME>
<LANGU>E</LANGU> <LANGU>E</LANGU>
@ -143,6 +158,14 @@
<DESCRIPT>Worksheets name</DESCRIPT> <DESCRIPT>Worksheets name</DESCRIPT>
</SEOCOMPOTX> </SEOCOMPOTX>
</DESCRIPTIONS> </DESCRIPTIONS>
<DESCRIPTIONS_SUB>
<SEOSUBCOTX>
<CMPNAME>SET_INITIAL_EXT_DATE</CMPNAME>
<SCONAME>IP_VALUE</SCONAME>
<LANGU>E</LANGU>
<DESCRIPT>Input Value</DESCRIPT>
</SEOSUBCOTX>
</DESCRIPTIONS_SUB>
</asx:values> </asx:values>
</asx:abap> </asx:abap>
</abapGit> </abapGit>

View File

@ -262,8 +262,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
lo_ostream TYPE REF TO if_ixml_ostream, lo_ostream TYPE REF TO if_ixml_ostream,
lo_renderer TYPE REF TO if_ixml_renderer. lo_renderer TYPE REF TO if_ixml_renderer.
DATA: lv_subrc TYPE sysubrc, DATA: lv_contenttype TYPE string.
lv_contenttype TYPE string.
********************************************************************** **********************************************************************
* STEP 3: Create standard contentType * STEP 3: Create standard contentType
@ -273,7 +272,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the extension bin definition * STEP 2: modify XML adding the extension bin definition
CREATE OBJECT lo_document_xml. CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ). lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document. lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ). lo_element_root = lo_document->if_ixml_node~get_first_child( ).
@ -342,7 +341,6 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
DATA: lv_xml_node_ridx_id TYPE string, DATA: lv_xml_node_ridx_id TYPE string,
lv_size TYPE i, lv_size TYPE i,
lv_subrc TYPE sysubrc,
lv_syindex(2) TYPE c. lv_syindex(2) TYPE c.
********************************************************************** **********************************************************************
@ -353,7 +351,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the vbaProject relation * STEP 2: modify XML adding the vbaProject relation
CREATE OBJECT lo_document_xml. CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ). lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document. lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ). lo_element_root = lo_document->if_ixml_node~get_first_child( ).
@ -406,8 +404,6 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
lo_ostream TYPE REF TO if_ixml_ostream, lo_ostream TYPE REF TO if_ixml_ostream,
lo_renderer TYPE REF TO if_ixml_renderer. lo_renderer TYPE REF TO if_ixml_renderer.
DATA: lv_subrc TYPE sysubrc.
********************************************************************** **********************************************************************
* STEP 3: Create standard relationship * STEP 3: Create standard relationship
ep_content = super->create_xl_sheet( io_worksheet = io_worksheet ep_content = super->create_xl_sheet( io_worksheet = io_worksheet
@ -417,7 +413,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the vbaProject relation * STEP 2: modify XML adding the vbaProject relation
CREATE OBJECT lo_document_xml. CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ). lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document. lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ). lo_element_root = lo_document->if_ixml_node~get_first_child( ).
@ -458,8 +454,6 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
lo_ostream TYPE REF TO if_ixml_ostream, lo_ostream TYPE REF TO if_ixml_ostream,
lo_renderer TYPE REF TO if_ixml_renderer. lo_renderer TYPE REF TO if_ixml_renderer.
DATA: lv_subrc TYPE sysubrc.
********************************************************************** **********************************************************************
* STEP 3: Create standard relationship * STEP 3: Create standard relationship
ep_content = super->create_xl_workbook( ). ep_content = super->create_xl_workbook( ).
@ -468,7 +462,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the vbaProject relation * STEP 2: modify XML adding the vbaProject relation
CREATE OBJECT lo_document_xml. CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ). lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document. lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ). lo_element_root = lo_document->if_ixml_node~get_first_child( ).

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

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

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>

View File

@ -0,0 +1,37 @@
CLASS cl_excel_test DEFINITION PUBLIC.
PUBLIC SECTION.
CLASS-METHODS run
RETURNING VALUE(xdata) TYPE xstring
RAISING cx_static_check.
ENDCLASS.
CLASS cl_excel_test IMPLEMENTATION.
METHOD run.
DATA lo_excel TYPE REF TO zcl_excel.
DATA lo_worksheet TYPE REF TO zcl_excel_worksheet.
DATA lo_hyperlink TYPE REF TO zcl_excel_hyperlink.
DATA lo_column TYPE REF TO zcl_excel_column.
DATA lv_date TYPE d.
DATA lv_time TYPE t.
DATA li_writer TYPE REF TO zif_excel_writer.
CREATE OBJECT lo_excel.
lo_worksheet = lo_excel->get_active_worksheet( ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ).
lv_date = '20211231'.
lv_time = '055817'.
lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = lv_date ).
lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = lv_time ).
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'https://abap2xlsx.github.io/abap2xlsx' ).
lo_worksheet->set_cell( ip_columnrow = 'B4' ip_value = 'Click here to visit abap2xlsx homepage' ip_hyperlink = lo_hyperlink ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = '你好,世界' ).
lo_worksheet->set_cell( ip_column = 'C' ip_row = 6 ip_value = '(Chinese)' ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'नमस्ते दुनिया' ).
lo_worksheet->set_cell( ip_column = 'C' ip_row = 7 ip_value = '(Hindi)' ).
lo_column = lo_worksheet->get_column( ip_column = 'B' ).
lo_column->set_width( ip_width = 11 ).
CREATE OBJECT li_writer TYPE zcl_excel_writer_2007.
xdata = li_writer->write_file( lo_excel ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,10 @@
CLASS ltcl DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PUBLIC SECTION.
METHODS test FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl IMPLEMENTATION.
METHOD test.
cl_excel_test=>run( ).
ENDMETHOD.
ENDCLASS.

34
test/mimetypes.tabl.xml Normal file
View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>MIMETYPES</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>MIMETYPES</DDTEXT>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>TYPE</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000256</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000128</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>EXTENSION</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000128</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000064</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

9
test/run.mjs Normal file
View File

@ -0,0 +1,9 @@
import {initializeABAP} from "../output/init.mjs";
import {cl_excel_test} from "../output/cl_excel_test.clas.mjs";
import * as fs from "node:fs";
await initializeABAP();
const test = new cl_excel_test();
const buf = Buffer.from((await test.run()).get().toLowerCase(), "hex");
fs.writeFileSync("foo.xlsx", buf);