Ready for testing #143; Should support 7.00 and 7.02; in addition small bug with subtotals corrected; class names changed to support different sap versions going forward;

git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@272 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
This commit is contained in:
Rene Turnheim 2012-03-21 02:00:30 +00:00
parent d98d0f79d1
commit 3b811397d8
5 changed files with 304 additions and 142 deletions

View File

@ -273,6 +273,8 @@ TYPES: BEGIN OF ts_sort_values,
row_int TYPE zexcel_cell_row, row_int TYPE zexcel_cell_row,
value TYPE REF TO data, value TYPE REF TO data,
new TYPE flag, new TYPE flag,
sort_level TYPE int4,
is_collapsed type flag,
END OF ts_sort_values, END OF ts_sort_values,
tt_sort_values TYPE HASHED TABLE OF ts_sort_values WITH UNIQUE KEY fieldname. tt_sort_values TYPE HASHED TABLE OF ts_sort_values WITH UNIQUE KEY fieldname.
@ -443,11 +445,11 @@ endmethod.</source>
* Object CL_SALV_RESULT * Object CL_SALV_RESULT
ls_objects-seoclass = &apos;CL_SALV_EX_RESULT_DATA_TABLE &apos;. ls_objects-seoclass = &apos;CL_SALV_EX_RESULT_DATA_TABLE &apos;.
ls_objects-clsname = &apos;ZCL_EXCEL_CONVERTER_EX_RESULT&apos;. ls_objects-clsname = &apos;ZCL_EXCEL_CONVERTER_RESULT_EX&apos;.
INSERT ls_objects INTO TABLE wt_objects. INSERT ls_objects INTO TABLE wt_objects.
* Object CL_SALV_WD_RESULT * Object CL_SALV_WD_RESULT
ls_objects-seoclass = &apos;CL_SALV_WD_RESULT_DATA_TABLE &apos;. ls_objects-seoclass = &apos;CL_SALV_WD_RESULT_DATA_TABLE &apos;.
ls_objects-clsname = &apos;ZCL_EXCEL_CONVERTER_WD_RESULT&apos;. ls_objects-clsname = &apos;ZCL_EXCEL_CONVERTER_RESULT_WD&apos;.
INSERT ls_objects INTO TABLE wt_objects. INSERT ls_objects INTO TABLE wt_objects.
ENDMETHOD.</source> ENDMETHOD.</source>
@ -1296,16 +1298,7 @@ ENDMETHOD.</source>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="LOOP_SUBTOTAL" SCONAME="R_FREEZE_COL" VERSION="1" LANGU="E" DESCRIPT="Byte Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120122" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="INT1"/> <parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="LOOP_SUBTOTAL" SCONAME="R_FREEZE_COL" VERSION="1" LANGU="E" DESCRIPT="Byte Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120122" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="INT1"/>
<exception CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="LOOP_SUBTOTAL" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 " AUTHOR="RTURNHEIM" CREATEDON="20120125" CHANGEDON="00000000"/> <exception CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="LOOP_SUBTOTAL" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 " AUTHOR="RTURNHEIM" CREATEDON="20120125" CHANGEDON="00000000"/>
<source>METHOD loop_subtotal. <source>METHOD loop_subtotal.
TYPES: BEGIN OF ts_line,
sort_level TYPE int4,
text TYPE string,
is_collapsed TYPE flag,
is_visible TYPE flag,
row_int_start TYPE zexcel_cell_row,
col_alpha TYPE zexcel_cell_column_alpha,
columnname TYPE fieldname,
END OF ts_line,
tt_line TYPE STANDARD TABLE OF ts_line.
DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr, DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr,
lo_data TYPE REF TO data, lo_data TYPE REF TO data,
l_row_header TYPE zexcel_cell_row VALUE &apos;2&apos;, l_row_header TYPE zexcel_cell_row VALUE &apos;2&apos;,
@ -1327,14 +1320,14 @@ ENDMETHOD.</source>
ls_sort_values TYPE ts_sort_values, ls_sort_values TYPE ts_sort_values,
ls_subtotal_rows TYPE ts_subtotal_rows, ls_subtotal_rows TYPE ts_subtotal_rows,
l_sort_level TYPE int4, l_sort_level TYPE int4,
ls_line TYPE ts_line, l_hidden TYPE int4,
lt_line TYPE tt_line,
l_line TYPE i, l_line TYPE i,
l_guid TYPE guid_22, l_guid TYPE guid_22,
l_tabix TYPE sy-tabix, l_tabix TYPE sy-tabix,
l_cells TYPE i, l_cells TYPE i,
l_count TYPE i, l_count TYPE i,
l_table_row TYPE i. l_table_row TYPE i,
lt_fcat TYPE zexcel_t_converter_fcat.
FIELD-SYMBOLS: &lt;fs_stab&gt; TYPE ANY, FIELD-SYMBOLS: &lt;fs_stab&gt; TYPE ANY,
&lt;fs_tab&gt; TYPE STANDARD TABLE, &lt;fs_tab&gt; TYPE STANDARD TABLE,
@ -1356,10 +1349,14 @@ ENDMETHOD.</source>
READ TABLE &lt;fs_tab&gt; ASSIGNING &lt;fs_stab&gt; INDEX 1. READ TABLE &lt;fs_tab&gt; ASSIGNING &lt;fs_stab&gt; INDEX 1.
IF sy-subrc = 0. IF sy-subrc = 0.
l_row_int = i_row_int + 1. l_row_int = i_row_int + 1.
LOOP AT wt_fieldcatalog ASSIGNING &lt;fs_sfcat&gt; WHERE is_subtotalled = abap_true. lt_fcat = wt_fieldcatalog.
SORT lt_fcat BY sort_level DESCENDING.
LOOP AT lt_fcat ASSIGNING &lt;fs_sfcat&gt; WHERE is_subtotalled = abap_true.
ASSIGN COMPONENT &lt;fs_sfcat&gt;-columnname OF STRUCTURE &lt;fs_stab&gt; TO &lt;fs_fldval&gt;. ASSIGN COMPONENT &lt;fs_sfcat&gt;-columnname OF STRUCTURE &lt;fs_stab&gt; TO &lt;fs_fldval&gt;.
ls_sort_values-fieldname = &lt;fs_sfcat&gt;-columnname. ls_sort_values-fieldname = &lt;fs_sfcat&gt;-columnname.
ls_sort_values-row_int = l_row_int. ls_sort_values-row_int = l_row_int.
ls_sort_values-sort_level = &lt;fs_sfcat&gt;-sort_level.
ls_sort_values-is_collapsed = &lt;fs_sfcat&gt;-is_collapsed.
CREATE DATA ls_sort_values-value LIKE &lt;fs_fldval&gt;. CREATE DATA ls_sort_values-value LIKE &lt;fs_fldval&gt;.
ASSIGN ls_sort_values-value-&gt;* TO &lt;fs_sortval&gt;. ASSIGN ls_sort_values-value-&gt;* TO &lt;fs_sortval&gt;.
&lt;fs_sortval&gt; = &lt;fs_fldval&gt;. &lt;fs_sortval&gt; = &lt;fs_fldval&gt;.
@ -1367,12 +1364,24 @@ ENDMETHOD.</source>
ENDLOOP. ENDLOOP.
ENDIF. ENDIF.
l_row_int = i_row_int. l_row_int = i_row_int.
* Let&apos;s check if we need to hide a sort level.
DESCRIBE TABLE wt_sort_values LINES l_line.
IF l_line &lt;= 1.
CLEAR l_hidden.
ELSE.
LOOP AT wt_sort_values INTO ls_sort_values WHERE is_collapsed = abap_false.
IF l_hidden &lt; ls_sort_values-sort_level.
l_hidden = ls_sort_values-sort_level.
ENDIF.
ENDLOOP.
ENDIF.
ADD 1 TO l_hidden. &quot; As this is the first level we show.
* First loop without formular only addtional rows with subtotal text. * First loop without formular only addtional rows with subtotal text.
LOOP AT &lt;fs_tab&gt; ASSIGNING &lt;fs_stab&gt;. LOOP AT &lt;fs_tab&gt; ASSIGNING &lt;fs_stab&gt;.
l_table_row = sy-tabix.
ADD 1 TO l_row_int. &quot; 1 is for header row. ADD 1 TO l_row_int. &quot; 1 is for header row.
REFRESH lt_line. l_row_int_start = l_row_int.
LOOP AT wt_fieldcatalog ASSIGNING &lt;fs_sfcat&gt; WHERE is_subtotalled = abap_true. SORT lt_fcat BY sort_level DESCENDING.
LOOP AT lt_fcat ASSIGNING &lt;fs_sfcat&gt; WHERE is_subtotalled = abap_true.
l_col_int = i_col_int + &lt;fs_sfcat&gt;-position - 1. l_col_int = i_col_int + &lt;fs_sfcat&gt;-position - 1.
l_col_alpha = zcl_excel_common=&gt;convert_column2alpha( l_col_int ). l_col_alpha = zcl_excel_common=&gt;convert_column2alpha( l_col_int ).
* Now the cell values * Now the cell values
@ -1382,102 +1391,79 @@ ENDMETHOD.</source>
IF sy-subrc = 0. IF sy-subrc = 0.
ASSIGN &lt;fs_sortv&gt;-value-&gt;* TO &lt;fs_sortval&gt;. ASSIGN &lt;fs_sortv&gt;-value-&gt;* TO &lt;fs_sortval&gt;.
IF &lt;fs_sortval&gt; &lt;&gt; &lt;fs_fldval&gt; OR &lt;fs_sortv&gt;-new = abap_true. IF &lt;fs_sortval&gt; &lt;&gt; &lt;fs_fldval&gt; OR &lt;fs_sortv&gt;-new = abap_true.
* First let&apos;s write the value as it has to appear. * First let&apos;s remmember the subtotal values as it has to appear later.
CLEAR ls_line.
ls_line-text = create_text_subtotal( i_value = &lt;fs_sortval&gt;
i_totals_function = &lt;fs_sfcat&gt;-totals_function ).
ls_line-col_alpha = l_col_alpha.
ls_line-sort_level = &lt;fs_sfcat&gt;-sort_level.
ls_line-is_collapsed = &lt;fs_sfcat&gt;-is_collapsed.
ls_line-row_int_start = &lt;fs_sortv&gt;-row_int.
ls_line-columnname = &lt;fs_sfcat&gt;-columnname.
INSERT ls_line INTO TABLE lt_line.
* Now let&apos;s change the key
&lt;fs_sortval&gt; = &lt;fs_fldval&gt;.
&lt;fs_sortv&gt;-new = abap_false.
&lt;fs_sortv&gt;-row_int = l_row_int.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
* Now we must write the lines in correct sequence.
l_row_int_start = l_row_int.
SORT lt_line BY sort_level DESCENDING.
DESCRIBE TABLE lt_line LINES l_line.
LOOP AT lt_line INTO ls_line.
l_tabix = sy-tabix.
ls_subtotal_rows-row_int = l_row_int. ls_subtotal_rows-row_int = l_row_int.
ls_subtotal_rows-row_int_start = ls_line-row_int_start. ls_subtotal_rows-row_int_start = &lt;fs_sortv&gt;-row_int.
ls_subtotal_rows-columnname = ls_line-columnname. ls_subtotal_rows-columnname = &lt;fs_sfcat&gt;-columnname.
INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows.
* Now let&apos;s write the subtotal line
wo_worksheet-&gt;set_cell( ip_column = ls_line-col_alpha l_cell_value = create_text_subtotal( i_value = &lt;fs_sortval&gt;
i_totals_function = &lt;fs_sfcat&gt;-totals_function ).
wo_worksheet-&gt;set_cell( ip_column = l_col_alpha
ip_row = l_row_int ip_row = l_row_int
ip_value = ls_line-text ip_value = l_cell_value
ip_abap_type = cl_abap_typedescr=&gt;typekind_string ip_abap_type = cl_abap_typedescr=&gt;typekind_string
ip_style = &lt;fs_sfcat&gt;-style_subtotal ). ip_style = &lt;fs_sfcat&gt;-style_subtotal ).
READ TABLE wt_sort_values ASSIGNING &lt;fs_sortv&gt; WITH TABLE KEY fieldname = ls_line-columnname.
IF sy-subrc = 0.
IF l_line &gt; l_tabix . &quot; Only if we have more than 1 and subtotal does not change on lower level but on higher does
&lt;fs_sortv&gt;-new = abap_true.
ENDIF.
&lt;fs_sortv&gt;-row_int = l_row_int_start + l_line.
ENDIF.
l_sort_level = ls_line-sort_level.
lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ). lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ).
lo_row_dim-&gt;set_outline_level( ip_outline_level = l_sort_level ) . lo_row_dim-&gt;set_outline_level( ip_outline_level = &lt;fs_sfcat&gt;-sort_level ) .
lo_row_dim-&gt;set_collapsed( ip_collapsed = ls_line-is_collapsed ) . IF &lt;fs_sfcat&gt;-is_collapsed = abap_true.
IF &lt;fs_sfcat&gt;-sort_level &gt; l_hidden.
lo_row_dim-&gt;set_visible( ip_visible = abap_false ) .
ENDIF.
lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ) .
ENDIF.
* Now let&apos;s change the key
ADD 1 TO l_row_int. ADD 1 TO l_row_int.
&lt;fs_sortval&gt; = &lt;fs_fldval&gt;.
&lt;fs_sortv&gt;-new = abap_false.
l_line = &lt;fs_sortv&gt;-sort_level.
LOOP AT wt_sort_values ASSIGNING &lt;fs_sortv&gt; WHERE sort_level &gt;= l_line.
&lt;fs_sortv&gt;-row_int = l_row_int.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP. ENDLOOP.
ENDLOOP. ENDLOOP.
ADD 1 TO l_row_int. ADD 1 TO l_row_int.
REFRESH lt_line. l_row_int_start = l_row_int.
LOOP AT wt_fieldcatalog ASSIGNING &lt;fs_sfcat&gt; WHERE is_subtotalled = abap_true. SORT lt_fcat BY sort_level DESCENDING.
LOOP AT lt_fcat ASSIGNING &lt;fs_sfcat&gt; WHERE is_subtotalled = abap_true.
l_col_int = i_col_int + &lt;fs_sfcat&gt;-position - 1. l_col_int = i_col_int + &lt;fs_sfcat&gt;-position - 1.
l_col_alpha = zcl_excel_common=&gt;convert_column2alpha( l_col_int ). l_col_alpha = zcl_excel_common=&gt;convert_column2alpha( l_col_int ).
READ TABLE wt_sort_values ASSIGNING &lt;fs_sortv&gt; WITH TABLE KEY fieldname = &lt;fs_sfcat&gt;-columnname. READ TABLE wt_sort_values ASSIGNING &lt;fs_sortv&gt; WITH TABLE KEY fieldname = &lt;fs_sfcat&gt;-columnname.
IF sy-subrc = 0. IF sy-subrc = 0.
ASSIGN &lt;fs_sortv&gt;-value-&gt;* TO &lt;fs_sortval&gt;. ASSIGN &lt;fs_sortv&gt;-value-&gt;* TO &lt;fs_sortval&gt;.
* First let&apos;s write the value as it has to appear.
CLEAR ls_line.
ls_line-text = create_text_subtotal( i_value = &lt;fs_sortval&gt;
i_totals_function = &lt;fs_sfcat&gt;-totals_function ).
ls_line-col_alpha = l_col_alpha.
ls_line-sort_level = &lt;fs_sfcat&gt;-sort_level.
ls_line-is_collapsed = &lt;fs_sfcat&gt;-is_collapsed.
ls_line-row_int_start = &lt;fs_sortv&gt;-row_int.
ls_line-columnname = &lt;fs_sfcat&gt;-columnname.
INSERT ls_line INTO TABLE lt_line.
ENDIF.
ENDLOOP.
* Now we must write the lines in correct sequence.
l_row_int_start = l_row_int.
SORT lt_line BY sort_level DESCENDING.
DESCRIBE TABLE lt_line LINES l_line.
LOOP AT lt_line INTO ls_line.
ls_subtotal_rows-row_int = l_row_int. ls_subtotal_rows-row_int = l_row_int.
ls_subtotal_rows-row_int_start = ls_line-row_int_start. ls_subtotal_rows-row_int_start = &lt;fs_sortv&gt;-row_int.
ls_subtotal_rows-columnname = ls_line-columnname. ls_subtotal_rows-columnname = &lt;fs_sfcat&gt;-columnname.
INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows.
* First let&apos;s write the value as it has to appear.
wo_worksheet-&gt;set_cell( ip_column = ls_line-col_alpha l_cell_value = create_text_subtotal( i_value = &lt;fs_sortval&gt;
i_totals_function = &lt;fs_sfcat&gt;-totals_function ).
wo_worksheet-&gt;set_cell( ip_column = l_col_alpha
ip_row = l_row_int ip_row = l_row_int
ip_value = ls_line-text ip_value = l_cell_value
ip_abap_type = cl_abap_typedescr=&gt;typekind_string ip_abap_type = cl_abap_typedescr=&gt;typekind_string
ip_style = &lt;fs_sfcat&gt;-style_subtotal ). ip_style = &lt;fs_sfcat&gt;-style_subtotal ).
l_sort_level = ls_line-sort_level. l_sort_level = &lt;fs_sfcat&gt;-sort_level.
lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ). lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ).
lo_row_dim-&gt;set_outline_level( ip_outline_level = l_sort_level ) . lo_row_dim-&gt;set_outline_level( ip_outline_level = l_sort_level ) .
lo_row_dim-&gt;set_collapsed( ip_collapsed = ls_line-is_collapsed ) . IF &lt;fs_sfcat&gt;-is_collapsed = abap_true.
IF &lt;fs_sfcat&gt;-sort_level &gt; l_hidden.
lo_row_dim-&gt;set_visible( ip_visible = abap_false ) .
ENDIF.
lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ) .
ENDIF.
ADD 1 TO l_row_int. ADD 1 TO l_row_int.
ENDIF.
ENDLOOP. ENDLOOP.
* Let&apos;s write the Grand total * Let&apos;s write the Grand total
l_sort_level = 0. l_sort_level = 0.
lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ). lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ).
lo_row_dim-&gt;set_outline_level( ip_outline_level = l_sort_level ) . lo_row_dim-&gt;set_outline_level( ip_outline_level = l_sort_level ) .
lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ) . * lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ) . Not on grand total
l_text = create_text_subtotal( i_value = &apos;Grand&apos;(002) l_text = create_text_subtotal( i_value = &apos;Grand&apos;(002)
i_totals_function = &lt;fs_sfcat&gt;-totals_function ). i_totals_function = &lt;fs_sfcat&gt;-totals_function ).
@ -1532,6 +1518,13 @@ ENDMETHOD.</source>
ip_row = l_row_int ip_row = l_row_int
ip_formula = l_formula ip_formula = l_formula
ip_style = &lt;fs_sfcat&gt;-style_subtotal ). ip_style = &lt;fs_sfcat&gt;-style_subtotal ).
IF &lt;fs_sfcat&gt;-is_collapsed = abap_true.
lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ).
lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ).
IF &lt;fs_sfcat&gt;-sort_level &gt; l_hidden.
lo_row_dim-&gt;set_visible( ip_visible = abap_false ) .
ENDIF.
ENDIF.
ADD 1 TO l_row_int. ADD 1 TO l_row_int.
ELSE. ELSE.
EXIT. EXIT.
@ -1544,9 +1537,13 @@ ENDMETHOD.</source>
EXIT. EXIT.
ENDIF. ENDIF.
ENDDO. ENDDO.
* Let&apos;s set the row dimension values
lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ). lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ).
lo_row_dim-&gt;set_outline_level( ip_outline_level = ws_layout-max_subtotal_level ) . lo_row_dim-&gt;set_outline_level( ip_outline_level = ws_layout-max_subtotal_level ) .
IF &lt;fs_sfcat&gt;-is_collapsed = abap_true.
lo_row_dim-&gt;set_visible( ip_visible = abap_false ) .
lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ) . lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ) .
ENDIF.
* Now let&apos;s write the cell values * Now let&apos;s write the cell values
IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true.
l_style = get_color_style( i_row = l_table_row l_style = get_color_style( i_row = l_table_row
@ -1600,6 +1597,10 @@ ENDMETHOD.</source>
ip_row = l_row_int ip_row = l_row_int
ip_formula = l_formula ip_formula = l_formula
ip_style = &lt;fs_sfcat&gt;-style_subtotal ). ip_style = &lt;fs_sfcat&gt;-style_subtotal ).
IF &lt;fs_sfcat&gt;-is_collapsed = abap_true.
lo_row_dim = wo_worksheet-&gt;get_row_dimension( ip_row = l_row_int ).
lo_row_dim-&gt;set_collapsed( ip_collapsed = &lt;fs_sfcat&gt;-is_collapsed ).
ENDIF.
ADD 1 TO l_row_int. ADD 1 TO l_row_int.
ELSE. ELSE.
EXIT. EXIT.
@ -1725,25 +1726,27 @@ ENDMETHOD.</source>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_CELL_FORMAT" SCONAME="I_INTTYPE" VERSION="1" LANGU="E" DESCRIPT="ABAP data type (C,D,N,...)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120127" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INTTYPE"/> <parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_CELL_FORMAT" SCONAME="I_INTTYPE" VERSION="1" LANGU="E" DESCRIPT="ABAP data type (C,D,N,...)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120127" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INTTYPE"/>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_CELL_FORMAT" SCONAME="I_DECIMALS" VERSION="1" LANGU="E" DESCRIPT="Byte Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120127" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INT1"/> <parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_CELL_FORMAT" SCONAME="I_DECIMALS" VERSION="1" LANGU="E" DESCRIPT="Byte Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120127" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="INT1"/>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_CELL_FORMAT" SCONAME="R_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Style identifier" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120127" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT"/> <parameter CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_CELL_FORMAT" SCONAME="R_FORMAT" VERSION="1" LANGU="E" DESCRIPT="Style identifier" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120127" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="ZEXCEL_NUMBER_FORMAT"/>
<source>method set_cell_format. <source>METHOD set_cell_format.
data: l_format type zexcel_number_format. DATA: l_format TYPE zexcel_number_format.
clear r_format. CLEAR r_format.
case i_inttype. CASE i_inttype.
when cl_abap_typedescr=&gt;typekind_date. WHEN cl_abap_typedescr=&gt;typekind_date.
r_format = wo_worksheet-&gt;get_default_excel_date_format( ). r_format = wo_worksheet-&gt;get_default_excel_date_format( ).
when cl_abap_typedescr=&gt;typekind_time. WHEN cl_abap_typedescr=&gt;typekind_time.
r_format = zcl_excel_style_number_format=&gt;c_format_date_time6. r_format = zcl_excel_style_number_format=&gt;c_format_date_time6.
when cl_abap_typedescr=&gt;typekind_float or cl_abap_typedescr=&gt;typekind_packed. WHEN cl_abap_typedescr=&gt;typekind_float OR cl_abap_typedescr=&gt;typekind_packed.
if i_decimals &gt; 0 . IF i_decimals &gt; 0 .
l_format = &apos;#,##0.&apos;. l_format = &apos;#,##0.&apos;.
do i_decimals times. DO i_decimals TIMES.
concatenate l_format &apos;0&apos; into l_format. CONCATENATE l_format &apos;0&apos; INTO l_format.
enddo. ENDDO.
r_format = l_format. r_format = l_format.
endif. ENDIF.
endcase. WHEN cl_abap_typedescr=&gt;typekind_int OR cl_abap_typedescr=&gt;typekind_int1 OR cl_abap_typedescr=&gt;typekind_int2.
endmethod.</source> r_format = &apos;#,##0&apos;.
ENDCASE.
ENDMETHOD.</source>
</method> </method>
<method CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_FIELDCATALOG" VERSION="1" LANGU="E" DESCRIPT="Set fieldcatalog from table" EXPOSURE="0" STATE="1" EDITORDER="23 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120112" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0"> <method CLSNAME="ZCL_EXCEL_CONVERTER" CMPNAME="SET_FIELDCATALOG" VERSION="1" LANGU="E" DESCRIPT="Set fieldcatalog from table" EXPOSURE="0" STATE="1" EDITORDER="23 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120112" CHANGEDBY="RTURNHEIM" CHANGEDON="20120313" MTDTYPE="0" MTDDECLTYP="0" BCMTDCAT="00" BCMTDSYN="0">
<source>METHOD set_fieldcatalog. <source>METHOD set_fieldcatalog.

