abap2xlsx/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_ALV.slnk
Łukasz Pęgiel 556ebdbc9b #252 Error while using grid object and reuse_alv table.
When you take the grid object from reuse_alv_grid_display FM then when
cells were colored I received dump as the structure of color table was
hardcoded to lvc_t_scol. When we have object from SLIS then there
structure is differen so I prepared code to handle both situations.
2015-08-28 14:29:48 +02:00

596 lines
29 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<CLAS CLSNAME="ZCL_EXCEL_CONVERTER_ALV" VERSION="1" LANGU="E" DESCRIPT="ALV grid interface implementation" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" CLSABSTRCT="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 " ZSAPLINK_PLUGIN_MAJOR_VERSION="0 " ZSAPLINK_PLUGIN_MINOR_VERSION="1 " ZSAPLINK_PLUGIN_BUILD_VERSION="0 " ZSAPLINK_PLUGIN_INFO1="ZSAPLINK_CLASS is part of the main ZSAPLINK project --&gt; This plugin found there instead of ZSAPLINK_PLUGINS projects" ZSAPLINK_PLUGIN_INFO2="SAPLINK homepage: https://www.assembla.com/spaces/saplink/wiki" ZSAPLINK_PLUGIN_INFO3="Download from https://www.assembla.com/code/saplink/subversion/nodes" ZSAPLINK_PLUGIN_INFO4="and navigate to: trunk -&gt; core -&gt; ZSAPLINK -&gt; CLAS -&gt; ZSAPLINK_CLASS.slnk">
<implementing CLSNAME="ZCL_EXCEL_CONVERTER_ALV" REFCLSNAME="ZIF_EXCEL_CONVERTER" VERSION="1" EXPOSURE="2" STATE="1" RELTYPE="1" IMPABSTRCT="X" EDITORDER="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
TYPES: BEGIN OF ts_col_converter,
col TYPE lvc_col,
int TYPE lvc_int,
inv TYPE lvc_inv,
fontcolor TYPE zexcel_style_color_argb,
fillcolor TYPE zexcel_style_color_argb,
END OF ts_col_converter,
tt_col_converter TYPE HASHED TABLE OF ts_col_converter WITH UNIQUE KEY col int inv.</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_CONVERTER_ALV" TYPEGROUP="ABAP" VERSION="1" TPUTYPE="0" EXPLICIT="X"/>
<typeUsage CLSNAME="ZCL_EXCEL_CONVERTER_ALV" TYPEGROUP="KKBLO" VERSION="1" TPUTYPE="0" EXPLICIT="X"/>
<forwardDeclaration>ABAP</forwardDeclaration>
<forwardDeclaration>KKBLO</forwardDeclaration>
<attribute CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="WS_LAYO" VERSION="1" LANGU="E" DESCRIPT="ALV control: Layout structure" EXPOSURE="1" STATE="1" EDITORDER="4 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="LVC_S_LAYO" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="WS_OPTION" VERSION="1" LANGU="E" DESCRIPT="Converter options for grid configuration" EXPOSURE="1" STATE="1" EDITORDER="6 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="ZEXCEL_S_CONVERTER_OPTION" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="WT_COLORS" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="5 " ATTDECLTYP="1" ATTEXPVIRT="0" TYPTYPE="1" TYPE="TT_COL_CONVERTER" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="WT_FCAT" VERSION="1" LANGU="E" DESCRIPT="Field Catalog for List Viewer Control" EXPOSURE="1" STATE="1" EDITORDER="3 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="LVC_T_FCAT" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="WT_FILT" VERSION="1" LANGU="E" DESCRIPT="ALV control: Table of filter conditions" EXPOSURE="1" STATE="1" EDITORDER="2 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="LVC_T_FILT" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<attribute CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="WT_SORT" VERSION="1" LANGU="E" DESCRIPT="ALV Control: Table of Sort Criteria" EXPOSURE="1" STATE="1" EDITORDER="1 " ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="LVC_T_SORT" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " TYPESRC_LENG="0 "/>
<method CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="APPLY_SORT" VERSION="1" LANGU="E" DESCRIPT="Apply sort criteria to data table" EXPOSURE="1" STATE="1" EDITORDER="3 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="APPLY_SORT" SCONAME="IT_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_CONVERTER_ALV" CMPNAME="APPLY_SORT" SCONAME="EO_TABLE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="3" TYPE="DATA"/>
<source>method APPLY_SORT.
DATA: lt_otab TYPE abap_sortorder_tab,
ls_otab TYPE abap_sortorder.
FIELD-SYMBOLS: &lt;fs_table&gt; TYPE STANDARD TABLE,
&lt;fs_sort&gt; TYPE lvc_s_sort.
CREATE DATA eo_table LIKE it_table.
ASSIGN eo_table-&gt;* TO &lt;fs_table&gt;.
&lt;fs_table&gt; = it_table.
SORT wt_sort BY spos.
LOOP AT wt_sort ASSIGNING &lt;fs_sort&gt;.
IF &lt;fs_sort&gt;-up = abap_true.
ls_otab-name = &lt;fs_sort&gt;-fieldname.
ls_otab-descending = abap_false.
* ls_otab-astext = abap_true. &quot; not only text fields
INSERT ls_otab INTO TABLE lt_otab.
ENDIF.
IF &lt;fs_sort&gt;-down = abap_true.
ls_otab-name = &lt;fs_sort&gt;-fieldname.
ls_otab-descending = abap_true.
* ls_otab-astext = abap_true. &quot; not only text fields
INSERT ls_otab INTO TABLE lt_otab.
ENDIF.
ENDLOOP.
IF lt_otab IS NOT INITIAL.
SORT &lt;fs_table&gt; BY (lt_otab).
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="CLASS_CONSTRUCTOR" VERSION="1" LANGU="E" DESCRIPT="CLASS_CONSTRUCTOR" EXPOSURE="2" STATE="1" EDITORDER="1 " DISPID="0 " MTDTYPE="2" MTDDECLTYP="1" BCMTDCAT="00" BCMTDSYN="0">
<source>method CLASS_CONSTRUCTOR.
* let&apos;s fill the color conversion routines.
DATA: ls_color TYPE ts_col_converter.
* 0 all combination the same
ls_color-col = 0.
ls_color-int = 0.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 0.
ls_color-int = 0.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 0.
ls_color-int = 1.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 0.
ls_color-int = 1.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
* Blue
ls_color-col = 1.
ls_color-int = 0.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFB0E4FC&apos;. &quot; 176 228 252 blue
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 1.
ls_color-int = 0.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFB0E4FC&apos;. &quot; 176 228 252 blue
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 1.
ls_color-int = 1.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FF5FCBFE&apos;. &quot; 095 203 254 Int blue
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 1.
ls_color-int = 1.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FF5FCBFE&apos;. &quot; 095 203 254
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255
INSERT ls_color INTO TABLE wt_colors.
* Gray
ls_color-col = 2.
ls_color-int = 0.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;.
ls_color-fillcolor = &apos;FFE5EAF0&apos;. &quot; 229 234 240 gray
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 2.
ls_color-int = 0.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFE5EAF0&apos;. &quot; 229 234 240 gray
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 2.
ls_color-int = 1.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFD8E8F4&apos;. &quot; 216 234 244 int gray
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 2.
ls_color-int = 1.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFD8E8F4&apos;. &quot; 216 234 244 int gray
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
*Yellow
ls_color-col = 3.
ls_color-int = 0.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFFEFEB8&apos;. &quot; 254 254 184 yellow
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 3.
ls_color-int = 0.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFFEFEB8&apos;. &quot; 254 254 184 yellow
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 3.
ls_color-int = 1.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFF9ED5D&apos;. &quot; 249 237 093 int yellow
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 3.
ls_color-int = 1.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFF9ED5D&apos;. &quot; 249 237 093 int yellow
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
* light blue
ls_color-col = 4.
ls_color-int = 0.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFCEE7FB&apos;. &quot; 206 231 251 light blue
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 4.
ls_color-int = 0.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFCEE7FB&apos;. &quot; 206 231 251 light blue
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 4.
ls_color-int = 1.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FF9ACCEF&apos;. &quot; 154 204 239 int light blue
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 4.
ls_color-int = 1.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FF9ACCEF&apos;. &quot; 154 204 239 int light blue
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
* Green
ls_color-col = 5.
ls_color-int = 0.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFCEF8AE&apos;. &quot; 206 248 174 Green
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 5.
ls_color-int = 0.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFCEF8AE&apos;. &quot; 206 248 174 Green
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 5.
ls_color-int = 1.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FF7AC769&apos;. &quot; 122 199 105 int Green
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 5.
ls_color-int = 1.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FF7AC769&apos;. &quot; 122 199 105 int Green
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
* Red
ls_color-col = 6.
ls_color-int = 0.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFFDBBBC&apos;. &quot; 253 187 188 Red
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 6.
ls_color-int = 0.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFFDBBBC&apos;. &quot; 253 187 188 Red
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 6.
ls_color-int = 1.
ls_color-inv = 0.
ls_color-fontcolor = &apos;FF000000&apos;. &quot; 000 000 000 Black
ls_color-fillcolor = &apos;FFFB6B6B&apos;. &quot; 251 107 107 int Red
INSERT ls_color INTO TABLE wt_colors.
ls_color-col = 6.
ls_color-int = 1.
ls_color-inv = 1.
ls_color-fontcolor = &apos;FFFB6B6B&apos;. &quot; 251 107 107 int Red
ls_color-fillcolor = &apos;FFFFFFFF&apos;. &quot; 255 255 255 White
INSERT ls_color INTO TABLE wt_colors.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="GET_COLOR" VERSION="1" LANGU="E" DESCRIPT="Create color table for formating" EXPOSURE="1" STATE="1" EDITORDER="4 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="GET_COLOR" SCONAME="IO_TABLE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="DATA"/>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="GET_COLOR" SCONAME="ET_COLORS" VERSION="1" LANGU="E" DESCRIPT="Table type for color information of cells for converter" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_T_CONVERTER_COL"/>
<source>method GET_COLOR.
DATA: ls_con_col TYPE zexcel_s_converter_col,
ls_color TYPE ts_col_converter,
l_line TYPE i,
l_color(4) TYPE c.
FIELD-SYMBOLS: &lt;fs_tab&gt; TYPE STANDARD TABLE,
&lt;fs_stab&gt; TYPE ANY,
&lt;fs&gt; TYPE ANY,
&lt;fs_tcol&gt; TYPE lvc_t_scol,
&lt;fs_scol&gt; TYPE lvc_s_scol,
&lt;ft_slis&gt; type standard table,
&lt;fs_slis&gt; type any.
* Loop trough the table to set the color properties of each line. The color properties field is
* Char 4 and the characters is set as follows:
* Char 1 = C = This is a color property
* Char 2 = 6 = Color code (1 - 7)
* Char 3 = Intensified on/of = 1 = on
* Char 4 = Inverse display = 0 = of
ASSIGN io_table-&gt;* TO &lt;fs_tab&gt;.
IF ws_layo-info_fname IS NOT INITIAL OR
ws_layo-ctab_fname IS NOT INITIAL.
LOOP AT &lt;fs_tab&gt; ASSIGNING &lt;fs_stab&gt;.
l_line = sy-tabix.
IF ws_layo-info_fname IS NOT INITIAL.
ASSIGN COMPONENT ws_layo-info_fname OF STRUCTURE &lt;fs_stab&gt; TO &lt;fs&gt;.
IF sy-subrc = 0.
IF &lt;fs&gt; IS NOT INITIAL.
l_color = &lt;fs&gt;.
IF l_color(1) = &apos;C&apos;.
READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = l_color+1(1)
int = l_color+2(1)
inv = l_color+3(1).
IF sy-subrc = 0.
ls_con_col-rownumber = l_line.
ls_con_col-columnname = space.
ls_con_col-fontcolor = ls_color-fontcolor.
ls_con_col-fillcolor = ls_color-fillcolor.
INSERT ls_con_col INTO TABLE et_colors.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
if ws_layo-ctab_fname is not initial.
assign component ws_layo-ctab_fname of structure &lt;fs_stab&gt; to &lt;ft_slis&gt;.
if sy-subrc = 0.
loop at &lt;ft_slis&gt; assigning &lt;fs_slis&gt;.
assign component &apos;COLOR&apos; of structure &lt;fs_slis&gt; to &lt;fs&gt;.
if sy-subrc = 0.
if &lt;fs&gt; is not initial.
field-symbols: &lt;col&gt; type any,
&lt;int&gt; type any,
&lt;inv&gt; type any,
&lt;fname&gt; type any,
&lt;nokeycol&gt; type any.
assign component &apos;COL&apos; of structure &lt;fs&gt; to &lt;col&gt;.
assign component &apos;INT&apos; of structure &lt;fs&gt; to &lt;int&gt;.
assign component &apos;INV&apos; of structure &lt;fs&gt; to &lt;inv&gt;.
read table wt_colors into ls_color with table key col = &lt;col&gt;
int = &lt;int&gt;
inv = &lt;inv&gt;.
if sy-subrc = 0.
ls_con_col-rownumber = l_line.
assign component &apos;FNAME&apos; of structure &lt;fs_slis&gt; to &lt;fname&gt;.
if sy-subrc ne 0.
assign component &apos;FIELDNAME&apos; of structure &lt;fs_slis&gt; to &lt;fname&gt;.
if sy-subrc eq 0.
ls_con_col-columnname = &lt;fname&gt;.
endif.
else.
ls_con_col-columnname = &lt;fname&gt;.
endif.
ls_con_col-fontcolor = ls_color-fontcolor.
ls_con_col-fillcolor = ls_color-fillcolor.
assign component &apos;NOKEYCOL&apos; of structure &lt;fs_slis&gt; to &lt;nokeycol&gt;.
if sy-subrc eq 0.
ls_con_col-nokeycol = &lt;nokeycol&gt;.
endif.
insert ls_con_col into table et_colors.
endif.
endif.
endif.
endloop.
endif.
endif.
ENDLOOP.
ENDIF.
endmethod.</source>
</method>
<method CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="GET_FILTER" VERSION="1" LANGU="E" DESCRIPT="Create filter values" EXPOSURE="1" STATE="1" EDITORDER="5 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="GET_FILTER" SCONAME="ET_FILTER" VERSION="1" LANGU="E" DESCRIPT="Table type for filter information of cells for converter" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="1" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_T_CONVERTER_FIL"/>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="GET_FILTER" SCONAME="XO_TABLE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="2" PARPASSTYP="1" TYPTYPE="3" TYPE="DATA"/>
<source>METHOD get_filter.
DATA: ls_filt TYPE lvc_s_filt,
l_line TYPE i,
ls_filter TYPE zexcel_s_converter_fil.
DATA: lo_addit TYPE REF TO cl_abap_elemdescr,
lt_components_tab TYPE cl_abap_structdescr=&gt;component_table,
ls_components TYPE abap_componentdescr,
lo_table TYPE REF TO cl_abap_tabledescr,
lo_struc TYPE REF TO cl_abap_structdescr,
lo_trange TYPE REF TO data,
lo_srange TYPE REF TO data,
lo_ltabdata TYPE REF TO data.
FIELD-SYMBOLS: &lt;fs_tab&gt; TYPE STANDARD TABLE,
&lt;fs_ltab&gt; TYPE STANDARD TABLE,
&lt;fs_stab&gt; TYPE any,
&lt;fs&gt; TYPE any,
&lt;fs1&gt; TYPE any,
&lt;fs_srange&gt; TYPE any,
&lt;fs_trange&gt; TYPE STANDARD TABLE.
IF ws_option-filter = abap_false.
REFRESH et_filter.
RETURN.
ENDIF.
ASSIGN xo_table-&gt;* TO &lt;fs_tab&gt;.
CREATE DATA lo_ltabdata LIKE &lt;fs_tab&gt;.
ASSIGN lo_ltabdata-&gt;* TO &lt;fs_ltab&gt;.
LOOP AT wt_filt INTO ls_filt.
LOOP AT &lt;fs_tab&gt; ASSIGNING &lt;fs_stab&gt;.
l_line = sy-tabix.
ASSIGN COMPONENT ls_filt-fieldname OF STRUCTURE &lt;fs_stab&gt; TO &lt;fs&gt;.
IF sy-subrc = 0.
IF l_line = 1.
REFRESH lt_components_tab.
ls_components-name = &apos;SIGN&apos;.
lo_addit ?= cl_abap_typedescr=&gt;describe_by_data( ls_filt-sign ).
ls_components-type = lo_addit .
INSERT ls_components INTO TABLE lt_components_tab.
ls_components-name = &apos;OPTION&apos;.
lo_addit ?= cl_abap_typedescr=&gt;describe_by_data( ls_filt-option ).
ls_components-type = lo_addit .
INSERT ls_components INTO TABLE lt_components_tab.
ls_components-name = &apos;LOW&apos;.
lo_addit ?= cl_abap_typedescr=&gt;describe_by_data( &lt;fs&gt; ).
ls_components-type = lo_addit .
INSERT ls_components INTO TABLE lt_components_tab.
ls_components-name = &apos;HIGH&apos;.
lo_addit ?= cl_abap_typedescr=&gt;describe_by_data( &lt;fs&gt; ).
ls_components-type = lo_addit .
INSERT ls_components INTO TABLE lt_components_tab.
&quot;create new line type
TRY.
lo_struc = cl_abap_structdescr=&gt;create( p_components = lt_components_tab
p_strict = abap_false ).
CATCH cx_sy_struct_creation.
CONTINUE.
ENDTRY.
lo_table = cl_abap_tabledescr=&gt;create( lo_struc ).
CREATE DATA lo_trange TYPE HANDLE lo_table.
CREATE DATA lo_srange TYPE HANDLE lo_struc.
ASSIGN lo_trange-&gt;* TO &lt;fs_trange&gt;.
ASSIGN lo_srange-&gt;* TO &lt;fs_srange&gt;.
ENDIF.
REFRESH &lt;fs_trange&gt;.
ASSIGN COMPONENT &apos;SIGN&apos; OF STRUCTURE &lt;fs_srange&gt; TO &lt;fs1&gt;.
&lt;fs1&gt; = ls_filt-sign.
ASSIGN COMPONENT &apos;OPTION&apos; OF STRUCTURE &lt;fs_srange&gt; TO &lt;fs1&gt;.
&lt;fs1&gt; = ls_filt-option.
ASSIGN COMPONENT &apos;LOW&apos; OF STRUCTURE &lt;fs_srange&gt; TO &lt;fs1&gt;.
&lt;fs1&gt; = ls_filt-low.
ASSIGN COMPONENT &apos;HIGH&apos; OF STRUCTURE &lt;fs_srange&gt; TO &lt;fs1&gt;.
&lt;fs1&gt; = ls_filt-high.
INSERT &lt;fs_srange&gt; INTO TABLE &lt;fs_trange&gt;.
IF &lt;fs&gt; IN &lt;fs_trange&gt;.
IF ws_option-filter = abap_true.
ls_filter-rownumber = l_line.
ls_filter-columnname = ls_filt-fieldname.
INSERT ls_filter INTO TABLE et_filter.
ELSE.
INSERT &lt;fs_stab&gt; INTO TABLE &lt;fs_ltab&gt;.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF ws_option-filter = abap_undefined.
&lt;fs_tab&gt; = &lt;fs_ltab&gt;.
REFRESH &lt;fs_ltab&gt;.
ENDIF.
ENDLOOP.
ENDMETHOD.</source>
</method>
<method CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="UPDATE_CATALOG" VERSION="1" LANGU="E" DESCRIPT="Create fieldcatalog and layout" EXPOSURE="1" STATE="1" EDITORDER="2 " DISPID="0 " MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="UPDATE_CATALOG" SCONAME="CS_LAYOUT" VERSION="1" LANGU="E" DESCRIPT="Converter settings for table" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " PARDECLTYP="2" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_S_CONVERTER_LAYO"/>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_ALV" CMPNAME="UPDATE_CATALOG" SCONAME="CT_FIELDCATALOG" VERSION="1" LANGU="E" DESCRIPT="Conter table for tabel fields" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " PARDECLTYP="2" PARPASSTYP="1" TYPTYPE="1" TYPE="ZEXCEL_T_CONVERTER_FCAT"/>
<source>method UPDATE_CATALOG.
DATA: ls_fieldcatalog TYPE zexcel_s_converter_fcat,
ls_ref TYPE salv_s_ddic_reference,
ls_fcat TYPE lvc_s_fcat,
ls_sort TYPE lvc_s_sort,
l_decimals TYPE lvc_decmls.
FIELD-SYMBOLS: &lt;fs_scat&gt; TYPE zexcel_s_converter_fcat.
IF ws_layo-zebra IS NOT INITIAL.
cs_layout-is_stripped = abap_true.
ENDIF.
IF ws_layo-no_keyfix IS INITIAL OR
ws_layo-no_keyfix = &apos;0&apos;.
cs_layout-is_fixed = abap_true.
ENDIF.
LOOP AT wt_fcat INTO ls_fcat.
CLEAR: ls_fieldcatalog,
l_decimals.
CASE ws_option-hidenc.
WHEN abap_false. &quot; We make hiden columns visible
CLEAR ls_fcat-no_out.
WHEN abap_true.
* We convert column and hide it.
WHEN abap_undefined. &quot;We don&apos;t convert hiden columns
IF ls_fcat-no_out = abap_true.
ls_fcat-tech = abap_true.
ENDIF.
ENDCASE.
IF ls_fcat-tech = abap_false.
ls_fieldcatalog-tabname = ls_fcat-tabname.
ls_fieldcatalog-fieldname = ls_fcat-fieldname .
ls_fieldcatalog-columnname = ls_fcat-fieldname .
ls_fieldcatalog-position = ls_fcat-col_pos.
ls_fieldcatalog-col_id = ls_fcat-col_id.
ls_fieldcatalog-convexit = ls_fcat-convexit.
ls_fieldcatalog-inttype = ls_fcat-inttype.
ls_fieldcatalog-scrtext_s = ls_fcat-scrtext_s .
ls_fieldcatalog-scrtext_m = ls_fcat-scrtext_m .
ls_fieldcatalog-scrtext_l = ls_fcat-scrtext_l.
l_decimals = ls_fcat-decimals_o.
IF l_decimals IS NOT INITIAL.
ls_fieldcatalog-decimals = l_decimals.
ELSE.
ls_fieldcatalog-decimals = ls_fcat-decimals .
ENDIF.
CASE ws_option-subtot.
WHEN abap_false. &quot; We ignore subtotals
CLEAR ls_fcat-do_sum.
WHEN abap_true. &quot; We convert subtotals and detail
WHEN abap_undefined. &quot; We should only take subtotals and displayed detail
* for now abap_true
ENDCASE.
CASE ls_fcat-do_sum.
WHEN abap_true.
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_sum.
WHEN &apos;A&apos;.
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_min.
WHEN &apos;B&apos; .
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_max.
WHEN &apos;C&apos; .
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_average.
WHEN OTHERS.
CLEAR ls_fieldcatalog-totals_function .
ENDCASE.
ls_fieldcatalog-fix_column = ls_fcat-fix_column.
IF ws_layo-cwidth_opt IS INITIAL.
IF ls_fcat-col_opt IS NOT INITIAL.
ls_fieldcatalog-is_optimized = abap_true.
ENDIF.
ELSE.
ls_fieldcatalog-is_optimized = abap_true.
ENDIF.
IF ls_fcat-no_out IS NOT INITIAL.
ls_fieldcatalog-is_hidden = abap_true.
ls_fieldcatalog-position = ls_fieldcatalog-col_id. &quot; We hide based on orginal data structure
ENDIF.
* Alignment in each cell
CASE ls_fcat-just.
WHEN &apos;R&apos;.
ls_fieldcatalog-alignment = zcl_excel_style_alignment=&gt;c_horizontal_right.
WHEN &apos;L&apos;.
ls_fieldcatalog-alignment = zcl_excel_style_alignment=&gt;c_horizontal_left.
WHEN &apos;C&apos;.
ls_fieldcatalog-alignment = zcl_excel_style_alignment=&gt;c_horizontal_center.
WHEN OTHERS.
CLEAR ls_fieldcatalog-alignment.
ENDCASE.
* Check for subtotals.
READ TABLE wt_sort INTO ls_sort WITH KEY fieldname = ls_fcat-fieldname.
IF sy-subrc = 0 AND ws_option-subtot &lt;&gt; abap_false.
ls_fieldcatalog-sort_level = 0 .
* IF ls_fieldcatalog-totals_function IS INITIAL. &quot; Not clear why not
* CLEAR ls_fieldcatalog-is_subtotalled.
* ELSE.
ls_fieldcatalog-is_subtotalled = ls_sort-subtot.
* ENDIF.
ls_fieldcatalog-is_collapsed = ls_sort-expa.
IF ls_fieldcatalog-is_subtotalled = abap_true.
ls_fieldcatalog-sort_level = ls_sort-spos.
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_sum. &quot; we need function for text
ENDIF.
ENDIF.
APPEND ls_fieldcatalog TO ct_fieldcatalog.
ENDIF.
ENDLOOP.
SORT ct_fieldcatalog BY sort_level ASCENDING.
cs_layout-max_subtotal_level = 0.
LOOP AT ct_fieldcatalog ASSIGNING &lt;fs_scat&gt; WHERE sort_level &gt; 0.
cs_layout-max_subtotal_level = cs_layout-max_subtotal_level + 1.
&lt;fs_scat&gt;-sort_level = cs_layout-max_subtotal_level.
ENDLOOP.
endmethod.</source>
</method>
</CLAS>