mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 19:26:10 +08:00
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:
parent
d98d0f79d1
commit
3b811397d8
|
@ -273,6 +273,8 @@ TYPES: BEGIN OF ts_sort_values,
|
|||
row_int TYPE zexcel_cell_row,
|
||||
value TYPE REF TO data,
|
||||
new TYPE flag,
|
||||
sort_level TYPE int4,
|
||||
is_collapsed type flag,
|
||||
END OF ts_sort_values,
|
||||
|
||||
tt_sort_values TYPE HASHED TABLE OF ts_sort_values WITH UNIQUE KEY fieldname.
|
||||
|
@ -443,11 +445,11 @@ endmethod.</source>
|
|||
|
||||
* Object CL_SALV_RESULT
|
||||
ls_objects-seoclass = 'CL_SALV_EX_RESULT_DATA_TABLE '.
|
||||
ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_EX_RESULT'.
|
||||
ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_RESULT_EX'.
|
||||
INSERT ls_objects INTO TABLE wt_objects.
|
||||
* Object CL_SALV_WD_RESULT
|
||||
ls_objects-seoclass = 'CL_SALV_WD_RESULT_DATA_TABLE '.
|
||||
ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_WD_RESULT'.
|
||||
ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_RESULT_WD'.
|
||||
INSERT ls_objects INTO TABLE wt_objects.
|
||||
|
||||
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"/>
|
||||
<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.
|
||||
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,
|
||||
lo_data TYPE REF TO data,
|
||||
l_row_header TYPE zexcel_cell_row VALUE '2',
|
||||
|
@ -1327,14 +1320,14 @@ ENDMETHOD.</source>
|
|||
ls_sort_values TYPE ts_sort_values,
|
||||
ls_subtotal_rows TYPE ts_subtotal_rows,
|
||||
l_sort_level TYPE int4,
|
||||
ls_line TYPE ts_line,
|
||||
lt_line TYPE tt_line,
|
||||
l_hidden TYPE int4,
|
||||
l_line TYPE i,
|
||||
l_guid TYPE guid_22,
|
||||
l_tabix TYPE sy-tabix,
|
||||
l_cells 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: <fs_stab> TYPE ANY,
|
||||
<fs_tab> TYPE STANDARD TABLE,
|
||||
|
@ -1356,10 +1349,14 @@ ENDMETHOD.</source>
|
|||
READ TABLE <fs_tab> ASSIGNING <fs_stab> INDEX 1.
|
||||
IF sy-subrc = 0.
|
||||
l_row_int = i_row_int + 1.
|
||||
LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true.
|
||||
lt_fcat = wt_fieldcatalog.
|
||||
SORT lt_fcat BY sort_level DESCENDING.
|
||||
LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true.
|
||||
ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>.
|
||||
ls_sort_values-fieldname = <fs_sfcat>-columnname.
|
||||
ls_sort_values-row_int = l_row_int.
|
||||
ls_sort_values-sort_level = <fs_sfcat>-sort_level.
|
||||
ls_sort_values-is_collapsed = <fs_sfcat>-is_collapsed.
|
||||
CREATE DATA ls_sort_values-value LIKE <fs_fldval>.
|
||||
ASSIGN ls_sort_values-value->* TO <fs_sortval>.
|
||||
<fs_sortval> = <fs_fldval>.
|
||||
|
@ -1367,12 +1364,24 @@ ENDMETHOD.</source>
|
|||
ENDLOOP.
|
||||
ENDIF.
|
||||
l_row_int = i_row_int.
|
||||
* Let's check if we need to hide a sort level.
|
||||
DESCRIBE TABLE wt_sort_values LINES l_line.
|
||||
IF l_line <= 1.
|
||||
CLEAR l_hidden.
|
||||
ELSE.
|
||||
LOOP AT wt_sort_values INTO ls_sort_values WHERE is_collapsed = abap_false.
|
||||
IF l_hidden < ls_sort_values-sort_level.
|
||||
l_hidden = ls_sort_values-sort_level.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ADD 1 TO l_hidden. " As this is the first level we show.
|
||||
* First loop without formular only addtional rows with subtotal text.
|
||||
LOOP AT <fs_tab> ASSIGNING <fs_stab>.
|
||||
l_table_row = sy-tabix.
|
||||
ADD 1 TO l_row_int. " 1 is for header row.
|
||||
REFRESH lt_line.
|
||||
LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true.
|
||||
l_row_int_start = l_row_int.
|
||||
SORT lt_fcat BY sort_level DESCENDING.
|
||||
LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true.
|
||||
l_col_int = i_col_int + <fs_sfcat>-position - 1.
|
||||
l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ).
|
||||
* Now the cell values
|
||||
|
@ -1382,102 +1391,79 @@ ENDMETHOD.</source>
|
|||
IF sy-subrc = 0.
|
||||
ASSIGN <fs_sortv>-value->* TO <fs_sortval>.
|
||||
IF <fs_sortval> <> <fs_fldval> OR <fs_sortv>-new = abap_true.
|
||||
* First let's write the value as it has to appear.
|
||||
CLEAR ls_line.
|
||||
ls_line-text = create_text_subtotal( i_value = <fs_sortval>
|
||||
i_totals_function = <fs_sfcat>-totals_function ).
|
||||
ls_line-col_alpha = l_col_alpha.
|
||||
ls_line-sort_level = <fs_sfcat>-sort_level.
|
||||
ls_line-is_collapsed = <fs_sfcat>-is_collapsed.
|
||||
ls_line-row_int_start = <fs_sortv>-row_int.
|
||||
ls_line-columnname = <fs_sfcat>-columnname.
|
||||
|
||||
INSERT ls_line INTO TABLE lt_line.
|
||||
* Now let's change the key
|
||||
<fs_sortval> = <fs_fldval>.
|
||||
<fs_sortv>-new = abap_false.
|
||||
<fs_sortv>-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.
|
||||
* First let's remmember the subtotal values as it has to appear later.
|
||||
ls_subtotal_rows-row_int = l_row_int.
|
||||
ls_subtotal_rows-row_int_start = ls_line-row_int_start.
|
||||
ls_subtotal_rows-columnname = ls_line-columnname.
|
||||
ls_subtotal_rows-row_int_start = <fs_sortv>-row_int.
|
||||
ls_subtotal_rows-columnname = <fs_sfcat>-columnname.
|
||||
INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows.
|
||||
|
||||
wo_worksheet->set_cell( ip_column = ls_line-col_alpha
|
||||
* Now let's write the subtotal line
|
||||
l_cell_value = create_text_subtotal( i_value = <fs_sortval>
|
||||
i_totals_function = <fs_sfcat>-totals_function ).
|
||||
wo_worksheet->set_cell( ip_column = l_col_alpha
|
||||
ip_row = l_row_int
|
||||
ip_value = ls_line-text
|
||||
ip_value = l_cell_value
|
||||
ip_abap_type = cl_abap_typedescr=>typekind_string
|
||||
ip_style = <fs_sfcat>-style_subtotal ).
|
||||
READ TABLE wt_sort_values ASSIGNING <fs_sortv> WITH TABLE KEY fieldname = ls_line-columnname.
|
||||
IF sy-subrc = 0.
|
||||
IF l_line > l_tabix . " Only if we have more than 1 and subtotal does not change on lower level but on higher does
|
||||
<fs_sortv>-new = abap_true.
|
||||
ENDIF.
|
||||
<fs_sortv>-row_int = l_row_int_start + l_line.
|
||||
ENDIF.
|
||||
l_sort_level = ls_line-sort_level.
|
||||
lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ).
|
||||
lo_row_dim->set_outline_level( ip_outline_level = l_sort_level ) .
|
||||
lo_row_dim->set_collapsed( ip_collapsed = ls_line-is_collapsed ) .
|
||||
lo_row_dim->set_outline_level( ip_outline_level = <fs_sfcat>-sort_level ) .
|
||||
IF <fs_sfcat>-is_collapsed = abap_true.
|
||||
IF <fs_sfcat>-sort_level > l_hidden.
|
||||
lo_row_dim->set_visible( ip_visible = abap_false ) .
|
||||
ENDIF.
|
||||
lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) .
|
||||
ENDIF.
|
||||
* Now let's change the key
|
||||
ADD 1 TO l_row_int.
|
||||
<fs_sortval> = <fs_fldval>.
|
||||
<fs_sortv>-new = abap_false.
|
||||
l_line = <fs_sortv>-sort_level.
|
||||
LOOP AT wt_sort_values ASSIGNING <fs_sortv> WHERE sort_level >= l_line.
|
||||
<fs_sortv>-row_int = l_row_int.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDLOOP.
|
||||
ADD 1 TO l_row_int.
|
||||
REFRESH lt_line.
|
||||
LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true.
|
||||
l_row_int_start = l_row_int.
|
||||
SORT lt_fcat BY sort_level DESCENDING.
|
||||
LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true.
|
||||
l_col_int = i_col_int + <fs_sfcat>-position - 1.
|
||||
l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ).
|
||||
READ TABLE wt_sort_values ASSIGNING <fs_sortv> WITH TABLE KEY fieldname = <fs_sfcat>-columnname.
|
||||
IF sy-subrc = 0.
|
||||
ASSIGN <fs_sortv>-value->* TO <fs_sortval>.
|
||||
* First let's write the value as it has to appear.
|
||||
CLEAR ls_line.
|
||||
ls_line-text = create_text_subtotal( i_value = <fs_sortval>
|
||||
i_totals_function = <fs_sfcat>-totals_function ).
|
||||
ls_line-col_alpha = l_col_alpha.
|
||||
ls_line-sort_level = <fs_sfcat>-sort_level.
|
||||
ls_line-is_collapsed = <fs_sfcat>-is_collapsed.
|
||||
ls_line-row_int_start = <fs_sortv>-row_int.
|
||||
ls_line-columnname = <fs_sfcat>-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_start = ls_line-row_int_start.
|
||||
ls_subtotal_rows-columnname = ls_line-columnname.
|
||||
ls_subtotal_rows-row_int_start = <fs_sortv>-row_int.
|
||||
ls_subtotal_rows-columnname = <fs_sfcat>-columnname.
|
||||
INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows.
|
||||
|
||||
wo_worksheet->set_cell( ip_column = ls_line-col_alpha
|
||||
* First let's write the value as it has to appear.
|
||||
l_cell_value = create_text_subtotal( i_value = <fs_sortval>
|
||||
i_totals_function = <fs_sfcat>-totals_function ).
|
||||
wo_worksheet->set_cell( ip_column = l_col_alpha
|
||||
ip_row = l_row_int
|
||||
ip_value = ls_line-text
|
||||
ip_value = l_cell_value
|
||||
ip_abap_type = cl_abap_typedescr=>typekind_string
|
||||
ip_style = <fs_sfcat>-style_subtotal ).
|
||||
|
||||
l_sort_level = ls_line-sort_level.
|
||||
l_sort_level = <fs_sfcat>-sort_level.
|
||||
lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ).
|
||||
lo_row_dim->set_outline_level( ip_outline_level = l_sort_level ) .
|
||||
lo_row_dim->set_collapsed( ip_collapsed = ls_line-is_collapsed ) .
|
||||
IF <fs_sfcat>-is_collapsed = abap_true.
|
||||
IF <fs_sfcat>-sort_level > l_hidden.
|
||||
lo_row_dim->set_visible( ip_visible = abap_false ) .
|
||||
ENDIF.
|
||||
lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) .
|
||||
ENDIF.
|
||||
ADD 1 TO l_row_int.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
* Let's write the Grand total
|
||||
l_sort_level = 0.
|
||||
lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ).
|
||||
lo_row_dim->set_outline_level( ip_outline_level = l_sort_level ) .
|
||||
lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) .
|
||||
* lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . Not on grand total
|
||||
|
||||
l_text = create_text_subtotal( i_value = 'Grand'(002)
|
||||
i_totals_function = <fs_sfcat>-totals_function ).
|
||||
|
@ -1532,6 +1518,13 @@ ENDMETHOD.</source>
|
|||
ip_row = l_row_int
|
||||
ip_formula = l_formula
|
||||
ip_style = <fs_sfcat>-style_subtotal ).
|
||||
IF <fs_sfcat>-is_collapsed = abap_true.
|
||||
lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ).
|
||||
lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ).
|
||||
IF <fs_sfcat>-sort_level > l_hidden.
|
||||
lo_row_dim->set_visible( ip_visible = abap_false ) .
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ADD 1 TO l_row_int.
|
||||
ELSE.
|
||||
EXIT.
|
||||
|
@ -1544,9 +1537,13 @@ ENDMETHOD.</source>
|
|||
EXIT.
|
||||
ENDIF.
|
||||
ENDDO.
|
||||
* Let's set the row dimension values
|
||||
lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ).
|
||||
lo_row_dim->set_outline_level( ip_outline_level = ws_layout-max_subtotal_level ) .
|
||||
IF <fs_sfcat>-is_collapsed = abap_true.
|
||||
lo_row_dim->set_visible( ip_visible = abap_false ) .
|
||||
lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) .
|
||||
ENDIF.
|
||||
* Now let's write the cell values
|
||||
IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true.
|
||||
l_style = get_color_style( i_row = l_table_row
|
||||
|
@ -1600,6 +1597,10 @@ ENDMETHOD.</source>
|
|||
ip_row = l_row_int
|
||||
ip_formula = l_formula
|
||||
ip_style = <fs_sfcat>-style_subtotal ).
|
||||
IF <fs_sfcat>-is_collapsed = abap_true.
|
||||
lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ).
|
||||
lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ).
|
||||
ENDIF.
|
||||
ADD 1 TO l_row_int.
|
||||
ELSE.
|
||||
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_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"/>
|
||||
<source>method set_cell_format.
|
||||
data: l_format type zexcel_number_format.
|
||||
<source>METHOD set_cell_format.
|
||||
DATA: l_format TYPE zexcel_number_format.
|
||||
|
||||
clear r_format.
|
||||
case i_inttype.
|
||||
when cl_abap_typedescr=>typekind_date.
|
||||
CLEAR r_format.
|
||||
CASE i_inttype.
|
||||
WHEN cl_abap_typedescr=>typekind_date.
|
||||
r_format = wo_worksheet->get_default_excel_date_format( ).
|
||||
when cl_abap_typedescr=>typekind_time.
|
||||
WHEN cl_abap_typedescr=>typekind_time.
|
||||
r_format = zcl_excel_style_number_format=>c_format_date_time6.
|
||||
when cl_abap_typedescr=>typekind_float or cl_abap_typedescr=>typekind_packed.
|
||||
if i_decimals > 0 .
|
||||
WHEN cl_abap_typedescr=>typekind_float OR cl_abap_typedescr=>typekind_packed.
|
||||
IF i_decimals > 0 .
|
||||
l_format = '#,##0.'.
|
||||
do i_decimals times.
|
||||
concatenate l_format '0' into l_format.
|
||||
enddo.
|
||||
DO i_decimals TIMES.
|
||||
CONCATENATE l_format '0' INTO l_format.
|
||||
ENDDO.
|
||||
r_format = l_format.
|
||||
endif.
|
||||
endcase.
|
||||
endmethod.</source>
|
||||
ENDIF.
|
||||
WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2.
|
||||
r_format = '#,##0'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.</source>
|
||||
</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">
|
||||
<source>METHOD set_fieldcatalog.
|
||||
|
|
|
@ -506,9 +506,9 @@ ENDMETHOD.</source>
|
|||
WHEN 'A'.
|
||||
ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_min.
|
||||
WHEN 'B' .
|
||||
ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_average.
|
||||
WHEN 'C' .
|
||||
ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_max.
|
||||
WHEN 'C' .
|
||||
ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_average.
|
||||
WHEN OTHERS.
|
||||
CLEAR ls_fieldcatalog-totals_function .
|
||||
ENDCASE.
|
||||
|
@ -540,7 +540,7 @@ ENDMETHOD.</source>
|
|||
IF sy-subrc = 0.
|
||||
ls_fieldcatalog-sort_level = 0 .
|
||||
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.
|
||||
ls_fieldcatalog-sort_level = ls_sort-spos.
|
||||
ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. " we need function for text
|
||||
|
|
61
ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT.slnk
Normal file
61
ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT.slnk
Normal 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 .
|
||||
|
||||
*"* public components of class ZCL_EXCEL_CONVERTER_RESULT
|
||||
*"* do not include other source files here!!!
|
||||
public section.</publicSection>
|
||||
<protectedSection>*"* protected components of class ZCL_EXCEL_CONVERTER_RESULT
|
||||
*"* 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>*"* private components of class ZCL_EXCEL_CONVERTER_RESULT
|
||||
*"* do not include other source files here!!!
|
||||
private section.</privateSection>
|
||||
<localImplementation>*"* local class implementation for public class
|
||||
*"* use this source file for the implementation part of
|
||||
*"* local helper classes</localImplementation>
|
||||
<localTypes>*"* use this source file for any type declarations (class
|
||||
*"* definitions, interfaces or data types) you need for method
|
||||
*"* implementation or private method's signature</localTypes>
|
||||
<localMacros>*"* use this source file for any macro definitions you need
|
||||
*"* 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 = 'IF_SALV_BS_DATA_SOURCE'.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
l_method = 'GET_TABLE_REF'.
|
||||
lo_object ?= io_object.
|
||||
CALL METHOD lo_object->(l_method)
|
||||
RECEIVING
|
||||
value = ro_data.
|
||||
ELSE.
|
||||
l_method = 'GET_REF_TO_TABLE'.
|
||||
lo_object ?= io_object.
|
||||
CALL METHOD lo_object->(l_method)
|
||||
RECEIVING
|
||||
value = ro_data.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.</source>
|
||||
</method>
|
||||
</CLAS>
|
97
ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_EX.slnk
Normal file
97
ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_EX.slnk
Normal 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 .
|
||||
|
||||
*"* public components of class ZCL_EXCEL_CONVERTER_RESULT_EX
|
||||
*"* 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>*"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_EX
|
||||
*"* do not include other source files here!!!
|
||||
protected section.</protectedSection>
|
||||
<privateSection>*"* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT
|
||||
*"* do not include other source files here!!!
|
||||
private section.</privateSection>
|
||||
<localImplementation>*"* local class implementation for public class
|
||||
*"* use this source file for the implementation part of
|
||||
*"* local helper classes</localImplementation>
|
||||
<localTypes>*"* use this source file for any type declarations (class
|
||||
*"* definitions, interfaces or data types) you need for method
|
||||
*"* implementation or private method's signature</localTypes>
|
||||
<localMacros>*"* use this source file for any macro definitions you need
|
||||
*"* 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: <fs_table> 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->r_model->r_data ).
|
||||
IF lo_data IS BOUND.
|
||||
ASSIGN lo_data->* TO <fs_table> .
|
||||
|
||||
lo_ex_cm ?= lo_result->r_model->r_model.
|
||||
ws_layo = lo_ex_cm->s_layo.
|
||||
* T_DRDN Instance Attribute Public Type LVC_T_DROP
|
||||
wt_fcat = lo_ex_cm->t_fcat.
|
||||
wt_filt = lo_ex_cm->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->t_sort.
|
||||
|
||||
apply_sort( EXPORTING it_table = <fs_table>
|
||||
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>
|
|
@ -1,12 +1,12 @@
|
|||
<?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">
|
||||
<publicSection>class ZCL_EXCEL_CONVERTER_WD_RESULT definition
|
||||
<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_RESULT_WD definition
|
||||
public
|
||||
inheriting from ZCL_EXCEL_CONVERTER_ALV
|
||||
inheriting from ZCL_EXCEL_CONVERTER_RESULT
|
||||
final
|
||||
create public .
|
||||
|
||||
*"* public components of class ZCL_EXCEL_CONVERTER_WD_RESULT
|
||||
*"* public components of class ZCL_EXCEL_CONVERTER_RESULT_WD
|
||||
*"* do not include other source files here!!!
|
||||
public section.
|
||||
|
||||
|
@ -14,7 +14,7 @@ public section.
|
|||
redefinition .
|
||||
methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG
|
||||
redefinition .</publicSection>
|
||||
<protectedSection>*"* protected components of class ZCL_EXCEL_CONVERTER_SALV_TABLE
|
||||
<protectedSection>*"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD
|
||||
*"* do not include other source files here!!!
|
||||
protected section.</protectedSection>
|
||||
<privateSection>*"* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT
|
||||
|
@ -28,12 +28,12 @@ private section.</privateSection>
|
|||
*"* implementation or private method's signature</localTypes>
|
||||
<localMacros>*"* use this source file for any macro definitions you need
|
||||
*"* 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">
|
||||
<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_WD_RESULT" REFCLSNAME="ZCL_EXCEL_CONVERTER_ALV" VERSION="1" MTDNAME="ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG"/>
|
||||
<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_RESULT_WD" REFCLSNAME="ZCL_EXCEL_CONVERTER_RESULT" 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~CREATE_FIELDCATALOG"/>
|
||||
</inheritance>
|
||||
<interfaceMethod CLSNAME="ZCL_EXCEL_CONVERTER_WD_RESULT" CPDNAME="ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT">
|
||||
<source>METHOD 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.
|
||||
|
||||
DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table.
|
||||
|
||||
|
@ -45,10 +45,9 @@ private section.</privateSection>
|
|||
|
||||
ENDMETHOD.</source>
|
||||
</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.
|
||||
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_data TYPE REF TO data.
|
||||
|
||||
|
@ -64,10 +63,9 @@ ENDMETHOD.</source>
|
|||
et_fieldcatalog.
|
||||
|
||||
IF lo_result IS BOUND.
|
||||
lo_bs_data ?= lo_result->r_model->r_data.
|
||||
lo_data = lo_bs_data->get_ref_to_table( ) .
|
||||
lo_data = get_table( io_object = lo_result->r_model->r_data ).
|
||||
IF lo_data IS BOUND.
|
||||
ASSIGN lo_data->* TO <fs_table> .
|
||||
|
||||
* CL_SALV_WD_C_TABLE_V_TABLE " If we want to do it we need this
|
||||
* if_salv_wd_comp_table_events~on_export_excel( ).
|
||||
* lo_ex_cm ?= lo_result->r_model->r_model.
|
||||
|
@ -91,6 +89,9 @@ ENDMETHOD.</source>
|
|||
|
||||
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>
|
Loading…
Reference in New Issue
Block a user