View File

@ -506,9 +506,9 @@ ENDMETHOD.</source>
WHEN &apos;A&apos;. WHEN &apos;A&apos;.
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_min. ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_min.
WHEN &apos;B&apos; . WHEN &apos;B&apos; .
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_average.
WHEN &apos;C&apos; .
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_max. 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. WHEN OTHERS.
CLEAR ls_fieldcatalog-totals_function . CLEAR ls_fieldcatalog-totals_function .
ENDCASE. ENDCASE.
@ -540,7 +540,7 @@ ENDMETHOD.</source>
IF sy-subrc = 0. IF sy-subrc = 0.
ls_fieldcatalog-sort_level = 0 . ls_fieldcatalog-sort_level = 0 .
ls_fieldcatalog-is_subtotalled = ls_sort-subtot. ls_fieldcatalog-is_subtotalled = ls_sort-subtot.
ls_fieldcatalog-is_collapsed = ls_sort-comp. ls_fieldcatalog-is_collapsed = ls_sort-expa.
IF ls_fieldcatalog-is_subtotalled = abap_true. IF ls_fieldcatalog-is_subtotalled = abap_true.
ls_fieldcatalog-sort_level = ls_sort-spos. ls_fieldcatalog-sort_level = ls_sort-spos.
ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_sum. &quot; we need function for text ls_fieldcatalog-totals_function = zcl_excel_table=&gt;totals_function_sum. &quot; we need function for text

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-16"?>
<CLAS CLSNAME="ZCL_EXCEL_CONVERTER_RESULT" VERSION="1" LANGU="E" DESCRIPT="Result object for table reference" UUID="4F6658A2949E0125E1008000C008015A" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDBY="RTURNHEIM" CHANGEDON="20120319" CHGDANYON="00000000" CLSABSTRCT="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="700" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 " REFCLSNAME="ZCL_EXCEL_CONVERTER_ALV">
<publicSection>class ZCL_EXCEL_CONVERTER_RESULT definition
public
inheriting from ZCL_EXCEL_CONVERTER_ALV
abstract
create public .
*&quot;* public components of class ZCL_EXCEL_CONVERTER_RESULT
*&quot;* do not include other source files here!!!
public section.</publicSection>
<protectedSection>*&quot;* protected components of class ZCL_EXCEL_CONVERTER_RESULT
*&quot;* do not include other source files here!!!
protected section.
methods GET_TABLE
importing
!IO_OBJECT type ref to OBJECT
returning
value(RO_DATA) type ref to DATA .</protectedSection>
<privateSection>*&quot;* private components of class ZCL_EXCEL_CONVERTER_RESULT
*&quot;* do not include other source files here!!!
private section.</privateSection>
<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>
<inheritance CLSNAME="ZCL_EXCEL_CONVERTER_RESULT" REFCLSNAME="ZCL_EXCEL_CONVERTER_ALV" VERSION="1" STATE="1" AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDBY="RTURNHEIM" CHANGEDON="20120319"/>
<method CLSNAME="ZCL_EXCEL_CONVERTER_RESULT" CMPNAME="GET_TABLE" VERSION="1" LANGU="E" DESCRIPT="Get table" EXPOSURE="1" STATE="1" EDITORDER="1 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDBY="RTURNHEIM" CHANGEDON="20120319" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="700" BCMTDCAT="00" BCMTDSYN="0">
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_RESULT" CMPNAME="GET_TABLE" SCONAME="IO_OBJECT" VERSION="1" LANGU="E" DESCRIPT="Data reference object" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="OBJECT"/>
<parameter CLSNAME="ZCL_EXCEL_CONVERTER_RESULT" CMPNAME="GET_TABLE" SCONAME="RO_DATA" VERSION="1" LANGU="E" DESCRIPT="Data table" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDON="00000000" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="DATA"/>
<source>METHOD get_table.
DATA: lo_object TYPE REF TO object,
ls_seoclass TYPE seoclass,
l_method TYPE string.
SELECT SINGLE * INTO ls_seoclass
FROM seoclass
WHERE clsname = &apos;IF_SALV_BS_DATA_SOURCE&apos;.
IF sy-subrc = 0.
l_method = &apos;GET_TABLE_REF&apos;.
lo_object ?= io_object.
CALL METHOD lo_object-&gt;(l_method)
RECEIVING
value = ro_data.
ELSE.
l_method = &apos;GET_REF_TO_TABLE&apos;.
lo_object ?= io_object.
CALL METHOD lo_object-&gt;(l_method)
RECEIVING
value = ro_data.
ENDIF.
ENDMETHOD.</source>
</method>
</CLAS>

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-16"?>
<CLAS CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_EX" VERSION="1" LANGU="E" DESCRIPT="SALV - ALV converter for export" UUID="4F665952949E0125E1008000C008015A" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDBY="RTURNHEIM" CHANGEDON="00000000" CHGDANYON="00000000" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="700" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 " REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT">
<publicSection>class ZCL_EXCEL_CONVERTER_RESULT_EX definition
public
inheriting from ZCL_EXCEL_CONVERTER_RESULT
final
create public .
*&quot;* public components of class ZCL_EXCEL_CONVERTER_RESULT_EX
*&quot;* do not include other source files here!!!
public section.
methods ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT
redefinition .
methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG
redefinition .</publicSection>
<protectedSection>*&quot;* protected components of class ZCL_EXCEL_CONVERTER_RESULT_EX
*&quot;* do not include other source files here!!!
protected section.</protectedSection>
<privateSection>*&quot;* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT
*&quot;* do not include other source files here!!!
private section.</privateSection>
<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>
<inheritance CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_EX" REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT" VERSION="1" STATE="1" AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDON="00000000">
<redefinition CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_EX" REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT" VERSION="1" MTDNAME="ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT"/>
<redefinition CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_EX" REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT" VERSION="1" MTDNAME="ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG"/>
</inheritance>
<interfaceMethod CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_EX" CPDNAME="ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT">
<source>METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT.
DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table.
TRY.
lo_result ?= io_object.
CATCH cx_sy_move_cast_error .
RAISE EXCEPTION TYPE zcx_excel.
ENDTRY.
ENDMETHOD.</source>
</interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_EX" CPDNAME="ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG">
<source>METHOD zif_excel_converter~create_fieldcatalog.
DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table,
lo_ex_cm TYPE REF TO cl_salv_ex_cm,
lo_data TYPE REF TO data.
FIELD-SYMBOLS: &lt;fs_table&gt; TYPE STANDARD TABLE.
TRY.
zif_excel_converter~can_convert_object( io_object = io_object ).
ENDTRY.
lo_result ?= io_object.
CLEAR: es_layout,
et_fieldcatalog.
IF lo_result IS BOUND.
lo_data = get_table( io_object = lo_result-&gt;r_model-&gt;r_data ).
IF lo_data IS BOUND.
ASSIGN lo_data-&gt;* TO &lt;fs_table&gt; .
lo_ex_cm ?= lo_result-&gt;r_model-&gt;r_model.
ws_layo = lo_ex_cm-&gt;s_layo.
* T_DRDN Instance Attribute Public Type LVC_T_DROP
wt_fcat = lo_ex_cm-&gt;t_fcat.
wt_filt = lo_ex_cm-&gt;t_filt.
* T_HYPE Instance Attribute Public Type LVC_T_HYPE
* T_SELECTED_CELLS Instance Attribute Public Type LVC_T_CELL
* T_SELECTED_COLUMNS Instance Attribute Public Type LVC_T_COL
wt_sort = lo_ex_cm-&gt;t_sort.
apply_sort( EXPORTING it_table = &lt;fs_table&gt;
IMPORTING eo_table = eo_table ) .
get_color( EXPORTING io_table = eo_table
IMPORTING et_colors = et_colors ) .
get_filter( EXPORTING io_table = eo_table
IMPORTING et_filter = et_filter ) .
update_catalog( CHANGING cs_layout = es_layout
ct_fieldcatalog = et_fieldcatalog ).
else.
* We have a problem and should stop here.
ENDIF.
ENDIF.
ENDMETHOD.</source>
</interfaceMethod>
</CLAS>

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-16"?> <?xml version="1.0" encoding="utf-16"?>
<CLAS CLSNAME="ZCL_EXCEL_CONVERTER_WD_RESULT" VERSION="1" LANGU="E" DESCRIPT="SALV converter for web dynpro" UUID="4F62526AFD6A0125E1008000C008015A" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" AUTHOR="RTURNHEIM" CREATEDON="20120316" CHANGEDBY="RTURNHEIM" CHANGEDON="00000000" CHGDANYON="00000000" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="700" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 " REFCLSNAME="ZCL_EXCEL_CONVERTER_ALV"> <CLAS CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_WD" VERSION="1" LANGU="E" DESCRIPT="SALV converter for web dynpro" UUID="4F6071D6C832018FE1008000C008015A" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDBY="RTURNHEIM" CHANGEDON="00000000" CHGDANYON="00000000" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="700" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 " REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT">
<publicSection>class ZCL_EXCEL_CONVERTER_WD_RESULT definition <publicSection>class ZCL_EXCEL_CONVERTER_RESULT_WD definition
public public
inheriting from ZCL_EXCEL_CONVERTER_ALV inheriting from ZCL_EXCEL_CONVERTER_RESULT
final final
create public . create public .
*&quot;* public components of class ZCL_EXCEL_CONVERTER_WD_RESULT *&quot;* public components of class ZCL_EXCEL_CONVERTER_RESULT_WD
*&quot;* do not include other source files here!!! *&quot;* do not include other source files here!!!
public section. public section.
@ -14,7 +14,7 @@ public section.
redefinition . redefinition .
methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG
redefinition .</publicSection> redefinition .</publicSection>
<protectedSection>*&quot;* protected components of class ZCL_EXCEL_CONVERTER_SALV_TABLE <protectedSection>*&quot;* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD
*&quot;* do not include other source files here!!! *&quot;* do not include other source files here!!!
protected section.</protectedSection> protected section.</protectedSection>
<privateSection>*&quot;* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT <privateSection>*&quot;* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT
@ -28,12 +28,12 @@ private section.</privateSection>
*&quot;* implementation or private method&apos;s signature</localTypes> *&quot;* implementation or private method&apos;s signature</localTypes>
<localMacros>*&quot;* use this source file for any macro definitions you need <localMacros>*&quot;* use this source file for any macro definitions you need
*&quot;* in the implementation part of the class</localMacros> *&quot;* in the implementation part of the class</localMacros>
<inheritance CLSNAME="ZCL_EXCEL_CONVERTER_WD_RESULT" REFCLSNAME="ZCL_EXCEL_CONVERTER_ALV" VERSION="1" STATE="1" AUTHOR="RTURNHEIM" CREATEDON="20120316" CHANGEDON="00000000"> <inheritance CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_WD" REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT" VERSION="1" STATE="1" AUTHOR="RTURNHEIM" CREATEDON="20120319" CHANGEDON="00000000">
<redefinition CLSNAME="ZCL_EXCEL_CONVERTER_WD_RESULT" REFCLSNAME="ZCL_EXCEL_CONVERTER_ALV" VERSION="1" MTDNAME="ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT"/> <redefinition CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_WD" REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT" VERSION="1" MTDNAME="ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT"/>
<redefinition CLSNAME="ZCL_EXCEL_CONVERTER_WD_RESULT" REFCLSNAME="ZCL_EXCEL_CONVERTER_ALV" VERSION="1" MTDNAME="ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG"/> <redefinition CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_WD" REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT" VERSION="1" MTDNAME="ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG"/>
</inheritance> </inheritance>
<interfaceMethod CLSNAME="ZCL_EXCEL_CONVERTER_WD_RESULT" CPDNAME="ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT"> <interfaceMethod CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_WD" CPDNAME="ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT">
<source>METHOD zif_excel_converter~can_convert_object. <source>METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT.
DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table. DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table.
@ -45,10 +45,9 @@ private section.</privateSection>
ENDMETHOD.</source> ENDMETHOD.</source>
</interfaceMethod> </interfaceMethod>
<interfaceMethod CLSNAME="ZCL_EXCEL_CONVERTER_WD_RESULT" CPDNAME="ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG"> <interfaceMethod CLSNAME="ZCL_EXCEL_CONVERTER_RESULT_WD" CPDNAME="ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG">
<source>METHOD zif_excel_converter~create_fieldcatalog. <source>METHOD zif_excel_converter~create_fieldcatalog.
DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table, DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table,
lo_bs_data TYPE REF TO cl_salv_bs_data_table,
lo_ex_cm TYPE REF TO cl_salv_ex_cm, lo_ex_cm TYPE REF TO cl_salv_ex_cm,
lo_data TYPE REF TO data. lo_data TYPE REF TO data.
@ -64,10 +63,9 @@ ENDMETHOD.</source>
et_fieldcatalog. et_fieldcatalog.
IF lo_result IS BOUND. IF lo_result IS BOUND.
lo_bs_data ?= lo_result-&gt;r_model-&gt;r_data. lo_data = get_table( io_object = lo_result-&gt;r_model-&gt;r_data ).
lo_data = lo_bs_data-&gt;get_ref_to_table( ) . IF lo_data IS BOUND.
ASSIGN lo_data-&gt;* TO &lt;fs_table&gt; . ASSIGN lo_data-&gt;* TO &lt;fs_table&gt; .
* CL_SALV_WD_C_TABLE_V_TABLE &quot; If we want to do it we need this * CL_SALV_WD_C_TABLE_V_TABLE &quot; If we want to do it we need this
* if_salv_wd_comp_table_events~on_export_excel( ). * if_salv_wd_comp_table_events~on_export_excel( ).
* lo_ex_cm ?= lo_result-&gt;r_model-&gt;r_model. * lo_ex_cm ?= lo_result-&gt;r_model-&gt;r_model.
@ -91,6 +89,9 @@ ENDMETHOD.</source>
update_catalog( CHANGING cs_layout = es_layout update_catalog( CHANGING cs_layout = es_layout
ct_fieldcatalog = et_fieldcatalog ). ct_fieldcatalog = et_fieldcatalog ).
ELSE.
* We have a problem and should stop here
ENDIF.
ENDIF. ENDIF.
ENDMETHOD.</source> ENDMETHOD.</source>
</interfaceMethod> </interfaceMethod>