Merge branch 'master' into hvam/unit0511

This commit is contained in:
Lars Hvam 2021-12-20 06:59:16 +01:00 committed by GitHub
commit 295b6b840f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
55 changed files with 3841 additions and 1344 deletions

12
.apack-manifest.xml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DATA>
<GROUP_ID>github.com/abap2xlsx/abap2xlsx</GROUP_ID>
<ARTIFACT_ID>abap2xlsx</ARTIFACT_ID>
<VERSION>7.14.0</VERSION>
<REPOSITORY_TYPE>abapGit</REPOSITORY_TYPE>
<GIT_URL>https://github.com/abap2xlsx/abap2xlsx.git</GIT_URL>
</DATA>
</asx:values>
</asx:abap>

View File

@ -1,6 +1,6 @@
# abap2xlsx - Read and generate Excel Spreadsheets with ABAP
For general information please refer to the blog series [abap2xlsx - Generate your professional Excel spreadsheet from ABAP](http://scn.sap.com/community/abap/blog/2010/07/12/abap2xlsx--generate-your-professional-excel-spreadsheet-from-abap) and the [documentation](https://sapmentors.github.io/abap2xlsx/).
Please refer to the official wiki for the [abapGit installation guide](https://sapmentors.github.io/abap2xlsx/abapGit-installation).
For general information please refer to the blog series [abap2xlsx - Generate your professional Excel spreadsheet from ABAP](http://scn.sap.com/community/abap/blog/2010/07/12/abap2xlsx--generate-your-professional-excel-spreadsheet-from-abap) and the [documentation](https://abap2xlsx.github.io/abap2xlsx/).
Please refer to the official wiki for the [abapGit installation guide](https://abap2xlsx.github.io/abap2xlsx/abapGit-installation).
For questions, bug reports and more information on contributing to the project, please refer to the [contributing guidelines](./CONTRIBUTING.md).

122
changelog.txt Normal file
View File

@ -0,0 +1,122 @@
abapGit changelog
=================
Legend
------
* : fixed
! : changed
+ : added
- : removed
2021-11-11 v7.14.0
------------------
+ changelog
! Refactor ABAP Cloud: column width based on SAP font
! Refactor ABAP Cloud: DDIC references changed
! Refactor ABAP Cloud: collection classes
! Refactor: split unit tests into one method per case
! pretty print zcl_excel_worksheet
* SET_CELL_FORMULA: set formula even if cell was uninitialized
! Refactor: replace all macros with methods
+ Add ability to generate report from template
* Read range of print titles
+ Multiple Styles in One Cell ("rich text format")
+ Bind ALV with non-displayed SALV data
+ new feature "Ignored Errors"
* Ignore invalid Excel Table names
+ new feature "Calculated Columns"
* better error message for ZDEMO_EXCEL25
2021-10-11 v7.13.0
------------------
! zcl_excel_common: refactor unit tests
! Refactor: replace zcl_excel_aunit with cl_abap_unit_assert
! Refactor ABAP Cloud: DDIC references changed
* clear Style exporting parameter in GET_CELL
+ Conditional Formatting for Cells that "Begin With" and more
- Delete unused customui objects
* ZDEMO_EXCEL37 incorrect screen field labels
* SHIFT_FORMULA
! Refactor: replace macro with method in zcl_excel_style_number_format
* autofilter messed up if several sheets
* autofilter + filtering value, then read it, the filtering value is lost
* autofilter on row 2 is incorrectly set on row 1
! Refactor: change EXIT to RETURN, where applicable
! Refactor: zcl_excel_common: refactor STATICS to CLASS-DATA
* Writer: trailing spaces of cell values lost
! Refactor: move zexcel_s_org_rel to demos
! update to latest abapGit format
! abaplint to not change sy fields anymore
! Refactor: Do not change sy fields anymore
! abapGit diff says zdemo_calendar_classes has changed
! update abaplint configuration to latest
! Refactor: Move non-Cloud code to separate package (#795) …
* Reader: empty Excel date -> ABAP 00000000
2021-09-11 v7.12.0
------------------
! First draft of the contributing guidelines
! Refactor: remove usage of CHAR07 domain
2021-08-11 v7.11.0
------------------
! Pretty print on all source code
! Create coding-guidelines.md
! remove usage of CHAR08 DTEL
! remove usage of CHAR10 domain
! remove usage of OS_BOOLEAN
2021-07-11 v7.10.0
------------------
! remove unused DOMA
! Reader: wrong worksheet dimension
* GET_TABLE: support fields of type date
* Vietnamese, Emoji and other characters not rendered in old SAP versions
* SET_TABLE: support table headers with newline
* SET_CELL: support values with wildcard format like `_x0041_`
2021-06-11 v7.9.0
------------------
! update linter config to latest
+ Remove 15 chars. limit at encrypt password
+ Reader to read range of hyperlinks and new method SET_AREA_HYPERLINK
* Vietnamese, Emoji and other characters not rendered
* Update of ZDEMO_EXCEL31 to use CALCULATE_COLUMN_WIDTHS
! remove CHAR01
2021-05-11 v7.8.0
------------------
! remove "BOOLEAN" domain
! replace messages with ones from ZABAP2XLSX message class
2021-04-11 v7.7.0
------------------
! remove CHAR_02 domain
! abapGit format update
2021-03-11 v7.6.0
------------------
! AUnit warning zcl excel reader huge file "# au > "#au
! Remove doma ZEXCEL_BOOLE01
2021-02-11 v7.5.0
------------------
+ Possibility to get the fieldcatalog with mandt
! cleanup types in zif_excel_book_protection
2021-01-11 v7.4.0
------------------
! warning about SAPLink in documentation, and replace obsolete links in zangry_birds and zdemo_excel1
! remove XFELD usage
! Dynamic prefill of date in zdemo_calendar
2020-12-11 v7.3.0
------------------
* Fix in ZDEMO_EXCEL11: Field-symbol usage
! Update abapGit-installation.md
2020-11-11 v7.2.0
------------------
! Improve Documentaiton
! Fix package errors
+ Feature: Enable custom converters

View File

@ -4,7 +4,7 @@
## Procedure
Execute abapGit using the report **ZABAPGIT_FULL**, click on *New Online*, fill the field *Git repository URL* with *https://github.com/sapmentors/abap2xlsx.git*, package with *$abap2xls* if you just want to test. If you want to transport abap2xlsx to production then use a non local package. Click *Create package* if the package doesn't exist yet. Then click *Clone online repo*
Execute abapGit using the report **ZABAPGIT_FULL**, click on *New Online*, fill the field *Git repository URL* with *https://github.com/abap2xlsx/abap2xlsx.git*, package with *$abap2xls* if you just want to test. If you want to transport abap2xlsx to production then use a non local package. Click *Create package* if the package doesn't exist yet. Then click *Clone online repo*
![abapGit New Online Repository](new-online-abap2xlsx.png)

View File

@ -1,6 +1,6 @@
# Naming convention of variables, etc.
In abap2xlsx, over time, alas, the ABAP code came to mix different [naming standards](https://github.com/sapmentors/abap2xlsx/issues/773). Naming standards may vary from one class to another, but one naming standards is usually correctly applied in each class.
In abap2xlsx, over time, alas, the ABAP code came to mix different [naming standards](https://github.com/abap2xlsx/abap2xlsx/issues/773). Naming standards may vary from one class to another, but one naming standards is usually correctly applied in each class.
It's not possible to impose one naming standards by fixing the existing names, because clients may have developed custom programs which may already refer to them.
When it's about adding a new variable, parameter or type in an existing object or method, it's embarrassing to impose one naming standards because that could be inconsistent with the variables, parameters or types which already exist at this place.

View File

@ -722,10 +722,10 @@ START-OF-SELECTION.
ip_value = 'Created with abap2xlsx'
ip_style = lv_style_credit_guid ).
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'https://sapmentors.github.io/abap2xlsx' ).
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'https://abap2xlsx.github.io/abap2xlsx' ).
lo_worksheet->set_cell( ip_column = 'AP'
ip_row = 24
ip_value = 'https://sapmentors.github.io/abap2xlsx'
ip_value = 'https://abap2xlsx.github.io/abap2xlsx'
ip_style = lv_style_link_guid
ip_hyperlink = lo_hyperlink ).

View File

@ -26,7 +26,7 @@
<item>
<ID>I</ID>
<KEY>002</KEY>
<ENTRY>Created with abap2xlsx. Find more information at https://github.com/sapmentors/abap2xlsx.</ENTRY>
<ENTRY>Created with abap2xlsx. Find more information at https://github.com/abap2xlsx/abap2xlsx.</ENTRY>
<LENGTH>132</LENGTH>
</item>
<item>
@ -84,7 +84,7 @@
<item>
<ID>I</ID>
<KEY>002</KEY>
<ENTRY>Erzeugt mit abap2xlsx. Weitere Informationen unter https://github.com/sapmentors/abap2xlsx.</ENTRY>
<ENTRY>Erzeugt mit abap2xlsx. Weitere Informationen unter https://github.com/abap2xlsx/abap2xlsx.</ENTRY>
<LENGTH>132</LENGTH>
</item>
<item>

View File

@ -347,8 +347,8 @@ CLASS zcl_helper IMPLEMENTATION.
DATA: value TYPE string,
hyperlink TYPE REF TO zcl_excel_hyperlink.
value = 'Created with abap2xlsx. Find more information at https://github.com/sapmentors/abap2xlsx.'(002).
hyperlink = zcl_excel_hyperlink=>create_external_link( 'https://github.com/sapmentors/abap2xlsx' ). "#EC NOTEXT
value = 'Created with abap2xlsx. Find more information at https://github.com/abap2xlsx/abap2xlsx.'(002).
hyperlink = zcl_excel_hyperlink=>create_external_link( 'https://github.com/abap2xlsx/abap2xlsx' ). "#EC NOTEXT
c_worksheet->set_cell(
EXPORTING
ip_column = i_from_col " Cell Column

View File

@ -28,7 +28,7 @@ START-OF-SELECTION.
lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = sy-datum ).
lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = sy-uzeit ).
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'https://sapmentors.github.io/abap2xlsx' ).
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'https://abap2xlsx.github.io/abap2xlsx' ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 4 ip_value = 'Click here to visit abap2xlsx homepage' ip_hyperlink = lo_hyperlink ).
lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = '你好,世界' ).

