From 3b811397d8a4bc77fc770a2176f50e38c2874636 Mon Sep 17 00:00:00 2001 From: Rene Turnheim Date: Wed, 21 Mar 2012 02:00:30 +0000 Subject: [PATCH] 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 --- ZA2X/CLAS/ZCL_EXCEL_CONVERTER.slnk | 233 +++++++++--------- ZA2X/CLAS/ZCL_EXCEL_CONVERTER_ALV.slnk | 6 +- ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT.slnk | 61 +++++ ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_EX.slnk | 97 ++++++++ ...lnk => ZCL_EXCEL_CONVERTER_RESULT_WD.slnk} | 49 ++-- 5 files changed, 304 insertions(+), 142 deletions(-) create mode 100644 ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT.slnk create mode 100644 ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_EX.slnk rename ZA2X/CLAS/{ZCL_EXCEL_CONVERTER_WD_RESULT.slnk => ZCL_EXCEL_CONVERTER_RESULT_WD.slnk} (59%) diff --git a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER.slnk b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER.slnk index 64dc423..d1fad17 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER.slnk @@ -269,10 +269,12 @@ TYPES: BEGIN OF ts_alv_types, tt_alv_types TYPE HASHED TABLE OF ts_alv_types WITH UNIQUE KEY seoclass. TYPES: BEGIN OF ts_sort_values, - fieldname TYPE fieldname, - row_int TYPE zexcel_cell_row, - value TYPE REF TO data, - new TYPE flag, + fieldname TYPE fieldname, + 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. * 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. @@ -1296,16 +1298,7 @@ ENDMETHOD. 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. 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. 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-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. 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. 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. +* 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 = <fs_sortv>-row_int. + ls_subtotal_rows-columnname = <fs_sfcat>-columnname. + INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. +* 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 = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + 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. - <fs_sortv>-row_int = l_row_int. + 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. -* 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_start = ls_line-row_int_start. - ls_subtotal_rows-columnname = ls_line-columnname. - INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. - - wo_worksheet->set_cell( ip_column = ls_line-col_alpha - ip_row = l_row_int - ip_value = ls_line-text - 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 ) . - ADD 1 TO l_row_int. - 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>. + ls_subtotal_rows-row_int = l_row_int. + 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. * 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. + 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 = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + + 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 ) . + 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. -* 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. - INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. - - wo_worksheet->set_cell( ip_column = ls_line-col_alpha - ip_row = l_row_int - ip_value = ls_line-text - ip_abap_type = cl_abap_typedescr=>typekind_string - ip_style = <fs_sfcat>-style_subtotal ). - - 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 ) . - ADD 1 TO l_row_int. - 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. 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. 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 ) . - lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . + 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. 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. - method set_cell_format. - data: l_format type zexcel_number_format. + 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. + ENDIF. + WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2. + r_format = '#,##0'. + ENDCASE. +ENDMETHOD. METHOD set_fieldcatalog. diff --git a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_ALV.slnk b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_ALV.slnk index 2fe4c1c..edc61d9 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_ALV.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_ALV.slnk @@ -506,9 +506,9 @@ ENDMETHOD. 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. 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 diff --git a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT.slnk b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT.slnk new file mode 100644 index 0000000..0d3c5a2 --- /dev/null +++ b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT.slnk @@ -0,0 +1,61 @@ + + + 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. + *"* 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 . + *"* private components of class ZCL_EXCEL_CONVERTER_RESULT +*"* do not include other source files here!!! +private section. + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + 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. + + diff --git a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_EX.slnk b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_EX.slnk new file mode 100644 index 0000000..2855d2c --- /dev/null +++ b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_EX.slnk @@ -0,0 +1,97 @@ + + + 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 . + *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_EX +*"* do not include other source files here!!! +protected section. + *"* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT +*"* do not include other source files here!!! +private section. + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + 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. + + + 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. + + diff --git a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_WD_RESULT.slnk b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_WD.slnk similarity index 59% rename from ZA2X/CLAS/ZCL_EXCEL_CONVERTER_WD_RESULT.slnk rename to ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_WD.slnk index 92aead8..c3d4eae 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_WD_RESULT.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_CONVERTER_RESULT_WD.slnk @@ -1,12 +1,12 @@ - - class ZCL_EXCEL_CONVERTER_WD_RESULT definition + + 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 . - *"* protected components of class ZCL_EXCEL_CONVERTER_SALV_TABLE + *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! protected section. *"* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT @@ -28,12 +28,12 @@ private section. *"* implementation or private method's signature *"* use this source file for any macro definitions you need *"* in the implementation part of the class - - - + + + - - METHOD zif_excel_converter~can_convert_object. + + 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. ENDMETHOD. - + 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. 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( ) . - ASSIGN lo_data->* TO <fs_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. @@ -80,17 +78,20 @@ ENDMETHOD. * 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 ) . + 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_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . - get_filter( EXPORTING io_table = eo_table - IMPORTING et_filter = et_filter ) . + get_filter( EXPORTING io_table = eo_table + IMPORTING et_filter = et_filter ) . - update_catalog( CHANGING cs_layout = es_layout - ct_fieldcatalog = et_fieldcatalog ). + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ELSE. +* We have a problem and should stop here + ENDIF. ENDIF. ENDMETHOD.