abap2xlsx/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET_ROWDIMENSI.slnk
StefanSchmoecker 72a336253d issue #346 2nd part, #278
Changes:
ZCL_EXCEL_WORKSHEET:  New attributes to hold row-outline information
ZCL_EXCEL_WORKSHEET_ROWDIMENSI:  Look at those row-outline information.  Modified methods that refer to outlining
ZCL_EXCEL_WRITER_2007:  Respect new outlining informatino by using the modified methods from rowdimensi,  Also corrected an error that occurs if we have leading or trailing empty rows but information stored in rowdimensions
ZDEMO_EXCEL12:  Modified Demoreport 12 to demonstrate new outlining method
2015-01-03 14:50:25 +01:00

186 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<CLAS CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" VERSION="1" LANGU="E" DESCRIPT="Worksheet RowDimension" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 ">
<localImplementation>*&quot;* local class implementation for public class
*&quot;* use this source file for the implementation part of
*&quot;* local helper classes</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</localTypes>
<localMacros>*&quot;* use this source file for any macro definitions you need
*&quot;* in the implementation part of the class</localMacros>
<typeUsage CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" TYPEGROUP="ABAP" VERSION="1" TPUTYPE="0" EXPLICIT="X"/>
<forwardDeclaration>ABAP</forwardDeclaration>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="COLLAPSED" VERSION="1" LANGU="E" DESCRIPT="Boolean Variable (X=True, -=False, Space=Unknown)" EXPOSURE="0" STATE="1" EDITORDER="5 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="BOOLEAN" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="OUTLINE_LEVEL" VERSION="1" LANGU="E" DESCRIPT="Natural number" EXPOSURE="0" STATE="1" EDITORDER="4 " ATTDECLTYP="0" ATTVALUE="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="INT4" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="ROW_HEIGHT" VERSION="1" LANGU="E" DESCRIPT="Field of type FLTP" EXPOSURE="0" STATE="1" EDITORDER="2 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="FLOAT" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="ROW_INDEX" VERSION="1" LANGU="E" DESCRIPT="Natural number" EXPOSURE="0" STATE="1" EDITORDER="1 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="INT4" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="VISIBLE" VERSION="1" LANGU="E" DESCRIPT="Boolean Variable (X=True, -=False, Space=Unknown)" EXPOSURE="0" STATE="1" EDITORDER="3 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="BOOLEAN" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="XF_INDEX" VERSION="1" LANGU="E" DESCRIPT="Natural number" EXPOSURE="0" STATE="1" EDITORDER="6 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="INT4" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="CONSTRUCTOR" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="1 " DISPID="0 " MTDTYPE="2" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="CONSTRUCTOR" SCONAME="IP_INDEX" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="2" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INT4" PARVALUE="0"/>
<source>method CONSTRUCTOR.
&quot; Initialise values
me-&gt;row_index = ip_index.
me-&gt;row_height = -1.
me-&gt;visible = abap_true.
me-&gt;outline_level = 0.
me-&gt;collapsed = abap_false.
&quot; set row dimension as unformatted by default
me-&gt;xf_index = 0.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_COLLAPSED" VERSION="1" LANGU="E" DESCRIPT="new - please pass worksheet to make use of new outline info" EXPOSURE="2" STATE="1" EDITORDER="2 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_COLLAPSED" SCONAME="IO_WORKSHEET" VERSION="1" LANGU="E" DESCRIPT="If row outlines are handled the new way" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_COLLAPSED" SCONAME="R_COLLAPSED" VERSION="1" LANGU="E" DESCRIPT="Boolean Variable (X=True, -=False, Space=Unknown)" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="BOOLEAN"/>
<source>METHOD get_collapsed.
DATA: lt_row_outlines TYPE zcl_excel_worksheet=&gt;mty_ts_outlines_row,
lv_previous_row TYPE i,
lv_following_row TYPE i.
r_collapsed = me-&gt;collapsed.
CHECK r_collapsed = abap_false. &quot; Maybe new method for outlines is being used
CHECK io_worksheet IS BOUND.
* If an outline is collapsed ( even inside an outer outline ) the line following the last line
* of the group gets the flag &quot;collapsed&quot;
IF io_worksheet-&gt;zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=&gt;c_below_off.
lv_following_row = me-&gt;row_index + 1.
lt_row_outlines = io_worksheet-&gt;get_row_outlines( ).
READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_from = lv_following_row &quot; first line of an outline
collapsed = abap_true. &quot; that is collapsed
ELSE.
lv_previous_row = me-&gt;row_index - 1.
lt_row_outlines = io_worksheet-&gt;get_row_outlines( ).
READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_to = lv_previous_row &quot; last line of an outline
collapsed = abap_true. &quot; that is collapsed
ENDIF.
CHECK sy-subrc = 0. &quot; ok - we found it
r_collapsed = abap_true.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_OUTLINE_LEVEL" VERSION="1" LANGU="E" DESCRIPT="new - please pass worksheet to make use of new outline info" EXPOSURE="2" STATE="1" EDITORDER="3 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_OUTLINE_LEVEL" SCONAME="IO_WORKSHEET" VERSION="1" LANGU="E" DESCRIPT="If row outlines are handled the new way" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_OUTLINE_LEVEL" SCONAME="R_OUTLINE_LEVEL" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="INT4"/>
<source>METHOD get_outline_level.
DATA: lt_row_outlines TYPE zcl_excel_worksheet=&gt;mty_ts_outlines_row.
FIELD-SYMBOLS: &lt;ls_row_outline&gt; LIKE LINE OF lt_row_outlines.
* if someone has set the outline level explicitly - just use that
IF me-&gt;outline_level IS NOT INITIAL.
r_outline_level = me-&gt;outline_level.
RETURN.
ENDIF.
* Maybe we can use the outline information in the worksheet
CHECK io_worksheet IS BOUND.
lt_row_outlines = io_worksheet-&gt;get_row_outlines( ).
LOOP AT lt_row_outlines ASSIGNING &lt;ls_row_outline&gt; WHERE row_from &lt;= me-&gt;row_index
AND row_to &gt;= me-&gt;row_index.
ADD 1 TO r_outline_level.
ENDLOOP.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_ROW_HEIGHT" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="4 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_ROW_HEIGHT" SCONAME="R_ROW_HEIGHT" VERSION="1" LANGU="E" DESCRIPT="Field of type FLTP" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="FLOAT"/>
<source>method GET_ROW_HEIGHT.
r_row_height = me-&gt;row_height.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_ROW_INDEX" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="5 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_ROW_INDEX" SCONAME="R_ROW_INDEX" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="INT4"/>
<source>method GET_ROW_INDEX.
r_row_index = me-&gt;row_index.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_VISIBLE" VERSION="1" LANGU="E" DESCRIPT="new - please pass worksheet to make use of new outline info" EXPOSURE="2" STATE="1" EDITORDER="6 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_VISIBLE" SCONAME="IO_WORKSHEET" VERSION="1" LANGU="E" DESCRIPT="If row outlines are handled the new way" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET" PAROPTIONL="X"/>
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_VISIBLE" SCONAME="R_VISIBLE" VERSION="1" LANGU="E" DESCRIPT="Boolean Variable (X=True, -=False, Space=Unknown)" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="BOOLEAN"/>
<source>METHOD get_visible.
DATA: lt_row_outlines TYPE zcl_excel_worksheet=&gt;mty_ts_outlines_row.
FIELD-SYMBOLS: &lt;ls_row_outline&gt; LIKE LINE OF lt_row_outlines.
r_visible = me-&gt;visible.
CHECK r_visible = &apos;X&apos;. &quot; Currently visible --&gt; but maybe the new outline methodology will hide it implicitly
CHECK io_worksheet IS BOUND. &quot; But we have to see the worksheet to make sure
lt_row_outlines = io_worksheet-&gt;get_row_outlines( ).
LOOP AT lt_row_outlines ASSIGNING &lt;ls_row_outline&gt; WHERE row_from &lt;= me-&gt;row_index
AND row_to &gt;= me-&gt;row_index
AND collapsed = abap_true. &quot; row is in a collapsed outline --&gt; not visible
CLEAR r_visible.
RETURN. &quot; one hit is enough to ensure invisibility
ENDLOOP.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_XF_INDEX" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="7 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="GET_XF_INDEX" SCONAME="R_XF_INDEX" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="INT4"/>
<source>method GET_XF_INDEX.
r_xf_index = me-&gt;xf_index.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_COLLAPSED" VERSION="1" LANGU="E" DESCRIPT="obsolete - please use worksheet-&gt;set_outline instead" EXPOSURE="2" STATE="1" EDITORDER="8 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_COLLAPSED" SCONAME="IP_COLLAPSED" VERSION="1" LANGU="E" DESCRIPT="Boolean Variable (X=True, -=False, Space=Unknown)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="BOOLEAN"/>
<source>method SET_COLLAPSED.
me-&gt;collapsed = ip_collapsed.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_OUTLINE_LEVEL" VERSION="1" LANGU="E" DESCRIPT="obsolete - please use worksheet-&gt;set_outline instead" EXPOSURE="2" STATE="1" EDITORDER="9 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_OUTLINE_LEVEL" SCONAME="IP_OUTLINE_LEVEL" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INT4"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_OUTLINE_LEVEL" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_OUTLINE_LEVEL.
IF ip_outline_level &lt; 0
OR ip_outline_level &gt; 7.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Outline level must range between 0 and 7.&apos;.
ENDIF.
me-&gt;outline_level = ip_outline_level.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_ROW_HEIGHT" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="10 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_ROW_HEIGHT" SCONAME="IP_ROW_HEIGHT" VERSION="1" LANGU="E" DESCRIPT="Accept nearly everything" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="SIMPLE"/>
<exception CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_ROW_HEIGHT" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 "/>
<source>method SET_ROW_HEIGHT.
TRY.
me-&gt;row_height = ip_row_height.
CATCH cx_sy_conversion_no_number.
RAISE EXCEPTION TYPE zcx_excel
EXPORTING
error = &apos;Unable to interpret ip_row_height as number&apos;.
ENDTRY.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_ROW_INDEX" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="11 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_ROW_INDEX" SCONAME="IP_INDEX" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INT4"/>
<source>method SET_ROW_INDEX.
me-&gt;row_index = ip_index.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_VISIBLE" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="12 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_VISIBLE" SCONAME="IP_VISIBLE" VERSION="1" LANGU="E" DESCRIPT="Boolean Variable (X=True, -=False, Space=Unknown)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="BOOLEAN"/>
<source>method SET_VISIBLE.
me-&gt;visible = ip_visible.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_XF_INDEX" VERSION="1" LANGU="E" EXPOSURE="2" STATE="1" EDITORDER="13 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_WORKSHEET_ROWDIMENSI" CMPNAME="SET_XF_INDEX" SCONAME="IP_XF_INDEX" VERSION="1" LANGU="E" DESCRIPT="Natural number" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INT4"/>
<source>method SET_XF_INDEX.
me-&gt;XF_INDEX = ip_XF_INDEX.
endmethod.</source>
</method>
</CLAS>