View File

@ -96,6 +96,8 @@ START-OF-SELECTION.
* ALV user command
*--------------------------------------------------------------------*
FORM user_command .
DATA: lo_error TYPE REF TO zcx_excel,
lv_message TYPE string.
IF sy-ucomm = 'EXCEL'.
* get save file path
@ -118,7 +120,12 @@ FORM user_command .
INTO l_path.
* export file to save file path
TRY.
PERFORM export_to_excel.
CATCH zcx_excel INTO lo_error.
lv_message = lo_error->get_text( ).
MESSAGE lv_message TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.
ENDIF.
ENDFORM. " USER_COMMAND
@ -129,6 +136,9 @@ ENDFORM. " USER_COMMAND
* This subroutine is principal demo session
*--------------------------------------------------------------------*
FORM export_to_excel RAISING zcx_excel.
DATA: lo_error TYPE REF TO zcx_excel,
lv_message TYPE string.
* create zcl_excel_worksheet object
CREATE OBJECT lo_excel.
@ -136,15 +146,12 @@ FORM export_to_excel RAISING zcx_excel.
lo_worksheet->set_title( ip_title = 'Sheet1' ).
* write to excel using method Bin_object
TRY.
lo_worksheet->bind_alv(
io_alv = lo_salv
it_table = gt_sbook
i_top = 2
i_left = 1
).
CATCH zcx_excel .
ENDTRY.
PERFORM write_file.
@ -157,7 +164,7 @@ ENDFORM. "EXPORT_TO_EXCEL
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_file .
FORM write_file RAISING zcx_excel.
DATA: lt_file TYPE solix_tab,
l_bytecount TYPE i,
l_file TYPE xstring.

View File

@ -10,7 +10,9 @@ REPORT zdemo_excel27.
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS main.
METHODS main
RAISING
zcx_excel.
PRIVATE SECTION.
METHODS conditional_formatting_cellis
IMPORTING
@ -20,14 +22,18 @@ CLASS lcl_app DEFINITION.
op TYPE zexcel_condition_operator
f TYPE zexcel_style_formula
f2 TYPE zexcel_style_formula
numfmt TYPE string.
numfmt TYPE string
RAISING
zcx_excel.
METHODS conditional_formatting_textfun
IMPORTING
column TYPE simple
row TYPE zexcel_cell_row
txtfun TYPE zcl_excel_style_cond=>tv_textfunction
text TYPE string
numfmt TYPE string.
numfmt TYPE string
RAISING
zcx_excel.
ENDCLASS.
CONSTANTS: c_fish TYPE string VALUE 'Fish'.
@ -53,8 +59,16 @@ INCLUDE zdemo_excel_outputopt_incl.
START-OF-SELECTION.
DATA: lo_error TYPE REF TO zcx_excel,
lv_message TYPE string.
CREATE OBJECT lo_app.
TRY.
lo_app->main( ).
CATCH zcx_excel INTO lo_error.
lv_message = lo_error->get_text( ).
MESSAGE lv_message TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.
CLASS lcl_app IMPLEMENTATION.

View File

@ -97,6 +97,8 @@ START-OF-SELECTION.
* ALV user command
*--------------------------------------------------------------------*
FORM user_command .
DATA: lo_error TYPE REF TO zcx_excel,
lv_message TYPE string.
* get save file path
cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = l_path ).
@ -117,6 +119,7 @@ FORM user_command .
* export file to save file path
TRY.
CASE sy-ucomm.
WHEN 'EXCELBIND'.
CONCATENATE l_path lv_file_separator lv_default_file_name
@ -130,6 +133,12 @@ FORM user_command .
PERFORM export_to_excel_conv.
ENDCASE.
CATCH zcx_excel INTO lo_error.
lv_message = lo_error->get_text( ).
MESSAGE lv_message TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.
ENDFORM. " USER_COMMAND
*--------------------------------------------------------------------*
* FORM EXPORT_TO_EXCEL_CONV
@ -193,7 +202,7 @@ ENDFORM. "EXPORT_TO_EXCEL_BIND
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_file .
FORM write_file RAISING zcx_excel.
DATA: lt_file TYPE solix_tab,
l_bytecount TYPE i,
l_file TYPE xstring.
@ -216,7 +225,7 @@ FORM write_file .
RECEIVING
et_solix = lt_file.
l_bytecount = XSTRLEN( l_file ).
l_bytecount = xstrlen( l_file ).
ELSE.
" Convert to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'

View File

@ -15,60 +15,60 @@ REPORT zdemo_excel_fill_template.
* on the Excel file ZDEMO_EXCEL_TEMPLATE
* from SMW0.
*=================
TYPES t_number TYPE p length 16 decimals 4.
TYPES t_number TYPE p LENGTH 16 DECIMALS 4.
TYPES:
begin of t_TABLE1,
PERSON type string,
SALARY type t_number,
end of t_TABLE1,
BEGIN OF t_table1,
person TYPE string,
salary TYPE t_number,
END OF t_table1,
tt_TABLE1 type standard table of t_TABLE1 with default key,
tt_table1 TYPE STANDARD TABLE OF t_table1 WITH DEFAULT KEY,
begin of t_LINE1,
CARRID type string,
CONNID type string,
FLDATE type d,
PRICE type t_number,
end of t_LINE1,
BEGIN OF t_line1,
carrid TYPE string,
connid TYPE string,
fldate TYPE d,
price TYPE t_number,
END OF t_line1,
tt_LINE1 type standard table of t_LINE1 with default key,
tt_line1 TYPE STANDARD TABLE OF t_line1 WITH DEFAULT KEY,
begin of t_TABLE2,
CARRID type string,
PRICE type t_number,
LINE1 type tt_LINE1,
end of t_TABLE2,
BEGIN OF t_table2,
carrid TYPE string,
price TYPE t_number,
line1 TYPE tt_line1,
END OF t_table2,
tt_TABLE2 type standard table of t_TABLE2 with default key,
tt_table2 TYPE STANDARD TABLE OF t_table2 WITH DEFAULT KEY,
begin of t_Sheet1,
DATE type d,
TIME type t,
USER type string,
TOTAL type t_number,
PRICE type t_number,
TABLE1 type tt_TABLE1,
TABLE2 type tt_TABLE2,
end of t_Sheet1,
BEGIN OF t_sheet1,
date TYPE d,
time TYPE t,
user TYPE string,
total TYPE t_number,
price TYPE t_number,
table1 TYPE tt_table1,
table2 TYPE tt_table2,
END OF t_sheet1,
begin of t_TABLE3,
PERSON type string,
SALARY type t_number,
end of t_TABLE3,
BEGIN OF t_table3,
person TYPE string,
salary TYPE t_number,
END OF t_table3,
tt_TABLE3 type standard table of t_TABLE3 with default key,
tt_table3 TYPE STANDARD TABLE OF t_table3 WITH DEFAULT KEY,
begin of t_Sheet2,
DATE type d,
TIME type t,
USER type string,
TOTAL type t_number,
TABLE3 type tt_TABLE3,
end of t_Sheet2.
BEGIN OF t_sheet2,
date TYPE d,
time TYPE t,
user TYPE string,
total TYPE t_number,
table3 TYPE tt_table3,
END OF t_sheet2.
DATA: lo_data type ref to ZCL_EXCEL_TEMPLATE_DATA.
DATA: lo_data TYPE REF TO zcl_excel_template_data.
*=================
* End of generated code
*=================

View File

@ -5,7 +5,8 @@ CLASS lcl_output DEFINITION CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
output IMPORTING cl_excel TYPE REF TO zcl_excel
iv_writerclass_name TYPE clike OPTIONAL,
iv_writerclass_name TYPE clike OPTIONAL
RAISING zcx_excel,
f4_path RETURNING VALUE(selected_folder) TYPE string,
parametertexts.

View File

