abap2xlsx/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk
Ivan 24c5fca308 Update slinkees
Update of all the slinkees files with the latest version of SAPLink to
simplify merge of pull request
2015-01-12 14:55:28 -06:00

5134 lines
270 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<CLAS CLSNAME="ZCL_EXCEL_WORKSHEET" VERSION="1" LANGU="E" DESCRIPT="Worksheet" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 ">
<types CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTY_S_FONT_METRIC" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="1 " TYPTYPE="4" SRCROW1="4 " SRCCOLUMN1="4 " SRCROW2="7 " SRCCOLUMN2="32 " TYPESRC_LENG="139 " TYPESRC="BEGIN OF mty_s_font_metric,
char TYPE c LENGTH 1,
char_width TYPE tdcwidths,
END OF mty_s_font_metric
"/>
<types CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTY_TH_FONT_METRICS" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="2 " TYPTYPE="4" SRCROW1="9 " SRCCOLUMN1="4 " SRCROW2="11 " SRCCOLUMN2="30 " TYPESRC_LENG="102 " TYPESRC="mty_th_font_metrics
TYPE HASHED TABLE OF mty_s_font_metric
WITH UNIQUE KEY char
"/>
<types CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTY_S_FONT_CACHE" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="3 " TYPTYPE="4" SRCROW1="13 " SRCCOLUMN1="4 " SRCROW2="19 " SRCCOLUMN2="31 " TYPESRC_LENG="299 " TYPESRC="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 CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTY_TH_FONT_CACHE" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="4 " TYPTYPE="4" SRCROW1="21 " SRCCOLUMN1="4 " SRCROW2="23 " SRCCOLUMN2="69 " TYPESRC_LENG="138 " TYPESRC="mty_th_font_cache
TYPE HASHED TABLE OF mty_s_font_cache
WITH UNIQUE KEY font_name font_height flag_bold flag_italic
"/>
<types CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTY_TS_ROW_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Sorted table for row dimensions" EXPOSURE="0" STATE="1" EDITORDER="5 " TYPTYPE="4" SRCROW1="25 " SRCCOLUMN1="4 " SRCROW2="25 " SRCCOLUMN2="95 " TYPESRC_LENG="93 " TYPESRC="mty_ts_row_dimension TYPE sorted TABLE OF zexcel_s_worksheet_rowdimensio WITH UNIQUE KEY row
"/>
<types CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTY_S_OUTLINE_ROW" VERSION="1" LANGU="E" DESCRIPT="Information about a row outline" EXPOSURE="2" STATE="1" EDITORDER="1 " TYPTYPE="4" SRCROW1="15 " SRCCOLUMN1="4 " SRCROW2="19 " SRCCOLUMN2="31 " TYPESRC_LENG="154 " TYPESRC="begin of MTY_S_OUTLINE_ROW,
row_from type i,
row_to type i,
collapsed type abap_bool,
end of mty_s_outline_row
"/>
<types CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTY_TS_OUTLINES_ROW" VERSION="1" LANGU="E" DESCRIPT="All row outlines ( sorted table )" EXPOSURE="2" STATE="1" EDITORDER="3 " TYPTYPE="4" SRCROW1="21 " SRCCOLUMN1="4 " SRCROW2="21 " SRCCOLUMN2="93 " TYPESRC_LENG="91 " TYPESRC="MTY_TS_OUTLINES_ROW type sorted table of MTY_S_OUTLINE_ROW with unique key row_from row_to
"/>
<implementing CLSNAME="ZCL_EXCEL_WORKSHEET" REFCLSNAME="ZIF_EXCEL_SHEET_VBA_PROJECT" VERSION="1" EXPOSURE="2" STATE="1" RELTYPE="1" EDITORDER="4 "/>
<implementing CLSNAME="ZCL_EXCEL_WORKSHEET" REFCLSNAME="ZIF_EXCEL_SHEET_PROTECTION" VERSION="1" EXPOSURE="2" STATE="1" RELTYPE="1" EDITORDER="3 "/>
<implementing CLSNAME="ZCL_EXCEL_WORKSHEET" REFCLSNAME="ZIF_EXCEL_SHEET_PROPERTIES" VERSION="1" EXPOSURE="2" STATE="1" RELTYPE="1" EDITORDER="2 "/>
<implementing CLSNAME="ZCL_EXCEL_WORKSHEET" REFCLSNAME="ZIF_EXCEL_SHEET_PRINTSETTINGS" VERSION="1" EXPOSURE="2" STATE="1" RELTYPE="1" EDITORDER="1 "/>
<localImplementation>*&quot;* local class implementation for public class
*&quot;* use this source file for the implementation part of
*&quot;* local helper classes
*&amp;---------------------------------------------------------------------*
*&amp; Class (Implementation) C_OI_PROXY_ERROR
*&amp;---------------------------------------------------------------------*
CLASS c_oi_proxy_error IMPLEMENTATION.
METHOD constructor.
* IMPORTING object_name TYPE c
* method_name TYPE c.
error_nr = ret_call_not_flushed.
me-&gt;i_oi_error~error_code = c_oi_errors=&gt;ret_call_not_flushed.
me-&gt;i_oi_error~is_flushed = &apos; &apos;.
me-&gt;i_oi_error~has_failed = &apos;X&apos;.
me-&gt;i_oi_error~has_succeeded = &apos; &apos;.
me-&gt;message_id = &apos;SOFFICEINTEGRATION&apos;.
me-&gt;message_nr = &apos;899&apos;.
me-&gt;param1 = object_name.
me-&gt;param2 = method_name.
ENDMETHOD. &quot;constructor
METHOD i_oi_error~flush_error.
IF error_nr EQ 0.
me-&gt;i_oi_error~error_code = c_oi_errors=&gt;ret_ok.
me-&gt;i_oi_error~is_flushed = &apos;X&apos;.
me-&gt;i_oi_error~has_failed = &apos; &apos;.
me-&gt;i_oi_error~has_succeeded = &apos;X&apos;.
me-&gt;message_id = &apos;&apos;.
me-&gt;message_nr = &apos;000&apos;.
CALL METHOD c_oi_errors=&gt;translate_proxy_error_code
EXPORTING
errorcode = error_nr
IMPORTING
retcode = me-&gt;i_oi_error~error_code.
ELSEIF error_nr EQ ret_call_not_flushed.
&quot;call still not flushed
CALL METHOD c_oi_errors=&gt;translate_proxy_error_code
EXPORTING
errorcode = error_nr
errorstring = me-&gt;param2 &quot;method name
objectname = me-&gt;param1
IMPORTING
retcode = me-&gt;i_oi_error~error_code.
ELSE.
me-&gt;i_oi_error~is_flushed = &apos;X&apos;.
me-&gt;i_oi_error~has_succeeded = &apos; &apos;.
me-&gt;i_oi_error~has_failed = &apos;X&apos;.
CALL METHOD c_oi_errors=&gt;translate_proxy_error_code
EXPORTING
errorcode = error_nr
errorstring = error_string
IMPORTING
retcode = me-&gt;i_oi_error~error_code.
CALL METHOD c_oi_errors=&gt;get_message
IMPORTING
message_id = me-&gt;message_id
message_number = me-&gt;message_nr
param1 = me-&gt;param1
param2 = me-&gt;param2
param3 = me-&gt;param3
param4 = me-&gt;param4.
ENDIF.
ENDMETHOD. &quot;i_oi_error~flush_error
METHOD i_oi_error~raise_message.
* IMPORTING type TYPE c.
* EXCEPTIONS message_raised flush_failed.
IF me-&gt;i_oi_error~has_succeeded IS INITIAL.
IF NOT me-&gt;i_oi_error~is_flushed IS INITIAL.
MESSAGE ID message_id TYPE type
NUMBER message_nr WITH param1 param2 param3 param4
RAISING message_raised.
ELSE.
RAISE flush_failed.
ENDIF.
ENDIF.
ENDMETHOD. &quot;i_oi_error~raise_message
METHOD i_oi_error~get_message.
* EXPORTING message_id TYPE c
* message_number TYPE c
* param1 TYPE c
* param2 TYPE c
* param3 TYPE c
* param4 TYPE c.
param1 = me-&gt;param1. param2 = me-&gt;param2.
param3 = me-&gt;param3. param4 = me-&gt;param4.
message_id = me-&gt;message_id.
message_number = me-&gt;message_nr.
ENDMETHOD. &quot;i_oi_error~get_message
ENDCLASS. &quot;C_OI_PROXY_ERROR
*&amp;---------------------------------------------------------------------*
*&amp; Class (Implementation) CL_GRID_ACCESSION
*&amp;---------------------------------------------------------------------*
CLASS lcl_gui_alv_grid IMPLEMENTATION.
METHOD get_alv_attributes.
CREATE DATA et_table LIKE io_grid-&gt;mt_outtab.
et_table = io_grid-&gt;mt_outtab.
ENDMETHOD. &quot;get_data
ENDCLASS. &quot;CL_GRID_ACCESSION</localImplementation>
<localTypes>*&quot;* use this source file for any type declarations (class
*&quot;* definitions, interfaces or data types) you need for method
*&quot;* implementation or private method&apos;s signature
TYPE-POOLS: sydes.
TYPE-POOLS: slis.
*--------------------------------------------------------------------*
* CLASS c_oi_proxy_error
*--------------------------------------------------------------------*
* use for method bind_ALV
*--------------------------------------------------------------------*
CLASS c_oi_proxy_error DEFINITION.
PUBLIC SECTION.
INTERFACES: i_oi_error.
DATA: error_nr TYPE i.
DATA: error_string TYPE sy-msgv1.
METHODS: constructor IMPORTING object_name TYPE c
method_name TYPE c.
PRIVATE SECTION.
CONSTANTS:
ret_call_not_flushed TYPE i VALUE -999999.
DATA: message_id TYPE sy-msgid,
message_nr TYPE sy-msgno,
param1 TYPE sy-msgv1,
param2 TYPE sy-msgv2,
param3 TYPE sy-msgv3,
param4 TYPE sy-msgv4.
ENDCLASS. &quot;c_oi_proxy_error DEFINITION
*--------------------------------------------------------------------*
* CLASS lcl_gui_alv_grid
*--------------------------------------------------------------------*
* to get protected attribute and method of cl_gui_alv_grid
* use for method bind_ALV
*--------------------------------------------------------------------*
CLASS lcl_gui_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
* get ALV grid data
METHODS: get_alv_attributes
IMPORTING
io_grid TYPE REF TO cl_gui_alv_grid &quot; ALV grid
EXPORTING
et_table TYPE REF TO data. &quot; dta table
ENDCLASS. &quot;lcl_gui_alv_grid DEFINITION</localTypes>
<localMacros>*&quot;* use this source file for any macro definitions you need
*&quot;* in the implementation part of the class</localMacros>
<textPool>
<language SPRAS="D">
<textElement ID="I" KEY="001" ENTRY="Tabelle" LENGTH="132 "/>
<textElement ID="I" KEY="400" ENTRY="Tabelle überschneidet sich mit schon eingebundener Tabelle und wird diesem Tabellenblatt nicht hinzugefügt." LENGTH="132 "/>
<textElement ID="I" KEY="401" ENTRY="Für Druckbereich Wiederholungsspalten wurde ein ungültiger Bereich übergeben" LENGTH="132 "/>
<textElement ID="I" KEY="402" ENTRY="Nicht erlaubtes Zeichen in Titel des Arbeitblatts. Liste der verbotenen Zeichen: /\[]*?:" LENGTH="132 "/>
<textElement ID="I" KEY="403" ENTRY="Blattname darf nicht mit &amp; beginnen." LENGTH="132 "/>
</language>
<language SPRAS="E">
<textElement ID="I" KEY="001" ENTRY="Sheet" LENGTH="132 "/>
<textElement ID="I" KEY="400" ENTRY="Table overlaps with previously bound table and will not be added to worksheet." LENGTH="132 "/>
<textElement ID="I" KEY="401" ENTRY="Invalid range supplied for print-title repeatable columns" LENGTH="132 "/>
<textElement ID="I" KEY="402" ENTRY="Found illegal character in sheetname. List of forbidden characters: /\[]*?:" LENGTH="132 "/>
<textElement ID="I" KEY="403" ENTRY="Sheetname may not start with &amp;" LENGTH="132 "/>
</language>
</textPool>
<typeUsage CLSNAME="ZCL_EXCEL_WORKSHEET" TYPEGROUP="ABAP" VERSION="1" TPUTYPE="0" EXPLICIT="X"/>
<typeUsage CLSNAME="ZCL_EXCEL_WORKSHEET" TYPEGROUP="SLIS" VERSION="1" TPUTYPE="0" IMPLICIT="X"/>
<typeUsage CLSNAME="ZCL_EXCEL_WORKSHEET" TYPEGROUP="SOI" VERSION="1" TPUTYPE="0" IMPLICIT="X"/>
<forwardDeclaration>ABAP</forwardDeclaration>
<forwardDeclaration>SLIS</forwardDeclaration>
<forwardDeclaration>SOI</forwardDeclaration>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ACTIVE_CELL" VERSION="1" LANGU="E" DESCRIPT="Version Number Component" EXPOSURE="0" STATE="1" EDITORDER="2 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_S_CELL_DATA" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHARTS" VERSION="1" LANGU="E" DESCRIPT="Charts collection" EXPOSURE="0" STATE="1" EDITORDER="4 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_DRAWINGS" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="COLUMN_DIMENSIONS" VERSION="1" LANGU="E" DESCRIPT="Collection of column dimensions" EXPOSURE="0" STATE="1" EDITORDER="5 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_T_WORKSHEET_COLUMNDIME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CONDITIONAL_STYLES" VERSION="1" LANGU="E" DESCRIPT="Styles conditional collection" EXPOSURE="0" STATE="1" EDITORDER="6 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_STYLES_CONDITIONAL" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="C_BREAK_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Worksheet Break" EXPOSURE="2" STATE="1" EDITORDER="1 " ATTDECLTYP="2" ATTVALUE="2" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_BREAK" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="C_BREAK_NONE" VERSION="1" LANGU="E" DESCRIPT="Worksheet Break" EXPOSURE="2" STATE="1" EDITORDER="2 " ATTDECLTYP="2" ATTVALUE="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_BREAK" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="C_BREAK_ROW" VERSION="1" LANGU="E" DESCRIPT="Worksheet Break" EXPOSURE="2" STATE="1" EDITORDER="3 " ATTDECLTYP="2" ATTVALUE="1" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_BREAK" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DATA_VALIDATIONS" VERSION="1" LANGU="E" DESCRIPT="Data validations collection" EXPOSURE="0" STATE="1" EDITORDER="7 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_DATA_VALIDATIONS" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DEFAULT_COLUMN_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Worksheet ColumnDimension" EXPOSURE="0" STATE="1" EDITORDER="8 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET_COLUMNDIME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DEFAULT_EXCEL_DATE_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Date format used in case style is not provide for D fields" EXPOSURE="0" STATE="1" EDITORDER="9 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DEFAULT_EXCEL_TIME_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Date format used in case style is not provide for D fields" EXPOSURE="0" STATE="1" EDITORDER="10 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DEFAULT_ROW_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Worksheet RowDimension" EXPOSURE="0" STATE="1" EDITORDER="11 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DRAWINGS" VERSION="1" LANGU="E" DESCRIPT="Drawings collection" EXPOSURE="0" STATE="1" EDITORDER="12 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_DRAWINGS" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="EXCEL" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="4 " ATTDECLTYP="0" ATTRDONLY="X" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="FREEZE_PANE_CELL_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" EXPOSURE="0" STATE="1" EDITORDER="13 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="FREEZE_PANE_CELL_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" EXPOSURE="0" STATE="1" EDITORDER="14 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GUID" VERSION="1" LANGU="E" DESCRIPT="GUID in &apos;RAW&apos; format" EXPOSURE="0" STATE="1" EDITORDER="15 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="UUID" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="HYPERLINKS" VERSION="1" LANGU="E" DESCRIPT="Colletion of hyperlinks" EXPOSURE="0" STATE="1" EDITORDER="16 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="LOWER_CELL" VERSION="1" LANGU="E" DESCRIPT="Bottom right range cell" EXPOSURE="0" STATE="1" EDITORDER="17 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_S_CELL_DATA" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MTH_FONT_CACHE" VERSION="1" LANGU="E" DESCRIPT="Hash table containing fonts and their metrics" EXPOSURE="0" STATE="1" EDITORDER="3 " ATTDECLTYP="1" ATTEXPVIRT="0" TYPTYPE="1" TYPE="MTY_TH_FONT_CACHE" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="MT_ROW_OUTLINES" VERSION="1" LANGU="E" DESCRIPT="All row outlines" EXPOSURE="0" STATE="1" EDITORDER="1 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="MTY_TS_OUTLINES_ROW" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="PRINT_GRIDLINES" VERSION="1" LANGU="E" DESCRIPT="Print Gridlines" EXPOSURE="2" STATE="1" EDITORDER="5 " ATTDECLTYP="0" ATTRDONLY="X" ATTVALUE="ABAP_FALSE" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_PRINT_GRIDLINES" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="PRINT_TITLE_COL_FROM" VERSION="1" LANGU="E" DESCRIPT="Cell Column" EXPOSURE="0" STATE="1" EDITORDER="23 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN_ALPHA" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="PRINT_TITLE_COL_TO" VERSION="1" LANGU="E" DESCRIPT="Cell Column" EXPOSURE="0" STATE="1" EDITORDER="24 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN_ALPHA" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="PRINT_TITLE_ROW_FROM" VERSION="1" LANGU="E" DESCRIPT="Cell Row" EXPOSURE="0" STATE="1" EDITORDER="25 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="PRINT_TITLE_ROW_TO" VERSION="1" LANGU="E" DESCRIPT="Cell Row" EXPOSURE="0" STATE="1" EDITORDER="26 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="RANGES" VERSION="1" LANGU="E" DESCRIPT="Ranges collection" EXPOSURE="0" STATE="1" EDITORDER="18 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_RANGES" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ROW_DIMENSIONS" VERSION="1" LANGU="E" DESCRIPT="Collection of row dimensions" EXPOSURE="0" STATE="1" EDITORDER="19 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="MTY_TS_ROW_DIMENSION" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SHEET_CONTENT" VERSION="1" LANGU="E" DESCRIPT="Excel worksheet content" EXPOSURE="2" STATE="1" EDITORDER="6 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_T_CELL_DATA" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SHEET_CONTENT_MERGE" VERSION="1" LANGU="E" DESCRIPT="Excel worksheet content" EXPOSURE="2" STATE="1" EDITORDER="7 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_T_CELL_DATA_UNSORTED" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SHEET_SETUP" VERSION="1" LANGU="E" DESCRIPT="Sheet setup" EXPOSURE="2" STATE="1" EDITORDER="8 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="ZCL_EXCEL_SHEET_SETUP" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SHOW_GRIDLINES" VERSION="1" LANGU="E" DESCRIPT="Show Gridlines" EXPOSURE="2" STATE="1" EDITORDER="9 " ATTDECLTYP="0" ATTRDONLY="X" ATTVALUE="ABAP_TRUE" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_SHOW_GRIDLINES" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SHOW_ROWCOLHEADERS" VERSION="1" LANGU="E" DESCRIPT="Show Gridlines" EXPOSURE="2" STATE="1" EDITORDER="10 " ATTDECLTYP="0" ATTRDONLY="X" ATTVALUE="ABAP_TRUE" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_SHOW_GRIDLINES" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="STYLES" VERSION="1" LANGU="E" DESCRIPT="Sheet style table type" EXPOSURE="2" STATE="1" EDITORDER="11 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_T_SHEET_STYLE" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="TABCOLOR" VERSION="1" LANGU="E" DESCRIPT="Tabcolor" EXPOSURE="2" STATE="1" EDITORDER="12 " ATTDECLTYP="0" ATTRDONLY="X" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_S_TABCOLOR" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="TABLES" VERSION="1" LANGU="E" DESCRIPT="Colletion of tables" EXPOSURE="0" STATE="1" EDITORDER="20 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="TITLE" VERSION="1" LANGU="E" DESCRIPT="Title" EXPOSURE="0" STATE="1" EDITORDER="21 " ATTDECLTYP="0" ATTVALUE="&apos;Worksheet&apos;" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_SHEET_TITLE" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="UPPER_CELL" VERSION="1" LANGU="E" DESCRIPT="Top left range cell" EXPOSURE="0" STATE="1" EDITORDER="22 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_S_CELL_DATA" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_COLUMNS">
<source>method ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_COLUMNS.
*--------------------------------------------------------------------*
* adjust internal representation
*--------------------------------------------------------------------*
CLEAR: me-&gt;print_title_col_from,
me-&gt;print_title_col_to .
*--------------------------------------------------------------------*
* adjust corresponding range
*--------------------------------------------------------------------*
me-&gt;print_title_set_range( ).
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_ROWS">
<source>method ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_ROWS.
*--------------------------------------------------------------------*
* adjust internal representation
*--------------------------------------------------------------------*
CLEAR: me-&gt;print_title_row_from,
me-&gt;print_title_row_to .
*--------------------------------------------------------------------*
* adjust corresponding range
*--------------------------------------------------------------------*
me-&gt;print_title_set_range( ).
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_COLUMNS">
<source>method ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_COLUMNS.
ev_columns_from = me-&gt;print_title_col_from.
ev_columns_to = me-&gt;print_title_col_to.
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_ROWS">
<source>method ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_ROWS.
ev_rows_from = me-&gt;print_title_row_from.
ev_rows_to = me-&gt;print_title_row_to.
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_COLUMNS">
<source>method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_COLUMNS.
*--------------------------------------------------------------------*
* issue#235 - repeat rows/columns
* - Stefan Schmöcker, 2012-12-02
*--------------------------------------------------------------------*
DATA: lv_col_from_int TYPE i,
lv_col_to_int TYPE i,
lv_errormessage TYPE string.
DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator,
lo_range TYPE REF TO zcl_excel_range.
lv_col_from_int = zcl_excel_common=&gt;convert_column2int( iv_columns_from ).
lv_col_to_int = zcl_excel_common=&gt;convert_column2int( iv_columns_to ).
*--------------------------------------------------------------------*
* Check if valid range is supplied
*--------------------------------------------------------------------*
IF lv_col_from_int &lt; 1.
lv_errormessage = &apos;Invalid range supplied for print-title repeatable columns&apos;(401).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = lv_errormessage.
ENDIF.
IF lv_col_from_int &gt; lv_col_to_int.
lv_errormessage = &apos;Invalid range supplied for print-title repeatable columns&apos;(401).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = lv_errormessage.
ENDIF.
*--------------------------------------------------------------------*
* adjust internal representation
*--------------------------------------------------------------------*
me-&gt;print_title_col_from = iv_columns_from.
me-&gt;print_title_col_to = iv_columns_to.
*--------------------------------------------------------------------*
* adjust corresponding range
*--------------------------------------------------------------------*
me-&gt;print_title_set_range( ).
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_ROWS">
<source>method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_ROWS.
*--------------------------------------------------------------------*
* issue#235 - repeat rows/columns
* - Stefan Schmöcker, 2012-12-02
*--------------------------------------------------------------------*
DATA: lv_errormessage TYPE string.
DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator,
lo_range TYPE REF TO zcl_excel_range.
*--------------------------------------------------------------------*
* Check if valid range is supplied
*--------------------------------------------------------------------*
IF iv_rows_from &lt; 1.
lv_errormessage = &apos;Invalid range supplied for print-title repeatable rowumns&apos;(401).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = lv_errormessage.
ENDIF.
IF iv_rows_from &gt; iv_rows_to.
lv_errormessage = &apos;Invalid range supplied for print-title repeatable rowumns&apos;(401).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = lv_errormessage.
ENDIF.
*--------------------------------------------------------------------*
* adjust internal representation
*--------------------------------------------------------------------*
me-&gt;print_title_row_from = iv_rows_from.
me-&gt;print_title_row_to = iv_rows_to.
*--------------------------------------------------------------------*
* adjust corresponding range
*--------------------------------------------------------------------*
me-&gt;print_title_set_range( ).
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PROPERTIES~GET_STYLE">
<source>method ZIF_EXCEL_SHEET_PROPERTIES~GET_STYLE.
IF zif_excel_sheet_properties~style IS NOT INITIAL.
ep_style = zif_excel_sheet_properties~style.
ELSE.
ep_style = me-&gt;excel-&gt;get_default_style( ).
ENDIF.
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PROPERTIES~INITIALIZE">
<source>method ZIF_EXCEL_SHEET_PROPERTIES~INITIALIZE.
zif_excel_sheet_properties~show_zeros = zif_excel_sheet_properties=&gt;c_showzero.
zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=&gt;c_below_on.
zif_excel_sheet_properties~summaryright = zif_excel_sheet_properties=&gt;c_right_on.
* inizialize zoomscale values
ZIF_EXCEL_SHEET_PROPERTIES~zoomscale = 100.
ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_normal = 100.
ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_pagelayoutview = 100 .
ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_sheetlayoutview = 100 .
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PROPERTIES~SET_STYLE">
<source>method ZIF_EXCEL_SHEET_PROPERTIES~SET_STYLE.
zif_excel_sheet_properties~style = ip_style.
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_PROTECTION~INITIALIZE">
<source>method ZIF_EXCEL_SHEET_PROTECTION~INITIALIZE.
me-&gt;zif_excel_sheet_protection~protected = zif_excel_sheet_protection=&gt;c_unprotected.
CLEAR me-&gt;zif_excel_sheet_protection~password.
me-&gt;zif_excel_sheet_protection~auto_filter = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~delete_columns = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~delete_rows = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~format_cells = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~format_columns = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~format_rows = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~insert_columns = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~insert_hyperlinks = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~insert_rows = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~objects = zif_excel_sheet_protection=&gt;c_noactive.
* me-&gt;zif_excel_sheet_protection~password = zif_excel_sheet_protection=&gt;c_noactive. &quot;issue #68
me-&gt;zif_excel_sheet_protection~pivot_tables = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~protected = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~select_locked_cells = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~select_unlocked_cells = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=&gt;c_noactive.
me-&gt;zif_excel_sheet_protection~sort = zif_excel_sheet_protection=&gt;c_noactive.
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME">
<source>method ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME.
me-&gt;zif_excel_sheet_vba_project~codename = ip_codename.
endmethod.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_WORKSHEET" CPDNAME="ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME_PR">
<source>method ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME_PR.
me-&gt;zif_excel_sheet_vba_project~codename_pr = ip_codename_pr.
endmethod.</source>
</interfaceMethod>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_DRAWING" VERSION="1" LANGU="E" DESCRIPT="Add drawing to the sheet" EXPOSURE="2" STATE="1" EDITORDER="1 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_DRAWING" SCONAME="IP_DRAWING" VERSION="1" LANGU="E" DESCRIPT="Drawing" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL_DRAWING"/>
<source>method ADD_DRAWING.
CASE ip_drawing-&gt;get_type( ).
WHEN zcl_excel_drawing=&gt;type_image.
drawings-&gt;include( ip_drawing ).
WHEN zcl_excel_drawing=&gt;type_chart.
charts-&gt;include( ip_drawing ).
ENDCASE.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_NEW_CONDITIONAL_STYLE" VERSION="1" LANGU="E" DESCRIPT="Creates a new conditional formatting" EXPOSURE="2" STATE="1" EDITORDER="2 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_NEW_CONDITIONAL_STYLE" SCONAME="EO_CONDITIONAL_STYLE" VERSION="1" LANGU="E" DESCRIPT="Font Style" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_STYLE_CONDITIONAL"/>
<source>method ADD_NEW_CONDITIONAL_STYLE.
CREATE OBJECT eo_conditional_style.
conditional_styles-&gt;add( eo_conditional_style ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_NEW_DATA_VALIDATION" VERSION="1" LANGU="E" DESCRIPT="Creates a new data validation" EXPOSURE="2" STATE="1" EDITORDER="3 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_NEW_DATA_VALIDATION" SCONAME="EO_DATA_VALIDATION" VERSION="1" LANGU="E" DESCRIPT="Data validation" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_DATA_VALIDATION"/>
<source>method ADD_NEW_DATA_VALIDATION.
CREATE OBJECT eo_data_validation.
data_validations-&gt;add( eo_data_validation ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_NEW_RANGE" VERSION="1" LANGU="E" DESCRIPT="Create a new local range" EXPOSURE="2" STATE="1" EDITORDER="4 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="ADD_NEW_RANGE" SCONAME="EO_RANGE" VERSION="1" LANGU="E" DESCRIPT="Worksheet" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_RANGE"/>
<source>method ADD_NEW_RANGE.
* Create default blank range
CREATE OBJECT eo_range.
ranges-&gt;add( eo_range ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV" VERSION="1" LANGU="E" DESCRIPT="Set cell value from ALV object" EXPOSURE="2" STATE="1" EDITORDER="5 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV" SCONAME="IO_ALV" VERSION="1" LANGU="E" DESCRIPT="ALV List Viewer object ( ALV, SALV, ...)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="OBJECT"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV" SCONAME="IT_TABLE" VERSION="1" LANGU="E" DESCRIPT="Data table" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STANDARD TABLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV" SCONAME="I_TOP" VERSION="1" LANGU="E" DESCRIPT="Top edge of data block" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I" PARVALUE="1"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV" SCONAME="I_LEFT" VERSION="1" LANGU="E" DESCRIPT="Left-hand edge of data block" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I" PARVALUE="1"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV" SCONAME="TABLE_STYLE" VERSION="1" LANGU="E" DESCRIPT="Name of the table style" CMPTYPE="1" MTDTYPE="0" EDITORDER="5 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_TABLE_STYLE" PAROPTIONL="X"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method BIND_ALV.
data: lo_converter type ref to zcl_excel_converter.
create object lo_converter.
try.
lo_converter-&gt;convert(
exporting
io_alv = io_alv
it_table = it_table
i_row_int = i_top
i_column_int = i_left
i_table = abap_true
i_style_table = table_style
io_worksheet = me
changing
co_excel = excel ).
catch zcx_excel .
endtry.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" VERSION="1" LANGU="E" DESCRIPT="Set cell value from ALV object (OLE2)" EXPOSURE="2" STATE="1" EDITORDER="6 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_DOCUMENT_URL" VERSION="1" LANGU="E" DESCRIPT="URL of file, must start with &lt;file://&gt;" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="CHAR255" PARVALUE="SPACE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_XLS" VERSION="1" LANGU="E" DESCRIPT="Export to .xls file?" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="C" PARVALUE="SPACE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_SAVE_PATH" VERSION="1" LANGU="E" DESCRIPT="Local file path" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="IO_ALV" VERSION="1" LANGU="E" DESCRIPT="ALV List Viewer" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="CL_GUI_ALV_GRID"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="IT_LISTHEADER" VERSION="1" LANGU="E" DESCRIPT="Top-of-page" CMPTYPE="1" MTDTYPE="0" EDITORDER="5 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SLIS_T_LISTHEADER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_TOP" VERSION="1" LANGU="E" DESCRIPT="Top edge of data block" CMPTYPE="1" MTDTYPE="0" EDITORDER="6 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I" PARVALUE="1"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_LEFT" VERSION="1" LANGU="E" DESCRIPT="Left-hand edge of data block" CMPTYPE="1" MTDTYPE="0" EDITORDER="7 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I" PARVALUE="1"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_COLUMNS_HEADER" VERSION="1" LANGU="E" DESCRIPT="Export columns header?" CMPTYPE="1" MTDTYPE="0" EDITORDER="8 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="C" PARVALUE="&apos;X&apos;"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_COLUMNS_AUTOFIT" VERSION="1" LANGU="E" DESCRIPT="Autofit columns width?" CMPTYPE="1" MTDTYPE="0" EDITORDER="9 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="C" PARVALUE="&apos;X&apos;"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_FORMAT_COL_HEADER" VERSION="1" LANGU="E" DESCRIPT="Column header format" CMPTYPE="1" MTDTYPE="0" EDITORDER="10 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SOI_FORMAT_ITEM" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_FORMAT_SUBTOTAL" VERSION="1" LANGU="E" DESCRIPT="Subtotal lines format" CMPTYPE="1" MTDTYPE="0" EDITORDER="11 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SOI_FORMAT_ITEM" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="I_FORMAT_TOTAL" VERSION="1" LANGU="E" DESCRIPT="Total line format" CMPTYPE="1" MTDTYPE="0" EDITORDER="12 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SOI_FORMAT_ITEM" PAROPTIONL="X"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="MISS_GUIDE" VERSION="1" LANGU="E" DESCRIPT="Windows guide is missing" MTDTYPE="0" EDITORDER="1 "/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="EX_TRANSFER_KKBLO_ERROR" VERSION="1" LANGU="E" DESCRIPT="Transfer to KKBLO struct error" MTDTYPE="0" EDITORDER="2 "/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="FATAL_ERROR" VERSION="1" LANGU="E" MTDTYPE="0" EDITORDER="3 "/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="INV_DATA_RANGE" VERSION="1" LANGU="E" MTDTYPE="0" EDITORDER="4 "/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="DIM_MISMATCH_VKEY" VERSION="1" LANGU="E" MTDTYPE="0" EDITORDER="5 "/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="DIM_MISMATCH_SEMA" VERSION="1" LANGU="E" MTDTYPE="0" EDITORDER="6 "/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_ALV_OLE2" SCONAME="ERROR_IN_SEMA" VERSION="1" LANGU="E" DESCRIPT="Un-know columns Ops, columns Typ" MTDTYPE="0" EDITORDER="7 "/>
<source>method BIND_ALV_OLE2.
*--------------------------------------------------------------------*
* Method description:
* Method use to export a CL_GUI_ALV_GRID object to xlsx/xls file
* with list header and characteristics of ALV field catalog such as:
* + Total, group&apos;s subtotal
* + Quantity fields, amount fields (dependent fields)
* + No_out, no_zero, ...
* Technique use in method:
* SAP Desktop Office Integration (DOI)
*--------------------------------------------------------------------*
* Data for session 0: DOI constructor
* ------------------------------------------
data: lo_control type ref to I_OI_CONTAINER_CONTROL.
data: lo_proxy type ref to I_OI_DOCUMENT_PROXY.
data: lo_spreadsheet type ref to I_OI_SPREADSHEET.
data: lo_error type ref to I_OI_ERROR.
data: lc_retcode type SOI_RET_STRING.
data: li_has type i. &quot;Proxy has spreadsheet interface?
data: l_is_closed type i.
* Data for session 1: Get LVC data from ALV object
* ------------------------------------------
data: l_has_activex,
l_doctype_excel_sheet(11) type c.
data: wa_DOC_HANDLE Type CNTL_HANDLE.
* LVC
data: lt_fieldcat_lvc type LVC_T_FCAT.
data: wa_fieldcat_lvc type lvc_s_fcat.
data: lt_sort_lvc type LVC_T_SORT.
data: lt_filter_idx_lvc type LVC_T_FIDX.
data: lt_GROUPLEVELS_LVC type LVC_T_GRPL.
* KKBLO
DATA: LT_FIELDCAT_KKBLO Type KKBLO_T_FIELDCAT.
DATA: LT_SORT_KKBLO Type KKBLO_T_SORTINFO.
DATA: LT_GROUPLEVELS_KKBLO Type KKBLO_T_GROUPLEVELS.
DATA: LT_FILTER_IDX_KKBLO Type KKBLO_T_SFINFO.
data: wa_listheader like line of it_listheader.
* Subtotal
data: lt_collect00 type ref to data.
data: lt_collect01 type ref to data.
data: lt_collect02 type ref to data.
data: lt_collect03 type ref to data.
data: lt_collect04 type ref to data.
data: lt_collect05 type ref to data.
data: lt_collect06 type ref to data.
data: lt_collect07 type ref to data.
data: lt_collect08 type ref to data.
data: lt_collect09 type ref to data.
* data table name
data: l_tabname type kkblo_tabname.
* local object
data: lo_grid type ref to lcl_gui_alv_grid.
* data table get from ALV
data: lt_alv type ref to data.
* total / subtotal data
field-symbols: &lt;f_collect00&gt; type standard table.
field-symbols: &lt;f_collect01&gt; type standard table.
field-symbols: &lt;f_collect02&gt; type standard table.
field-symbols: &lt;f_collect03&gt; type standard table.
field-symbols: &lt;f_collect04&gt; type standard table.
field-symbols: &lt;f_collect05&gt; type standard table.
field-symbols: &lt;f_collect06&gt; type standard table.
field-symbols: &lt;f_collect07&gt; type standard table.
field-symbols: &lt;f_collect08&gt; type standard table.
field-symbols: &lt;f_collect09&gt; type standard table.
* table before append subtotal lines
field-symbols: &lt;f_alv_tab&gt; type standard table.
* data for session 2: sort, filter and calculate total/subtotal
* ------------------------------------------
* table to save index of subotal / total line in excel tanle
* this ideal to control index of subtotal / total line later
* for ex, when get subtotal / total line to format
types: begin of st_subtot_indexs,
index type i,
end of st_subtot_indexs.
data: lt_subtot_indexs type table of st_subtot_indexs.
data: wa_subtot_indexs like line of lt_subtot_indexs.
* data table after append subtotal
data: lt_excel type ref to data.
data: l_tabix type i.
data: l_save_index type i.
* dyn subtotal table name
data: l_collect type string.
* subtotal range, to format subtotal (and total)
data: subranges type soi_range_list.
data: subrangeitem type soi_range_item.
data: l_sub_index type i.
* table after append subtotal lines
field-symbols: &lt;f_excel_tab&gt; type standard table.
field-symbols: &lt;f_excel_line&gt; type any.
* dyn subtotal tables
field-symbols: &lt;f_collect_tab&gt; type standard table.
field-symbols: &lt;f_collect_line&gt; type any.
field-symbols: &lt;f_filter_idx_line&gt; like line of LT_FILTER_IDX_KKBLO.
field-symbols: &lt;f_fieldcat_line&gt; like line of LT_FIELDCAT_KKBLO.
field-symbols: &lt;f_grouplevels_line&gt; like line of LT_GROUPLEVELS_KKBLO.
field-symbols: &lt;f_line&gt; type any.
* Data for session 3: map data to semantic table
* ------------------------------------------
types: begin of st_column_index,
fieldname type kkblo_fieldname,
tabname type kkblo_tabname,
col like sy-index,
end of st_column_index.
* columns index
data: lt_column_index type table of st_column_index.
data: wa_column_index like line of lt_column_index.
* table of dependent field ( currency and quantity unit field)
data: lt_fieldcat_depf type kkblo_t_fieldcat.
data: wa_fieldcat_depf type kkblo_fieldcat.
* XXL interface:
* -XXL: contain exporting columns characteristic
data: lt_sema type table of gxxlt_s initial size 0.
data: wa_sema like line of lt_sema.
* -XXL interface: header
data: lt_hkey type table of gxxlt_h initial size 0.
data: wa_hkey like line of lt_hkey.
* -XXL interface: header keys
data: lt_vkey type table of gxxlt_v initial size 0.
data: wa_vkey like line of lt_vkey.
* Number of H Keys: number of key columns
data: l_n_hrz_keys type i.
* Number of data columns in the list object: non-key columns no
data: l_n_att_cols type i.
* Number of V Keys: number of header row
data: l_n_vrt_keys type i.
* curency to format amount
data: lt_tcurx type table of tcurx.
data: wa_tcurx like line of lt_tcurx.
data: l_def type flag. &quot; currency / quantity flag
data: wa_t006 type t006. &quot; decimal place of unit
data: l_num type i. &quot; table columns number
data: l_typ type c. &quot; table type
data: wa type ref to data.
data: l_int type i.
data: l_counter type i.
field-symbols: &lt;f_excel_column&gt; type any.
field-symbols: &lt;f_fcat_column&gt; type any.
* Data for session 4: write to excel
* ------------------------------------------
data: data_starting_at type i value 1.
data: data_ending_at type i value -1.
data: sema_type type c.
data l_error type ref to c_oi_proxy_error.
data count type i.
data datac type i.
data datareal type i. &quot; exporting column number
data vkeycount type i.
data all type i.
data mit type i value 1. &quot; index of recent row?
data li_col_pos type i value 1. &quot; column position
data li_col_num type i. &quot; table columns number
field-symbols: &lt;line&gt; type any.
field-symbols: &lt;item&gt; type any.
data td type sydes_desc.
data: typ.
data: ranges type soi_range_list.
data: rangeitem type soi_range_item.
data: contents type soi_generic_table.
data: contentsitem type soi_generic_item.
data: semaitem type gxxlt_s.
data: hkeyitem type gxxlt_h.
data: vkeyitem type gxxlt_v.
data: li_commentary_rows type i. &quot;row number of title lines + 1
data: lo_error_w type ref to i_oi_error.
data: l_retcode type soi_ret_string.
data: no_flush type c value &apos;X&apos;.
data: li_head_top type i. &quot;header rows position
* Data for session 5: Save and clode document
* ------------------------------------------
data: li_document_size type i.
data: ls_path type RLGRAP-FILENAME.
* MACRO: Close_document
*-------------------------------------------
DEFINE close_document.
clear: l_is_closed.
IF lo_proxy is not initial.
* check proxy detroyed adi
call method lo_proxy-&gt;is_destroyed
IMPORTING
ret_value = l_is_closed.
* if dun detroyed yet: close -&gt; release proxy
IF l_is_closed is initial.
call method lo_proxy-&gt;close_document
* EXPORTING
* do_save = do_save
IMPORTING
error = lo_error
retcode = lc_retcode.
ENDIF.
call method lo_proxy-&gt;release_document
IMPORTING
error = lo_error
retcode = lC_retcode.
else.
lc_retcode = c_oi_errors=&gt;ret_document_not_open.
ENDIF.
* Detroy control container
IF lo_control is not initial.
CALL METHOD lo_control-&gt;destroy_control.
ENDIF.
clear:
lo_spreadsheet,
lo_proxy,
lo_control.
* free local
clear: l_is_closed.
END-OF-DEFINITION.
* Macro to catch DOI error
*-------------------------------------------
DEFINE error_doi.
if lc_retcode ne c_oi_errors=&gt;ret_ok.
close_document.
call method lo_error-&gt;raise_message
EXPORTING
type = &apos;E&apos;.
clear: lo_error.
endif.
END-OF-DEFINITION.
*--------------------------------------------------------------------*
* SESSION 0: DOI CONSTRUCTOR
*--------------------------------------------------------------------*
* check active windown
call function &apos;GUI_HAS_ACTIVEX&apos;
IMPORTING
return = l_has_activex.
if l_has_activex is initial.
raise MISS_GUIDE.
endif.
* Get Container Object of Screen
call method c_oi_container_control_creator=&gt;get_container_control
IMPORTING
control = lo_control
retcode = lC_retcode.
error_doi.
* Initialize Container control
CALL METHOD lo_control-&gt;init_control
EXPORTING
parent = CL_GUI_CONTAINER=&gt;DEFAULT_SCREEN
r3_application_name = &apos;&apos;
inplace_enabled = &apos;X&apos;
no_flush = &apos;X&apos;
register_on_close_event = &apos;X&apos;
register_on_custom_event = &apos;X&apos;
IMPORTING
error = lO_ERROR
retcode = lc_retcode.
error_doi.
* Get Proxy Document:
* check exist of document proxy, if exist -&gt; close first
if not lo_proxy is initial.
close_document.
endif.
IF i_xls is not initial.
* xls format, doctype = soi_doctype_excel97_sheet
l_doctype_excel_sheet = &apos;Excel.Sheet.8&apos;.
else.
* xlsx format, doctype = soi_doctype_excel_sheet
l_doctype_excel_sheet = &apos;Excel.Sheet&apos;.
ENDIF.
CALL METHOD lo_control-&gt;get_document_proxy
EXPORTING
document_type = l_doctype_excel_sheet
register_container = &apos;X&apos;
IMPORTING
document_proxy = lo_proxy
error = lO_ERROR
retcode = lc_retcode.
error_doi.
IF I_DOCUMENT_URL is initial.
* create new excel document
call method lo_proxy-&gt;create_document
EXPORTING
create_view_data = &apos;X&apos;
open_inplace = &apos;X&apos;
no_flush = &apos;X&apos;
IMPORTING
ERROR = lO_ERROR
retcode = lc_retcode.
error_doi.
else.
* Read excel template for i_DOCUMENT_URL
* this excel template can be store in local or server
CALL METHOD lo_proxy-&gt;open_document
EXPORTING
document_url = i_document_url
open_inplace = &apos;X&apos;
no_flush = &apos;X&apos;
IMPORTING
error = lo_error
retcode = lc_retcode.
error_doi.
endif.
* Check Spreadsheet Interface of Document Proxy
CALL METHOD lo_proxy-&gt;has_spreadsheet_interface
IMPORTING
is_available = li_has
error = lO_ERROR
retcode = lc_retcode.
error_doi.
* create Spreadsheet object
CHECK li_has IS NOT INITIAL.
CALL METHOD lo_proxy-&gt;get_spreadsheet_interface
IMPORTING
sheet_interface = lo_spreadsheet
error = lO_ERROR
retcode = lc_retcode.
error_doi.
*--------------------------------------------------------------------*
* SESSION 1: GET LVC DATA FROM ALV OBJECT
*--------------------------------------------------------------------*
* data table
create object lo_grid
EXPORTING
i_parent = CL_GUI_CONTAINER=&gt;SCREEN0.
call method lo_grid-&gt;get_alv_attributes
EXPORTING
io_grid = io_alv
IMPORTING
Et_table = lt_alv.
assign lt_alv-&gt;* to &lt;f_alv_tab&gt;.
* fieldcat
CALL METHOD iO_alv-&gt;GET_FRONTEND_FIELDCATALOG
IMPORTING
ET_FIELDCATALOG = lt_fieldcat_LVC.
* table name
loop at lt_fieldcat_LVC into wa_fieldcat_lvc
where not tabname is initial.
l_tabname = wa_fieldcat_lvc-tabname.
exit.
endloop.
if sy-subrc ne 0.
l_tabname = &apos;1&apos;.
endif.
clear: wa_fieldcat_lvc.
* sort table
CALL METHOD IO_ALV-&gt;GET_SORT_CRITERIA
IMPORTING
ET_SORT = lt_sort_lvc.
* filter index
CALL METHOD IO_ALV-&gt;GET_FILTERED_ENTRIES
IMPORTING
ET_FILTERED_ENTRIES = lt_filter_idx_lvc.
* group level + subtotal
CALL METHOD IO_ALV-&gt;GET_SUBTOTALS
IMPORTING
EP_COLLECT00 = lt_collect00
EP_COLLECT01 = lt_collect01
EP_COLLECT02 = lt_collect02
EP_COLLECT03 = lt_collect03
EP_COLLECT04 = lt_collect04
EP_COLLECT05 = lt_collect05
EP_COLLECT06 = lt_collect06
EP_COLLECT07 = lt_collect07
EP_COLLECT08 = lt_collect08
EP_COLLECT09 = lt_collect09
ET_GROUPLEVELS = lt_GROUPLEVELS_LVC.
assign lt_collect00-&gt;* to &lt;f_collect00&gt;.
assign lt_collect01-&gt;* to &lt;f_collect01&gt;.
assign lt_collect02-&gt;* to &lt;f_collect02&gt;.
assign lt_collect03-&gt;* to &lt;f_collect03&gt;.
assign lt_collect04-&gt;* to &lt;f_collect04&gt;.
assign lt_collect05-&gt;* to &lt;f_collect05&gt;.
assign lt_collect06-&gt;* to &lt;f_collect06&gt;.
assign lt_collect07-&gt;* to &lt;f_collect07&gt;.
assign lt_collect08-&gt;* to &lt;f_collect08&gt;.
assign lt_collect09-&gt;* to &lt;f_collect09&gt;.
* transfer to KKBLO struct
CALL FUNCTION &apos;LVC_TRANSFER_TO_KKBLO&apos;
EXPORTING
IT_FIELDCAT_LVC = lt_fieldcat_lvc
IT_SORT_LVC = lt_sort_lvc
IT_FILTER_INDEX_LVC = lt_filter_idx_lvc
IT_GROUPLEVELS_LVC = lt_grouplevels_lvc
IMPORTING
ET_FIELDCAT_KKBLO = lt_fieldcat_kkblo
ET_SORT_KKBLO = lt_sort_kkblo
ET_FILTERED_ENTRIES_KKBLO = lt_filter_idx_kkblo
ET_GROUPLEVELS_KKBLO = lt_grouplevels_kkblo
TABLES
IT_DATA = &lt;f_alv_tab&gt;
EXCEPTIONS
IT_DATA_MISSING = 1
IT_FIELDCAT_LVC_MISSING = 2
OTHERS = 3.
IF SY-SUBRC &lt;&gt; 0.
raise ex_transfer_KKBLO_ERROR.
ENDIF.
clear:
wa_fieldcat_lvc,
lt_fieldcat_lvc,
lt_sort_lvc,
lt_filter_idx_lvc,
lt_GROUPLEVELS_LVC.
clear:
lo_grid.
*--------------------------------------------------------------------*
* SESSION 2: SORT, FILTER AND CALCULATE TOTAL / SUBTOTAL
*--------------------------------------------------------------------*
* append subtotal &amp; total line
create data lt_excel like &lt;f_ALV_TAB&gt;.
assign lt_excel-&gt;* to &lt;f_excel_tab&gt;.
loop at &lt;f_alv_tab&gt; assigning &lt;f_line&gt;.
l_save_index = sy-tabix.
* filter base on filter index table
read table LT_FILTER_IDX_KKBLO assigning &lt;f_filter_idx_line&gt;
with key index = l_save_index
binary search.
if sy-subrc ne 0.
append &lt;f_line&gt; to &lt;f_excel_tab&gt;.
endif.
* append subtotal lines
read table LT_GROUPLEVELS_KKBLO assigning &lt;f_grouplevels_line&gt;
with key index_to = l_save_index
binary search.
if sy-subrc = 0.
l_tabix = sy-tabix.
do.
if &lt;f_grouplevels_line&gt;-subtot eq &apos;X&apos; and
&lt;f_grouplevels_line&gt;-hide_level is initial and
&lt;f_grouplevels_line&gt;-cindex_from ne 0.
* dynamic append subtotal line to excel table base on grouplevel table
* ex &lt;f_GROUPLEVELS_line&gt;-level = 1
* then &lt;f_collect_tab&gt; = &apos;&lt;F_COLLECT01&gt;&apos;
l_collect = &lt;f_grouplevels_line&gt;-level.
condense l_collect.
concatenate &apos;&lt;F_COLLECT0&apos;
l_collect &apos;&gt;&apos;
* &apos;-&gt;*&apos;
into l_collect.
assign (l_collect) to &lt;f_collect_tab&gt;.
* incase there&apos;re more than 1 total line of group, at the same level
* for example: subtotal of multi currency
LOOP AT &lt;f_collect_tab&gt; assigning &lt;f_collect_line&gt;.
IF sy-tabix between &lt;f_grouplevels_line&gt;-cindex_from
and &lt;f_grouplevels_line&gt;-cindex_to.
append &lt;f_collect_line&gt; to &lt;f_excel_tab&gt;.
* save subtotal lines index
wa_subtot_indexs-index = sy-tabix.
append wa_subtot_indexs to lt_subtot_indexs.
* append sub total ranges table for format later
add 1 to l_sub_index.
subrangeitem-name = l_sub_index.
condense subrangeitem-name.
concatenate &apos;SUBTOT&apos;
subrangeitem-name
into subrangeitem-name.
subrangeitem-rows = wa_subtot_indexs-index.
subrangeitem-columns = 1. &quot; start col
append subrangeitem to subranges.
clear: subrangeitem.
ENDIF.
ENDLOOP.
unassign: &lt;f_collect_tab&gt;.
unassign: &lt;f_collect_line&gt;.
clear: l_collect.
endif.
* check next subtotal level of group
unassign: &lt;f_grouplevels_line&gt;.
add 1 to l_tabix.
read table LT_GROUPLEVELS_KKBLO assigning &lt;f_grouplevels_line&gt;
index l_tabix.
if sy-subrc ne 0
or &lt;f_grouplevels_line&gt;-index_to ne l_save_index.
exit.
endif.
unassign:
&lt;f_collect_tab&gt;,
&lt;f_collect_line&gt;.
enddo.
endif.
clear:
l_tabix,
l_save_index.
unassign:
&lt;f_filter_idx_line&gt;,
&lt;f_grouplevels_line&gt;.
endloop.
* free local data
unassign:
&lt;f_line&gt;,
&lt;f_collect_tab&gt;,
&lt;f_collect_line&gt;,
&lt;f_fieldcat_line&gt;.
* append grand total line
IF &lt;f_collect00&gt; is assigned.
assign &lt;f_collect00&gt; to &lt;f_collect_tab&gt;.
if &lt;f_collect_tab&gt; is not initial.
LOOP AT &lt;f_collect_tab&gt; assigning &lt;f_collect_line&gt;.
append &lt;f_collect_line&gt; to &lt;f_excel_tab&gt;.
* save total line index
wa_subtot_indexs-index = sy-tabix.
append wa_subtot_indexs to lt_subtot_indexs.
* append grand total range (to format)
add 1 to l_sub_index.
subrangeitem-name = l_sub_index.
condense subrangeitem-name.
concatenate &apos;TOTAL&apos;
subrangeitem-name
into subrangeitem-name.
subrangeitem-rows = wa_subtot_indexs-index.
subrangeitem-columns = 1. &quot; start col
append subrangeitem to subranges.
ENDLOOP.
endif.
ENDIF.
clear:
subrangeitem,
LT_SORT_KKBLO,
&lt;f_collect00&gt;,
&lt;f_collect01&gt;,
&lt;f_collect02&gt;,
&lt;f_collect03&gt;,
&lt;f_collect04&gt;,
&lt;f_collect05&gt;,
&lt;f_collect06&gt;,
&lt;f_collect07&gt;,
&lt;f_collect08&gt;,
&lt;f_collect09&gt;.
unassign:
&lt;f_collect00&gt;,
&lt;f_collect01&gt;,
&lt;f_collect02&gt;,
&lt;f_collect03&gt;,
&lt;f_collect04&gt;,
&lt;f_collect05&gt;,
&lt;f_collect06&gt;,
&lt;f_collect07&gt;,
&lt;f_collect08&gt;,
&lt;f_collect09&gt;,
&lt;f_collect_tab&gt;,
&lt;f_collect_line&gt;.
*--------------------------------------------------------------------*
* SESSION 3: MAP DATA TO SEMANTIC TABLE
*--------------------------------------------------------------------*
* get dependent field field: currency and quantity
create data wa like line of &lt;f_excel_tab&gt;.
assign wa-&gt;* to &lt;f_excel_line&gt;.
describe field &lt;f_excel_line&gt; type l_typ components l_num.
do l_num times.
l_save_index = sy-index.
assign component l_save_index of structure &lt;f_excel_line&gt;
to &lt;f_excel_column&gt;.
if sy-subrc ne 0.
message e059(0k) with &apos;FATAL ERROR&apos; raising fatal_error.
endif.
loop at LT_FIELDCAT_KKBLO assigning &lt;f_fieldcat_line&gt;
where tabname = l_tabname.
assign component &lt;f_fieldcat_line&gt;-fieldname
of structure &lt;f_excel_line&gt; to &lt;f_fcat_column&gt;.
describe distance between &lt;f_excel_column&gt; and &lt;f_fcat_column&gt;
into l_int in byte mode.
* append column index
* this columns index is of table, not fieldcat
if l_int = 0.
wa_column_index-fieldname = &lt;f_fieldcat_line&gt;-fieldname.
wa_column_index-tabname = &lt;f_fieldcat_line&gt;-tabname.
wa_column_index-col = l_save_index.
append wa_column_index to lt_column_index.
endif.
* append dependent fields (currency and quantity unit)
if &lt;f_fieldcat_line&gt;-cfieldname is not initial.
clear wa_fieldcat_depf.
wa_fieldcat_depf-fieldname = &lt;f_fieldcat_line&gt;-cfieldname.
wa_fieldcat_depf-tabname = &lt;f_fieldcat_line&gt;-ctabname.
collect wa_fieldcat_depf into lt_fieldcat_depf.
endif.
if &lt;f_fieldcat_line&gt;-qfieldname is not initial.
clear wa_fieldcat_depf.
wa_fieldcat_depf-fieldname = &lt;f_fieldcat_line&gt;-qfieldname.
wa_fieldcat_depf-tabname = &lt;f_fieldcat_line&gt;-qtabname.
collect wa_fieldcat_depf into lt_fieldcat_depf.
endif.
* rewrite field data type
if &lt;f_fieldcat_line&gt;-inttype = &apos;X&apos;
and &lt;f_fieldcat_line&gt;-datatype(3) = &apos;INT&apos;.
&lt;f_fieldcat_line&gt;-inttype = &apos;I&apos;.
endif.
endloop.
clear: l_save_index.
unassign: &lt;f_fieldcat_line&gt;.
enddo.
* build semantic tables
l_n_hrz_keys = 1.
* Get keyfigures
loop at LT_FIELDCAT_KKBLO assigning &lt;f_fieldcat_line&gt;
where tabname = l_tabname
and tech ne &apos;X&apos;
and no_out ne &apos;X&apos;.
clear wa_sema.
clear wa_hkey.
* Units belong to keyfigures -&gt; display as str
read table lt_fieldcat_depf into wa_fieldcat_depf with key
fieldname = &lt;f_fieldcat_line&gt;-fieldname
tabname = &lt;f_fieldcat_line&gt;-tabname.
if sy-subrc = 0.
wa_sema-col_typ = &apos;STR&apos;.
wa_sema-col_ops = &apos;DFT&apos;.
* Keyfigures
else.
case &lt;f_fieldcat_line&gt;-datatype.
when &apos;QUAN&apos;.
wa_sema-col_typ = &apos;N03&apos;.
if &lt;f_fieldcat_line&gt;-no_sum ne &apos;X&apos;.
wa_sema-col_ops = &apos;ADD&apos;.
else.
wa_sema-col_ops = &apos;NOP&apos;. &quot; no dependent field
endif.
when &apos;DATS&apos;.
wa_sema-col_typ = &apos;DAT&apos;.
wa_sema-col_ops = &apos;NOP&apos;.
when &apos;CHAR&apos; OR &apos;UNIT&apos; OR &apos;CUKY&apos;. &quot; Added fieldformats UNIT and CUKY - dd. 26-10-2012 Wouter Heuvelmans
wa_sema-col_typ = &apos;STR&apos;.
wa_sema-col_ops = &apos;DFT&apos;. &quot; dependent field
* incase numeric, ex &apos;00120&apos; -&gt; display as &apos;12&apos;
when &apos;NUMC&apos;.
wa_sema-col_typ = &apos;STR&apos;.
wa_sema-col_ops = &apos;DFT&apos;.
when others.
wa_sema-col_typ = &apos;NUM&apos;.
if &lt;f_fieldcat_line&gt;-no_sum ne &apos;X&apos;.
wa_sema-col_ops = &apos;ADD&apos;.
else.
wa_sema-col_ops = &apos;NOP&apos;.
endif.
endcase.
endif.
l_counter = l_counter + 1.
l_n_att_cols = l_n_att_cols + 1.
wa_sema-col_no = l_counter.
read table lt_column_index into wa_column_index with key
fieldname = &lt;f_fieldcat_line&gt;-fieldname
tabname = &lt;f_fieldcat_line&gt;-tabname.
if sy-subrc = 0.
wa_sema-col_src = wa_column_index-col.
else.
raise fatal_error.
endif.
* columns index of ref currency field in table
if not &lt;f_fieldcat_line&gt;-cfieldname is initial.
read table lt_column_index into wa_column_index with key
fieldname = &lt;f_fieldcat_line&gt;-cfieldname
tabname = &lt;f_fieldcat_line&gt;-ctabname.
if sy-subrc = 0.
wa_sema-col_cur = wa_column_index-col.
endif.
* quantities fields
* treat as currency when display on excel
elseif not &lt;f_fieldcat_line&gt;-qfieldname is initial.
read table lt_column_index into wa_column_index with key
fieldname = &lt;f_fieldcat_line&gt;-qfieldname
tabname = &lt;f_fieldcat_line&gt;-qtabname.
if sy-subrc = 0.
wa_sema-col_cur = wa_column_index-col.
endif.
endif.
* Treat of fixed currency in the fieldcatalog for column
data: l_num_help(2) type n.
if not &lt;f_fieldcat_line&gt;-currency is initial.
select * from tcurx into table lt_tcurx.
sort lt_tcurx.
read table lt_tcurx into wa_tcurx
with key currkey = &lt;f_fieldcat_line&gt;-currency.
if sy-subrc = 0.
l_num_help = wa_tcurx-currdec.
concatenate &apos;N&apos; l_num_help into wa_sema-col_typ.
wa_sema-col_cur = sy-tabix * ( -1 ).
endif.
endif.
wa_hkey-col_no = l_n_att_cols.
wa_hkey-row_no = l_n_hrz_keys.
wa_hkey-col_name = &lt;f_fieldcat_line&gt;-reptext.
append wa_hkey to lt_hkey.
append wa_sema to lt_sema.
endloop.
* free local data
clear:
lt_column_index,
wa_column_index,
lt_fieldcat_depf,
wa_fieldcat_depf,
lt_tcurx,
wa_tcurx,
l_num,
l_typ,
wa,
l_int,
l_counter.
unassign:
&lt;f_fieldcat_line&gt;,
&lt;f_excel_line&gt;,
&lt;f_excel_column&gt;,
&lt;f_fcat_column&gt;.
*--------------------------------------------------------------------*
* SESSION 4: WRITE TO EXCEL
*--------------------------------------------------------------------*
clear: wa_tcurx.
refresh: lt_tcurx.
* if spreadsheet dun have proxy yet
if li_has is initial.
l_retcode = c_oi_errors=&gt;ret_interface_not_supported.
call method c_oi_errors=&gt;create_error_for_retcode
EXPORTING
retcode = l_retcode
no_flush = no_flush
IMPORTING
error = lo_error_w.
exit.
endif.
create object l_error
EXPORTING
object_name = &apos;OLE_DOCUMENT_PROXY&apos;
method_name = &apos;get_ranges_names&apos;.
call method c_oi_errors=&gt;add_error
EXPORTING
error = l_error.
describe table lt_sema lines datareal.
describe table &lt;f_excel_tab&gt; lines datac.
describe table lt_vkey lines vkeycount.
if datac = 0.
raise inv_data_range.
endif.
if vkeycount ne l_n_vrt_keys.
raise dim_mismatch_vkey.
endif.
all = l_n_vrt_keys + l_n_att_cols.
if datareal ne all.
raise dim_mismatch_sema.
endif.
data: decimal type c.
* get decimal separator format (&apos;.&apos;, &apos;,&apos;, ...) in Office config
call method lo_proxy-&gt;get_application_property
EXPORTING
property_name = &apos;INTERNATIONAL&apos;
subproperty_name = &apos;DECIMAL_SEPARATOR&apos;
CHANGING
retvalue = decimal.
data: wa_usr type usr01.
select * from usr01 into wa_usr where bname = sy-uname.
endselect.
data: comma_elim(4) type c.
data: help6 type i.
field-symbols &lt;g&gt; type any.
data search_item(4) value &apos; #&apos;.
concatenate &apos;,&apos; decimal &apos;.&apos; decimal into comma_elim.
data help type i. &quot; table (with subtotal) line number
help = datac.
data: rowmax type i value 1. &quot; header row number
data: columnmax type i value 0. &quot; header columns number
loop at lt_hkey into hkeyitem.
if hkeyitem-col_no &gt; columnmax.
columnmax = hkeyitem-col_no.
endif.
if hkeyitem-row_no &gt; rowmax.
rowmax = hkeyitem-row_no.
endif.
endloop.
data: hkeycolumns type i. &quot; header columns no
hkeycolumns = columnmax.
if hkeycolumns &lt; l_n_att_cols.
hkeycolumns = l_n_att_cols.
endif.
columnmax = 0.
loop at lt_vkey into vkeyitem.
if vkeyitem-col_no &gt; columnmax.
columnmax = vkeyitem-col_no.
endif.
endloop.
data overflow type i value 1.
data testname(10) type c.
data temp2 type i. &quot; 1st item row position in excel
data realmit type i value 1.
data realoverflow type i value 1. &quot; row index in content
call method lo_spreadsheet-&gt;screen_update
EXPORTING
updating = &apos;&apos;.
call method lo_spreadsheet-&gt;load_lib.
data: str(40) type c. &quot; range names of columns range (w/o col header)
data: rows type i. &quot; row postion of 1st item line in ecxel
* calculate row position of data table
describe table iT_LISTHEADER lines li_commentary_rows.
* if grid had title, add 1 empy line between title and table
if li_commentary_rows ne 0.
add 1 to li_commentary_rows.
endif.
* add top position of block data
li_commentary_rows = li_commentary_rows + i_top - 1.
* write header (commentary rows)
data: li_commentary_row_index type i value 1.
data: li_content_index type i value 1.
data: ls_index(10) type c.
data ls_commentary_range(40) type c value &apos;TITLE&apos;.
data: li_font_bold type i.
data: li_font_italic type i.
data: li_font_size type i.
loop at iT_LISTHEADER into wa_listheader.
li_commentary_row_index = i_top + li_content_index - 1.
ls_index = li_content_index.
condense ls_index.
concatenate ls_commentary_range(5) ls_index
into ls_commentary_range.
condense ls_commentary_range.
* insert title range
call method lo_spreadsheet-&gt;insert_range_dim
EXPORTING
name = ls_commentary_range
top = li_commentary_row_index
left = i_left
rows = 1
columns = 1
no_flush = no_flush.
* format range
case wa_listheader-typ.
when &apos;H&apos;. &quot;title
li_font_size = 16.
li_font_bold = 1.
li_font_italic = -1.
when &apos;S&apos;. &quot;subtile
li_font_size = -1.
li_font_bold = 1.
li_font_italic = -1.
when others. &quot;&apos;A&apos; comment
li_font_size = -1.
li_font_bold = -1.
li_font_italic = 1.
endcase.
call method lo_spreadsheet-&gt;set_font
EXPORTING
rangename = ls_commentary_range
family = &apos;&apos;
size = li_font_size
bold = li_font_bold
italic = li_font_italic
align = 0
no_flush = no_flush.
* title: range content
rangeitem-name = ls_commentary_range.
rangeitem-columns = 1.
rangeitem-rows = 1.
append rangeitem to ranges.
contentsitem-row = li_content_index.
contentsitem-column = 1.
concatenate wa_listheader-key
wa_listheader-info
into contentsitem-value
separated by space.
condense contentsitem-value.
append contentsitem to contents.
add 1 to li_content_index.
clear:
rangeitem,
contentsitem,
ls_index.
endloop.
* set range data title
call method lo_spreadsheet-&gt;set_ranges_data
EXPORTING
ranges = ranges
contents = contents
no_flush = no_flush.
refresh:
ranges,
contents.
rows = rowmax + li_commentary_rows + 1.
all = wa_usr-datfm.
all = all + 3.
loop at lt_sema into semaitem.
if semaitem-col_typ = &apos;DAT&apos; or semaitem-col_typ = &apos;MON&apos; or
semaitem-col_typ = &apos;N00&apos; or semaitem-col_typ = &apos;N01&apos; or
semaitem-col_typ = &apos;N01&apos; or semaitem-col_typ = &apos;N02&apos; or
semaitem-col_typ = &apos;N03&apos; or semaitem-col_typ = &apos;PCT&apos; or
semaitem-col_typ = &apos;STR&apos; or semaitem-col_typ = &apos;NUM&apos;.
clear str.
str = semaitem-col_no.
condense str.
concatenate &apos;DATA&apos; str into str.
mit = semaitem-col_no.
li_col_pos = semaitem-col_no + i_left - 1.
* range from data1 to data(n), for each columns of table
call method lo_spreadsheet-&gt;insert_range_dim
EXPORTING
name = str
top = rows
left = li_col_pos
rows = help
columns = 1
no_flush = no_flush.
data dec type i value -1.
data typeinfo type sydes_typeinfo.
loop at &lt;f_excel_tab&gt; assigning &lt;line&gt;.
assign component semaitem-col_no of structure &lt;line&gt; to &lt;item&gt;.
describe field &lt;item&gt; into td.
read table td-types index 1 into typeinfo.
if typeinfo-type = &apos;P&apos;.
dec = typeinfo-decimals.
elseif typeinfo-type = &apos;I&apos;.
dec = 0.
endif.
describe field &lt;line&gt; type typ components count.
mit = 1.
do count times.
if mit = semaitem-col_src.
assign component sy-index of structure &lt;line&gt; to &lt;item&gt;.
describe field &lt;item&gt; into td.
read table td-types index 1 into typeinfo.
if typeinfo-type = &apos;P&apos;.
dec = typeinfo-decimals.
endif.
exit.
endif.
mit = mit + 1.
enddo.
exit.
endloop.
* format for each columns of table (w/o columns headers)
if semaitem-col_typ = &apos;DAT&apos;.
if semaitem-col_no &gt; vkeycount.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = all
no_flush = no_flush.
else.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 0
no_flush = no_flush.
endif.
elseif semaitem-col_typ = &apos;STR&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 0
no_flush = no_flush.
elseif semaitem-col_typ = &apos;MON&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 10
no_flush = no_flush.
elseif semaitem-col_typ = &apos;N00&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 1
decimals = 0
no_flush = no_flush.
elseif semaitem-col_typ = &apos;N01&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 1
decimals = 1
no_flush = no_flush.
elseif semaitem-col_typ = &apos;N02&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 1
decimals = 2
no_flush = no_flush.
elseif semaitem-col_typ = &apos;N03&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 1
decimals = 3
no_flush = no_flush.
elseif semaitem-col_typ = &apos;N04&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 1
decimals = 4
no_flush = no_flush.
elseif semaitem-col_typ = &apos;NUM&apos;.
if dec eq -1.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 1
decimals = 2
no_flush = no_flush.
else.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 1
decimals = dec
no_flush = no_flush.
endif.
elseif semaitem-col_typ = &apos;PCT&apos;.
call method lo_spreadsheet-&gt;set_format
EXPORTING
rangename = str
currency = &apos;&apos;
typ = 3
decimals = 0
no_flush = no_flush.
endif.
endif.
endloop.
* get item contents for set_range_data method
* get currency cell also
mit = 1.
data: currcells type soi_cell_table.
data: curritem type soi_cell_item.
curritem-rows = 1.
curritem-columns = 1.
curritem-front = -1.
curritem-back = -1.
curritem-font = &apos;&apos;.
curritem-size = -1.
curritem-bold = -1.
curritem-italic = -1.
curritem-align = -1.
curritem-frametyp = -1.
curritem-framecolor = -1.
curritem-currency = &apos;&apos;.
curritem-number = 1.
curritem-input = -1.
data: conv_exit(10) type c.
data: const type i.
* Change for Correction request
* Initial 10000 lines are missing in Excel Export
* if there are only 2 columns in exported List object.
if datareal gt 2.
const = 20000 / datareal.
else.
const = 20000 / ( datareal + 2 ).
endif.
data: lines type i.
data: innerlines type i.
data: counter type i.
data: curritem2 like curritem.
data: curritem3 like curritem.
data: length type i.
data: found.
* append content table (for method set_range_content)
loop at &lt;f_excel_tab&gt; assigning &lt;line&gt;.
* save line index to compare with lt_subtot_indexs,
* to discover line is a subtotal / totale line or not
* ex use to set &apos;dun display zero in subtotal / total line&apos;
l_save_index = sy-tabix.
do datareal times.
read table lt_sema into semaitem with key col_no = sy-index.
if semaitem-col_src ne 0.
assign component semaitem-col_src
of structure &lt;line&gt; to &lt;item&gt;.
else.
assign component sy-index
of structure &lt;line&gt; to &lt;item&gt;.
endif.
contentsitem-row = realoverflow.
if sy-subrc = 0.
move semaitem-col_ops to search_item(3).
search &apos;ADD#CNT#MIN#MAX#AVG#NOP#DFT#&apos;
for search_item.
if sy-subrc ne 0.
raise error_in_sema.
endif.
move semaitem-col_typ to search_item(3).
search &apos;NUM#N00#N01#N02#N03#N04#PCT#DAT#MON#STR#&apos;
for search_item.
if sy-subrc ne 0.
raise error_in_sema.
endif.
contentsitem-column = sy-index.
if semaitem-col_typ eq &apos;DAT&apos; or semaitem-col_typ eq &apos;MON&apos;.
if semaitem-col_no &gt; vkeycount.
&quot; Hinweis 512418
&quot; EXCEL bezieht Datumsangaben
&quot; auf den 31.12.1899, behandelt
&quot; aber 1900 als ein Schaltjahr
&quot; d.h. ab 1.3.1900 korrekt
&quot; 1.3.1900 als Zahl = 61
data: genesis type d value &apos;18991230&apos;.
data: number_of_days type p.
* change for date in char format &amp; sema_type = X
data: temp_date type d.
if not &lt;item&gt; is initial and not &lt;item&gt; co &apos; &apos; and not
&lt;item&gt; co &apos;0&apos;.
* change for date in char format &amp; sema_type = X starts
if sema_type = &apos;X&apos;.
describe field &lt;item&gt; type typ.
if typ = &apos;C&apos;.
temp_date = &lt;item&gt;.
number_of_days = temp_date - genesis.
else.
number_of_days = &lt;item&gt; - genesis.
endif.
else.
number_of_days = &lt;item&gt; - genesis.
endif.
* change for date in char format &amp; sema_type = X ends
if number_of_days &lt; 61.
number_of_days = number_of_days - 1.
endif.
set country &apos;DE&apos;.
write number_of_days to contentsitem-value
no-grouping
left-justified.
set country space.
translate contentsitem-value using comma_elim.
else.
clear contentsitem-value.
endif.
else.
move &lt;item&gt; to contentsitem-value.
endif.
elseif semaitem-col_typ eq &apos;NUM&apos; or
semaitem-col_typ eq &apos;N00&apos; or
semaitem-col_typ eq &apos;N01&apos; or
semaitem-col_typ eq &apos;N02&apos; or
semaitem-col_typ eq &apos;N03&apos; or
semaitem-col_typ eq &apos;N04&apos; or
semaitem-col_typ eq &apos;PCT&apos;.
set country &apos;DE&apos;.
describe field &lt;item&gt; type typ.
if semaitem-col_cur is initial.
if typ ne &apos;F&apos;.
write &lt;item&gt; to contentsitem-value no-grouping
no-sign decimals 14.
else.
write &lt;item&gt; to contentsitem-value no-grouping
no-sign.
endif.
else.
* Treat of fixed curreny for column &gt;&gt;Y9CK007319
if semaitem-col_cur &lt; 0.
semaitem-col_cur = semaitem-col_cur * ( -1 ).
select * from tcurx into table lt_tcurx.
sort lt_tcurx.
read table lt_tcurx into
wa_tcurx index semaitem-col_cur.
if sy-subrc = 0.
if typ ne &apos;F&apos;.
write &lt;item&gt; to contentsitem-value no-grouping
currency wa_tcurx-currkey no-sign decimals 14.
else.
write &lt;item&gt; to contentsitem-value no-grouping
currency wa_tcurx-currkey no-sign.
endif.
endif.
else.
assign component semaitem-col_cur
of structure &lt;line&gt; to &lt;g&gt;.
* mit = index of recent row
curritem-top = rowmax + mit + li_commentary_rows.
li_col_pos = sy-index + i_left - 1.
curritem-left = li_col_pos.
* if filed is quantity field (qfieldname ne space)
* or amount field (cfieldname ne space), then format decimal place
* corresponding with config
clear: l_def.
read table LT_FIELDCAT_KKBLO assigning &lt;f_fieldcat_line&gt;
with key tabname = l_tabname
tech = space
no_out = space
col_pos = semaitem-col_no.
IF sy-subrc = 0.
IF &lt;f_fieldcat_line&gt;-cfieldname is not initial.
l_def = &apos;C&apos;.
else.&quot;if &lt;f_fieldcat_line&gt;-qfieldname is not initial.
l_def = &apos;Q&apos;.
ENDIF.
ENDIF.
* if field is amount field
* exporting of amount field base on currency decimal table: TCURX
IF l_def = &apos;C&apos;. &quot;field is amount field
select single * from tcurx into wa_tcurx
where currkey = &lt;g&gt;.
* if amount ref to un-know currency -&gt; default decimal = 2
if sy-subrc eq 0.
curritem-decimals = wa_tcurx-currdec.
else.
curritem-decimals = 2.
endif.
append curritem to currcells.
if typ ne &apos;F&apos;.
write &lt;item&gt; to contentsitem-value
currency &lt;g&gt;
no-sign no-grouping.
else.
write &lt;item&gt; to contentsitem-value
decimals 14 currency &lt;g&gt;
no-sign no-grouping.
endif.
* if field is quantity field
* exporting of quantity field base on quantity decimal table: T006
else.&quot;if l_def = &apos;Q&apos;. &quot; field is quantity field
clear: wa_t006.
select single * from t006 into wa_t006
where MSEHI = &lt;g&gt;.
* if quantity ref to un-know unit-&gt; default decimal = 2
if sy-subrc eq 0.
curritem-decimals = wa_t006-decan.
else.
curritem-decimals = 2.
endif.
append curritem to currcells.
write &lt;item&gt; to contentsitem-value
unit &lt;g&gt;
no-sign no-grouping.
condense contentsitem-value.
ENDIF.
endif. &quot;Y9CK007319
endif.
condense contentsitem-value.
* add function fieldcat-no zero display
loop at LT_FIELDCAT_KKBLO assigning &lt;f_fieldcat_line&gt;
where tabname = l_tabname
and tech ne &apos;X&apos;
and no_out ne &apos;X&apos;.
if &lt;f_fieldcat_line&gt;-col_pos = semaitem-col_no.
if &lt;f_fieldcat_line&gt;-no_zero = &apos;X&apos;.
if &lt;item&gt; = &apos;0&apos;.
clear: contentsitem-value.
endif.
* dun display zero in total/subtotal line too
else.
clear: wa_subtot_indexs.
read table lt_subtot_indexs into wa_subtot_indexs
with key index = l_save_index.
IF sy-subrc = 0.
if &lt;item&gt; = &apos;0&apos;.
clear: contentsitem-value.
endif.
ENDIF.
endif.
endif.
endloop.
unassign: &lt;f_fieldcat_line&gt;.
if &lt;item&gt; lt 0.
search contentsitem-value for &apos;E&apos;.
if sy-fdpos eq 0.
* use prefix notation for signed numbers
translate contentsitem-value using &apos;- &apos;.
condense contentsitem-value no-gaps.
concatenate &apos;-&apos; contentsitem-value
into contentsitem-value.
else.
concatenate &apos;-&apos; contentsitem-value
into contentsitem-value.
endif.
endif.
set country space.
* Hier wird nur die korrekte Kommaseparatierung gemacht, wenn die
* Zeichen einer
* Zahl enthalten sind. Das ist für Timestamps, die auch &quot;:&quot; enthalten.
* Für die
* darf keine Kommaseparierung stattfinden.
* Changing for correction request - Y6BK041073
if contentsitem-value co &apos;0123456789.,-+E &apos;.
translate contentsitem-value using comma_elim.
endif.
else.
clear contentsitem-value.
* if type is not numeric -&gt; dun display with zero
write &lt;item&gt; to contentsitem-value no-zero.
shift contentsitem-value left deleting leading space.
endif.
append contentsitem to contents.
endif.
enddo.
realmit = realmit + 1.
realoverflow = realoverflow + 1.
mit = mit + 1.
* overflow = current row index in content table
overflow = overflow + 1.
endloop.
unassign: &lt;f_fieldcat_line&gt;.
* set item range for set_range_data method
testname = mit / const.
condense testname.
concatenate &apos;TEST&apos; testname into testname.
realoverflow = realoverflow - 1.
realmit = realmit - 1.
help = realoverflow.
rangeitem-name = testname.
rangeitem-columns = datareal.
rangeitem-rows = help.
append rangeitem to ranges.
* insert item range dim
temp2 = rowmax + 1 + li_commentary_rows + realmit - realoverflow.
* items data
call method lo_spreadsheet-&gt;insert_range_dim
EXPORTING
name = testname
top = temp2
left = i_left
rows = help
columns = datareal
no_flush = no_flush.
* get columns header contents for set_range_data method
* export columns header only if no columns header option = space
data: rowcount type i.
data: columncount type i.
if i_columns_header = &apos;X&apos;.
* append columns header to contents: hkey
rowcount = 1.
do rowmax times.
columncount = 1.
do hkeycolumns times.
loop at lt_hkey into hkeyitem where col_no = columncount
and row_no = rowcount.
endloop.
if sy-subrc = 0.
str = hkeyitem-col_name.
contentsitem-value = hkeyitem-col_name.
else.
contentsitem-value = str.
endif.
contentsitem-column = columncount.
contentsitem-row = rowcount.
append contentsitem to contents.
columncount = columncount + 1.
enddo.
rowcount = rowcount + 1.
enddo.
* incase columns header in multiline
data: rowmaxtemp type i.
if rowmax &gt; 1.
rowmaxtemp = rowmax - 1.
rowcount = 1.
do rowmaxtemp times.
columncount = 1.
do columnmax times.
contentsitem-column = columncount.
contentsitem-row = rowcount.
contentsitem-value = &apos;&apos;.
append contentsitem to contents.
columncount = columncount + 1.
enddo.
rowcount = rowcount + 1.
enddo.
endif.
* append columns header to contents: vkey
columncount = 1.
do columnmax times.
loop at lt_vkey into vkeyitem where col_no = columncount.
endloop.
contentsitem-value = vkeyitem-col_name.
contentsitem-row = rowmax.
contentsitem-column = columncount.
append contentsitem to contents.
columncount = columncount + 1.
enddo.
*--------------------------------------------------------------------*
* set header range for method set_range_data
* insert header keys range dim
li_head_top = li_commentary_rows + 1.
li_col_pos = i_left.
* insert range headers
if hkeycolumns ne 0.
rangeitem-name = &apos;TESTHKEY&apos;.
rangeitem-rows = rowmax.
rangeitem-columns = hkeycolumns.
append rangeitem to ranges.
clear: rangeitem.
call method lo_spreadsheet-&gt;insert_range_dim
EXPORTING
name = &apos;TESTHKEY&apos;
top = li_head_top
left = li_col_pos
rows = rowmax
columns = hkeycolumns
no_flush = no_flush.
endif.
endif.
* format for columns header + total + subtotal
* ------------------------------------------
help = rowmax + realmit. &quot; table + header lines
data: item type colxxl_t.
data: lt_format type soi_format_table.
data: wa_format like line of lt_format.
data: wa_format_temp like line of lt_format.
field-symbols: &lt;f_source&gt; type any.
field-symbols: &lt;f_des&gt; type any.
* columns header format
wa_format-front = -1.
wa_format-back = 15. &quot;grey
wa_format-font = space.
wa_format-size = -1.
wa_format-bold = 1.
wa_format-align = 0.
wa_format-frametyp = -1.
wa_format-framecolor = -1.
* get column header format from input record
* -&gt; map input format
if i_columns_header = &apos;X&apos;.
wa_format-name = &apos;TESTHKEY&apos;.
if i_format_col_header is not initial.
describe field i_format_col_header type l_typ components
li_col_num.
do li_col_num times.
if sy-index ne 1. &quot; dun map range name
assign component sy-index of structure i_format_col_header
to &lt;f_source&gt;.
if &lt;f_source&gt; is not initial.
assign component sy-index of structure wa_format to &lt;f_des&gt;.
&lt;f_des&gt; = &lt;f_source&gt;.
unassign: &lt;f_des&gt;.
endif.
unassign: &lt;f_source&gt;.
endif.
enddo.
clear: li_col_num.
endif.
append wa_format to lt_format.
endif.
* Zusammenfassen der Spalten mit gleicher Nachkommastellenzahl
* collect vertical cells (col) with the same number of decimal places
* to increase perfomance in currency cell format
describe table currcells lines lines.
lines = lines - 1.
do lines times.
describe table currcells lines innerlines.
innerlines = innerlines - 1.
sort currcells by left top.
clear found.
do innerlines times.
read table currcells index sy-index into curritem.
counter = sy-index + 1.
read table currcells index counter into curritem2.
if curritem-left eq curritem2-left.
length = curritem-top + curritem-rows.
if length eq curritem2-top.
if curritem-decimals eq curritem2-decimals.
move curritem to curritem3.
curritem3-rows = curritem3-rows + curritem2-rows.
curritem-left = -1.
modify currcells index sy-index from curritem.
curritem2-left = -1.
modify currcells index counter from curritem2.
append curritem3 to currcells.
found = &apos;X&apos;.
endif.
endif.
endif.
enddo.
if found is initial.
exit.
endif.
delete currcells where left = -1.
enddo.
* Zusammenfassen der Zeilen mit gleicher Nachkommastellenzahl
* collect horizontal cells (row) with the same number of decimal places
* to increase perfomance in currency cell format
describe table currcells lines lines.
lines = lines - 1.
do lines times.
describe table currcells lines innerlines.
innerlines = innerlines - 1.
sort currcells by top left.
clear found.
do innerlines times.
read table currcells index sy-index into curritem.
counter = sy-index + 1.
read table currcells index counter into curritem2.
if curritem-top eq curritem2-top and curritem-rows eq
curritem2-rows.
length = curritem-left + curritem-columns.
if length eq curritem2-left.
if curritem-decimals eq curritem2-decimals.
move curritem to curritem3.
curritem3-columns = curritem3-columns + curritem2-columns.
curritem-left = -1.
modify currcells index sy-index from curritem.
curritem2-left = -1.
modify currcells index counter from curritem2.
append curritem3 to currcells.
found = &apos;X&apos;.
endif.
endif.
endif.
enddo.
if found is initial.
exit.
endif.
delete currcells where left = -1.
enddo.
* Ende der Zusammenfassung
* item data: format for currency cell, corresponding with currency
call method lo_spreadsheet-&gt;cell_format
EXPORTING
cells = currcells
no_flush = no_flush.
* item data: write item table content
call method lo_spreadsheet-&gt;set_ranges_data
EXPORTING
ranges = ranges
contents = contents
no_flush = no_flush.
* whole table range to format all table
if i_columns_header = &apos;X&apos;.
li_head_top = li_commentary_rows + 1.
else.
li_head_top = li_commentary_rows + 2.
help = help - 1.
endif.
call method lo_spreadsheet-&gt;insert_range_dim
EXPORTING
name = &apos;WHOLE_TABLE&apos;
top = li_head_top
left = i_left
rows = help
columns = datareal
no_flush = no_flush.
* columns width auto fix
* this parameter = space in case use with exist template
IF i_columns_autofit = &apos;X&apos;.
call method lo_spreadsheet-&gt;fit_widest
EXPORTING
name = &apos;WHOLE_TABLE&apos;
no_flush = no_flush.
ENDIF.
* frame
* The parameter has 8 bits
*0 Left margin
*1 Top marginT
*2 Bottom margin
*3 Right margin
*4 Horizontal line
*5 Vertical line
*6 Thinness
*7 Thickness
* here 127 = 1111111 6-5-4-3-2-1 mean Thin-ver-hor-right-bot-top-left
* ( final DOI method call, set no_flush = space
* equal to call method CL_GUI_CFW=&gt;FLUSH )
call method lo_spreadsheet-&gt;set_frame
EXPORTING
rangename = &apos;WHOLE_TABLE&apos;
typ = 127
color = 1
no_flush = space
IMPORTING
error = lo_error
retcode = lc_retcode.
error_doi.
* reformat subtotal / total line after format wholw table
loop at subranges into subrangeitem.
l_sub_index = subrangeitem-rows + li_commentary_rows + rowmax.
call method lo_spreadsheet-&gt;insert_range_dim
EXPORTING
name = subrangeitem-name
left = i_left
top = l_sub_index
rows = 1
columns = datareal
no_flush = no_flush.
wa_format-name = subrangeitem-name.
* default format:
* - clolor: subtotal = light yellow, subtotal = yellow
* - frame: box
IF subrangeitem-name(3) = &apos;SUB&apos;.
wa_format-back = 36. &quot;subtotal line
wa_format_temp = i_format_subtotal.
else.
wa_format-back = 27. &quot;total line
wa_format_temp = i_format_total.
endif.
wa_format-FRAMETYP = 79.
wa_format-FRAMEcolor = 1.
wa_format-number = -1.
wa_format-align = -1.
* get subtoal + total format from intput parameter
* overwrite default format
if wa_format_temp is not initial.
describe field wa_format_temp type l_typ components li_col_num.
do li_col_num times.
if sy-index ne 1. &quot; dun map range name
assign component sy-index of structure wa_format_temp
to &lt;f_source&gt;.
if &lt;f_source&gt; is not initial.
assign component sy-index of structure wa_format to &lt;f_des&gt;.
&lt;f_des&gt; = &lt;f_source&gt;.
unassign: &lt;f_des&gt;.
endif.
unassign: &lt;f_source&gt;.
endif.
enddo.
clear: li_col_num.
endif.
append wa_format to lt_format.
clear: wa_format-name.
clear: l_sub_index.
clear: wa_format_temp.
endloop.
if lt_format[] is not initial.
call method lo_spreadsheet-&gt;set_ranges_format
EXPORTING
formattable = lt_format
no_flush = no_flush.
refresh: lt_format.
endif.
*--------------------------------------------------------------------*
call method lo_spreadsheet-&gt;screen_update
EXPORTING
updating = &apos;X&apos;.
call method c_oi_errors=&gt;flush_errors.
lo_error_w = l_error.
lc_retcode = lo_error_w-&gt;error_code.
** catch no_flush -&gt; led to dump ( optional )
* go_error = l_error.
* gc_retcode = go_error-&gt;error_code.
* error_doi.
clear:
lt_sema,
wa_sema,
lt_hkey,
wa_hkey,
lt_vkey,
wa_vkey,
l_n_hrz_keys,
l_n_att_cols,
l_n_vrt_keys,
count,
datac,
datareal,
vkeycount,
all,
mit,
li_col_pos,
li_col_num,
ranges,
rangeitem,
contents,
contentsitem,
semaitem,
hkeyitem,
vkeyitem,
li_commentary_rows,
l_retcode,
li_head_top,
&lt;f_excel_tab&gt;.
clear:
lo_error_w.
unassign:
&lt;line&gt;,
&lt;item&gt;,
&lt;f_excel_tab&gt;.
*--------------------------------------------------------------------*
* SESSION 5: SAVE AND CLOSE FILE
*--------------------------------------------------------------------*
* ex of save path: &apos;FILE://C:\temp\test.xlsx&apos;
concatenate &apos;FILE://&apos; I_save_path
into ls_path.
call method lo_proxy-&gt;save_document_to_url
EXPORTING
no_flush = &apos;X&apos;
url = ls_path
IMPORTING
error = lo_error
retcode = lc_retcode
CHANGING
document_size = li_document_size.
error_doi.
* if save successfully -&gt; raise successful message
* message i499(sy) with &apos;Document is Exported to &apos; p_path.
message i499(sy) with &apos;Data has been exported successfully&apos;.
clear:
ls_path,
li_document_size.
close_document.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_TABLE" VERSION="1" LANGU="E" DESCRIPT="Set cell value from a table" EXPOSURE="2" STATE="1" EDITORDER="7 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_TABLE" SCONAME="IP_TABLE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STANDARD TABLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_TABLE" SCONAME="IT_FIELD_CATALOG" VERSION="1" LANGU="E" DESCRIPT="Table binding field catalog" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_T_FIELDCATALOG" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_TABLE" SCONAME="IS_TABLE_SETTINGS" VERSION="1" LANGU="E" DESCRIPT="Excel table binding settings" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_TABLE_SETTINGS" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_TABLE" SCONAME="ES_TABLE_SETTINGS" VERSION="1" LANGU="E" DESCRIPT="Excel table binding settings" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_TABLE_SETTINGS"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="BIND_TABLE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method BIND_TABLE.
*--------------------------------------------------------------------*
* issue #230 - Pimp my Code
* - Stefan Schmöcker, (wi p) 2012-12-01
* - ...
* aligning code
* message made to support multilinguality
*--------------------------------------------------------------------*
* issue #237 - Check if overlapping areas exist
* - Alessandro Iannacci 2012-12-01
* changes: - Added raise if overlaps are detected
*--------------------------------------------------------------------*
CONSTANTS:
lc_top_left_column TYPE zexcel_cell_column_alpha VALUE &apos;B&apos;,
lc_top_left_row TYPE zexcel_cell_row VALUE 3.
DATA:
lv_row_int TYPE zexcel_cell_row,
lv_first_row TYPE zexcel_cell_row,
lv_last_row TYPE zexcel_cell_row,
lv_column_int TYPE zexcel_cell_column,
lv_column_alpha TYPE zexcel_cell_column_alpha,
lt_field_catalog TYPE zexcel_t_fieldcatalog,
lv_id TYPE i,
lv_rows TYPE i,
lv_formula TYPE string,
ls_settings TYPE zexcel_s_table_settings,
lo_table TYPE REF TO zcl_excel_table,
lt_column_name_buffer TYPE SORTED TABLE OF string WITH UNIQUE KEY table_line,
lv_value TYPE string,
lv_value_lowercase TYPE string,
lv_syindex TYPE char3,
lv_errormessage TYPE string, &quot;ins issue #237
lv_columns TYPE i,
lt_columns TYPE zexcel_t_fieldcatalog,
lv_maxcol TYPE i,
lv_maxrow TYPE i,
lo_iterator TYPE REF TO cl_object_collection_iterator,
lo_curtable TYPE REF TO zcl_excel_table.
FIELD-SYMBOLS:
&lt;ls_field_catalog&gt; TYPE zexcel_s_fieldcatalog,
&lt;ls_field_catalog_custom&gt; TYPE zexcel_s_fieldcatalog,
&lt;fs_table_line&gt; TYPE ANY,
&lt;fs_fldval&gt; TYPE ANY.
ls_settings = is_table_settings.
IF ls_settings-top_left_column IS INITIAL.
ls_settings-top_left_column = lc_top_left_column.
ENDIF.
IF ls_settings-table_style IS INITIAL.
ls_settings-table_style = zcl_excel_table=&gt;builtinstyle_medium2.
ENDIF.
IF ls_settings-top_left_row IS INITIAL.
ls_settings-top_left_row = lc_top_left_row.
ENDIF.
IF it_field_catalog IS NOT SUPPLIED.
lt_field_catalog = zcl_excel_common=&gt;get_fieldcatalog( ip_table = ip_table ).
ELSE.
lt_field_catalog = it_field_catalog.
ENDIF.
SORT lt_field_catalog BY position.
*--------------------------------------------------------------------*
* issue #237 Check if overlapping areas exist Start
*--------------------------------------------------------------------*
&quot;Get the number of columns for the current table
lt_columns = lt_field_catalog.
DELETE lt_columns WHERE dynpfld NE abap_true.
DESCRIBE TABLE lt_columns LINES lv_columns.
&quot;Calculate the top left row of the current table
lv_column_int = zcl_excel_common=&gt;convert_column2int( ls_settings-top_left_column ).
lv_row_int = ls_settings-top_left_row.
&quot;Get number of row for the current table
DESCRIBE TABLE ip_table LINES lv_rows.
&quot;Calculate the bottom right row for the current table
lv_maxcol = lv_column_int + lv_columns - 1.
lv_maxrow = lv_row_int + lv_rows - 1.
ls_settings-bottom_right_column = zcl_excel_common=&gt;convert_column2alpha( lv_maxcol ).
ls_settings-bottom_right_row = lv_maxrow.
lv_column_int = zcl_excel_common=&gt;convert_column2int( ls_settings-top_left_column ).
lo_iterator = me-&gt;tables-&gt;if_object_collection~get_iterator( ).
WHILE lo_iterator-&gt;if_object_collection_iterator~has_next( ) EQ abap_true.
lo_curtable ?= lo_iterator-&gt;if_object_collection_iterator~get_next( ).
IF ( ( ls_settings-top_left_row GE lo_curtable-&gt;settings-top_left_row AND ls_settings-top_left_row LE lo_curtable-&gt;settings-bottom_right_row )
OR
( ls_settings-bottom_right_row GE lo_curtable-&gt;settings-top_left_row AND ls_settings-bottom_right_row LE lo_curtable-&gt;settings-bottom_right_row )
)
AND
( ( lv_column_int GE zcl_excel_common=&gt;convert_column2int( lo_curtable-&gt;settings-top_left_column ) AND lv_column_int LE zcl_excel_common=&gt;convert_column2int( lo_curtable-&gt;settings-bottom_right_column ) )
OR
( lv_maxcol GE zcl_excel_common=&gt;convert_column2int( lo_curtable-&gt;settings-top_left_column ) AND lv_maxcol LE zcl_excel_common=&gt;convert_column2int( lo_curtable-&gt;settings-bottom_right_column ) )
).
lv_errormessage = &apos;Table overlaps with previously bound table and will not be added to worksheet.&apos;(400).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = lv_errormessage.
ENDIF.
ENDWHILE.
*--------------------------------------------------------------------*
* issue #237 Check if overlapping areas exist End
*--------------------------------------------------------------------*
CREATE OBJECT lo_table.
lo_table-&gt;settings = ls_settings.
lo_table-&gt;set_data( ir_data = ip_table ).
lv_id = me-&gt;excel-&gt;get_next_table_id( ).
lo_table-&gt;set_id( iv_id = lv_id ).
* lo_table-&gt;fieldcat = lt_field_catalog[].
me-&gt;tables-&gt;add( lo_table ).
* It is better to loop column by column (only visible column)
LOOP AT lt_field_catalog ASSIGNING &lt;ls_field_catalog&gt; WHERE dynpfld EQ abap_true.
lv_column_alpha = zcl_excel_common=&gt;convert_column2alpha( lv_column_int ).
&quot; Due restrinction of new table object we cannot have two column with the same name
&quot; Check if a column with the same name exists, if exists add a counter
&quot; If no medium description is provided we try to use small or long
* lv_value = &lt;ls_field_catalog&gt;-scrtext_m.
IF &lt;ls_field_catalog&gt;-scrtext_m IS NOT INITIAL.
lv_value = &lt;ls_field_catalog&gt;-scrtext_m.
&lt;ls_field_catalog&gt;-scrtext_l = lv_value.
ELSEIF &lt;ls_field_catalog&gt;-scrtext_s IS NOT INITIAL.
lv_value = &lt;ls_field_catalog&gt;-scrtext_s.
&lt;ls_field_catalog&gt;-scrtext_l = lv_value.
ELSEIF &lt;ls_field_catalog&gt;-scrtext_l IS NOT INITIAL.
lv_value = &lt;ls_field_catalog&gt;-scrtext_l.
ELSE.
lv_value = &apos;Column&apos;. &quot; default value as Excel does
&lt;ls_field_catalog&gt;-scrtext_l = lv_value.
ENDIF.
WHILE 1 = 1.
lv_value_lowercase = lv_value.
TRANSLATE lv_value_lowercase TO LOWER CASE.
READ TABLE lt_column_name_buffer TRANSPORTING NO FIELDS WITH KEY table_line = lv_value_lowercase BINARY SEARCH.
IF sy-subrc &lt;&gt; 0.
&lt;ls_field_catalog&gt;-scrtext_l = lv_value.
INSERT lv_value_lowercase INTO TABLE lt_column_name_buffer.
EXIT.
ELSE.
lv_syindex = sy-index.
CONCATENATE &lt;ls_field_catalog&gt;-scrtext_l lv_syindex INTO lv_value.
ENDIF.
ENDWHILE.
&quot; First of all write column header
IF &lt;ls_field_catalog&gt;-style_header IS NOT INITIAL.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_value = lv_value
ip_style = &lt;ls_field_catalog&gt;-style_header ).
ELSE.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_value = lv_value ).
ENDIF.
ADD 1 TO lv_row_int.
LOOP AT ip_table ASSIGNING &lt;fs_table_line&gt;.
ASSIGN COMPONENT &lt;ls_field_catalog&gt;-fieldname OF STRUCTURE &lt;fs_table_line&gt; TO &lt;fs_fldval&gt;.
&quot; issue #290 Add formula support in table
IF &lt;ls_field_catalog&gt;-formula EQ abap_true.
IF &lt;ls_field_catalog&gt;-style IS NOT INITIAL.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_formula = &lt;fs_fldval&gt;
ip_style = &lt;ls_field_catalog&gt;-style ).
ELSE.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_formula = &lt;fs_fldval&gt; ).
ENDIF.
ELSE.
IF &lt;ls_field_catalog&gt;-style IS NOT INITIAL.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_value = &lt;fs_fldval&gt;
ip_style = &lt;ls_field_catalog&gt;-style ).
ELSE.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_value = &lt;fs_fldval&gt; ).
ENDIF.
ENDIF.
ADD 1 TO lv_row_int.
ENDLOOP.
IF sy-subrc &lt;&gt; 0. &quot;create empty row if table has no data
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_value = space ).
ADD 1 TO lv_row_int.
ENDIF.
*--------------------------------------------------------------------*
&quot; totals
*--------------------------------------------------------------------*
IF &lt;ls_field_catalog&gt;-totals_function IS NOT INITIAL.
lv_formula = lo_table-&gt;get_totals_formula( ip_column = &lt;ls_field_catalog&gt;-scrtext_l ip_function = &lt;ls_field_catalog&gt;-totals_function ).
IF &lt;ls_field_catalog&gt;-style_total IS NOT INITIAL.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_formula = lv_formula
ip_style = &lt;ls_field_catalog&gt;-style_total ).
ELSE.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_formula = lv_formula ).
ENDIF.
ENDIF.
lv_row_int = ls_settings-top_left_row.
ADD 1 TO lv_column_int.
*--------------------------------------------------------------------*
&quot; conditional formatting
*--------------------------------------------------------------------*
IF &lt;ls_field_catalog&gt;-cond_style IS NOT INITIAL.
lv_first_row = ls_settings-top_left_row + 1. &quot; +1 to exclude header
lv_last_row = ls_settings-top_left_row + lv_rows.
&lt;ls_field_catalog&gt;-cond_style-&gt;set_range( ip_start_column = lv_column_alpha
ip_start_row = lv_first_row
ip_stop_column = lv_column_alpha
ip_stop_row = lv_last_row ).
ENDIF.
ENDLOOP.
*--------------------------------------------------------------------*
&quot; Set field catalog
*--------------------------------------------------------------------*
lo_table-&gt;fieldcat = lt_field_catalog[].
es_table_settings = ls_settings.
es_table_settings-bottom_right_column = lv_column_alpha.
&quot; &gt;&gt; Issue #291
IF ip_table IS INITIAL.
es_table_settings-bottom_right_row = ls_settings-top_left_row + 2. &quot;Last rows
ELSE.
es_table_settings-bottom_right_row = ls_settings-top_left_row + lv_rows + 1. &quot;Last rows
ENDIF.
&quot; &lt;&lt; Issue #291
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CALCULATE_CELL_WIDTH" VERSION="1" LANGU="E" DESCRIPT="Calculate width of cell" EXPOSURE="0" STATE="1" EDITORDER="1 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CALCULATE_CELL_WIDTH" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CALCULATE_CELL_WIDTH" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CALCULATE_CELL_WIDTH" SCONAME="EP_WIDTH" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="FLOAT"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CALCULATE_CELL_WIDTH" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>*--------------------------------------------------------------------*
* issue #293 - Roberto Bianco
* - Christian Assig 2014-03-14
*
* changes: - Calculate widths using SAPscript font metrics
* (transaction SE73)
* - Calculate the width of dates
* - Add additional width for auto filter buttons
* - Add cell padding to simulate Excel behavior
*--------------------------------------------------------------------*
METHOD calculate_cell_width.
CONSTANTS:
lc_default_font_name TYPE zexcel_style_font_name VALUE &apos;Calibri&apos;, &quot;#EC NOTEXT
lc_default_font_height TYPE tdfontsize VALUE &apos;110&apos;,
lc_excel_cell_padding TYPE float VALUE &apos;0.75&apos;.
DATA: ld_cell_value TYPE zexcel_cell_value,
ld_current_character TYPE c LENGTH 1,
ld_style_guid TYPE zexcel_cell_style,
ls_stylemapping TYPE zexcel_s_stylemapping,
lo_table_object TYPE REF TO object,
lo_table TYPE REF TO zcl_excel_table,
ld_table_top_left_column TYPE zexcel_cell_column,
ld_table_bottom_right_column TYPE zexcel_cell_column,
ld_flag_contains_auto_filter TYPE abap_bool VALUE abap_false,
ld_flag_bold TYPE abap_bool VALUE abap_false,
ld_flag_italic TYPE abap_bool VALUE abap_false,
ld_date TYPE d,
ld_date_char TYPE c LENGTH 50,
ld_font_height TYPE tdfontsize VALUE lc_default_font_height,
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,
ld_font_name TYPE zexcel_style_font_name VALUE lc_default_font_name,
lt_font_families LIKE STANDARD TABLE OF ld_font_family,
ls_font_cache TYPE mty_s_font_cache.
FIELD-SYMBOLS: &lt;ls_font_cache&gt; TYPE mty_s_font_cache,
&lt;ls_font_metric&gt; TYPE mty_s_font_metric,
&lt;ls_itcfc&gt; TYPE itcfc.
&quot; Determine cell content and cell style
me-&gt;get_cell( EXPORTING ip_column = ip_column
ip_row = ip_row
IMPORTING ep_value = ld_cell_value
ep_guid = ld_style_guid ).
&quot; ABAP2XLSX uses tables to define areas containing headers and
&quot; auto-filters. Find out if the current cell is in the header
&quot; of one of these tables.
LOOP AT me-&gt;tables-&gt;collection INTO lo_table_object.
&quot; Downcast: OBJECT -&gt; ZCL_EXCEL_TABLE
lo_table ?= lo_table_object.
&quot; Convert column letters to corresponding integer values
ld_table_top_left_column =
zcl_excel_common=&gt;convert_column2int(
lo_table-&gt;settings-top_left_column ).
ld_table_bottom_right_column =
zcl_excel_common=&gt;convert_column2int(
lo_table-&gt;settings-bottom_right_column ).
&quot; Is the current cell part of the table header?
IF ip_column BETWEEN ld_table_top_left_column AND
ld_table_bottom_right_column AND
ip_row EQ lo_table-&gt;settings-top_left_row.
&quot; Current cell is part of the table header
&quot; -&gt; Assume that an auto filter is present and that the font is
&quot; bold
ld_flag_contains_auto_filter = abap_true.
ld_flag_bold = abap_true.
ENDIF.
ENDLOOP.
&quot; If a style GUID is present, read style attributes
IF ld_style_guid IS NOT INITIAL.
TRY.
&quot; Read style attributes
ls_stylemapping = me-&gt;excel-&gt;get_style_to_guid( ld_style_guid ).
&quot; If the current cell contains the default date format,
&quot; convert the cell value to a date and calculate its length
IF ls_stylemapping-complete_style-number_format-format_code =
zcl_excel_style_number_format=&gt;c_format_date_std.
&quot; Convert excel date to ABAP date
ld_date =
zcl_excel_common=&gt;excel_string_to_date( ld_cell_value ).
&quot; Format ABAP date using user&apos;s formatting settings
WRITE ld_date TO ld_date_char.
&quot; Remember the formatted date to calculate the cell size
ld_cell_value = ld_date_char.
ENDIF.
&quot; Read the font size and convert it to the font height
&quot; used by SAPscript (multiplication by 10)
IF ls_stylemapping-complete_stylex-font-size = abap_true.
ld_font_height = ls_stylemapping-complete_style-font-size * 10.
ENDIF.
&quot; If set, remember the font name
IF ls_stylemapping-complete_stylex-font-name = abap_true.
ld_font_name = ls_stylemapping-complete_style-font-name.
ENDIF.
&quot; If set, remember whether font is bold and italic.
IF ls_stylemapping-complete_stylex-font-bold = abap_true.
ld_flag_bold = ls_stylemapping-complete_style-font-bold.
ENDIF.
IF ls_stylemapping-complete_stylex-font-italic = abap_true.
ld_flag_italic = ls_stylemapping-complete_style-font-italic.
ENDIF.
CATCH zcx_excel ##NO_HANDLER.
&quot; Style GUID is present, but style was not found
&quot; Continue with default values
ENDTRY.
ENDIF.
&quot; Check if the same font (font name and font attributes) was already
&quot; used before
READ TABLE mth_font_cache
WITH TABLE KEY
font_name = ld_font_name
font_height = ld_font_height
flag_bold = ld_flag_bold
flag_italic = ld_flag_italic
ASSIGNING &lt;ls_font_cache&gt;.
IF sy-subrc &lt;&gt; 0.
&quot; Font is used for the first time
&quot; Add the font to our local font cache
ls_font_cache-font_name = ld_font_name.
ls_font_cache-font_height = ld_font_height.
ls_font_cache-flag_bold = ld_flag_bold.
ls_font_cache-flag_italic = ld_flag_italic.
INSERT ls_font_cache INTO TABLE mth_font_cache
ASSIGNING &lt;ls_font_cache&gt;.
&quot; Determine the SAPscript font family name from the Excel
&quot; font name
SELECT tdfamily
FROM tfo01
INTO TABLE lt_font_families
UP TO 1 ROWS
WHERE tdtext = ld_font_name.
&quot; Check if a matching font family was found
&quot; Fonts can be uploaded from TTF files using transaction SE73
IF lines( lt_font_families ) &gt; 0.
READ TABLE lt_font_families INDEX 1 INTO ld_font_family.
&quot; Load font metrics (returns a table with the size of each letter
&quot; in the font)
CALL FUNCTION &apos;LOAD_FONT&apos;
EXPORTING
family = ld_font_family
height = ld_font_height
printer = &apos;SWIN&apos;
bold = ld_flag_bold
italic = ld_flag_italic
TABLES
metric = lt_itcfc
EXCEPTIONS
font_family = 1
codepage = 2
device_type = 3
OTHERS = 4.
IF sy-subrc &lt;&gt; 0.
CLEAR lt_itcfc.
ENDIF.
&quot; For faster access, convert each character number to the actual
&quot; character, and store the characters and their sizes in a hash
&quot; table
LOOP AT lt_itcfc ASSIGNING &lt;ls_itcfc&gt;.
ld_uccp = &lt;ls_itcfc&gt;-cpcharno.
ls_font_metric-char =
cl_abap_conv_in_ce=&gt;uccpi( ld_uccp ).
ls_font_metric-char_width = &lt;ls_itcfc&gt;-tdcwidths.
INSERT ls_font_metric
INTO TABLE &lt;ls_font_cache&gt;-th_font_metrics.
ENDLOOP.
ENDIF.
ENDIF.
&quot; Calculate the cell width
&quot; If available, use font metrics
IF lines( &lt;ls_font_cache&gt;-th_font_metrics ) = 0.
&quot; Font metrics are not available
&quot; -&gt; Calculate the cell width using only the font size
ld_length = strlen( ld_cell_value ).
ep_width = ld_length * ld_font_height / lc_default_font_height + lc_excel_cell_padding.
ELSE.
&quot; Font metrics are available
&quot; Calculate the size of the text by adding the sizes of each
&quot; letter
ld_length = strlen( ld_cell_value ).
DO ld_length TIMES.
&quot; Subtract 1, because the first character is at offset 0
ld_offset = sy-index - 1.
&quot; Read the current character from the cell value
ld_current_character = ld_cell_value+ld_offset(1).
&quot; Look up the size of the current letter
READ TABLE &lt;ls_font_cache&gt;-th_font_metrics
WITH TABLE KEY char = ld_current_character
ASSIGNING &lt;ls_font_metric&gt;.
IF sy-subrc = 0.
&quot; The size of the letter is known
&quot; -&gt; Add the actual size of the letter
ADD &lt;ls_font_metric&gt;-char_width TO ld_width_from_font_metrics.
ELSE.
&quot; The size of the letter is unknown
&quot; -&gt; Add the font height as the default letter size
ADD ld_font_height TO ld_width_from_font_metrics.
ENDIF.
ENDDO.
&quot; Add cell padding (Excel makes columns a bit wider than the space
&quot; that is needed for the text itself) and convert unit
&quot; (division by 100)
ep_width = ld_width_from_font_metrics / 100 + lc_excel_cell_padding.
ENDIF.
&quot; If the current cell contains an auto filter, make it a bit wider.
&quot; The size used by the auto filter button does not depend on the font
&quot; size.
IF ld_flag_contains_auto_filter = abap_true.
ADD 2 TO ep_width.
ENDIF.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CALCULATE_COLUMN_WIDTHS" VERSION="1" LANGU="E" DESCRIPT="Calculate widths for auto-size columns" EXPOSURE="2" STATE="1" EDITORDER="9 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CALCULATE_COLUMN_WIDTHS" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method CALCULATE_COLUMN_WIDTHS.
TYPES:
BEGIN OF t_auto_size,
col_index TYPE int4,
width TYPE float,
END OF t_auto_size.
TYPES: tt_auto_size TYPE TABLE OF t_auto_size.
DATA: column_dimensions TYPE zexcel_t_worksheet_columndime.
DATA: column_dimension TYPE REF TO zcl_excel_worksheet_columndime.
DATA: auto_size TYPE flag.
DATA: auto_sizes TYPE tt_auto_size.
* DATA: col_alpha TYPE zexcel_cell_column_alpha.&quot; issue #155 - less restrictive typing for ip_column
DATA: cell_value TYPE zexcel_cell_value.
DATA: cell_style TYPE REF TO zcl_excel_style.
DATA: count TYPE int4.
DATA: highest_row TYPE int4.
DATA: width TYPE float.
FIELD-SYMBOLS: &lt;column_dimension&gt; LIKE LINE OF column_dimensions.
FIELD-SYMBOLS: &lt;auto_size&gt; LIKE LINE OF auto_sizes.
column_dimensions[] = me-&gt;get_column_dimensions( ).
LOOP AT column_dimensions ASSIGNING &lt;column_dimension&gt;.
auto_size = &lt;column_dimension&gt;-column_dimension-&gt;get_auto_size( ).
IF auto_size = abap_true.
APPEND INITIAL LINE TO auto_sizes ASSIGNING &lt;auto_size&gt;.
&lt;auto_size&gt;-col_index = &lt;column_dimension&gt;-column_dimension-&gt;get_column_index( ).
&lt;auto_size&gt;-width = -1.
ENDIF.
ENDLOOP.
&quot; There is only something to do if there are some auto-size columns
IF NOT auto_sizes IS INITIAL.
highest_row = me-&gt;get_highest_row( ).
LOOP AT auto_sizes ASSIGNING &lt;auto_size&gt;.
* col_alpha = zcl_excel_common=&gt;convert_column2alpha( &lt;auto_size&gt;-col_index ).&quot; issue #155 - less restrictive typing for ip_column
count = 1.
WHILE count &lt;= highest_row.
* Do not check merged cells
IF is_cell_merged(
ip_column = &lt;auto_size&gt;-col_index
ip_row = count ) = abap_false.
* Start of change # issue 139 - Dateretention of cellstyles
* IF cell_style IS BOUND.
* CREATE OBJECT cell_style.
* ENDIF.
* me-&gt;get_cell(
* EXPORTING
* ip_column = col_alpha &quot; Cell Column
* ip_row = count &quot; Cell Row
* IMPORTING
* ep_value = cell_value &quot; Cell Value
* ep_style = cell_style &quot; Request Cell Style as well
* ).
* &quot; For an easy start we just take the number of characters as the width
* width = strlen( cell_value ).
* &quot; Addition to solve issue #120, contribution by Stefan Schm#ƒÂ#cker
* &quot; Calculate width using Font Size and Font Type
* IF cell_style IS BOUND
* AND cell_style-&gt;font IS BOUND.
* width = cell_style-&gt;font-&gt;calculate_text_width( cell_value ).
* ENDIF.
* width = calculate_cell_width( ip_column = col_alpha &quot; issue #155 - less restrictive typing for ip_column
width = calculate_cell_width( ip_column = &lt;auto_size&gt;-col_index &quot; issue #155 - less restrictive typing for ip_column
ip_row = count ).
* End of change # issue 139 - Dateretention of cellstyles
IF width &gt; &lt;auto_size&gt;-width.
&lt;auto_size&gt;-width = width.
ENDIF.
ENDIF.
count = count + 1.
ENDWHILE.
* column_dimension = me-&gt;get_column_dimension( col_alpha ). &quot; issue #155 - less restrictive typing for ip_column
column_dimension = me-&gt;get_column_dimension( &lt;auto_size&gt;-col_index ). &quot; issue #155 - less restrictive typing for ip_column
column_dimension-&gt;set_width( &lt;auto_size&gt;-width ).
ENDLOOP.
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" VERSION="1" LANGU="E" DESCRIPT="Change cell style" EXPOSURE="2" STATE="1" EDITORDER="10 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_COMPLETE" VERSION="1" LANGU="E" DESCRIPT="Values for Cellstyles ( 1 structure holds all )" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_COMPLETE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XCOMPLETE" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cellstyles ( 1 structure holds all )" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_COMPLETE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT" VERSION="1" LANGU="E" DESCRIPT="Values for Cellstyles - Font" CMPTYPE="1" MTDTYPE="0" EDITORDER="5 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_FONT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XFONT" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cellstyles - Font" CMPTYPE="1" MTDTYPE="0" EDITORDER="6 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_FONT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL" VERSION="1" LANGU="E" DESCRIPT="Values for Cellstyles - Fill" CMPTYPE="1" MTDTYPE="0" EDITORDER="7 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_FILL" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XFILL" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cellstyles - Fill" CMPTYPE="1" MTDTYPE="0" EDITORDER="8 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_FILL" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS" VERSION="1" LANGU="E" DESCRIPT="Values for Cellstyles - Borders" CMPTYPE="1" MTDTYPE="0" EDITORDER="9 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_BORDERS" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XBORDERS" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cellstyles - Borders" CMPTYPE="1" MTDTYPE="0" EDITORDER="10 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_BORDERS" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ALIGNMENT" VERSION="1" LANGU="E" DESCRIPT="Values for Cellstyles - Alignment" CMPTYPE="1" MTDTYPE="0" EDITORDER="11 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_ALIGNMENT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XALIGNMENT" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cellstyles - Alignment" CMPTYPE="1" MTDTYPE="0" EDITORDER="12 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_ALIGNMENT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_NUMBER_FORMAT_FORMAT_CODE" VERSION="1" LANGU="E" DESCRIPT="Values for Cellstyles - Number Format" CMPTYPE="1" MTDTYPE="0" EDITORDER="13 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_PROTECTION" VERSION="1" LANGU="E" DESCRIPT="Values for Cellstyles - Protection" CMPTYPE="1" MTDTYPE="0" EDITORDER="14 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_PROTECTION" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XPROTECTION" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cellstyles - Protection" CMPTYPE="1" MTDTYPE="0" EDITORDER="15 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_PROTECTION" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_BOLD" VERSION="1" LANGU="E" DESCRIPT="General Flag" CMPTYPE="1" MTDTYPE="0" EDITORDER="16 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_COLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="17 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_COLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="18 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_COLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="19 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_COLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="20 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_COLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="21 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_FAMILY" VERSION="1" LANGU="E" DESCRIPT="Font family" CMPTYPE="1" MTDTYPE="0" EDITORDER="22 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_FONT_FAMILY" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_ITALIC" VERSION="1" LANGU="E" DESCRIPT="General Flag" CMPTYPE="1" MTDTYPE="0" EDITORDER="23 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_NAME" VERSION="1" LANGU="E" DESCRIPT="Font name" CMPTYPE="1" MTDTYPE="0" EDITORDER="24 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_FONT_NAME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_SCHEME" VERSION="1" LANGU="E" DESCRIPT="Font scheme" CMPTYPE="1" MTDTYPE="0" EDITORDER="25 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_FONT_SCHEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_SIZE" VERSION="1" LANGU="E" DESCRIPT="Font size" CMPTYPE="1" MTDTYPE="0" EDITORDER="26 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_FONT_SIZE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_STRIKETHROUGH" VERSION="1" LANGU="E" DESCRIPT="General Flag" CMPTYPE="1" MTDTYPE="0" EDITORDER="27 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_UNDERLINE" VERSION="1" LANGU="E" DESCRIPT="General Flag" CMPTYPE="1" MTDTYPE="0" EDITORDER="28 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FONT_UNDERLINE_MODE" VERSION="1" LANGU="E" DESCRIPT="Font underline" CMPTYPE="1" MTDTYPE="0" EDITORDER="29 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_FONT_UNDERLINE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_FILLTYPE" VERSION="1" LANGU="E" DESCRIPT="Fill Type" CMPTYPE="1" MTDTYPE="0" EDITORDER="30 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_FILL_TYPE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_ROTATION" VERSION="1" LANGU="E" DESCRIPT="Rotation" CMPTYPE="1" MTDTYPE="0" EDITORDER="31 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_ROTATION" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_FGCOLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="32 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_FGCOLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="33 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_FGCOLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="34 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_FGCOLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="35 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_FGCOLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="36 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_BGCOLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="37 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_BGCOLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="38 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_BGCOLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="39 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_BGCOLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="40 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_BGCOLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="41 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_ALLBORDERS" VERSION="1" LANGU="E" DESCRIPT="Values for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="42 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_TYPE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="42 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-TYPE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_DEGREE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="43 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-DEGREE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XBORDERS_ALLBORDERS" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="43 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL" VERSION="1" LANGU="E" DESCRIPT="Values for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="44 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_BOTTOM" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="44 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-BOTTOM" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_TOP" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="45 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-TOP" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XBORDERS_DIAGONAL" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="45 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL_MODE" VERSION="1" LANGU="E" DESCRIPT="Diagonal" CMPTYPE="1" MTDTYPE="0" EDITORDER="46 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_DIAGONAL" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_RIGHT" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="46 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-RIGHT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DOWN" VERSION="1" LANGU="E" DESCRIPT="Values for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="47 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_LEFT" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="47 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-LEFT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_POSITION1" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="48 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-POSITION1" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XBORDERS_DOWN" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="48 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_LEFT" VERSION="1" LANGU="E" DESCRIPT="Values for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="49 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_POSITION2" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="49 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-POSITION2" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_FILL_GRADTYPE_POSITION3" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="50 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_GRADIENT_TYPE-POSITION3" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XBORDERS_LEFT" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="50 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_RIGHT" VERSION="1" LANGU="E" DESCRIPT="Values for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="51 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XBORDERS_RIGHT" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="52 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_TOP" VERSION="1" LANGU="E" DESCRIPT="Values for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="53 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLE_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_XBORDERS_TOP" VERSION="1" LANGU="E" DESCRIPT="Changeflag for Cells - border" CMPTYPE="1" MTDTYPE="0" EDITORDER="54 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CSTYLEX_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ALIGNMENT_HORIZONTAL" VERSION="1" LANGU="E" DESCRIPT="Alignment" CMPTYPE="1" MTDTYPE="0" EDITORDER="55 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_ALIGNMENT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ALIGNMENT_VERTICAL" VERSION="1" LANGU="E" DESCRIPT="Alignment" CMPTYPE="1" MTDTYPE="0" EDITORDER="56 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_ALIGNMENT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ALIGNMENT_TEXTROTATION" VERSION="1" LANGU="E" DESCRIPT="Text Rotation" CMPTYPE="1" MTDTYPE="0" EDITORDER="57 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_TEXT_ROTATION" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ALIGNMENT_WRAPTEXT" VERSION="1" LANGU="E" DESCRIPT="General Flag" CMPTYPE="1" MTDTYPE="0" EDITORDER="58 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ALIGNMENT_SHRINKTOFIT" VERSION="1" LANGU="E" DESCRIPT="General Flag" CMPTYPE="1" MTDTYPE="0" EDITORDER="59 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_ALIGNMENT_INDENT" VERSION="1" LANGU="E" DESCRIPT="Indent" CMPTYPE="1" MTDTYPE="0" EDITORDER="60 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_INDENT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_PROTECTION_HIDDEN" VERSION="1" LANGU="E" DESCRIPT="Cell protection indicator" CMPTYPE="1" MTDTYPE="0" EDITORDER="61 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_PROTECTION" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_PROTECTION_LOCKED" VERSION="1" LANGU="E" DESCRIPT="Cell protection indicator" CMPTYPE="1" MTDTYPE="0" EDITORDER="62 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_PROTECTION" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_ALLBORDERS_STYLE" VERSION="1" LANGU="E" DESCRIPT="Border style" CMPTYPE="1" MTDTYPE="0" EDITORDER="63 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_ALLBORDERS_COLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="64 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_ALLBO_COLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="65 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_ALLBO_COLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="66 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_ALLBO_COLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="67 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_ALLBO_COLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="68 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL_STYLE" VERSION="1" LANGU="E" DESCRIPT="Border style" CMPTYPE="1" MTDTYPE="0" EDITORDER="69 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL_COLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="70 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL_COLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="71 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL_COLOR_INDE" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="72 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL_COLOR_THEM" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="73 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DIAGONAL_COLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="74 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DOWN_STYLE" VERSION="1" LANGU="E" DESCRIPT="Border style" CMPTYPE="1" MTDTYPE="0" EDITORDER="75 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DOWN_COLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="76 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DOWN_COLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="77 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DOWN_COLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="78 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DOWN_COLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="79 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_DOWN_COLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="80 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_LEFT_STYLE" VERSION="1" LANGU="E" DESCRIPT="Border style" CMPTYPE="1" MTDTYPE="0" EDITORDER="81 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_LEFT_COLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="82 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_LEFT_COLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="83 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_LEFT_COLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="84 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_LEFT_COLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="85 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_LEFT_COLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="86 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_RIGHT_STYLE" VERSION="1" LANGU="E" DESCRIPT="Border style" CMPTYPE="1" MTDTYPE="0" EDITORDER="87 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_RIGHT_COLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="88 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_RIGHT_COLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="89 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_RIGHT_COLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="90 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_RIGHT_COLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="91 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_RIGHT_COLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="92 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_TOP_STYLE" VERSION="1" LANGU="E" DESCRIPT="Border style" CMPTYPE="1" MTDTYPE="0" EDITORDER="93 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_BORDER" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_TOP_COLOR" VERSION="1" LANGU="E" DESCRIPT="Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="94 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_STYLE_COLOR" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_TOP_COLOR_RGB" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="95 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_ARGB" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_TOP_COLOR_INDEXED" VERSION="1" LANGU="E" DESCRIPT="Indexed color value" CMPTYPE="1" MTDTYPE="0" EDITORDER="96 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_INDEXED" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_TOP_COLOR_THEME" VERSION="1" LANGU="E" DESCRIPT="Theme Color" CMPTYPE="1" MTDTYPE="0" EDITORDER="97 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_THEME" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="IP_BORDERS_TOP_COLOR_TINT" VERSION="1" LANGU="E" DESCRIPT="Tint" CMPTYPE="1" MTDTYPE="0" EDITORDER="98 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_STYLE_COLOR_TINT" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="EP_GUID" VERSION="1" LANGU="E" DESCRIPT="Style identifier" CMPTYPE="1" MTDTYPE="0" EDITORDER="99 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_STYLE"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CHANGE_CELL_STYLE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>METHOD change_cell_style.
&quot; issue # 139
DATA: stylemapping TYPE zexcel_s_stylemapping,
complete_style TYPE zexcel_s_cstyle_complete,
complete_stylex TYPE zexcel_s_cstylex_complete,
borderx TYPE zexcel_s_cstylex_border,
l_guid TYPE zexcel_cell_style. &quot;issue # 177
* We have a lot of parameters. Use some macros to make the coding more structured
DEFINE clear_initial_colorxfields.
if &amp;1-rgb is initial.
clear &amp;2-rgb.
endif.
if &amp;1-indexed is initial.
clear &amp;2-indexed.
endif.
if &amp;1-theme is initial.
clear &amp;2-theme.
endif.
if &amp;1-tint is initial.
clear &amp;2-tint.
endif.
END-OF-DEFINITION.
DEFINE move_supplied_borders.
if ip_&amp;1 is supplied. &quot; only act if parameter was supplied
if ip_x&amp;1 is supplied. &quot;
borderx = ip_x&amp;1. &quot; use supplied x-parameter
else.
clear borderx with &apos;X&apos;.
* clear in a way that would be expected to work easily
if ip_&amp;1-border_style is initial.
clear borderx-border_style.
endif.
clear_initial_colorxfields ip_&amp;1-border_color borderx-border_color.
endif.
move-corresponding ip_&amp;1 to complete_style-&amp;2.
move-corresponding borderx to complete_stylex-&amp;2.
endif.
END-OF-DEFINITION.
* First get current stylsettings
TRY.
me-&gt;get_cell( EXPORTING ip_column = ip_column &quot; Cell Column
ip_row = ip_row &quot; Cell Row
IMPORTING ep_guid = l_guid ).&quot; Cell Value ). &quot;issue # 177
stylemapping = me-&gt;excel-&gt;get_style_to_guid( l_guid ). &quot;issue # 177
complete_style = stylemapping-complete_style.
complete_stylex = stylemapping-complete_stylex.
CATCH zcx_excel.
* Error --&gt; use submitted style
ENDTRY.
* move_supplied_multistyles: complete.
IF ip_complete IS SUPPLIED.
IF ip_xcomplete IS NOT SUPPLIED.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Complete styleinfo has to be supplied with corresponding X-field&apos;.
ENDIF.
MOVE-CORRESPONDING ip_complete TO complete_style.
MOVE-CORRESPONDING ip_xcomplete TO complete_stylex.
ENDIF.
IF ip_font IS SUPPLIED.
DATA: fontx LIKE ip_xfont.
IF ip_xfont IS SUPPLIED.
fontx = ip_xfont.
ELSE.
* Only supplied values should be used - exception: Flags bold and italic strikethrough underline
MOVE &apos;X&apos; TO: fontx-bold,
fontx-italic,
fontx-strikethrough,
fontx-underline_mode.
CLEAR fontx-color WITH &apos;X&apos;.
clear_initial_colorxfields ip_font-color fontx-color.
IF ip_font-family IS NOT INITIAL.
fontx-family = &apos;X&apos;.
ENDIF.
IF ip_font-name IS NOT INITIAL.
fontx-name = &apos;X&apos;.
ENDIF.
IF ip_font-scheme IS NOT INITIAL.
fontx-scheme = &apos;X&apos;.
ENDIF.
IF ip_font-size IS NOT INITIAL.
fontx-size = &apos;X&apos;.
ENDIF.
IF ip_font-underline_mode IS NOT INITIAL.
fontx-underline_mode = &apos;X&apos;.
ENDIF.
ENDIF.
MOVE-CORRESPONDING ip_font TO complete_style-font.
MOVE-CORRESPONDING fontx TO complete_stylex-font.
* Correction for undeline mode
ENDIF.
IF ip_fill IS SUPPLIED.
DATA: fillx LIKE ip_xfill.
IF ip_xfill IS SUPPLIED.
fillx = ip_xfill.
ELSE.
CLEAR fillx WITH &apos;X&apos;.
IF ip_fill-filltype IS INITIAL.
CLEAR fillx-filltype.
ENDIF.
clear_initial_colorxfields ip_fill-fgcolor fillx-fgcolor.
clear_initial_colorxfields ip_fill-bgcolor fillx-bgcolor.
ENDIF.
MOVE-CORRESPONDING ip_fill TO complete_style-fill.
MOVE-CORRESPONDING fillx TO complete_stylex-fill.
ENDIF.
IF ip_borders IS SUPPLIED.
DATA: bordersx LIKE ip_xborders.
IF ip_xborders IS SUPPLIED.
bordersx = ip_xborders.
ELSE.
CLEAR bordersx WITH &apos;X&apos;.
IF ip_borders-allborders-border_style IS INITIAL.
CLEAR bordersx-allborders-border_style.
ENDIF.
IF ip_borders-diagonal-border_style IS INITIAL.
CLEAR bordersx-diagonal-border_style.
ENDIF.
IF ip_borders-down-border_style IS INITIAL.
CLEAR bordersx-down-border_style.
ENDIF.
IF ip_borders-left-border_style IS INITIAL.
CLEAR bordersx-left-border_style.
ENDIF.
IF ip_borders-right-border_style IS INITIAL.
CLEAR bordersx-right-border_style.
ENDIF.
IF ip_borders-top-border_style IS INITIAL.
CLEAR bordersx-top-border_style.
ENDIF.
clear_initial_colorxfields ip_borders-allborders-border_color bordersx-allborders-border_color.
clear_initial_colorxfields ip_borders-diagonal-border_color bordersx-diagonal-border_color.
clear_initial_colorxfields ip_borders-down-border_color bordersx-down-border_color.
clear_initial_colorxfields ip_borders-left-border_color bordersx-left-border_color.
clear_initial_colorxfields ip_borders-right-border_color bordersx-right-border_color.
clear_initial_colorxfields ip_borders-top-border_color bordersx-top-border_color.
ENDIF.
MOVE-CORRESPONDING ip_borders TO complete_style-borders.
MOVE-CORRESPONDING bordersx TO complete_stylex-borders.
ENDIF.
IF ip_alignment IS SUPPLIED.
DATA: alignmentx LIKE ip_xalignment.
IF ip_xalignment IS SUPPLIED.
alignmentx = ip_xalignment.
ELSE.
CLEAR alignmentx WITH &apos;X&apos;.
IF ip_alignment-horizontal IS INITIAL.
CLEAR alignmentx-horizontal.
ENDIF.
IF ip_alignment-vertical IS INITIAL.
CLEAR alignmentx-vertical.
ENDIF.
ENDIF.
MOVE-CORRESPONDING ip_alignment TO complete_style-alignment.
MOVE-CORRESPONDING alignmentx TO complete_stylex-alignment.
ENDIF.
IF ip_protection IS SUPPLIED.
MOVE-CORRESPONDING ip_protection TO complete_style-protection.
IF ip_xprotection IS SUPPLIED.
MOVE-CORRESPONDING ip_xprotection TO complete_stylex-protection.
ELSE.
IF ip_protection-hidden IS NOT INITIAL.
complete_stylex-protection-hidden = &apos;X&apos;.
ENDIF.
IF ip_protection-locked IS NOT INITIAL.
complete_stylex-protection-locked = &apos;X&apos;.
ENDIF.
ENDIF.
ENDIF.
move_supplied_borders : borders_allborders borders-allborders,
borders_diagonal borders-diagonal ,
borders_down borders-down ,
borders_left borders-left ,
borders_right borders-right ,
borders_top borders-top .
DEFINE move_supplied_singlestyles.
if ip_&amp;1 is supplied.
complete_style-&amp;2 = ip_&amp;1.
complete_stylex-&amp;2 = &apos;X&apos;.
endif.
END-OF-DEFINITION.
move_supplied_singlestyles: number_format_format_code number_format-format_code,
font_bold font-bold,
font_color font-color,
font_color_rgb font-color-rgb,
font_color_indexed font-color-indexed,
font_color_theme font-color-theme,
font_color_tint font-color-tint,
font_family font-family,
font_italic font-italic,
font_name font-name,
font_scheme font-scheme,
font_size font-size,
font_strikethrough font-strikethrough,
font_underline font-underline,
font_underline_mode font-underline_mode,
fill_filltype fill-filltype,
fill_rotation fill-rotation,
fill_fgcolor fill-fgcolor,
fill_fgcolor_rgb fill-fgcolor-rgb,
fill_fgcolor_indexed fill-fgcolor-indexed,
fill_fgcolor_theme fill-fgcolor-theme,
fill_fgcolor_tint fill-fgcolor-tint,
fill_bgcolor fill-bgcolor,
fill_bgcolor_rgb fill-bgcolor-rgb,
fill_bgcolor_indexed fill-bgcolor-indexed,
fill_bgcolor_theme fill-bgcolor-theme,
fill_bgcolor_tint fill-bgcolor-tint,
fill_gradtype_type fill-gradtype-TYPE,
fill_gradtype_degree fill-gradtype-DEGREE,
fill_gradtype_bottom fill-gradtype-BOTTOM,
fill_gradtype_left fill-gradtype-LEFT,
fill_gradtype_top fill-gradtype-TOP,
fill_gradtype_right fill-gradtype-RIGHT,
fill_gradtype_position1 fill-gradtype-POSITION1,
fill_gradtype_position2 fill-gradtype-POSITION2,
fill_gradtype_position3 fill-gradtype-POSITION3,
borders_diagonal_mode borders-diagonal_mode,
alignment_horizontal alignment-horizontal,
alignment_vertical alignment-vertical,
alignment_textrotation alignment-textrotation,
alignment_wraptext alignment-wraptext,
alignment_shrinktofit alignment-shrinktofit,
alignment_indent alignment-indent,
protection_hidden protection-hidden,
protection_locked protection-locked,
borders_allborders_style borders-allborders-border_style,
borders_allborders_color borders-allborders-border_color,
borders_allbo_color_rgb borders-allborders-border_color-rgb,
borders_allbo_color_indexed borders-allborders-border_color-indexed,
borders_allbo_color_theme borders-allborders-border_color-theme,
borders_allbo_color_tint borders-allborders-border_color-tint,
borders_diagonal_style borders-diagonal-border_style,
borders_diagonal_color borders-diagonal-border_color,
borders_diagonal_color_rgb borders-diagonal-border_color-rgb,
borders_diagonal_color_inde borders-diagonal-border_color-indexed,
borders_diagonal_color_them borders-diagonal-border_color-theme,
borders_diagonal_color_tint borders-diagonal-border_color-tint,
borders_down_style borders-down-border_style,
borders_down_color borders-down-border_color,
borders_down_color_rgb borders-down-border_color-rgb,
borders_down_color_indexed borders-down-border_color-indexed,
borders_down_color_theme borders-down-border_color-theme,
borders_down_color_tint borders-down-border_color-tint,
borders_left_style borders-left-border_style,
borders_left_color borders-left-border_color,
borders_left_color_rgb borders-left-border_color-rgb,
borders_left_color_indexed borders-left-border_color-indexed,
borders_left_color_theme borders-left-border_color-theme,
borders_left_color_tint borders-left-border_color-tint,
borders_right_style borders-right-border_style,
borders_right_color borders-right-border_color,
borders_right_color_rgb borders-right-border_color-rgb,
borders_right_color_indexed borders-right-border_color-indexed,
borders_right_color_theme borders-right-border_color-theme,
borders_right_color_tint borders-right-border_color-tint,
borders_top_style borders-top-border_style,
borders_top_color borders-top-border_color,
borders_top_color_rgb borders-top-border_color-rgb,
borders_top_color_indexed borders-top-border_color-indexed,
borders_top_color_theme borders-top-border_color-theme,
borders_top_color_tint borders-top-border_color-tint.
* Now we have a completly filled styles.
* This can be used to get the guid
* Return guid if requested. Might be used if copy&amp;paste of styles is requested
ep_guid = me-&gt;excel-&gt;get_static_cellstyle_guid( ip_cstyle_complete = complete_style
ip_cstylex_complete = complete_stylex ).
me-&gt;set_cell_style( ip_column = ip_column
ip_row = ip_row
ip_style = ep_guid ).
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CONSTRUCTOR" VERSION="1" LANGU="E" DESCRIPT="CONSTRUCTOR" EXPOSURE="2" STATE="1" EDITORDER="11 " DISPID="0 " MTDTYPE="2" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CONSTRUCTOR" SCONAME="IP_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Ref to parent document" CMPTYPE="1" MTDTYPE="2" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CONSTRUCTOR" SCONAME="IP_TITLE" VERSION="1" LANGU="E" DESCRIPT="Title" CMPTYPE="1" MTDTYPE="2" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_SHEET_TITLE" PAROPTIONL="X"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="CONSTRUCTOR" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="2" EDITORDER="1 "/>
<source>method CONSTRUCTOR.
DATA: lv_title TYPE zexcel_sheet_title.
me-&gt;excel = ip_excel.
CALL FUNCTION &apos;GUID_CREATE&apos;
IMPORTING
ev_guid_16 = me-&gt;guid.
IF ip_title IS NOT INITIAL.
lv_title = ip_title.
ELSE.
* lv_title = me-&gt;guid. &quot; del issue #154 - Names of worksheets
lv_title = me-&gt;generate_title( ). &quot; ins issue #154 - Names of worksheets
ENDIF.
me-&gt;set_title( ip_title = lv_title ).
CREATE OBJECT sheet_setup.
CREATE OBJECT conditional_styles.
CREATE OBJECT data_validations.
CREATE OBJECT tables.
CREATE OBJECT ranges. &quot; issue #163
CREATE OBJECT drawings
EXPORTING
ip_type = zcl_excel_drawing=&gt;type_image.
CREATE OBJECT charts
EXPORTING
ip_type = zcl_excel_drawing=&gt;type_chart.
me-&gt;zif_excel_sheet_protection~initialize( ).
me-&gt;zif_excel_sheet_properties~initialize( ).
CREATE OBJECT hyperlinks.
* initialize active cell coordinates
active_cell-cell_row = 1.
active_cell-cell_column = 1.
* inizialize dimension range
lower_cell-cell_row = 1.
lower_cell-cell_column = 1.
upper_cell-cell_row = 1.
upper_cell-cell_column = 1.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DELETE_MERGE" VERSION="1" LANGU="E" DESCRIPT="Delete the used merges" EXPOSURE="2" STATE="1" EDITORDER="12 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<source>method DELETE_MERGE.
DELETE sheet_content_merge INDEX 1.
DELETE sheet_content_merge INDEX 1.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DELETE_ROW_OUTLINE" VERSION="1" LANGU="E" DESCRIPT="Delete an outline for rows" EXPOSURE="2" STATE="1" EDITORDER="13 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DELETE_ROW_OUTLINE" SCONAME="IV_ROW_FROM" VERSION="1" LANGU="E" DESCRIPT="Start-row of outline" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DELETE_ROW_OUTLINE" SCONAME="IV_ROW_TO" VERSION="1" LANGU="E" DESCRIPT="End-row of outline" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="DELETE_ROW_OUTLINE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>METHOD delete_row_outline.
DELETE me-&gt;mt_row_outlines WHERE row_from = iv_row_from
AND row_to = iv_row_to.
IF sy-subrc &lt;&gt; 0. &quot; didn&apos;t find outline that was to be deleted
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Row outline to be deleted does not exist&apos;.
ENDIF.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="FREEZE_PANES" VERSION="1" LANGU="E" DESCRIPT="Freeze panes for supplied number of rows and/or columns" EXPOSURE="2" STATE="1" EDITORDER="14 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="FREEZE_PANES" SCONAME="IP_NUM_COLUMNS" VERSION="1" LANGU="E" DESCRIPT="Number of columns to freeze (starting from left-most)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="FREEZE_PANES" SCONAME="IP_NUM_ROWS" VERSION="1" LANGU="E" DESCRIPT="Number of rows to freeze (starting from top-most)" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I" PAROPTIONL="X"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="FREEZE_PANES" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method FREEZE_PANES.
data: lv_xsplit type i,
lv_ysplit type i.
IF ip_num_columns IS NOT SUPPLIED AND ip_num_rows IS NOT SUPPLIED.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Pleas provide number of rows and/or columns to freeze&apos;.
ENDIF.
IF ip_num_columns IS SUPPLIED AND ip_num_columns &lt;= 0.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Number of columns to freeze should be positive&apos;.
ENDIF.
IF ip_num_rows IS SUPPLIED AND ip_num_rows &lt;= 0.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Number of rows to freeze should be positive&apos;.
ENDIF.
freeze_pane_cell_column = ip_num_columns + 1.
freeze_pane_cell_row = ip_num_rows + 1.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GENERATE_TITLE" VERSION="1" LANGU="E" DESCRIPT="Generate title for worksheet (called if none is supplied )" EXPOSURE="0" STATE="1" EDITORDER="2 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GENERATE_TITLE" SCONAME="EP_TITLE" VERSION="1" LANGU="E" DESCRIPT="Title" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_SHEET_TITLE"/>
<source>method GENERATE_TITLE.
DATA: lo_worksheets_iterator TYPE REF TO cl_object_collection_iterator,
lo_worksheet TYPE REF TO zcl_excel_worksheet,
errormessage TYPE string.
DATA: t_titles TYPE HASHED TABLE OF zexcel_sheet_title WITH UNIQUE KEY table_line,
title TYPE zexcel_sheet_title,
sheetnumber TYPE i.
* Get list of currently used titles
lo_worksheets_iterator = me-&gt;excel-&gt;get_worksheets_iterator( ).
WHILE lo_worksheets_iterator-&gt;has_next( ) = abap_true.
lo_worksheet ?= lo_worksheets_iterator-&gt;get_next( ).
title = lo_worksheet-&gt;get_title( ).
INSERT title INTO TABLE t_titles.
ADD 1 TO sheetnumber.
ENDWHILE.
* Now build sheetnumber. Increase counter until we hit a number that is not used so far
ADD 1 TO sheetnumber. &quot; Start counting with next number
DO.
title = sheetnumber.
SHIFT title LEFT DELETING LEADING space.
CONCATENATE &apos;Sheet&apos;(001) title INTO ep_title.
INSERT ep_title INTO TABLE t_titles.
IF sy-subrc = 0. &quot; Title not used so far --&gt; take it
EXIT.
ENDIF.
ADD 1 TO sheetnumber.
ENDDO.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ACTIVE_CELL" VERSION="1" LANGU="E" DESCRIPT="Get used range dimension" EXPOSURE="2" STATE="1" EDITORDER="15 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ACTIVE_CELL" SCONAME="EP_ACTIVE_CELL" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="STRING"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ACTIVE_CELL" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method GET_ACTIVE_CELL.
DATA: lv_active_column TYPE zexcel_cell_column_alpha,
lv_active_row TYPE string.
lv_active_column = zcl_excel_common=&gt;convert_column2alpha( active_cell-cell_column ).
lv_active_row = active_cell-cell_row.
SHIFT lv_active_row RIGHT DELETING TRAILING space.
SHIFT lv_active_row LEFT DELETING LEADING space.
CONCATENATE lv_active_column lv_active_row INTO ep_active_cell.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" VERSION="1" LANGU="E" DESCRIPT="Get cell value" EXPOSURE="2" STATE="1" EDITORDER="17 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" SCONAME="EP_VALUE" VERSION="1" LANGU="E" DESCRIPT="Cell Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_VALUE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" SCONAME="EP_RC" VERSION="1" LANGU="E" DESCRIPT="Return Value of ABAP Statements" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="SYSUBRC"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" SCONAME="EP_STYLE" VERSION="1" LANGU="E" DESCRIPT="Style" CMPTYPE="1" MTDTYPE="0" EDITORDER="5 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL_STYLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" SCONAME="EP_GUID" VERSION="1" LANGU="E" DESCRIPT="Style identifier" CMPTYPE="1" MTDTYPE="0" EDITORDER="6 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_STYLE"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_CELL" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method GET_CELL.
DATA: lv_column TYPE zexcel_cell_column,
ls_sheet_content TYPE zexcel_s_cell_data.
FIELD-SYMBOLS: &lt;fs_sheet_content&gt; TYPE zexcel_s_cell_data.
lv_column = zcl_excel_common=&gt;convert_column2int( ip_column ).
READ TABLE sheet_content INTO ls_sheet_content WITH TABLE KEY cell_row = ip_row
cell_column = lv_column.
ep_rc = sy-subrc.
ep_value = ls_sheet_content-cell_value.
ep_guid = ls_sheet_content-cell_style. &quot; issue 139 - added this to be used for columnwidth calculation
&quot; Addition to solve issue #120, contribution by Stefan Schm#ƒÂ#cker
DATA: style_iterator TYPE REF TO cl_object_collection_iterator,
style TYPE REF TO zcl_excel_style.
IF ep_style IS REQUESTED.
style_iterator = me-&gt;excel-&gt;get_styles_iterator( ).
WHILE style_iterator-&gt;has_next( ) = &apos;X&apos;.
style ?= style_iterator-&gt;get_next( ).
IF style-&gt;get_guid( ) = ls_sheet_content-cell_style.
ep_style = style.
EXIT.
ENDIF.
ENDWHILE.
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COLUMN_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Get column dimension at a specific column" EXPOSURE="2" STATE="1" EDITORDER="18 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COLUMN_DIMENSION" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COLUMN_DIMENSION" SCONAME="R_COLUMN_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Worksheet ColumnDimension" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET_COLUMNDIME"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COLUMN_DIMENSION" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method GET_COLUMN_DIMENSION.
FIELD-SYMBOLS: &lt;fs_column_dimension&gt; LIKE LINE OF column_dimensions.
DATA: lv_column_alpha TYPE zexcel_cell_column_alpha. &quot; issue #155 - less restrictive typing for ip_column
lv_column_alpha = zcl_excel_common=&gt;convert_column2alpha( ip_column ).&quot; issue #155 - less restrictive typing for ip_column
READ TABLE me-&gt;column_dimensions ASSIGNING &lt;fs_column_dimension&gt;
WITH KEY column = lv_column_alpha. &quot; issue #155 - less restrictive typing for ip_column
IF NOT &lt;fs_column_dimension&gt; IS ASSIGNED.
CREATE OBJECT r_column_dimension
EXPORTING
ip_index = lv_column_alpha &quot; issue #155 - less restrictive typing for ip_column
ip_excel = me-&gt;excel &quot; issue #157 - Allow style for columns
ip_worksheet = me. &quot; issue #157 - Allow style for columns
APPEND INITIAL LINE TO me-&gt;column_dimensions ASSIGNING &lt;fs_column_dimension&gt;.
&lt;fs_column_dimension&gt;-column = lv_column_alpha. &quot; issue #155 - less restrictive typing for ip_column
&lt;fs_column_dimension&gt;-column_dimension = r_column_dimension.
ELSE.
r_column_dimension = &lt;fs_column_dimension&gt;-column_dimension.
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COLUMN_DIMENSIONS" VERSION="1" LANGU="E" DESCRIPT="Get column dimensions" EXPOSURE="2" STATE="1" EDITORDER="19 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COLUMN_DIMENSIONS" SCONAME="R_COLUMN_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Collection of column dimensions" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_T_WORKSHEET_COLUMNDIME"/>
<source>method GET_COLUMN_DIMENSIONS.
r_column_dimension[] = me-&gt;column_dimensions[].
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COND_STYLES_ITERATOR" VERSION="1" LANGU="E" DESCRIPT="Get conditional styles iterator" EXPOSURE="2" STATE="1" EDITORDER="20 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_COND_STYLES_ITERATOR" SCONAME="EO_ITERATOR" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION_ITERATOR"/>
<source>method GET_COND_STYLES_ITERATOR.
eo_iterator = me-&gt;conditional_styles-&gt;get_iterator( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DATA_VALIDATIONS_ITERATOR" VERSION="1" LANGU="E" DESCRIPT="Get conditional styles iterator" EXPOSURE="2" STATE="1" EDITORDER="21 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DATA_VALIDATIONS_ITERATOR" SCONAME="EO_ITERATOR" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION_ITERATOR"/>
<source>method GET_DATA_VALIDATIONS_ITERATOR.
eo_iterator = me-&gt;data_validations-&gt;get_iterator( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DATA_VALIDATIONS_SIZE" VERSION="1" LANGU="E" DESCRIPT="Get the number of data validation objects" EXPOSURE="2" STATE="1" EDITORDER="22 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DATA_VALIDATIONS_SIZE" SCONAME="EP_SIZE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="I"/>
<source>method GET_DATA_VALIDATIONS_SIZE.
ep_size = me-&gt;data_validations-&gt;size( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_COLUMN_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Get column dimension at a specific column" EXPOSURE="2" STATE="1" EDITORDER="23 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_COLUMN_DIMENSION" SCONAME="R_COLUMN_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Worksheet ColumnDimension" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET_COLUMNDIME"/>
<source>method GET_DEFAULT_COLUMN_DIMENSION.
IF me-&gt;default_column_dimension IS NOT BOUND.
CREATE OBJECT me-&gt;default_column_dimension
EXPORTING
ip_index = &apos;A&apos; &quot; ????
ip_worksheet = me
ip_excel = me-&gt;excel.
ENDIF.
r_column_dimension = me-&gt;default_column_dimension.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_EXCEL_DATE_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Gets default date format" EXPOSURE="2" STATE="1" EDITORDER="24 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_EXCEL_DATE_FORMAT" SCONAME="EP_DEFAULT_EXCEL_DATE_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Default date format" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT"/>
<source>method GET_DEFAULT_EXCEL_DATE_FORMAT.
CONSTANTS: c_lang_e TYPE lang VALUE &apos;E&apos;.
IF default_excel_date_format IS NOT INITIAL.
ep_default_excel_date_format = default_excel_date_format.
RETURN.
ENDIF.
&quot;try to get defaults
TRY.
cl_abap_datfm=&gt;get_date_format_des( EXPORTING im_langu = c_lang_e
IMPORTING ex_dateformat = default_excel_date_format ).
CATCH cx_abap_datfm_format_unknown.
ENDTRY.
&quot; and fallback to fixed format
IF default_excel_date_format IS INITIAL.
default_excel_date_format = zcl_excel_style_number_format=&gt;c_format_date_ddmmyyyydot.
ENDIF.
ep_default_excel_date_format = default_excel_date_format.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_EXCEL_TIME_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Gets default time format" EXPOSURE="2" STATE="1" EDITORDER="25 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_EXCEL_TIME_FORMAT" SCONAME="EP_DEFAULT_EXCEL_TIME_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Default date format" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT"/>
<source>method GET_DEFAULT_EXCEL_TIME_FORMAT.
DATA: l_timefm TYPE xutimefm.
IF default_excel_time_format IS NOT INITIAL.
ep_default_excel_time_format = default_excel_time_format.
RETURN.
ENDIF.
* Let&apos;s get default
l_timefm = cl_abap_timefm=&gt;get_environment_timefm( ).
CASE l_timefm.
WHEN 0.
*0 24 Hour Format (Example: 12:05:10)
default_excel_time_format = zcl_excel_style_number_format=&gt;c_format_date_time6.
WHEN 1.
*1 12 Hour Format (Example: 12:05:10 PM)
default_excel_time_format = zcl_excel_style_number_format=&gt;c_format_date_time2.
WHEN 2.
*2 12 Hour Format (Example: 12:05:10 pm) for now all the same. no chnage upper lower
default_excel_time_format = zcl_excel_style_number_format=&gt;c_format_date_time2.
WHEN 3.
*3 Hours from 0 to 11 (Example: 00:05:10 PM) for now all the same. no chnage upper lower
default_excel_time_format = zcl_excel_style_number_format=&gt;c_format_date_time2.
WHEN 4.
*4 Hours from 0 to 11 (Example: 00:05:10 pm) for now all the same. no chnage upper lower
default_excel_time_format = zcl_excel_style_number_format=&gt;c_format_date_time2.
WHEN OTHERS.
&quot; and fallback to fixed format
default_excel_time_format = zcl_excel_style_number_format=&gt;c_format_date_time6.
ENDCASE.
ep_default_excel_time_format = default_excel_time_format.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_ROW_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Get column dimension at a specific column" EXPOSURE="2" STATE="1" EDITORDER="26 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DEFAULT_ROW_DIMENSION" SCONAME="R_ROW_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Worksheet ColumnDimension" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET_ROWDIMENSI"/>
<source>method GET_DEFAULT_ROW_DIMENSION.
IF me-&gt;default_row_dimension IS NOT BOUND.
CREATE OBJECT me-&gt;default_row_dimension.
ENDIF.
r_row_dimension = me-&gt;default_row_dimension.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DIMENSION_RANGE" VERSION="1" LANGU="E" DESCRIPT="Get used range dimension" EXPOSURE="2" STATE="1" EDITORDER="27 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DIMENSION_RANGE" SCONAME="EP_DIMENSION_RANGE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="STRING"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DIMENSION_RANGE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method GET_DIMENSION_RANGE.
me-&gt;update_dimension_range( ).
IF upper_cell EQ lower_cell. &quot;only one cell
&quot; Worksheet not filled
* IF upper_cell-cell_coords = &apos;0&apos;.
IF upper_cell-cell_coords IS INITIAL.
ep_dimension_range = &apos;A1&apos;.
ELSE.
ep_dimension_range = upper_cell-cell_coords.
ENDIF.
ELSE.
CONCATENATE upper_cell-cell_coords &apos;:&apos; lower_cell-cell_coords INTO ep_dimension_range.
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DRAWINGS" VERSION="1" LANGU="E" DESCRIPT="Gets drawing attached to the sheet" EXPOSURE="2" STATE="1" EDITORDER="28 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DRAWINGS" SCONAME="IP_TYPE" VERSION="1" LANGU="E" DESCRIPT="Excel Drawing type" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_DRAWING_TYPE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DRAWINGS" SCONAME="R_DRAWINGS" VERSION="1" LANGU="E" DESCRIPT="Drawings collection" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_DRAWINGS"/>
<source>method GET_DRAWINGS.
DATA: lo_drawing TYPE REF TO zcl_excel_drawing,
lo_iterator TYPE REF TO cl_object_collection_iterator.
CASE ip_type.
WHEN zcl_excel_drawing=&gt;type_image.
r_drawings = drawings.
WHEN zcl_excel_drawing=&gt;type_chart.
r_drawings = charts.
WHEN space.
CREATE OBJECT r_drawings
EXPORTING
ip_type = &apos;&apos;.
lo_iterator = drawings-&gt;get_iterator( ).
WHILE lo_iterator-&gt;has_next( ) = abap_true.
lo_drawing ?= lo_iterator-&gt;get_next( ).
r_drawings-&gt;include( lo_drawing ).
ENDWHILE.
lo_iterator = charts-&gt;get_iterator( ).
WHILE lo_iterator-&gt;has_next( ) = abap_true.
lo_drawing ?= lo_iterator-&gt;get_next( ).
r_drawings-&gt;include( lo_drawing ).
ENDWHILE.
WHEN OTHERS.
ENDCASE.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DRAWINGS_ITERATOR" VERSION="1" LANGU="E" DESCRIPT="Get iterator for drawings collection" EXPOSURE="2" STATE="1" EDITORDER="29 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DRAWINGS_ITERATOR" SCONAME="IP_TYPE" VERSION="1" LANGU="E" DESCRIPT="Excel Drawing type" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_DRAWING_TYPE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_DRAWINGS_ITERATOR" SCONAME="EO_ITERATOR" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION_ITERATOR"/>
<source>method GET_DRAWINGS_ITERATOR.
CASE ip_type.
WHEN zcl_excel_drawing=&gt;type_image.
eo_iterator = drawings-&gt;get_iterator( ).
WHEN zcl_excel_drawing=&gt;type_chart.
eo_iterator = charts-&gt;get_iterator( ).
ENDCASE.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_FREEZE_CELL" VERSION="1" LANGU="E" DESCRIPT="Gets the coordinates of cell determining freeze panes" EXPOSURE="2" STATE="1" EDITORDER="30 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_FREEZE_CELL" SCONAME="EP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_FREEZE_CELL" SCONAME="EP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN"/>
<source>method GET_FREEZE_CELL.
ep_row = me-&gt;freeze_pane_cell_row.
ep_column = me-&gt;freeze_pane_cell_column.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_GUID" VERSION="1" LANGU="E" DESCRIPT="Get sheet guid" EXPOSURE="2" STATE="1" EDITORDER="31 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_GUID" SCONAME="EP_GUID" VERSION="1" LANGU="E" DESCRIPT="GUID in &apos;RAW&apos; format" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="UUID"/>
<source>METHOD get_guid.
ep_guid = me-&gt;guid.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HIGHEST_COLUMN" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="32 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HIGHEST_COLUMN" SCONAME="R_HIGHEST_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HIGHEST_COLUMN" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method GET_HIGHEST_COLUMN.
me-&gt;update_dimension_range( ).
r_highest_column = me-&gt;lower_cell-cell_column.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HIGHEST_ROW" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="33 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HIGHEST_ROW" SCONAME="R_HIGHEST_ROW" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="INT4"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HIGHEST_ROW" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>METHOD get_highest_row.
me-&gt;update_dimension_range( ).
r_highest_row = me-&gt;lower_cell-cell_row.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HYPERLINKS_ITERATOR" VERSION="1" LANGU="E" DESCRIPT="Get iterator for links collection" EXPOSURE="2" STATE="1" EDITORDER="34 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HYPERLINKS_ITERATOR" SCONAME="EO_ITERATOR" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION_ITERATOR"/>
<source>method GET_HYPERLINKS_ITERATOR.
eo_iterator = hyperlinks-&gt;get_iterator( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HYPERLINKS_SIZE" VERSION="1" LANGU="E" DESCRIPT="Gets the size of links collection" EXPOSURE="2" STATE="1" EDITORDER="35 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_HYPERLINKS_SIZE" SCONAME="EP_SIZE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="I"/>
<source>method GET_HYPERLINKS_SIZE.
ep_size = hyperlinks-&gt;size( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_MERGE" VERSION="1" LANGU="E" DESCRIPT="Get the merge range" EXPOSURE="2" STATE="1" EDITORDER="36 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_MERGE" SCONAME="MERGE_RANGE" VERSION="1" LANGU="E" DESCRIPT="Table of Strings" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="STRING_TABLE"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_MERGE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method GET_MERGE.
DATA: lv_column_start TYPE string,
lv_column_end TYPE string,
lv_row TYPE string,
lv_index TYPE sy-tabix,
ls_sheet_content TYPE zexcel_s_cell_data,
range_from TYPE string,
range_to TYPE string,
lv_merge_range TYPE string,
lv_count TYPE string.
FIELD-SYMBOLS: &lt;fs_sheet_content&gt; TYPE zexcel_s_cell_data.
DESCRIBE TABLE sheet_content_merge LINES lv_count.
WHILE lv_count GT lv_index.
* LOOP AT sheet_content_merge ASSIGNING &lt;fs_sheet_content&gt;.
lv_index = lv_index + 1.
READ TABLE sheet_content_merge ASSIGNING &lt;fs_sheet_content&gt; INDEX lv_index.
lv_column_start = zcl_excel_common=&gt;convert_column2alpha( &lt;fs_sheet_content&gt;-cell_column ).
lv_row = &lt;fs_sheet_content&gt;-cell_row.
SHIFT lv_column_start RIGHT DELETING TRAILING space.
SHIFT lv_column_start LEFT DELETING LEADING space.
SHIFT lv_row RIGHT DELETING TRAILING space.
SHIFT lv_row LEFT DELETING LEADING space.
CONCATENATE lv_column_start lv_row
INTO range_from.
lv_index = lv_index + 1.
READ TABLE sheet_content_merge ASSIGNING &lt;fs_sheet_content&gt; INDEX lv_index.
lv_column_end = zcl_excel_common=&gt;convert_column2alpha( &lt;fs_sheet_content&gt;-cell_column ).
lv_row = &lt;fs_sheet_content&gt;-cell_row.
SHIFT lv_column_end RIGHT DELETING TRAILING space.
SHIFT lv_column_end LEFT DELETING LEADING space.
SHIFT lv_row RIGHT DELETING TRAILING space.
SHIFT lv_row LEFT DELETING LEADING space.
CONCATENATE lv_column_end lv_row
INTO range_to.
CONCATENATE range_from range_to INTO lv_merge_range
SEPARATED BY &apos;:&apos;.
APPEND lv_merge_range TO merge_range.
ENDWHILE.
* ENDLOOP.
* READ TABLE sheet_content_merge ASSIGNING &lt;fs_sheet_content&gt; INDEX 1.
* IF sy-subrc EQ 0 AND &lt;fs_sheet_content&gt; IS ASSIGNED.
* lv_column_start = zcl_excel_common=&gt;convert_column2alpha( &lt;fs_sheet_content&gt;-cell_column ).
* lv_row = &lt;fs_sheet_content&gt;-cell_row.
* SHIFT lv_column_start RIGHT DELETING TRAILING space.
* SHIFT lv_column_start LEFT DELETING LEADING space.
* SHIFT lv_row RIGHT DELETING TRAILING space.
* SHIFT lv_row LEFT DELETING LEADING space.
* CONCATENATE lv_column_start lv_row
* INTO range_from.
* ENDIF.
* READ TABLE sheet_content_merge ASSIGNING &lt;fs_sheet_content&gt; INDEX 2.
* IF sy-subrc EQ 0 AND &lt;fs_sheet_content&gt; IS ASSIGNED.
* lv_column_end = zcl_excel_common=&gt;convert_column2alpha( &lt;fs_sheet_content&gt;-cell_column ).
* SHIFT lv_column_end RIGHT DELETING TRAILING space.
* SHIFT lv_column_end LEFT DELETING LEADING space.
* CONCATENATE lv_column_end lv_row
* INTO range_to.
* ENDIF.
* IF range_from NE space AND range_to NE space.
* CONCATENATE range_from range_to INTO ep_merge_range
* SEPARATED BY &apos;:&apos;.
* ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_RANGES_ITERATOR" VERSION="1" LANGU="E" DESCRIPT="Get ranges iterator" EXPOSURE="2" STATE="1" EDITORDER="38 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_RANGES_ITERATOR" SCONAME="EO_ITERATOR" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION_ITERATOR"/>
<source>method GET_RANGES_ITERATOR.
eo_iterator = me-&gt;ranges-&gt;get_iterator( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ROW_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Get row dimension at a specific row" EXPOSURE="2" STATE="1" EDITORDER="39 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ROW_DIMENSION" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INT4"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ROW_DIMENSION" SCONAME="R_ROW_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Worksheet ColumnDimension" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET_ROWDIMENSI"/>
<source>METHOD GET_ROW_DIMENSION.
FIELD-SYMBOLS: &lt;ls_row_dimension&gt; LIKE LINE OF me-&gt;row_dimensions.
DATA: ls_row_dimension LIKE LINE OF me-&gt;row_dimensions.
READ TABLE me-&gt;row_dimensions ASSIGNING &lt;ls_row_dimension&gt;
WITH TABLE KEY row = ip_row.
IF NOT &lt;ls_row_dimension&gt; IS ASSIGNED.
CREATE OBJECT r_row_dimension
EXPORTING
ip_index = ip_row.
ls_row_dimension-row = ip_row.
ls_row_dimension-row_dimension = r_row_dimension.
INSERT ls_row_dimension INTO TABLE me-&gt;row_dimensions.
ELSE.
r_row_dimension = &lt;ls_row_dimension&gt;-row_dimension.
ENDIF.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ROW_DIMENSIONS" VERSION="1" LANGU="E" DESCRIPT="Get row dimensions" EXPOSURE="2" STATE="1" EDITORDER="40 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ROW_DIMENSIONS" SCONAME="R_ROW_DIMENSION" VERSION="1" LANGU="E" DESCRIPT="Collection of column dimensions" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_T_WORKSHEET_ROWDIMENSIO"/>
<source>METHOD get_row_dimensions.
r_row_dimension[] = me-&gt;row_dimensions[].
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ROW_OUTLINES" VERSION="1" LANGU="E" DESCRIPT="Get all outlines for rows" EXPOSURE="2" STATE="1" EDITORDER="37 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_ROW_OUTLINES" SCONAME="RT_ROW_OUTLINES" VERSION="1" LANGU="E" DESCRIPT="All row outlines ( sorted table )" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="MTY_TS_OUTLINES_ROW"/>
<source>METHOD get_row_outlines.
rt_row_outlines = me-&gt;mt_row_outlines.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TABCOLOR" VERSION="1" LANGU="E" DESCRIPT="get tabcolor" EXPOSURE="2" STATE="1" EDITORDER="41 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TABCOLOR" SCONAME="EV_TABCOLOR" VERSION="1" LANGU="E" DESCRIPT="Color ARGB" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_S_TABCOLOR"/>
<source>method GET_TABCOLOR.
ev_tabcolor = me-&gt;tabcolor.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TABLES_ITERATOR" VERSION="1" LANGU="E" DESCRIPT="Get iterator for tables collection" EXPOSURE="2" STATE="1" EDITORDER="42 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TABLES_ITERATOR" SCONAME="EO_ITERATOR" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="CL_OBJECT_COLLECTION_ITERATOR"/>
<source>method GET_TABLES_ITERATOR.
eo_iterator = tables-&gt;if_object_collection~get_iterator( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TABLES_SIZE" VERSION="1" LANGU="E" DESCRIPT="Gets the size of tables collection" EXPOSURE="2" STATE="1" EDITORDER="43 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TABLES_SIZE" SCONAME="EP_SIZE" VERSION="1" LANGU="E" DESCRIPT="Size" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="I"/>
<source>method GET_TABLES_SIZE.
ep_size = tables-&gt;if_object_collection~size( ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TITLE" VERSION="1" LANGU="E" DESCRIPT="Get WorkSheet Title" EXPOSURE="2" STATE="1" EDITORDER="44 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TITLE" SCONAME="IP_ESCAPED" VERSION="1" LANGU="E" DESCRIPT="Return escaped?" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PARVALUE="&apos;&apos;"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_TITLE" SCONAME="EP_TITLE" VERSION="1" LANGU="E" DESCRIPT="Title" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_SHEET_TITLE"/>
<source>method GET_TITLE.
DATA lv_value TYPE string.
IF ip_escaped EQ abap_true.
lv_value = me-&gt;title.
ep_title = zcl_excel_common=&gt;escape_string( lv_value ).
ELSE.
ep_title = me-&gt;title.
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_VALUE_TYPE" VERSION="1" LANGU="E" DESCRIPT="Get abap type kind and apply conversion routine" EXPOSURE="0" STATE="1" EDITORDER="3 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_VALUE_TYPE" SCONAME="IP_VALUE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_VALUE_TYPE" SCONAME="EP_VALUE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="GET_VALUE_TYPE" SCONAME="EP_VALUE_TYPE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ABAP_TYPEKIND"/>
<source>method GET_VALUE_TYPE.
DATA: lo_addit TYPE REF TO cl_abap_elemdescr,
ls_dfies TYPE dfies,
l_function TYPE funcname,
l_value(50) TYPE c.
ep_value = ip_value.
ep_value_type = cl_abap_typedescr=&gt;typekind_string. &quot; Thats our default if something goes wrong.
TRY.
lo_addit ?= cl_abap_typedescr=&gt;describe_by_data( ip_value ).
CATCH cx_sy_move_cast_error.
CLEAR lo_addit.
ENDTRY.
IF lo_addit IS BOUND.
lo_addit-&gt;get_ddic_field( RECEIVING p_flddescr = ls_dfies
EXCEPTIONS not_found = 1
no_ddic_type = 2
OTHERS = 3 ) .
IF sy-subrc = 0.
ep_value_type = ls_dfies-inttype.
IF ls_dfies-convexit IS NOT INITIAL.
* We need to convert with output conversion function
CONCATENATE &apos;CONVERSION_EXIT_&apos; ls_dfies-convexit &apos;_OUTPUT&apos; INTO l_function.
SELECT SINGLE funcname INTO l_function
FROM tfdir
WHERE funcname = l_function.
IF sy-subrc = 0.
CALL FUNCTION l_function
EXPORTING
input = ip_value
IMPORTING
* LONG_TEXT =
output = l_value
* SHORT_TEXT =
EXCEPTIONS
OTHERS = 1.
IF sy-subrc &lt;&gt; 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
ep_value = l_value.
ENDIF.
ENDIF.
ENDIF.
ELSE.
ep_value_type = lo_addit-&gt;get_data_type_kind( ip_value ).
ENDIF.
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="IS_CELL_MERGED" VERSION="1" LANGU="E" DESCRIPT="Checks if a cell is merged" EXPOSURE="2" STATE="1" EDITORDER="45 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="IS_CELL_MERGED" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="IS_CELL_MERGED" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="IS_CELL_MERGED" SCONAME="RP_IS_MERGED" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ABAP_BOOL"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="IS_CELL_MERGED" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method IS_CELL_MERGED.
DATA lt_merge_range TYPE string_table.
FIELD-SYMBOLS &lt;lv_merge_range&gt; LIKE LINE OF lt_merge_range.
lt_merge_range = me-&gt;get_merge( ).
LOOP AT lt_merge_range ASSIGNING &lt;lv_merge_range&gt;.
rp_is_merged = zcl_excel_common=&gt;is_cell_in_range(
ip_column = ip_column
ip_row = ip_row
ip_range = &lt;lv_merge_range&gt; ).
IF rp_is_merged = abap_true.
EXIT.
ENDIF.
ENDLOOP.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="PRINT_TITLE_SET_RANGE" VERSION="1" LANGU="E" DESCRIPT="Update range for print title" EXPOSURE="0" STATE="1" EDITORDER="4 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<source>method PRINT_TITLE_SET_RANGE.
*--------------------------------------------------------------------*
* issue#235 - repeat rows/columns
* - Stefan Schmoecker, 2012-12-02
*--------------------------------------------------------------------*
DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator,
lo_range TYPE REF TO zcl_excel_range,
lv_repeat_range_sheetname TYPE string,
lv_repeat_range_col TYPE string,
lv_row_char_from TYPE char10,
lv_row_char_to TYPE char10,
lv_repeat_range_row TYPE string,
lv_repeat_range TYPE string.
*--------------------------------------------------------------------*
* Get range that represents printarea
* if non-existant, create it
*--------------------------------------------------------------------*
lo_range_iterator = me-&gt;get_ranges_iterator( ).
WHILE lo_range_iterator-&gt;has_next( ) = abap_true.
lo_range ?= lo_range_iterator-&gt;get_next( ).
IF lo_range-&gt;name = zif_excel_sheet_printsettings=&gt;gcv_print_title_name.
EXIT. &quot; Found it
ENDIF.
CLEAR lo_range.
ENDWHILE.
IF me-&gt;print_title_col_from IS INITIAL AND
me-&gt;print_title_row_from IS INITIAL.
*--------------------------------------------------------------------*
* No print titles are present,
*--------------------------------------------------------------------*
IF lo_range IS BOUND.
me-&gt;ranges-&gt;remove( lo_range ).
ENDIF.
ELSE.
*--------------------------------------------------------------------*
* Print titles are present,
*--------------------------------------------------------------------*
IF lo_range IS NOT BOUND.
lo_range = me-&gt;add_new_range( ).
lo_range-&gt;name = zif_excel_sheet_printsettings=&gt;gcv_print_title_name.
ENDIF.
lv_repeat_range_sheetname = me-&gt;get_title( ).
lv_repeat_range_sheetname = zcl_excel_common=&gt;escape_string( lv_repeat_range_sheetname ).
*--------------------------------------------------------------------*
* Repeat-columns
*--------------------------------------------------------------------*
IF me-&gt;print_title_col_from IS NOT INITIAL.
CONCATENATE lv_repeat_range_sheetname
&apos;!$&apos; me-&gt;print_title_col_from
&apos;:$&apos; me-&gt;print_title_col_to
INTO lv_repeat_range_col.
ENDIF.
*--------------------------------------------------------------------*
* Repeat-rows
*--------------------------------------------------------------------*
IF me-&gt;print_title_row_from IS NOT INITIAL.
lv_row_char_from = me-&gt;print_title_row_from.
lv_row_char_to = me-&gt;print_title_row_to.
CONCATENATE &apos;!$&apos; lv_row_char_from
&apos;:$&apos; lv_row_char_to
INTO lv_repeat_range_row.
CONDENSE lv_repeat_range_row NO-GAPS.
CONCATENATE lv_repeat_range_sheetname
lv_repeat_range_row
INTO lv_repeat_range_row.
ENDIF.
*--------------------------------------------------------------------*
* Concatenate repeat-rows and columns
*--------------------------------------------------------------------*
IF lv_repeat_range_col IS INITIAL.
lv_repeat_range = lv_repeat_range_row.
ELSEIF lv_repeat_range_row IS INITIAL.
lv_repeat_range = lv_repeat_range_col.
ELSE.
CONCATENATE lv_repeat_range_col lv_repeat_range_row
INTO lv_repeat_range SEPARATED BY &apos;,&apos;.
ENDIF.
lo_range-&gt;set_range_value( lv_repeat_range ).
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" VERSION="1" LANGU="E" DESCRIPT="Set cell value" EXPOSURE="2" STATE="1" EDITORDER="46 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_VALUE" VERSION="1" LANGU="E" DESCRIPT="Cell Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_FORMULA" VERSION="1" LANGU="E" DESCRIPT="Cell Formula" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_FORMULA" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_STYLE" VERSION="1" LANGU="E" DESCRIPT="Single-Character Indicator" CMPTYPE="1" MTDTYPE="0" EDITORDER="5 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_STYLE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_HYPERLINK" VERSION="1" LANGU="E" DESCRIPT="Hyperlink" CMPTYPE="1" MTDTYPE="0" EDITORDER="6 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL_HYPERLINK" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_DATA_TYPE" VERSION="1" LANGU="E" DESCRIPT="Cell data type" CMPTYPE="1" MTDTYPE="0" EDITORDER="7 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_DATA_TYPE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="IP_ABAP_TYPE" VERSION="1" LANGU="E" DESCRIPT="ABAP data type" CMPTYPE="1" MTDTYPE="0" EDITORDER="8 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ABAP_TYPEKIND" PAROPTIONL="X"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_CELL.
DATA: lv_column TYPE zexcel_cell_column,
ls_sheet_content TYPE zexcel_s_cell_data,
lv_row_alpha TYPE string,
lv_col_alpha TYPE zexcel_cell_column_alpha,
lv_value TYPE zexcel_cell_value,
lv_data_type TYPE zexcel_cell_data_type,
lv_value_type TYPE abap_typekind,
lo_style TYPE REF TO zcl_excel_style,
lv_style_guid TYPE zexcel_cell_style,
lo_addit TYPE REF TO cl_abap_elemdescr,
lo_value TYPE REF TO data,
lo_value_new TYPE REF TO data.
FIELD-SYMBOLS: &lt;fs_sheet_content&gt; TYPE zexcel_s_cell_data,
&lt;fs_numeric&gt; TYPE numeric,
&lt;fs_date&gt; TYPE d,
&lt;fs_time&gt; TYPE t,
&lt;fs_value&gt; TYPE simple.
IF ip_value IS NOT SUPPLIED AND ip_formula IS NOT SUPPLIED.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Please provide the value or formula&apos;.
ENDIF.
* Begin of change issue #152 - don&apos;t touch exisiting style if only value is passed
* lv_style_guid = ip_style.
lv_column = zcl_excel_common=&gt;convert_column2int( ip_column ).
READ TABLE sheet_content ASSIGNING &lt;fs_sheet_content&gt; WITH TABLE KEY cell_row = ip_row &quot; Changed to access via table key , Stefan Schmöcker, 2013-08-03
cell_column = lv_column.
IF sy-subrc = 0.
IF ip_style IS INITIAL.
&quot; If no style is provided as method-parameter and cell is found use cell&apos;s current style
lv_style_guid = &lt;fs_sheet_content&gt;-cell_style.
ELSE.
&quot; Style provided as method-parameter --&gt; use this
lv_style_guid = ip_style.
ENDIF.
ELSE.
&quot; No cell found --&gt; use supplied style even if empty
lv_style_guid = ip_style.
ENDIF.
* End of change issue #152 - don&apos;t touch exisiting style if only value is passed
IF ip_value IS SUPPLIED.
&quot;if data type is passed just write the value. Otherwise map abap type to excel and perform conversion
&quot;IP_DATA_TYPE is passed by excel reader so source types are preserved
*First we get reference into local var.
CREATE DATA lo_value LIKE ip_value.
ASSIGN lo_value-&gt;* TO &lt;fs_value&gt;.
&lt;fs_value&gt; = ip_value.
IF ip_data_type IS SUPPLIED.
IF ip_abap_type IS NOT SUPPLIED.
get_value_type( EXPORTING ip_value = ip_value
IMPORTING ep_value = &lt;fs_value&gt; ) .
ENDIF.
lv_value = &lt;fs_value&gt;.
lv_data_type = ip_data_type.
ELSE.
IF ip_abap_type IS SUPPLIED.
lv_value_type = ip_abap_type.
ELSE.
get_value_type( EXPORTING ip_value = ip_value
IMPORTING ep_value = &lt;fs_value&gt;
ep_value_type = lv_value_type ).
ENDIF.
CASE lv_value_type.
WHEN cl_abap_typedescr=&gt;typekind_int OR cl_abap_typedescr=&gt;typekind_int1 OR cl_abap_typedescr=&gt;typekind_int2.
lo_addit = cl_abap_elemdescr=&gt;get_i( ).
CREATE DATA lo_value_new TYPE HANDLE lo_addit.
ASSIGN lo_value_new-&gt;* TO &lt;fs_numeric&gt;.
IF sy-subrc = 0.
&lt;fs_numeric&gt; = &lt;fs_value&gt;.
lv_value = zcl_excel_common=&gt;number_to_excel_string( ip_value = &lt;fs_numeric&gt; ).
ENDIF.
WHEN cl_abap_typedescr=&gt;typekind_float OR cl_abap_typedescr=&gt;typekind_packed.
lo_addit = cl_abap_elemdescr=&gt;get_f( ).
CREATE DATA lo_value_new TYPE HANDLE lo_addit.
ASSIGN lo_value_new-&gt;* TO &lt;fs_numeric&gt;.
IF sy-subrc = 0.
&lt;fs_numeric&gt; = &lt;fs_value&gt;.
lv_value = zcl_excel_common=&gt;number_to_excel_string( ip_value = &lt;fs_numeric&gt; ).
ENDIF.
WHEN cl_abap_typedescr=&gt;typekind_char OR cl_abap_typedescr=&gt;typekind_string OR cl_abap_typedescr=&gt;typekind_num OR
cl_abap_typedescr=&gt;typekind_hex.
lv_value = &lt;fs_value&gt;.
lv_data_type = &apos;s&apos;.
WHEN cl_abap_typedescr=&gt;typekind_date.
lo_addit = cl_abap_elemdescr=&gt;get_d( ).
CREATE DATA lo_value_new TYPE HANDLE lo_addit.
ASSIGN lo_value_new-&gt;* TO &lt;fs_date&gt;.
IF sy-subrc = 0.
&lt;fs_date&gt; = &lt;fs_value&gt;.
lv_value = zcl_excel_common=&gt;date_to_excel_string( ip_value = &lt;fs_date&gt; ) .
ENDIF.
* Begin of change issue #152 - don&apos;t touch exisiting style if only value is passed
* Moved to end of routine - apply date-format even if other styleinformation is passed
* IF ip_style IS NOT SUPPLIED. &quot;get default date format in case parameter is initial
* lo_style = excel-&gt;add_new_style( ).
* lo_style-&gt;number_format-&gt;format_code = get_default_excel_date_format( ).
* lv_style_guid = lo_style-&gt;get_guid( ).
* ENDIF.
* End of change issue #152 - don&apos;t touch exisiting style if only value is passed
WHEN cl_abap_typedescr=&gt;typekind_time.
lo_addit = cl_abap_elemdescr=&gt;get_t( ).
CREATE DATA lo_value_new TYPE HANDLE lo_addit.
ASSIGN lo_value_new-&gt;* TO &lt;fs_time&gt;.
IF sy-subrc = 0.
&lt;fs_time&gt; = &lt;fs_value&gt;.
lv_value = zcl_excel_common=&gt;time_to_excel_string( ip_value = &lt;fs_time&gt; ).
ENDIF.
* Begin of change issue #152 - don&apos;t touch exisiting style if only value is passed
* Moved to end of routine - apply time-format even if other styleinformation is passed
* IF ip_style IS NOT SUPPLIED. &quot;get default time format for user in case parameter is initial
* lo_style = excel-&gt;add_new_style( ).
* lo_style-&gt;number_format-&gt;format_code = zcl_excel_style_number_format=&gt;c_format_date_time6.
* lv_style_guid = lo_style-&gt;get_guid( ).
* ENDIF.
* End of change issue #152 - don&apos;t touch exisiting style if only value is passed
WHEN OTHERS.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Invalid data type of input value&apos;.
ENDCASE.
ENDIF.
ENDIF.
IF ip_hyperlink IS BOUND.
ip_hyperlink-&gt;set_cell_reference( ip_column = ip_column
ip_row = ip_row ).
me-&gt;hyperlinks-&gt;add( ip_hyperlink ).
ENDIF.
* Begin of change issue #152 - don&apos;t touch exisiting style if only value is passed
* Read table moved up, so that current style may be evaluated
* lv_column = zcl_excel_common=&gt;convert_column2int( ip_column ).
* READ TABLE sheet_content ASSIGNING &lt;fs_sheet_content&gt; WITH KEY cell_row = ip_row
* cell_column = lv_column.
*
* IF sy-subrc EQ 0.
IF &lt;fs_sheet_content&gt; IS ASSIGNED.
* End of change issue #152 - don&apos;t touch exisiting style if only value is passed
&lt;fs_sheet_content&gt;-cell_value = lv_value.
&lt;fs_sheet_content&gt;-cell_formula = ip_formula.
&lt;fs_sheet_content&gt;-cell_style = lv_style_guid.
&lt;fs_sheet_content&gt;-data_type = lv_data_type.
ELSE.
ls_sheet_content-cell_row = ip_row.
ls_sheet_content-cell_column = lv_column.
ls_sheet_content-cell_value = lv_value.
ls_sheet_content-cell_formula = ip_formula.
ls_sheet_content-cell_style = lv_style_guid.
ls_sheet_content-data_type = lv_data_type.
lv_row_alpha = ip_row.
* SHIFT lv_row_alpha RIGHT DELETING TRAILING space.&quot;del #152 - replaced with condense - should be faster
* SHIFT lv_row_alpha LEFT DELETING LEADING space. &quot;del #152 - replaced with condense - should be faster
CONDENSE lv_row_alpha NO-GAPS. &quot;ins #152 - replaced 2 shifts - should be faster
lv_col_alpha = zcl_excel_common=&gt;convert_column2alpha( ip_column ). &quot; issue #155 - less restrictive typing for ip_column
CONCATENATE lv_col_alpha lv_row_alpha INTO ls_sheet_content-cell_coords. &quot; issue #155 - less restrictive typing for ip_column
INSERT ls_sheet_content INTO TABLE sheet_content ASSIGNING &lt;fs_sheet_content&gt;. &quot;ins #152 - Now &lt;fs_sheet_content&gt; always holds the data
* APPEND ls_sheet_content TO sheet_content.
* SORT sheet_content BY cell_row cell_column.
&quot; me-&gt;update_dimension_range( ).
ENDIF.
* Begin of change issue #152 - don&apos;t touch exisiting style if only value is passed
* For Date- or Timefields change the formatcode if nothing is set yet
* Enhancement option: Check if existing formatcode is a date/ or timeformat
* If not, use default
DATA: lo_format_code_datetime TYPE zexcel_number_format.
DATA: stylemapping TYPE zexcel_s_stylemapping.
CASE lv_value_type.
WHEN cl_abap_typedescr=&gt;typekind_date.
TRY.
stylemapping = me-&gt;excel-&gt;get_style_to_guid( &lt;fs_sheet_content&gt;-cell_style ).
CATCH zcx_excel .
ENDTRY.
IF stylemapping-complete_stylex-number_format-format_code IS INITIAL OR
stylemapping-complete_style-number_format-format_code IS INITIAL.
lo_format_code_datetime = zcl_excel_style_number_format=&gt;c_format_date_std.
ELSE.
lo_format_code_datetime = stylemapping-complete_style-number_format-format_code.
ENDIF.
me-&gt;change_cell_style( ip_column = ip_column
ip_row = ip_row
ip_number_format_format_code = lo_format_code_datetime ).
WHEN cl_abap_typedescr=&gt;typekind_time.
TRY.
stylemapping = me-&gt;excel-&gt;get_style_to_guid( &lt;fs_sheet_content&gt;-cell_style ).
CATCH zcx_excel .
ENDTRY.
IF stylemapping-complete_stylex-number_format-format_code IS INITIAL OR
stylemapping-complete_style-number_format-format_code IS INITIAL.
lo_format_code_datetime = zcl_excel_style_number_format=&gt;c_format_date_time6.
ELSE.
lo_format_code_datetime = stylemapping-complete_style-number_format-format_code.
ENDIF.
me-&gt;change_cell_style( ip_column = ip_column
ip_row = ip_row
ip_number_format_format_code = lo_format_code_datetime ).
ENDCASE.
* End of change issue #152 - don&apos;t touch exisiting style if only value is passed
* Fix issue #162
lv_value = ip_value.
IF lv_value CS cl_abap_char_utilities=&gt;cr_lf.
me-&gt;change_cell_style( ip_column = ip_column
ip_row = ip_row
ip_alignment_wraptext = abap_true ).
ENDIF.
* End of Fix issue #162
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_FORMULA" VERSION="1" LANGU="E" DESCRIPT="Set cell formula" EXPOSURE="2" STATE="1" EDITORDER="48 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_FORMULA" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_FORMULA" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_FORMULA" SCONAME="IP_FORMULA" VERSION="1" LANGU="E" DESCRIPT="Cell Formula" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_FORMULA"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_FORMULA" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_CELL_FORMULA.
DATA:
lv_column TYPE zexcel_cell_column,
ls_sheet_content LIKE LINE OF me-&gt;sheet_content.
FIELD-SYMBOLS:
&lt;sheet_content&gt; LIKE LINE OF me-&gt;sheet_content.
*--------------------------------------------------------------------*
* Get cell to set formula into
*--------------------------------------------------------------------*
lv_column = zcl_excel_common=&gt;convert_column2int( ip_column ).
READ TABLE me-&gt;sheet_content ASSIGNING &lt;sheet_content&gt; WITH TABLE KEY cell_row = ip_row
cell_column = lv_column.
IF sy-subrc &lt;&gt; 0. &quot; Create new entry in sheet_content if necessary
CHECK ip_formula IS INITIAL. &quot; no need to create new entry in sheet_content when no formula is passed
ls_sheet_content-cell_row = ip_row.
ls_sheet_content-cell_column = lv_column.
INSERT ls_sheet_content INTO TABLE me-&gt;sheet_content ASSIGNING &lt;sheet_content&gt;.
ENDIF.
*--------------------------------------------------------------------*
* Fieldsymbol now holds the relevant cell
*--------------------------------------------------------------------*
&lt;sheet_content&gt;-cell_formula = ip_formula.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_STYLE" VERSION="1" LANGU="E" DESCRIPT="Set cell style" EXPOSURE="2" STATE="1" EDITORDER="49 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_STYLE" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_STYLE" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_STYLE" SCONAME="IP_STYLE" VERSION="1" LANGU="E" DESCRIPT="Single-Character Indicator" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_STYLE"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_CELL_STYLE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_CELL_STYLE.
DATA: lv_column TYPE zexcel_cell_column,
ls_sheet_content TYPE zexcel_s_cell_data,
lv_row_alpha TYPE string,
lo_style TYPE REF TO zcl_excel_style,
lv_style_guid TYPE zexcel_cell_style.
FIELD-SYMBOLS: &lt;fs_sheet_content&gt; TYPE zexcel_s_cell_data.
lv_style_guid = ip_style.
lv_column = zcl_excel_common=&gt;convert_column2int( ip_column ).
READ TABLE sheet_content ASSIGNING &lt;fs_sheet_content&gt; WITH KEY cell_row = ip_row
cell_column = lv_column.
IF sy-subrc EQ 0.
&lt;fs_sheet_content&gt;-cell_style = lv_style_guid.
ELSE.
set_cell( ip_column = ip_column ip_row = ip_row ip_value = &apos;&apos; ip_style = ip_style ).
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_COLUMN_WIDTH" VERSION="1" LANGU="E" DESCRIPT="Set column width" EXPOSURE="2" STATE="1" EDITORDER="51 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_COLUMN_WIDTH" SCONAME="IP_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_COLUMN_WIDTH" SCONAME="IP_WIDTH_FIX" VERSION="1" LANGU="E" DESCRIPT="A positive value will set column width" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE" PARVALUE="0"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_COLUMN_WIDTH" SCONAME="IP_WIDTH_AUTOSIZE" VERSION="1" LANGU="E" DESCRIPT="Autosize column" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="FLAG" PARVALUE="&apos;X&apos;"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_COLUMN_WIDTH" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_COLUMN_WIDTH.
DATA: column_dimension TYPE REF TO zcl_excel_worksheet_columndime.
DATA: width TYPE float.
column_dimension = me-&gt;get_column_dimension( ip_column ).
* if a fix size is supplied use this
IF ip_width_fix IS SUPPLIED.
TRY.
width = ip_width_fix.
IF width &lt;= 0.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Please supply a positive number as column-width&apos;.
ENDIF.
column_dimension-&gt;set_width( width ).
EXIT.
CATCH cx_sy_conversion_no_number.
* Strange stuff passed --&gt; raise error
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Unable to interpret supplied input as number&apos;.
ENDTRY.
ENDIF.
* If we get down to here, we have to use whatever is found in autosize.
column_dimension-&gt;set_auto_size( ip_width_autosize ).
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_DEFAULT_EXCEL_DATE_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Sets default date format" EXPOSURE="2" STATE="1" EDITORDER="52 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_DEFAULT_EXCEL_DATE_FORMAT" SCONAME="IP_DEFAULT_EXCEL_DATE_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Default date format" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_DEFAULT_EXCEL_DATE_FORMAT" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_DEFAULT_EXCEL_DATE_FORMAT.
IF ip_default_excel_date_format IS INITIAL.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Default date format cannot be blank&apos;.
ENDIF.
default_excel_date_format = ip_default_excel_date_format.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_MERGE" VERSION="1" LANGU="E" DESCRIPT="Set the merge range" EXPOSURE="2" STATE="1" EDITORDER="53 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_MERGE" SCONAME="IP_COLUMN_START" VERSION="1" LANGU="E" DESCRIPT="Cell Column Start" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN_ALPHA" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_MERGE" SCONAME="IP_COLUMN_END" VERSION="1" LANGU="E" DESCRIPT="Cell Column End" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN_ALPHA" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_MERGE" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_MERGE" SCONAME="IP_ROW_TO" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW" PAROPTIONL="X"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_MERGE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_MERGE.
DATA: lv_column_start TYPE zexcel_cell_column,
lv_column_end TYPE zexcel_cell_column,
ls_sheet_content TYPE zexcel_s_cell_data,
lv_row_alpha TYPE string.
FIELD-SYMBOLS: &lt;fs_sheet_content&gt; TYPE zexcel_s_cell_data.
lv_column_start = zcl_excel_common=&gt;convert_column2int( ip_column_start ).
lv_column_end = zcl_excel_common=&gt;convert_column2int( ip_column_end ).
ls_sheet_content-cell_row = ip_row.
ls_sheet_content-cell_column = lv_column_start.
lv_row_alpha = ip_row.
SHIFT lv_row_alpha RIGHT DELETING TRAILING space.
SHIFT lv_row_alpha LEFT DELETING LEADING space.
CONCATENATE ip_column_start lv_row_alpha INTO ls_sheet_content-cell_coords.
INSERT ls_sheet_content INTO TABLE sheet_content_merge.
ls_sheet_content-cell_column = lv_column_end.
IF ip_row_to IS SUPPLIED.
ls_sheet_content-cell_row = ip_row_to.
lv_row_alpha = ip_row_to.
ELSE.
lv_row_alpha = ip_row.
ls_sheet_content-cell_row = ip_row.
ENDIF.
SHIFT lv_row_alpha RIGHT DELETING TRAILING space.
SHIFT lv_row_alpha LEFT DELETING LEADING space.
CONCATENATE ip_column_end lv_row_alpha INTO ls_sheet_content-cell_coords.
INSERT ls_sheet_content INTO TABLE sheet_content_merge.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_PRINT_GRIDLINES" VERSION="1" LANGU="E" DESCRIPT="Set print gridlines" EXPOSURE="2" STATE="1" EDITORDER="55 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_PRINT_GRIDLINES" SCONAME="I_PRINT_GRIDLINES" VERSION="1" LANGU="E" DESCRIPT="Print Gridlines" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_PRINT_GRIDLINES"/>
<source>method SET_PRINT_GRIDLINES.
me-&gt;print_gridlines = i_print_gridlines.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_HEIGHT" VERSION="1" LANGU="E" DESCRIPT="Set row height" EXPOSURE="2" STATE="1" EDITORDER="56 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_HEIGHT" SCONAME="IP_ROW" VERSION="1" LANGU="E" DESCRIPT="Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_HEIGHT" SCONAME="IP_HEIGHT_FIX" VERSION="1" LANGU="E" DESCRIPT="A positive value will set row height" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_HEIGHT" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_ROW_HEIGHT.
DATA: row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi.
DATA: height TYPE float.
row_dimension = me-&gt;get_row_dimension( ip_row ).
* if a fix size is supplied use this
TRY.
height = ip_height_fix.
IF height &lt;= 0.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Please supply a positive number as row-height&apos;.
ENDIF.
row_dimension-&gt;set_row_height( height ).
EXIT.
CATCH cx_sy_conversion_no_number.
* Strange stuff passed --&gt; raise error
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Unable to interpret supplied input as number&apos;.
ENDTRY.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_OUTLINE" VERSION="1" LANGU="E" DESCRIPT="Add/change an outline for rows" EXPOSURE="2" STATE="1" EDITORDER="54 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_OUTLINE" SCONAME="IV_ROW_FROM" VERSION="1" LANGU="E" DESCRIPT="First line of outline" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_OUTLINE" SCONAME="IV_ROW_TO" VERSION="1" LANGU="E" DESCRIPT="Last line of outline" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="I"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_OUTLINE" SCONAME="IV_COLLAPSED" VERSION="1" LANGU="E" DESCRIPT="Is this outline collapsed" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ABAP_BOOL"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_ROW_OUTLINE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>METHOD set_row_outline.
DATA: ls_row_outline LIKE LINE OF me-&gt;mt_row_outlines.
FIELD-SYMBOLS: &lt;ls_row_outline&gt; LIKE LINE OF me-&gt;mt_row_outlines.
READ TABLE me-&gt;mt_row_outlines ASSIGNING &lt;ls_row_outline&gt; WITH TABLE KEY row_from = iv_row_from
row_to = iv_row_to.
IF sy-subrc &lt;&gt; 0.
IF iv_row_from &lt;= 0.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;First row of outline must be a positive number&apos;.
ENDIF.
IF iv_row_to &lt; iv_row_from.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Last row of outline may not be less than first line of outline&apos;.
ENDIF.
ls_row_outline-row_from = iv_row_from.
ls_row_outline-row_to = iv_row_to.
INSERT ls_row_outline INTO TABLE me-&gt;mt_row_outlines ASSIGNING &lt;ls_row_outline&gt;.
ENDIF.
CASE iv_collapsed.
WHEN abap_true
OR abap_false.
&lt;ls_row_outline&gt;-collapsed = iv_collapsed.
WHEN OTHERS.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Unknown collapse state&apos;.
ENDCASE.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_SHOW_GRIDLINES" VERSION="1" LANGU="E" DESCRIPT="Set show gridlines" EXPOSURE="2" STATE="1" EDITORDER="57 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_SHOW_GRIDLINES" SCONAME="I_SHOW_GRIDLINES" VERSION="1" LANGU="E" DESCRIPT="Show Gridlines" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_SHOW_GRIDLINES"/>
<source>method SET_SHOW_GRIDLINES.
me-&gt;show_gridlines = i_show_gridlines.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_SHOW_ROWCOLHEADERS" VERSION="1" LANGU="E" DESCRIPT="Set show colum row headers" EXPOSURE="2" STATE="1" EDITORDER="58 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_SHOW_ROWCOLHEADERS" SCONAME="I_SHOW_ROWCOLHEADERS" VERSION="1" LANGU="E" DESCRIPT="Show Gridlines" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_SHOW_ROWCOLHEADER"/>
<source>method SET_SHOW_ROWCOLHEADERS.
me-&gt;show_rowcolheaders = i_show_rowcolheaders.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABCOLOR" VERSION="1" LANGU="E" DESCRIPT="Set tabcolor" EXPOSURE="2" STATE="1" EDITORDER="59 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABCOLOR" SCONAME="IV_TABCOLOR" VERSION="1" LANGU="E" DESCRIPT="Tabcolor" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_TABCOLOR"/>
<source>method SET_TABCOLOR.
me-&gt;tabcolor = iv_tabcolor.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" VERSION="1" LANGU="E" DESCRIPT="Set cell value from a table" EXPOSURE="2" STATE="1" EDITORDER="60 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_TABLE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STANDARD TABLE"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_HDR_STYLE" VERSION="1" LANGU="E" DESCRIPT="Style identifier" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_STYLE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_BODY_STYLE" VERSION="1" LANGU="E" DESCRIPT="Style identifier" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_STYLE" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_TABLE_TITLE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="4 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_TOP_LEFT_COLUMN" VERSION="1" LANGU="E" DESCRIPT="Cell Column" CMPTYPE="1" MTDTYPE="0" EDITORDER="5 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_COLUMN_ALPHA" PARVALUE="&apos;B&apos;"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_TOP_LEFT_ROW" VERSION="1" LANGU="E" DESCRIPT="Cell Row" CMPTYPE="1" MTDTYPE="0" EDITORDER="6 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_CELL_ROW" PARVALUE="3"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_TRANSPOSE" VERSION="1" LANGU="E" DESCRIPT="Transpose table" CMPTYPE="1" MTDTYPE="0" EDITORDER="7 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="XFELD" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="IP_NO_HEADER" VERSION="1" LANGU="E" DESCRIPT="Do not write header" CMPTYPE="1" MTDTYPE="0" EDITORDER="8 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="XFELD" PAROPTIONL="X"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TABLE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_TABLE.
DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr,
lr_data TYPE REF TO data,
ls_newline TYPE REF TO data,
ls_header TYPE x030l,
lt_dfies TYPE ddfields,
lv_row_header TYPE zexcel_cell_row VALUE 2,
lv_col_header TYPE zexcel_cell_column_alpha VALUE &apos;B&apos;,
lv_row_int TYPE zexcel_cell_row,
lv_column_int TYPE zexcel_cell_column,
lv_column_alpha TYPE zexcel_cell_column_alpha,
lv_cell_value TYPE zexcel_cell_value.
FIELD-SYMBOLS: &lt;fs_table_line&gt; TYPE ANY,
&lt;fs_fldval&gt; TYPE ANY,
&lt;fs_dfies&gt; TYPE dfies,
&lt;fs_cell_value&gt; TYPE zexcel_cell_value.
lv_column_int = zcl_excel_common=&gt;convert_column2int( ip_top_left_column ).
lv_row_int = ip_top_left_row.
CREATE DATA lr_data LIKE LINE OF ip_table.
lo_tabdescr ?= cl_abap_structdescr=&gt;describe_by_data_ref( lr_data ).
ls_header = lo_tabdescr-&gt;get_ddic_header( ).
lt_dfies = lo_tabdescr-&gt;get_ddic_field_list( ).
* It is better to loop column by column
LOOP AT lt_dfies ASSIGNING &lt;fs_dfies&gt;.
lv_column_alpha = zcl_excel_common=&gt;convert_column2alpha( lv_column_int ).
IF ip_no_header = abap_false.
&quot; First of all write column header
lv_cell_value = &lt;fs_dfies&gt;-scrtext_m.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_value = lv_cell_value
ip_style = ip_hdr_style ).
IF ip_transpose = abap_true.
ADD 1 TO lv_column_int.
ELSE.
ADD 1 TO lv_row_int.
ENDIF.
ENDIF.
LOOP AT ip_table ASSIGNING &lt;fs_table_line&gt;.
lv_column_alpha = zcl_excel_common=&gt;convert_column2alpha( lv_column_int ).
ASSIGN COMPONENT &lt;fs_dfies&gt;-fieldname OF STRUCTURE &lt;fs_table_line&gt; TO &lt;fs_fldval&gt;.
MOVE &lt;fs_fldval&gt; TO lv_cell_value.
me-&gt;set_cell( ip_column = lv_column_alpha
ip_row = lv_row_int
ip_value = &lt;fs_fldval&gt; &quot;lv_cell_value
ip_style = ip_body_style ).
IF ip_transpose = abap_true.
ADD 1 TO lv_column_int.
ELSE.
ADD 1 TO lv_row_int.
ENDIF.
ENDLOOP.
IF ip_transpose = abap_true.
lv_column_int = zcl_excel_common=&gt;convert_column2int( ip_top_left_column ).
ADD 1 TO lv_row_int.
ELSE.
lv_row_int = ip_top_left_row.
ADD 1 TO lv_column_int.
ENDIF.
ENDLOOP.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TITLE" VERSION="1" LANGU="E" DESCRIPT="Set WorkSheet Title" EXPOSURE="2" STATE="1" EDITORDER="61 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TITLE" SCONAME="IP_TITLE" VERSION="1" LANGU="E" DESCRIPT="Title" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_SHEET_TITLE"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="SET_TITLE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_TITLE.
*--------------------------------------------------------------------*
* ToDos:
* 2do§1 The current coding for replacing a named ranges name
* after renaming a sheet should be checked if it is
* really working if sheetname should be escaped
*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
* issue #230 - Pimp my Code
* - Stefan Schmoecker, (wip ) 2012-12-08
* - ...
* changes: aligning code
* message made to support multilinguality
*--------------------------------------------------------------------*
* issue#243 - &apos; is not allowed as first character in sheet title
* - Stefan Schmoecker, 2012-12-02
* changes: added additional check for &apos; as first character
*--------------------------------------------------------------------*
DATA: lo_worksheets_iterator TYPE REF TO cl_object_collection_iterator,
lo_worksheet TYPE REF TO zcl_excel_worksheet,
errormessage TYPE string,
lv_rangesheetname_old TYPE string,
lv_rangesheetname_new TYPE string,
lo_ranges_iterator TYPE REF TO cl_object_collection_iterator,
lo_range TYPE REF TO zcl_excel_range,
lv_range_value TYPE zexcel_range_value,
lv_errormessage TYPE string. &quot; Can&apos;t pass &apos;...&apos;(abc) to exception-class
*--------------------------------------------------------------------*
* Check whether title consists only of allowed characters
* Illegal characters are: / \ [ ] * ? : --&gt; http://msdn.microsoft.com/en-us/library/ff837411.aspx
* Illegal characters not in documentation: &apos; as first character
*--------------------------------------------------------------------*
IF ip_title CA &apos;/\[]*?:&apos;.
lv_errormessage = &apos;Found illegal character in sheetname. List of forbidden characters: /\[]*?:&apos;(402).
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = lv_errormessage.
ENDIF.
IF ip_title IS NOT INITIAL AND ip_title(1) = `&apos;`.
lv_errormessage = &apos;Sheetname may not start with &amp;&apos;(403). &quot; &amp; used instead of &apos; to allow fallbacklanguage
REPLACE &apos;&amp;&apos; IN lv_errormessage WITH `&apos;`.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = lv_errormessage.
ENDIF.
*--------------------------------------------------------------------*
* Check whether title is unique in workbook
*--------------------------------------------------------------------*
lo_worksheets_iterator = me-&gt;excel-&gt;get_worksheets_iterator( ).
WHILE lo_worksheets_iterator-&gt;has_next( ) = &apos;X&apos;.
lo_worksheet ?= lo_worksheets_iterator-&gt;get_next( ).
CHECK me-&gt;guid &lt;&gt; lo_worksheet-&gt;get_guid( ). &quot; Don&apos;t check against itself
IF ip_title = lo_worksheet-&gt;get_title( ). &quot; Not unique --&gt; raise exception
errormessage = &apos;Duplicate sheetname &amp;&apos;.
REPLACE &apos;&amp;&apos; IN errormessage WITH ip_title.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = errormessage.
ENDIF.
ENDWHILE.
*--------------------------------------------------------------------*
* Remember old sheetname and rename sheet to desired name
*--------------------------------------------------------------------*
CONCATENATE me-&gt;title &apos;!&apos; INTO lv_rangesheetname_old.
me-&gt;title = ip_title.
*--------------------------------------------------------------------*
* After changing this worksheet&apos;s title we have to adjust
* all ranges that are referring to this worksheet.
*--------------------------------------------------------------------*
* 2do§1 - Check if the following quickfix is solid
* I fear it isn&apos;t - but this implementation is better then
* nothing at all since it handles a supposed majority of cases
*--------------------------------------------------------------------*
CONCATENATE me-&gt;title &apos;!&apos; INTO lv_rangesheetname_new.
lo_ranges_iterator = me-&gt;excel-&gt;get_ranges_iterator( ).
WHILE lo_ranges_iterator-&gt;has_next( ) = &apos;X&apos;.
lo_range ?= lo_ranges_iterator-&gt;get_next( ).
lv_range_value = lo_range-&gt;get_value( ).
REPLACE ALL OCCURRENCES OF lv_rangesheetname_old IN lv_range_value WITH lv_rangesheetname_new.
IF sy-subrc = 0.
lo_range-&gt;set_range_value( lv_range_value ).
ENDIF.
ENDWHILE.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="UPDATE_DIMENSION_RANGE" VERSION="1" LANGU="E" DESCRIPT="Update dimension range" EXPOSURE="0" STATE="1" EDITORDER="5 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<exception CLSNAME="ZCL_EXCEL_WORKSHEET" CMPNAME="UPDATE_DIMENSION_RANGE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>METHOD update_dimension_range.
DATA: ls_sheet_content TYPE zexcel_s_cell_data,
lt_sheet_content TYPE zexcel_t_cell_data_unsorted,
lv_row_alpha TYPE string,
lv_column_alpha TYPE zexcel_cell_column_alpha.
CHECK sheet_content IS NOT INITIAL.
* update dimension range
lt_sheet_content = sheet_content.
&quot;upper left corner
SORT lt_sheet_content BY cell_row.
READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content.
upper_cell-cell_row = ls_sheet_content-cell_row.
SORT lt_sheet_content BY cell_column.
READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content.
upper_cell-cell_column = ls_sheet_content-cell_column.
lv_row_alpha = upper_cell-cell_row.
lv_column_alpha = zcl_excel_common=&gt;convert_column2alpha( upper_cell-cell_column ).
SHIFT lv_row_alpha RIGHT DELETING TRAILING space.
SHIFT lv_row_alpha LEFT DELETING LEADING space.
CONCATENATE lv_column_alpha lv_row_alpha INTO upper_cell-cell_coords.
&quot;bottom right corner
SORT lt_sheet_content BY cell_row DESCENDING.
READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content.
lower_cell-cell_row = ls_sheet_content-cell_row.
SORT lt_sheet_content BY cell_column DESCENDING.
READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content.
lower_cell-cell_column = ls_sheet_content-cell_column.
lv_row_alpha = lower_cell-cell_row.
lv_column_alpha = zcl_excel_common=&gt;convert_column2alpha( lower_cell-cell_column ).
SHIFT lv_row_alpha RIGHT DELETING TRAILING space.
SHIFT lv_row_alpha LEFT DELETING LEADING space.
CONCATENATE lv_column_alpha lv_row_alpha INTO lower_cell-cell_coords.
ENDMETHOD.</source>
</method>
</CLAS>