@ -969,148 +969,176 @@
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>8</LINE_NUMBER>
<SOURCE_LINE> CREATE OBJECT lo_excel.</SOURCE_LINE>
<SOURCE_LINE> TRY.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>9</LINE_NUMBER>
<SOURCE_LINE> lo_worksheet = lo_excel-&gt;get_active_worksheet( ).</SOURCE_LINE>
<SOURCE_LINE> CREATE OBJECT lo_excel.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>10</LINE_NUMBER>
<SOURCE_LINE> lo_worksheet = lo_excel-&gt;get_active_worksheet( ).</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>11</LINE_NUMBER>
<SOURCE_LINE> lo_worksheet-&gt;set_cell( ip_column = &apos;B&apos;</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>12</LINE_NUMBER>
<SOURCE_LINE> ip_row = &apos;2&apos;</SOURCE_LINE>
<SOURCE_LINE> lo_worksheet-&gt;set_cell( ip_column = &apos;B&apos;</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>13</LINE_NUMBER>
<SOURCE_LINE> ip_value = &apos;Welcome to Web Dynpro and abap2xlsx.&apos; ).</SOURCE_LINE>
<SOURCE_LINE> ip_row = &apos;2&apos;</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>14</LINE_NUMBER>
<SOURCE_LINE> ip_value = &apos;Welcome to Web Dynpro and abap2xlsx.&apos; ).</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>15</LINE_NUMBER>
<SOURCE_LINE> CREATE OBJECT lo_excel_writer.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>16</LINE_NUMBER>
<SOURCE_LINE> lv_content = lo_excel_writer-&gt;zif_excel_writer~write_file( lo_excel ).</SOURCE_LINE>
<SOURCE_LINE> CREATE OBJECT lo_excel_writer.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>17</LINE_NUMBER>
<SOURCE_LINE> lv_content = lo_excel_writer-&gt;zif_excel_writer~write_file( lo_excel ).</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>18</LINE_NUMBER>
<SOURCE_LINE> DATA: lv_filename TYPE string.</SOURCE_LINE>
<SOURCE_LINE> CATCH zcx_excel.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>19</LINE_NUMBER>
<SOURCE_LINE> lv_filename = &apos;wda01.xlsx&apos;.</SOURCE_LINE>
<SOURCE_LINE> &quot;Unlikely, ignore to keep demo simple.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>20</LINE_NUMBER>
<SOURCE_LINE> ENDTRY.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>21</LINE_NUMBER>
<SOURCE_LINE> CALL METHOD cl_wd_runtime_services=&gt;attach_file_to_response</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>22</LINE_NUMBER>
<SOURCE_LINE> EXPORTING</SOURCE_LINE>
<SOURCE_LINE> DATA: lv_filename TYPE string.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>23</LINE_NUMBER>
<SOURCE_LINE> i_filename = lv_filename</SOURCE_LINE>
<SOURCE_LINE> lv_filename = &apos;wda01.xlsx&apos;.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>24</LINE_NUMBER>
<SOURCE_LINE> i_content = lv_content</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>25</LINE_NUMBER>
<SOURCE_LINE> i_mime_type = &apos;EXCEL&apos;</SOURCE_LINE>
<SOURCE_LINE> CALL METHOD cl_wd_runtime_services=&gt;attach_file_to_response</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>26</LINE_NUMBER>
<SOURCE_LINE> i_in_new_window = abap_false</SOURCE_LINE>
<SOURCE_LINE> EXPORTING</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>27</LINE_NUMBER>
<SOURCE_LINE> i_inplace = abap_false.</SOURCE_LINE>
<SOURCE_LINE> i_filename = lv_filename</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>28</LINE_NUMBER>
<SOURCE_LINE> i_content = lv_content</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>29</LINE_NUMBER>
<SOURCE_LINE> i_mime_type = &apos;EXCEL&apos;</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>30</LINE_NUMBER>
<SOURCE_LINE> i_in_new_window = abap_false</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>31</LINE_NUMBER>
<SOURCE_LINE> i_inplace = abap_false.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>32</LINE_NUMBER>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>
<COMPONENT_NAME>ZDEMO_EXCEL_WDA01</COMPONENT_NAME>
<CONTROLLER_NAME>V_MAIN</CONTROLLER_NAME>
<CMPNAME>ONACTIONBTN_DOWNLOAD</CMPNAME>
<LINE_NUMBER>33</LINE_NUMBER>
<SOURCE_LINE>ENDMETHOD.</SOURCE_LINE>
</WDY_CTLR_COMPO_SOURCE_VRS>
<WDY_CTLR_COMPO_SOURCE_VRS>

View File

@ -147,8 +147,8 @@ CLASS zcl_excel DEFINITION
IMPORTING
!io_theme TYPE REF TO zcl_excel_theme .
METHODS fill_template
importing
!iv_data TYPE REF TO ZCL_EXCEL_TEMPLATE_DATA
IMPORTING
!iv_data TYPE REF TO zcl_excel_template_data
RAISING
zcx_excel .
PROTECTED SECTION.
@ -156,7 +156,7 @@ CLASS zcl_excel DEFINITION
DATA worksheets TYPE REF TO zcl_excel_worksheets .
PRIVATE SECTION.
CONSTANTS version TYPE c LENGTH 10 VALUE '7.2.0'. "#EC NOTEXT
CONSTANTS version TYPE c LENGTH 10 VALUE '7.14.0'. "#EC NOTEXT
DATA autofilters TYPE REF TO zcl_excel_autofilters .
DATA charts TYPE REF TO zcl_excel_drawings .
DATA default_style TYPE zexcel_cell_style .

View File

@ -0,0 +1,32 @@
CLASS zcl_excel_apack DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_apack_manifest.
METHODS: constructor.
ALIASES descriptor FOR if_apack_manifest~descriptor.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_excel_apack IMPLEMENTATION.
METHOD constructor.
descriptor-group_id = 'github.com/abap2xlsx/abap2xlsx'.
descriptor-artifact_id = 'abap2xlsx'.
descriptor-version = '7.14.0'.
descriptor-repository_type = 'abapGit'.
descriptor-git_url = 'https://github.com/abap2xlsx/abap2xlsx.git'.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXCEL_APACK</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2xlsx version and dependencies</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -33,7 +33,9 @@ CLASS zcl_excel_autofilter DEFINITION
!io_sheet TYPE REF TO zcl_excel_worksheet .
METHODS get_filter_area
RETURNING
VALUE(rs_area) TYPE zexcel_s_autofilter_area .
VALUE(rs_area) TYPE zexcel_s_autofilter_area
RAISING
zcx_excel .
METHODS get_filter_range
RETURNING
VALUE(r_range) TYPE zexcel_cell_value

View File

@ -37,7 +37,7 @@ ENDCLASS.
CLASS ZCL_EXCEL_COLLECTION IMPLEMENTATION.
CLASS zcl_excel_collection IMPLEMENTATION.
METHOD add .

View File

@ -15,7 +15,7 @@ CLASS zcl_excel_collection_iterator DEFINITION
VALUE(object) TYPE REF TO object.
METHODS constructor
IMPORTING
collection TYPE REF TO zCL_excel_COLLECTION.
collection TYPE REF TO zcl_excel_collection.
PROTECTED SECTION.
PRIVATE SECTION.
DATA index TYPE i VALUE 0.
@ -24,7 +24,7 @@ ENDCLASS.
CLASS ZCL_EXCEL_COLLECTION_ITERATOR IMPLEMENTATION.
CLASS zcl_excel_collection_iterator IMPLEMENTATION.
METHOD constructor .

View File

@ -12,7 +12,9 @@ CLASS zcl_excel_column DEFINITION
IMPORTING
!ip_index TYPE zexcel_cell_column_alpha
!ip_worksheet TYPE REF TO zcl_excel_worksheet
!ip_excel TYPE REF TO zcl_excel .
!ip_excel TYPE REF TO zcl_excel
RAISING
zcx_excel .
METHODS get_auto_size
RETURNING
VALUE(r_auto_size) TYPE abap_bool .
@ -48,7 +50,9 @@ CLASS zcl_excel_column DEFINITION
IMPORTING
!ip_index TYPE zexcel_cell_column_alpha
RETURNING
VALUE(io_column) TYPE REF TO zcl_excel_column .
VALUE(io_column) TYPE REF TO zcl_excel_column
RAISING
zcx_excel .
METHODS set_outline_level
IMPORTING
!ip_outline_level TYPE int4 .

View File

@ -221,7 +221,7 @@ ENDCLASS.
CLASS ZCL_EXCEL_COMMON IMPLEMENTATION.
CLASS zcl_excel_common IMPLEMENTATION.
METHOD calculate_cell_distance.

View File

@ -19,7 +19,10 @@ CLASS lcl_excel_common_test DEFINITION FOR TESTING
f_cut TYPE REF TO zcl_excel_common. "class under test
METHODS: setup.
METHODS: convert_column2alpha FOR TESTING.
METHODS: convert_column2alpha_simple FOR TESTING.
METHODS: convert_column2alpha_maxcol FOR TESTING.
METHODS: convert_column2alpha_last FOR TESTING.
METHODS: convert_column2alpha_oob FOR TESTING.
METHODS convert_column2int_basic FOR TESTING.
METHODS convert_column2int_maxcol FOR TESTING.
METHODS convert_column2int_oob_empty FOR TESTING.
@ -118,7 +121,7 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
ENDMETHOD. "setup
METHOD convert_column2alpha.
METHOD convert_column2alpha_simple.
* ============================
DATA ep_column TYPE zexcel_cell_column_alpha.
@ -138,6 +141,12 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
level = if_aunit_constants=>critical " Error Severity
).
ENDTRY.
ENDMETHOD. "convert_column2alpha_simple
METHOD convert_column2alpha_maxcol.
* ============================
DATA ep_column TYPE zexcel_cell_column_alpha.
* Test 2. Max column for OXML #16,384 = XFD
TRY.
@ -155,6 +164,12 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
level = if_aunit_constants=>critical " Error Severity
).
ENDTRY.
ENDMETHOD. "convert_column2alpha_maxcol
METHOD convert_column2alpha_last.
* ============================
DATA ep_column TYPE zexcel_cell_column_alpha.
* Test 3. Index 0 is out of bounds
TRY.
@ -172,6 +187,12 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
level = if_aunit_constants=>fatal
).
ENDTRY.
ENDMETHOD. "convert_column2alpha_last
METHOD convert_column2alpha_oob.
* ============================
DATA ep_column TYPE zexcel_cell_column_alpha.
* Test 4. Exception should be thrown index out of bounds
TRY.
@ -191,7 +212,7 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
level = if_aunit_constants=>tolerable
).
ENDTRY.
ENDMETHOD. "convert_Column2alpha
ENDMETHOD. "convert_Column2alpha_oob
METHOD convert_column2int_basic.

View File

@ -34,17 +34,23 @@ CLASS zcl_excel_converter DEFINITION
EXPORTING
!e_bytecount TYPE i
!et_file TYPE solix_tab
!e_file TYPE xstring .
!e_file TYPE xstring
RAISING
zcx_excel .
METHODS get_option
RETURNING
VALUE(rs_option) TYPE zexcel_s_converter_option .
METHODS open_file .
METHODS open_file
RAISING
zcx_excel .
METHODS set_option
IMPORTING
!is_option TYPE zexcel_s_converter_option .
METHODS write_file
IMPORTING
!i_path TYPE string OPTIONAL .
!i_path TYPE string OPTIONAL
RAISING
zcx_excel .
*"* protected components of class ZCL_EXCEL_CONVERTER
*"* do not include other source files here!!!
PROTECTED SECTION.
@ -249,7 +255,7 @@ ENDCLASS.
CLASS ZCL_EXCEL_CONVERTER IMPLEMENTATION.
CLASS zcl_excel_converter IMPLEMENTATION.
METHOD ask_option.

View File

@ -825,8 +825,10 @@ CLASS zcl_excel_drawing IMPLEMENTATION.
node ?= node->find_from_name( name = 'lineChart' namespace = 'c' ).
node2 ?= node->find_from_name( name = 'marker' namespace = 'c' depth = '1' ).
IF node2 IS BOUND.
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_linechart->ns_markerval = ls_prop-val.
ENDIF.
node2 ?= node->find_from_name( name = 'smooth' namespace = 'c' depth = '1' ).
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_linechart->ns_smoothval = ls_prop-val.
@ -973,25 +975,37 @@ CLASS zcl_excel_drawing IMPLEMENTATION.
CASE me->graph_type.
WHEN c_graph_bars.
node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ).
IF node2 IS BOUND.
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_barchart->ns_legendposval = ls_prop-val.
ENDIF.
node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ).
IF node2 IS BOUND.
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_barchart->ns_overlayval = ls_prop-val.
ENDIF.
WHEN c_graph_line.
node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ).
IF node2 IS BOUND.
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_linechart->ns_legendposval = ls_prop-val.
ENDIF.
node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ).
IF node2 IS BOUND.
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_linechart->ns_overlayval = ls_prop-val.
ENDIF.
WHEN c_graph_pie.
node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ).
IF node2 IS BOUND.
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_piechart->ns_legendposval = ls_prop-val.
ENDIF.
node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ).
IF node2 IS BOUND.
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_piechart->ns_overlayval = ls_prop-val.
ENDIF.
node2 ?= node->find_from_name( name = 'pPr' namespace = 'a' ).
zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ).
lo_piechart->ns_pprrtl = ls_prop-rtl.

View File

@ -0,0 +1,183 @@
CLASS zcl_excel_font DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
TYPES:
BEGIN OF mty_s_font_metric,
char TYPE c LENGTH 1,
char_width TYPE tdcwidths,
END OF mty_s_font_metric .
TYPES:
mty_th_font_metrics
TYPE HASHED TABLE OF mty_s_font_metric
WITH UNIQUE KEY char .
TYPES:
BEGIN OF mty_s_font_cache,
font_name TYPE zexcel_style_font_name,
font_height TYPE tdfontsize,
flag_bold TYPE abap_bool,
flag_italic TYPE abap_bool,
th_font_metrics TYPE mty_th_font_metrics,
END OF mty_s_font_cache .
TYPES:
mty_th_font_cache
TYPE HASHED TABLE OF mty_s_font_cache
WITH UNIQUE KEY font_name font_height flag_bold flag_italic .
CONSTANTS lc_default_font_height TYPE tdfontsize VALUE '110' ##NO_TEXT.
CONSTANTS lc_default_font_name TYPE zexcel_style_font_name VALUE 'Calibri' ##NO_TEXT.
CLASS-DATA mth_font_cache TYPE mty_th_font_cache .
CLASS-METHODS calculate_text_width
IMPORTING
!iv_font_name TYPE zexcel_style_font_name
!iv_font_height TYPE tdfontsize
!iv_flag_bold TYPE abap_bool
!iv_flag_italic TYPE abap_bool
!iv_cell_value TYPE zexcel_cell_value
RETURNING
VALUE(rv_width) TYPE float .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_excel_font IMPLEMENTATION.
METHOD calculate_text_width.
CONSTANTS lc_excel_cell_padding TYPE float VALUE '0.75'.
DATA: ld_current_character TYPE c LENGTH 1,
lt_itcfc TYPE STANDARD TABLE OF itcfc,
ld_offset TYPE i,
ld_length TYPE i,
ld_uccp TYPE i,
ls_font_metric TYPE mty_s_font_metric,
ld_width_from_font_metrics TYPE i,
ld_font_family TYPE itcfh-tdfamily,
lt_font_families LIKE STANDARD TABLE OF ld_font_family,
ls_font_cache TYPE mty_s_font_cache.
FIELD-SYMBOLS: <ls_font_cache> TYPE mty_s_font_cache,
<ls_font_metric> TYPE mty_s_font_metric,
<ls_itcfc> TYPE itcfc.
" Check if the same font (font name and font attributes) was already
" used before
READ TABLE mth_font_cache
WITH TABLE KEY
font_name = iv_font_name
font_height = iv_font_height
flag_bold = iv_flag_bold
flag_italic = iv_flag_italic
ASSIGNING <ls_font_cache>.
IF sy-subrc <> 0.
" Font is used for the first time
" Add the font to our local font cache
ls_font_cache-font_name = iv_font_name.
ls_font_cache-font_height = iv_font_height.
ls_font_cache-flag_bold = iv_flag_bold.
ls_font_cache-flag_italic = iv_flag_italic.
INSERT ls_font_cache INTO TABLE mth_font_cache
ASSIGNING <ls_font_cache>.
" Determine the SAPscript font family name from the Excel
" font name
SELECT tdfamily
FROM tfo01
INTO TABLE lt_font_families
UP TO 1 ROWS
WHERE tdtext = iv_font_name
ORDER BY PRIMARY KEY.
" Check if a matching font family was found
" Fonts can be uploaded from TTF files using transaction SE73
IF lines( lt_font_families ) > 0.
READ TABLE lt_font_families INDEX 1 INTO ld_font_family.
" Load font metrics (returns a table with the size of each letter
" in the font)
CALL FUNCTION 'LOAD_FONT'
EXPORTING
family = ld_font_family
height = iv_font_height
printer = 'SWIN'
bold = iv_flag_bold
italic = iv_flag_italic
TABLES
metric = lt_itcfc
EXCEPTIONS
font_family = 1
codepage = 2
device_type = 3
OTHERS = 4.
IF sy-subrc <> 0.
CLEAR lt_itcfc.
ENDIF.
" For faster access, convert each character number to the actual
" character, and store the characters and their sizes in a hash
" table
LOOP AT lt_itcfc ASSIGNING <ls_itcfc>.
ld_uccp = <ls_itcfc>-cpcharno.
ls_font_metric-char =
cl_abap_conv_in_ce=>uccpi( ld_uccp ).
ls_font_metric-char_width = <ls_itcfc>-tdcwidths.
INSERT ls_font_metric
INTO TABLE <ls_font_cache>-th_font_metrics.
ENDLOOP.
ENDIF.
ENDIF.
" Calculate the cell width
" If available, use font metrics
IF lines( <ls_font_cache>-th_font_metrics ) = 0.
" Font metrics are not available
" -> Calculate the cell width using only the font size
ld_length = strlen( iv_cell_value ).
rv_width = ld_length * iv_font_height / lc_default_font_height + lc_excel_cell_padding.
ELSE.
" Font metrics are available
" Calculate the size of the text by adding the sizes of each
" letter
ld_length = strlen( iv_cell_value ).
DO ld_length TIMES.
" Subtract 1, because the first character is at offset 0
ld_offset = sy-index - 1.
" Read the current character from the cell value
ld_current_character = iv_cell_value+ld_offset(1).
" Look up the size of the current letter
READ TABLE <ls_font_cache>-th_font_metrics
WITH TABLE KEY char = ld_current_character
ASSIGNING <ls_font_metric>.
IF sy-subrc = 0.
" The size of the letter is known
" -> Add the actual size of the letter
ADD <ls_font_metric>-char_width TO ld_width_from_font_metrics.
ELSE.
" The size of the letter is unknown
" -> Add the font height as the default letter size
ADD iv_font_height TO ld_width_from_font_metrics.
ENDIF.
ENDDO.
" Add cell padding (Excel makes columns a bit wider than the space
" that is needed for the text itself) and convert unit
" (division by 100)
rv_width = ld_width_from_font_metrics / 100 + lc_excel_cell_padding.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,27 @@
CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.
METHODS calculate FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD calculate.
DATA lv_width TYPE f.
lv_width = zcl_excel_font=>calculate_text_width(
iv_font_name = 'foobar'
iv_font_height = 20
iv_flag_bold = abap_false
iv_flag_italic = abap_false
iv_cell_value = 'hello world' ).
cl_abap_unit_assert=>assert_equals(
act = lv_width
exp = '2.75' ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXCEL_FONT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2xlsx - Font Logic</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -254,7 +254,9 @@ CLASS zcl_excel_reader_2007 DEFINITION
METHODS load_worksheet_autofilter
IMPORTING
io_ixml_worksheet TYPE REF TO if_ixml_document
io_worksheet TYPE REF TO zcl_excel_worksheet.
io_worksheet TYPE REF TO zcl_excel_worksheet
RAISING
zcx_excel.
METHODS load_worksheet_pagemargins
IMPORTING
!io_ixml_worksheet TYPE REF TO if_ixml_document
@ -276,7 +278,9 @@ CLASS zcl_excel_reader_2007 DEFINITION
METHODS load_theme
IMPORTING
VALUE(iv_path) TYPE string
!ip_excel TYPE REF TO zcl_excel .
!ip_excel TYPE REF TO zcl_excel
RAISING
zcx_excel .
PRIVATE SECTION.
DATA zip TYPE REF TO lcl_zip_archive .
@ -872,7 +876,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
lo_node_si TYPE REF TO if_ixml_element,
lo_node_si_child TYPE REF TO if_ixml_element,
lo_node_r_child_t TYPE REF TO if_ixml_element,
lo_node_r_child_rPr TYPE REF TO if_ixml_element,
lo_node_r_child_rpr TYPE REF TO if_ixml_element,
lo_font TYPE REF TO zcl_excel_style_font,
ls_rtf TYPE zexcel_s_rtf,
lv_current_offset TYPE int2,
@ -2208,6 +2212,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
zoomscalenormal TYPE string,
workbookviewid TYPE string,
showrowcolheaders TYPE string,
righttoleft TYPE string,
END OF lty_sheetview.
TYPES: BEGIN OF lty_mergecell,
@ -2724,6 +2729,10 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ls_sheetview-showgridlines = abap_false.
ENDIF.
io_worksheet->set_show_gridlines( ls_sheetview-showgridlines ).
IF ls_sheetview-righttoleft = lc_xml_attr_true
OR ls_sheetview-righttoleft = lc_xml_attr_true_int.
io_worksheet->zif_excel_sheet_properties~set_right_to_left( abap_true ).
ENDIF.
"Add merge cell information

View File

@ -68,7 +68,9 @@ CLASS zcl_excel_reader_huge_file DEFINITION
METHODS put_cell_to_worksheet
IMPORTING
!io_worksheet TYPE REF TO zcl_excel_worksheet
!is_cell TYPE t_cell .
!is_cell TYPE t_cell
RAISING
zcx_excel.
METHODS get_shared_string
IMPORTING
!iv_index TYPE any
@ -88,7 +90,8 @@ CLASS zcl_excel_reader_huge_file DEFINITION
!io_reader TYPE REF TO if_sxml_reader
!io_worksheet TYPE REF TO zcl_excel_worksheet
RAISING
lcx_not_found .
lcx_not_found
zcx_excel .
METHODS get_sxml_reader
IMPORTING
!iv_path TYPE string
@ -246,16 +249,20 @@ CLASS zcl_excel_reader_huge_file IMPLEMENTATION.
WHILE io_reader->node_type NE c_end_of_stream.
io_reader->next_node( ).
IF io_reader->name EQ `t`.
CASE io_reader->name.
WHEN 'si'.
CASE io_reader->node_type .
WHEN c_element_open .
CLEAR lv_value .
WHEN c_node_value .
lv_value = lv_value && io_reader->value .
WHEN c_element_close .
APPEND lv_value TO et_shared_strings.
ENDCASE .
ENDIF.
WHEN 't'.
CASE io_reader->node_type .
WHEN c_node_value .
lv_value = lv_value && io_reader->value .
ENDCASE .
ENDCASE .
ENDWHILE.
ENDMETHOD.

View File

@ -1,133 +1,134 @@
*"* use this source file for your ABAP unit test classes
class lcl_test definition deferred.
class zcl_excel_reader_huge_file definition local friends lcl_test.
CLASS lcl_test DEFINITION DEFERRED.
CLASS zcl_excel_reader_huge_file DEFINITION LOCAL FRIENDS lcl_test.
*
class lcl_test definition for testing
risk level harmless
duration short.
CLASS lcl_test DEFINITION FOR TESTING
RISK LEVEL HARMLESS
DURATION SHORT.
private section.
data:
out type ref to zcl_excel_reader_huge_file, " object under test
excel type ref to zcl_excel,
worksheet type ref to zcl_excel_worksheet.
methods:
setup raising cx_static_check,
test_number for testing raising cx_static_check,
test_shared_string for testing raising cx_static_check,
test_shared_string_missing for testing raising cx_static_check,
test_inline_string for testing raising cx_static_check,
test_empty_cells for testing raising cx_static_check,
test_boolean for testing raising cx_static_check,
test_style for testing raising cx_static_check,
test_style_missing for testing raising cx_static_check,
test_formula for testing raising cx_static_check,
test_read_shared_strings for testing raising cx_static_check,
test_shared_string_some_empty for testing raising cx_static_check,
test_skip_to_inexistent for testing raising cx_static_check,
get_reader importing iv_xml type string returning value(eo_reader) type ref to if_sxml_reader,
assert_value_equals importing iv_row type i default 1 iv_col type i default 1 iv_value type string,
assert_formula_equals importing iv_row type i default 1 iv_col type i default 1 iv_formula type string,
assert_style_equals importing iv_row type i default 1 iv_col type i default 1 iv_style type ZEXCEL_CELL_STYLE,
assert_datatype_equals importing iv_row type i default 1 iv_col type i default 1 iv_datatype type string.
PRIVATE SECTION.
DATA:
out TYPE REF TO zcl_excel_reader_huge_file, " object under test
excel TYPE REF TO zcl_excel,
worksheet TYPE REF TO zcl_excel_worksheet.
METHODS:
setup RAISING cx_static_check,
test_number FOR TESTING RAISING cx_static_check,
test_shared_string FOR TESTING RAISING cx_static_check,
test_shared_string_missing FOR TESTING RAISING cx_static_check,
test_inline_string FOR TESTING RAISING cx_static_check,
test_empty_cells FOR TESTING RAISING cx_static_check,
test_boolean FOR TESTING RAISING cx_static_check,
test_style FOR TESTING RAISING cx_static_check,
test_style_missing FOR TESTING RAISING cx_static_check,
test_formula FOR TESTING RAISING cx_static_check,
test_read_shared_strings FOR TESTING RAISING cx_static_check,
test_shared_string_some_empty FOR TESTING RAISING cx_static_check,
test_shared_string_multi_style FOR TESTING RAISING cx_static_check,
test_skip_to_inexistent FOR TESTING RAISING cx_static_check,
get_reader IMPORTING iv_xml TYPE string RETURNING VALUE(eo_reader) TYPE REF TO if_sxml_reader,
assert_value_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_value TYPE string,
assert_formula_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_formula TYPE string,
assert_style_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_style TYPE zexcel_cell_style,
assert_datatype_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_datatype TYPE string.
endclass. "lcl_test DEFINITION
ENDCLASS. "lcl_test DEFINITION
*
class lcl_test implementation.
CLASS lcl_test IMPLEMENTATION.
*
method test_number.
data lo_reader type ref to if_sxml_reader.
METHOD test_number.
DATA lo_reader TYPE REF TO if_sxml_reader.
lo_reader = get_reader(
`<c r="A1" t="n"><v>17</v></c>`
).
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `17` ).
assert_datatype_equals( `n` ).
endmethod. "test_shared_string
ENDMETHOD. "test_shared_string
*
method test_shared_string.
data lo_reader type ref to if_sxml_reader.
data: ls_shared_string type zcl_excel_reader_huge_file=>t_shared_string.
METHOD test_shared_string.
DATA lo_reader TYPE REF TO if_sxml_reader.
DATA: ls_shared_string TYPE zcl_excel_reader_huge_file=>t_shared_string.
ls_shared_string-value = `Test1`.
append ls_shared_string to out->shared_strings.
APPEND ls_shared_string TO out->shared_strings.
ls_shared_string-value = `Test2`.
append ls_shared_string to out->shared_strings.
APPEND ls_shared_string TO out->shared_strings.
lo_reader = get_reader(
`<c r="A1" t="s"><v>1</v></c>`
).
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `Test2` ).
assert_datatype_equals( `s` ).
endmethod. "test_shared_string
ENDMETHOD. "test_shared_string
*
method test_shared_string_missing.
METHOD test_shared_string_missing.
data: lo_reader type ref to if_sxml_reader,
lo_ex type ref to lcx_not_found,
lv_text type string.
data: ls_shared_string type zcl_excel_reader_huge_file=>t_shared_string.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
DATA: ls_shared_string TYPE zcl_excel_reader_huge_file=>t_shared_string.
ls_shared_string-value = `Test`.
append ls_shared_string to out->shared_strings.
APPEND ls_shared_string TO out->shared_strings.
lo_reader = get_reader(
`<c r="A1" t="s"><v>1</v></c>`
).
try.
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
CL_ABAP_UNIT_ASSERT=>fail( `Index to non-existent shared string should give an error` ).
catch lcx_not_found into lo_ex.
cl_abap_unit_assert=>fail( `Index to non-existent shared string should give an error` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
endtry.
ENDTRY.
endmethod.
ENDMETHOD.
*
method test_inline_string.
data lo_reader type ref to if_sxml_reader.
METHOD test_inline_string.
DATA lo_reader TYPE REF TO if_sxml_reader.
lo_reader = get_reader(
`<c r="A1" t="inlineStr"><is><t>Alpha</t></is></c>`
).
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `Alpha` ).
assert_datatype_equals( `inlineStr` ).
endmethod. "test_inline_string
ENDMETHOD. "test_inline_string
*
method test_boolean.
data lo_reader type ref to if_sxml_reader.
METHOD test_boolean.
DATA lo_reader TYPE REF TO if_sxml_reader.
lo_reader = get_reader(
`<c r="A1" t="b"><v>1</v></c>`
).
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `1` ).
assert_datatype_equals( `b` ).
endmethod. "test_boolean
ENDMETHOD. "test_boolean
*
method test_formula.
data lo_reader type ref to if_sxml_reader.
METHOD test_formula.
DATA lo_reader TYPE REF TO if_sxml_reader.
lo_reader = get_reader(
`<c r="A1" t="n"><f>A2*A2</f></c>`
).
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_formula_equals( `A2*A2` ).
assert_datatype_equals( `n` ).
endmethod. "test_formula
ENDMETHOD. "test_formula
*
method test_empty_cells.
METHOD test_empty_cells.
* There is no need to store an empty cell in the ABAP worksheet structure
data: lo_reader type ref to if_sxml_reader.
data: ls_shared_string type zcl_excel_reader_huge_file=>t_shared_string.
DATA: lo_reader TYPE REF TO if_sxml_reader.
DATA: ls_shared_string TYPE zcl_excel_reader_huge_file=>t_shared_string.
ls_shared_string-value = ``.
append ls_shared_string to out->shared_strings.
APPEND ls_shared_string TO out->shared_strings.
ls_shared_string-value = `t`.
append ls_shared_string to out->shared_strings.
APPEND ls_shared_string TO out->shared_strings.
lo_reader = get_reader(
`<c r="A1" t="s"><v>0</v></c>` &
`<c r="A2" t="inlineStr"><is><t></t></is></c>` &
@ -140,16 +141,16 @@ class lcl_test implementation.
assert_value_equals( iv_row = 2 iv_col = 1 iv_value = `` ).
assert_value_equals( iv_row = 3 iv_col = 1 iv_value = `t` ).
endmethod.
ENDMETHOD.
*
method test_style.
data:
lo_reader type ref to if_sxml_reader,
lo_style type ref to zcl_excel_style,
lv_guid type ZEXCEL_CELL_STYLE.
create object lo_style.
append lo_style to out->styles.
METHOD test_style.
DATA:
lo_reader TYPE REF TO if_sxml_reader,
lo_style TYPE REF TO zcl_excel_style,
lv_guid TYPE zexcel_cell_style.
CREATE OBJECT lo_style.
APPEND lo_style TO out->styles.
lv_guid = lo_style->get_guid( ).
lo_reader = get_reader(
@ -159,173 +160,196 @@ class lcl_test implementation.
assert_style_equals( lv_guid ).
endmethod. "test_style
ENDMETHOD. "test_style
*
method test_style_missing.
METHOD test_style_missing.
data:
lo_reader type ref to if_sxml_reader,
lo_ex type ref to lcx_not_found,
lv_text type string.
DATA:
lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_reader = get_reader(
`<c r="A1" s="0"><v>18</v></c>`
).
try.
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
CL_ABAP_UNIT_ASSERT=>fail( `Reference to non-existent style should throw an lcx_not_found exception` ).
catch lcx_not_found into lo_ex.
cl_abap_unit_assert=>fail( `Reference to non-existent style should throw an lcx_not_found exception` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
endtry.
ENDTRY.
endmethod. "test_style
ENDMETHOD. "test_style
*
method test_read_shared_strings.
data: lo_c2x type ref to cl_abap_conv_out_ce,
lv_xstring type xstring,
lo_reader type ref to if_sxml_reader,
lt_act type stringtab,
lt_exp type stringtab.
METHOD test_read_shared_strings.
DATA: lo_c2x TYPE REF TO cl_abap_conv_out_ce,
lv_xstring TYPE xstring,
lo_reader TYPE REF TO if_sxml_reader,
lt_act TYPE stringtab,
lt_exp TYPE stringtab.
lo_c2x = cl_abap_conv_out_ce=>create( ).
lo_c2x->convert( exporting data = `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>`
importing buffer = lv_xstring ).
lo_c2x->convert( EXPORTING data = `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>`
IMPORTING buffer = lv_xstring ).
lo_reader = cl_sxml_string_reader=>create( lv_xstring ).
append :
`` to lt_exp,
`Alpha` to lt_exp,
`Bravo` to lt_exp.
APPEND :
`` TO lt_exp,
`Alpha` TO lt_exp,
`Bravo` TO lt_exp.
lt_act = out->read_shared_strings( lo_reader ).
CL_ABAP_UNIT_ASSERT=>assert_equals( act = lt_act
cl_abap_unit_assert=>assert_equals( act = lt_act
exp = lt_exp ).
endmethod.
ENDMETHOD.
*
method test_shared_string_some_empty.
data: lo_reader type ref to if_sxml_reader,
lt_act type stringtab,
lt_exp type stringtab.
METHOD test_shared_string_some_empty.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lt_act TYPE stringtab,
lt_exp TYPE stringtab.
lo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to(
`<sst><si><t/></si>` &
`<si><t>Alpha</t></si>` &
`<si><t/></si>` &
`<si><t>Bravo</t></si></sst>`
) ).
append :
`` to lt_exp,
`Alpha` to lt_exp,
`` to lt_exp,
`Bravo` to lt_exp.
APPEND :
`` TO lt_exp,
`Alpha` TO lt_exp,
`` TO lt_exp,
`Bravo` TO lt_exp.
lt_act = out->read_shared_strings( lo_reader ).
CL_ABAP_UNIT_ASSERT=>assert_equals( act = lt_act
cl_abap_unit_assert=>assert_equals( act = lt_act
exp = lt_exp ).
endmethod.
ENDMETHOD.
*
METHOD test_shared_string_multi_style.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lt_act TYPE stringtab,
lt_exp TYPE stringtab.
lo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to(
`<sst>` &&
`<si><t>Cell A2</t></si>` &&
`<si><r><t>the following coloured part</t></r><r><rPr><sz val="11"/><color rgb="FFFF0000"/><rFont val="Calibri"/><family val="2"/><scheme val="minor"/></rPr><t xml:space="preserve"> will be preserved</t></r></si>` &&
`<si><t>Cell A3</t></si>` &&
`</sst>` ) ).
APPEND :
`Cell A2` TO lt_exp,
`the following coloured part will be preserved` TO lt_exp,
`Cell A3` TO lt_exp.
lt_act = out->read_shared_strings( lo_reader ).
cl_abap_unit_assert=>assert_equals( act = lt_act
exp = lt_exp ).
ENDMETHOD.
*
method test_skip_to_inexistent.
data: lo_c2x type ref to cl_abap_conv_out_ce,
lv_xstring type xstring,
lo_reader type ref to if_sxml_reader,
lo_ex type ref to lcx_not_found,
lv_text type string.
METHOD test_skip_to_inexistent.
DATA: lo_c2x TYPE REF TO cl_abap_conv_out_ce,
lv_xstring TYPE xstring,
lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_c2x = cl_abap_conv_out_ce=>create( ).
lo_c2x->convert( exporting data = `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>`
importing buffer = lv_xstring ).
lo_c2x->convert( EXPORTING data = `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>`
IMPORTING buffer = lv_xstring ).
lo_reader = cl_sxml_string_reader=>create( lv_xstring ).
try.
TRY.
out->skip_to( iv_element_name = `nonExistingElement` io_reader = lo_reader ).
CL_ABAP_UNIT_ASSERT=>fail( `Skipping to non-existing element must raise lcx_not_found exception` ).
catch lcx_not_found into lo_ex.
cl_abap_unit_assert=>fail( `Skipping to non-existing element must raise lcx_not_found exception` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " May inspect exception text in debugger
endtry.
endmethod.
ENDTRY.
ENDMETHOD.
*
method get_reader.
data: lv_full type string,
lo_c2x type ref to cl_abap_conv_out_ce,
lv_xstring type xstring.
concatenate `<root><sheetData><row>` iv_xml `</row></sheetData></root>` into lv_full.
METHOD get_reader.
DATA: lv_full TYPE string,
lo_c2x TYPE REF TO cl_abap_conv_out_ce,
lv_xstring TYPE xstring.
CONCATENATE `<root><sheetData><row>` iv_xml `</row></sheetData></root>` INTO lv_full.
lo_c2x = cl_abap_conv_out_ce=>create( ).
lo_c2x->convert( exporting data = lv_full
importing buffer = lv_xstring ).
lo_c2x->convert( EXPORTING data = lv_full
IMPORTING buffer = lv_xstring ).
eo_reader = cl_sxml_string_reader=>create( lv_xstring ).
endmethod. "get_reader
ENDMETHOD. "get_reader
*
method assert_value_equals.
METHOD assert_value_equals.
constants: lc_empty_string type string value is initial.
CONSTANTS: lc_empty_string TYPE string VALUE IS INITIAL.
field-symbols: <ls_cell_data> type zexcel_s_cell_data,
<lv_value> type string.
FIELD-SYMBOLS: <ls_cell_data> TYPE zexcel_s_cell_data,
<lv_value> TYPE string.
read table worksheet->sheet_content assigning <ls_cell_data>
with table key cell_row = iv_row cell_column = iv_col.
if sy-subrc eq 0.
assign <ls_cell_data>-cell_value to <lv_value>.
else.
assign lc_empty_string to <lv_value>.
endif.
READ TABLE worksheet->sheet_content ASSIGNING <ls_cell_data>
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
IF sy-subrc EQ 0.
ASSIGN <ls_cell_data>-cell_value TO <lv_value>.
ELSE.
ASSIGN lc_empty_string TO <lv_value>.
ENDIF.
CL_ABAP_UNIT_ASSERT=>assert_equals( act = <lv_value>
cl_abap_unit_assert=>assert_equals( act = <lv_value>
exp = iv_value ).
endmethod. "assert_value_equals
ENDMETHOD. "assert_value_equals
**
method assert_formula_equals.
METHOD assert_formula_equals.
field-symbols: <ls_cell_data> type zexcel_s_cell_data.
FIELD-SYMBOLS: <ls_cell_data> TYPE zexcel_s_cell_data.
read table worksheet->sheet_content assigning <ls_cell_data>
with table key cell_row = iv_row cell_column = iv_col.
CL_ABAP_UNIT_ASSERT=>assert_subrc( sy-subrc ).
READ TABLE worksheet->sheet_content ASSIGNING <ls_cell_data>
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
cl_abap_unit_assert=>assert_subrc( sy-subrc ).
CL_ABAP_UNIT_ASSERT=>assert_equals( act = <ls_cell_data>-cell_formula
cl_abap_unit_assert=>assert_equals( act = <ls_cell_data>-cell_formula
exp = iv_formula ).
endmethod. "assert_formula_equals
ENDMETHOD. "assert_formula_equals
*
method assert_style_equals.
METHOD assert_style_equals.
field-symbols: <ls_cell_data> type zexcel_s_cell_data.
FIELD-SYMBOLS: <ls_cell_data> TYPE zexcel_s_cell_data.
read table worksheet->sheet_content assigning <ls_cell_data>
with table key cell_row = iv_row cell_column = iv_col.
CL_ABAP_UNIT_ASSERT=>assert_subrc( sy-subrc ).
READ TABLE worksheet->sheet_content ASSIGNING <ls_cell_data>
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
cl_abap_unit_assert=>assert_subrc( sy-subrc ).
CL_ABAP_UNIT_ASSERT=>assert_equals( act = <ls_cell_data>-cell_style
cl_abap_unit_assert=>assert_equals( act = <ls_cell_data>-cell_style
exp = iv_style ).
endmethod.
ENDMETHOD.
*
method assert_datatype_equals.
METHOD assert_datatype_equals.
field-symbols: <ls_cell_data> type zexcel_s_cell_data.
FIELD-SYMBOLS: <ls_cell_data> TYPE zexcel_s_cell_data.
read table worksheet->sheet_content assigning <ls_cell_data>
with table key cell_row = iv_row cell_column = iv_col.
CL_ABAP_UNIT_ASSERT=>assert_subrc( sy-subrc ).
READ TABLE worksheet->sheet_content ASSIGNING <ls_cell_data>
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
cl_abap_unit_assert=>assert_subrc( sy-subrc ).
CL_ABAP_UNIT_ASSERT=>assert_equals( act = <ls_cell_data>-data_type
cl_abap_unit_assert=>assert_equals( act = <ls_cell_data>-data_type
exp = iv_datatype ).
endmethod. "assert_datatype_equals
method setup.
create object out.
create object excel.
create object worksheet
exporting
ENDMETHOD. "assert_datatype_equals
METHOD setup.
CREATE OBJECT out.
CREATE OBJECT excel.
CREATE OBJECT worksheet
EXPORTING
ip_excel = excel.
endmethod. "setup
endclass. "lcl_test IMPLEMENTATION
ENDMETHOD. "setup
ENDCLASS. "lcl_test IMPLEMENTATION

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXCEL_STYLE_CHANGER</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Style changer</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

File diff suppressed because it is too large Load Diff

View File

@ -15,9 +15,9 @@ CLASS lcl_excel_worksheet_test DEFINITION FOR TESTING
CLASS-METHODS: class_teardown.
METHODS: setup.
METHODS: teardown.
METHODS: set_merge FOR TESTING.
METHODS: delete_merge FOR TESTING.
METHODS: get_dimension_range FOR TESTING.
METHODS: set_merge FOR TESTING RAISING cx_static_check.
METHODS: delete_merge FOR TESTING RAISING cx_static_check.
METHODS: get_dimension_range FOR TESTING RAISING cx_static_check.
ENDCLASS. "lcl_Excel_Worksheet_Test
@ -78,9 +78,13 @@ CLASS lcl_excel_worksheet_test IMPLEMENTATION.
CREATE OBJECT lo_excel.
TRY.
CREATE OBJECT f_cut
EXPORTING
ip_excel = lo_excel.
CATCH zcx_excel.
cl_abap_unit_assert=>fail( 'Could not create instance' ).
ENDTRY.
ENDMETHOD. "setup

View File

@ -753,12 +753,6 @@
<LANGU>E</LANGU>
<DESCRIPT>Pagebreaks</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CLSNAME>ZCL_EXCEL_WORKSHEET</CLSNAME>
<CMPNAME>MTH_FONT_CACHE</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Hash table containing fonts and their metrics</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CLSNAME>ZCL_EXCEL_WORKSHEET</CLSNAME>
<CMPNAME>MTY_MERGE</CMPNAME>

View File

@ -48,13 +48,17 @@ CLASS zcl_excel_writer_2007 DEFINITION
!io_document TYPE REF TO if_ixml_document
!io_worksheet TYPE REF TO zcl_excel_worksheet
RETURNING
VALUE(rv_ixml_sheet_data_root) TYPE REF TO if_ixml_element .
VALUE(rv_ixml_sheet_data_root) TYPE REF TO if_ixml_element
RAISING
zcx_excel .
METHODS add_further_data_to_zip
IMPORTING
!io_zip TYPE REF TO cl_abap_zip .
METHODS create
RETURNING
VALUE(ep_excel) TYPE xstring .
VALUE(ep_excel) TYPE xstring
RAISING
zcx_excel .
METHODS create_content_types
RETURNING
VALUE(ep_content) TYPE xstring .
@ -108,7 +112,9 @@ CLASS zcl_excel_writer_2007 DEFINITION
IMPORTING
!io_worksheet TYPE REF TO zcl_excel_worksheet
RETURNING
VALUE(ep_content) TYPE xstring .
VALUE(ep_content) TYPE xstring
RAISING
zcx_excel .
METHODS create_xl_relationships
RETURNING
VALUE(ep_content) TYPE xstring .
@ -161,13 +167,17 @@ CLASS zcl_excel_writer_2007 DEFINITION
IMPORTING
!io_table TYPE REF TO zcl_excel_table
RETURNING
VALUE(ep_content) TYPE xstring .
VALUE(ep_content) TYPE xstring
RAISING
zcx_excel .
METHODS create_xl_theme
RETURNING
VALUE(ep_content) TYPE xstring .
METHODS create_xl_workbook
RETURNING
VALUE(ep_content) TYPE xstring .
VALUE(ep_content) TYPE xstring
RAISING
zcx_excel .
METHODS get_shared_string_index
IMPORTING
!ip_cell_value TYPE zexcel_cell_value
@ -3836,7 +3846,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
lc_xml_attr_priority TYPE string VALUE 'priority',
lc_xml_attr_operator TYPE string VALUE 'operator',
lc_xml_attr_text TYPE string VALUE 'text',
lc_xml_attr_notContainsText TYPE string VALUE 'notContainsText',
lc_xml_attr_notcontainstext TYPE string VALUE 'notContainsText',
lc_xml_attr_allowblank TYPE string VALUE 'allowBlank',
lc_xml_attr_showinputmessage TYPE string VALUE 'showInputMessage',
lc_xml_attr_showerrormessage TYPE string VALUE 'showErrorMessage',
@ -4078,6 +4088,10 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalesheetview
value = lv_value ).
ENDIF.
IF io_worksheet->zif_excel_sheet_properties~get_right_to_left( ) EQ abap_true.
lo_element_2->set_attribute_ns( name = 'rightToLeft'
value = '1' ).
ENDIF.
lo_element_2->set_attribute_ns( name = lc_xml_attr_workbookviewid
value = '0' ).
" showGridLines attribute

View File

@ -53,7 +53,7 @@ ENDCLASS.
CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
CLASS zcl_excel_writer_csv IMPLEMENTATION.
METHOD create.

View File

@ -209,6 +209,7 @@ CLASS zcl_excel_writer_huge_file IMPLEMENTATION.
zoomscalenormal TYPE i,
zoomscalepageview TYPE i,
zoomscalesheetview TYPE i,
righttoleft TYPE i,
workbookviewid TYPE c,
showgridlines TYPE c,
showrowcolheaders TYPE c,
@ -249,7 +250,6 @@ CLASS zcl_excel_writer_huge_file IMPLEMENTATION.
draft TYPE c,
errors TYPE string,
firstpagenumber TYPE i,
fittopage TYPE c,
fittoheight TYPE i,
fittowidth TYPE i,
horizontaldpi TYPE i,
@ -381,6 +381,12 @@ CLASS zcl_excel_writer_huge_file IMPLEMENTATION.
l_worksheet-zoomscalesheetview = io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview.
ENDIF.
IF io_worksheet->zif_excel_sheet_properties~get_right_to_left( ) EQ abap_true.
l_worksheet-righttoleft = lc_one.
ELSE.
l_worksheet-righttoleft = lc_zero.
ENDIF.
l_worksheet-workbookviewid = lc_zero.
IF io_worksheet->show_gridlines = abap_true.
@ -676,7 +682,6 @@ CLASS zcl_excel_writer_huge_file IMPLEMENTATION.
l_worksheet-pagesetup-cellcomments = io_worksheet->sheet_setup->cell_comments.
l_worksheet-pagesetup-copies = io_worksheet->sheet_setup->copies.
l_worksheet-pagesetup-firstpagenumber = io_worksheet->sheet_setup->first_page_number.
l_worksheet-pagesetup-fittopage = io_worksheet->sheet_setup->fit_to_page.
l_worksheet-pagesetup-fittoheight = io_worksheet->sheet_setup->fit_to_height.
l_worksheet-pagesetup-fittowidth = io_worksheet->sheet_setup->fit_to_width.
l_worksheet-pagesetup-horizontaldpi = io_worksheet->sheet_setup->horizontal_dpi.

View File

@ -7,7 +7,7 @@
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>Changeflag for Cells - border</DDTEXT>
<EXCLASS>4</EXCLASS>
<EXCLASS>2</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>

View File

@ -7,7 +7,7 @@
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>Changeflag for Cellstyles - Borders</DDTEXT>
<EXCLASS>4</EXCLASS>
<EXCLASS>2</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>

View File

@ -7,7 +7,8 @@
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>Changeflag Color</DDTEXT>
<EXCLASS>4</EXCLASS>
<MASTERLANG>E</MASTERLANG>
<EXCLASS>2</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>

View File

@ -7,7 +7,7 @@
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>Changeflag for Cellstyles - Fill</DDTEXT>
<EXCLASS>4</EXCLASS>
<EXCLASS>2</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>

View File

@ -18,9 +18,11 @@
</DD03P>
<DD03P>
<FIELDNAME>TABLE_NAME</FIELDNAME>
<ROLLNAME>DSTRING</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TOP_LEFT_COLUMN</FIELDNAME>

View File

@ -12,9 +12,11 @@
<DD03P_TABLE>
<DD03P>
<FIELDNAME>LEFT_VALUE</FIELDNAME>
<ROLLNAME>DSTRING</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
<DD03P>
<FIELDNAME>LEFT_FONT</FIELDNAME>
@ -26,9 +28,11 @@
</DD03P>
<DD03P>
<FIELDNAME>CENTER_VALUE</FIELDNAME>
<ROLLNAME>DSTRING</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
<DD03P>
<FIELDNAME>CENTER_FONT</FIELDNAME>
@ -40,9 +44,11 @@
</DD03P>
<DD03P>
<FIELDNAME>RIGHT_VALUE</FIELDNAME>
<ROLLNAME>DSTRING</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
<DD03P>
<FIELDNAME>RIGHT_FONT</FIELDNAME>

View File

@ -5,7 +5,6 @@
<DD04V>
<ROLLNAME>ZEXCEL_SHEET_ZOOMSCALE</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<DOMNAME>INT2</DOMNAME>
<HEADLEN>16</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>16</SCRLEN2>
@ -16,7 +15,9 @@
<SCRTEXT_M>Sheet Zoom Scale</SCRTEXT_M>
<SCRTEXT_L>Sheet Zoom Scale</SCRTEXT_L>
<DTELMASTER>E</DTELMASTER>
<REFKIND>D</REFKIND>
<DATATYPE>INT2</DATATYPE>
<LENG>000005</LENG>
<OUTPUTLEN>000006</OUTPUTLEN>
</DD04V>
</asx:values>
</asx:abap>

View File

@ -27,12 +27,12 @@
<tt:attribute name="summaryRight" value-ref="WORKSHEET.SUMMARYRIGHT" />
<tt:attribute name="summaryBelow" value-ref="WORKSHEET.SUMMARYBELOW" />
</outlinePr>
</sheetPr>
<tt:cond check="not-initial(WORKSHEET.FITTOPAGE)">
<pageSetupPr>
<pageSetUpPr>
<tt:attribute name="fitToPage" value-ref="WORKSHEET.FITTOPAGE"/>
</pageSetupPr>
</pageSetUpPr>
</tt:cond>
</sheetPr>
<dimension>
<tt:attribute name="ref" value-ref="WORKSHEET.DIMENSION" />
</dimension>
@ -48,6 +48,7 @@
<tt:attribute name="zoomScalePageLayoutView" value-ref="WORKSHEET.ZOOMSCALEPAGEVIEW" />
</tt:cond>
<tt:attribute name="zoomScaleSheetLayoutView" value-ref="WORKSHEET.ZOOMSCALESHEETVIEW" />
<tt:attribute name="rightToLeft" value-ref="WORKSHEET.RIGHTTOLEFT" />
<tt:attribute name="workbookViewId" value-ref="WORKSHEET.WORKBOOKVIEWID" />
<tt:attribute name="showGridLines" value-ref="WORKSHEET.SHOWGRIDLINES" />
<tt:attribute name="showRowColHeaders" value-ref="WORKSHEET.SHOWROWCOLHEADERS" />
@ -112,8 +113,8 @@
<tt:attribute name="hidden" value-ref="HIDDEN" />
</tt:cond>
<tt:cond check="not-initial(CUSTOMHEIGHT)">
<tt:attribute name="customHeight" value-ref="CUSTOMHIGHT" />
<tt:attribute name="ht" value-ref="HIGHT" />
<tt:attribute name="customHeight" value-ref="CUSTOMHEIGHT" />
<tt:attribute name="ht" value-ref="HEIGHT" />
</tt:cond>
<tt:cond check="not-initial(COLLAPSED)">
<tt:attribute name="collapsed" value-ref="COLLAPSED" />
@ -229,8 +230,8 @@
<tt:cond check="FIRSTPAGENUMBER != 0">
<tt:attribute name="firstPageNumber" value-ref="FIRSTPAGENUMBER" />
</tt:cond>
<tt:cond check="not-initial(FITTOPAGE)">
<tt:attribute name="fitToHeight" value-ref="FITTOHIGHT" />
<tt:cond check="not-initial(ref('.WORKSHEET.FITTOPAGE'))">
<tt:attribute name="fitToHeight" value-ref="FITTOHEIGHT" />
<tt:attribute name="fitToWidth" value-ref="FITTOWIDTH" />
</tt:cond>
<tt:cond check="HORIZONTALDPI != 0">

View File

@ -25,9 +25,15 @@ INTERFACE zif_excel_sheet_properties
DATA hide_columns_from TYPE zexcel_cell_column_alpha .
METHODS initialize .
METHODS get_right_to_left
RETURNING
VALUE(result) TYPE abap_bool.
METHODS get_style
RETURNING
VALUE(ep_style) TYPE zexcel_cell_style .
METHODS set_right_to_left
IMPORTING
!right_to_left TYPE abap_bool .
METHODS set_style
IMPORTING
!ip_style TYPE zexcel_cell_style .

View File

@ -0,0 +1,495 @@
INTERFACE zif_excel_style_changer
PUBLIC .
METHODS apply
IMPORTING
ip_worksheet TYPE REF TO zcl_excel_worksheet
ip_column TYPE simple
ip_row TYPE zexcel_cell_row
RETURNING
VALUE(ep_guid) TYPE zexcel_cell_style
RAISING
zcx_excel.
METHODS get_guid
RETURNING
VALUE(result) TYPE zexcel_cell_style.
METHODS set_complete
IMPORTING
ip_complete TYPE zexcel_s_cstyle_complete
ip_xcomplete TYPE zexcel_s_cstylex_complete
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_font
IMPORTING
ip_font TYPE zexcel_s_cstyle_font
ip_xfont TYPE zexcel_s_cstylex_font OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_fill
IMPORTING
ip_fill TYPE zexcel_s_cstyle_fill
ip_xfill TYPE zexcel_s_cstylex_fill OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_borders
IMPORTING
ip_borders TYPE zexcel_s_cstyle_borders
ip_xborders TYPE zexcel_s_cstylex_borders OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_alignment
IMPORTING
ip_alignment TYPE zexcel_s_cstyle_alignment
ip_xalignment TYPE zexcel_s_cstylex_alignment OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_protection
IMPORTING
ip_protection TYPE zexcel_s_cstyle_protection
ip_xprotection TYPE zexcel_s_cstylex_protection OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_borders_all
IMPORTING
ip_borders_allborders TYPE zexcel_s_cstyle_border
ip_xborders_allborders TYPE zexcel_s_cstylex_border OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_borders_diagonal
IMPORTING
ip_borders_diagonal TYPE zexcel_s_cstyle_border
ip_xborders_diagonal TYPE zexcel_s_cstylex_border OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_borders_down
IMPORTING
ip_borders_down TYPE zexcel_s_cstyle_border
ip_xborders_down TYPE zexcel_s_cstylex_border OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_borders_left
IMPORTING
ip_borders_left TYPE zexcel_s_cstyle_border
ip_xborders_left TYPE zexcel_s_cstylex_border OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_borders_right
IMPORTING
ip_borders_right TYPE zexcel_s_cstyle_border
ip_xborders_right TYPE zexcel_s_cstylex_border OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_complete_borders_top
IMPORTING
ip_borders_top TYPE zexcel_s_cstyle_border
ip_xborders_top TYPE zexcel_s_cstylex_border OPTIONAL
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_number_format
IMPORTING
value TYPE zexcel_number_format
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_bold
IMPORTING
value TYPE flag
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_color
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_color_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_color_indexed
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_color_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_color_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_family
IMPORTING
value TYPE zexcel_style_font_family
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_italic
IMPORTING
value TYPE flag
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_name
IMPORTING
value TYPE zexcel_style_font_name
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_scheme
IMPORTING
value TYPE zexcel_style_font_scheme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_size
IMPORTING
value TYPE numeric
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_strikethrough
IMPORTING
value TYPE flag
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_underline
IMPORTING
value TYPE flag
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_font_underline_mode
IMPORTING
value TYPE zexcel_style_font_underline
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_filltype
IMPORTING
value TYPE zexcel_fill_type
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_rotation
IMPORTING
value TYPE zexcel_rotation
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_fgcolor
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_fgcolor_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_fgcolor_indexed
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_fgcolor_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_fgcolor_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_bgcolor
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_bgcolor_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_bgcolor_indexed
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_bgcolor_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_bgcolor_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_type
IMPORTING
value TYPE zexcel_s_gradient_type-type
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_degree
IMPORTING
value TYPE zexcel_s_gradient_type-degree
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_bottom
IMPORTING
value TYPE zexcel_s_gradient_type-bottom
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_left
IMPORTING
value TYPE zexcel_s_gradient_type-left
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_top
IMPORTING
value TYPE zexcel_s_gradient_type-top
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_right
IMPORTING
value TYPE zexcel_s_gradient_type-right
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_position1
IMPORTING
value TYPE zexcel_s_gradient_type-position1
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_position2
IMPORTING
value TYPE zexcel_s_gradient_type-position2
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_fill_gradtype_position3
IMPORTING
value TYPE zexcel_s_gradient_type-position3
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_diagonal_mode
IMPORTING
value TYPE zexcel_diagonal
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_alignment_horizontal
IMPORTING
value TYPE zexcel_alignment
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_alignment_vertical
IMPORTING
value TYPE zexcel_alignment
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_alignment_textrotation
IMPORTING
value TYPE zexcel_text_rotation
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_alignment_wraptext
IMPORTING
value TYPE flag
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_alignment_shrinktofit
IMPORTING
value TYPE flag
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_alignment_indent
IMPORTING
value TYPE zexcel_indent
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_protection_hidden
IMPORTING
value TYPE zexcel_cell_protection
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_protection_locked
IMPORTING
value TYPE zexcel_cell_protection
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_allborders_style
IMPORTING
value TYPE zexcel_border
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_allborders_color
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_allbo_color_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_allbo_color_indexe
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_allbo_color_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_allbo_color_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_diagonal_style
IMPORTING
value TYPE zexcel_border
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_diagonal_color
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_diagonal_color_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_diagonal_color_ind
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_diagonal_color_the
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_diagonal_color_tin
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_down_style
IMPORTING
value TYPE zexcel_border
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_down_color
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_down_color_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_down_color_indexed
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_down_color_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_down_color_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_left_style
IMPORTING
value TYPE zexcel_border
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_left_color
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_left_color_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_left_color_indexed
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_left_color_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_left_color_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_right_style
IMPORTING
value TYPE zexcel_border
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_right_color
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_right_color_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_right_color_indexe
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_right_color_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_right_color_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_top_style
IMPORTING
value TYPE zexcel_border
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_top_color
IMPORTING
value TYPE zexcel_s_style_color
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_top_color_rgb
IMPORTING
value TYPE zexcel_style_color_argb
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_top_color_indexed
IMPORTING
value TYPE zexcel_style_color_indexed
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_top_color_theme
IMPORTING
value TYPE zexcel_style_color_theme
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
METHODS set_borders_top_color_tint
IMPORTING
value TYPE zexcel_style_color_tint
RETURNING
VALUE(result) TYPE REF TO zif_excel_style_changer.
DATA: complete_style TYPE zexcel_s_cstyle_complete READ-ONLY,
complete_stylex TYPE zexcel_s_cstylex_complete READ-ONLY.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_EXCEL_STYLE_CHANGER</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Excel style</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>