diff --git a/src/not_cloud/zcl_excel_converter.clas.abap b/src/not_cloud/zcl_excel_converter.clas.abap index e3c05b3..b23f40f 100644 --- a/src/not_cloud/zcl_excel_converter.clas.abap +++ b/src/not_cloud/zcl_excel_converter.clas.abap @@ -524,8 +524,7 @@ CLASS zcl_excel_converter IMPLEMENTATION. METHOD create_color_style. DATA: ls_styles TYPE ts_styles. DATA: lo_style TYPE REF TO zcl_excel_style. - - READ TABLE wt_styles INTO ls_styles WITH KEY guid = i_style. + READ TABLE wt_styles INTO ls_styles WITH KEY guid COMPONENTS guid = i_style. IF sy-subrc = 0. lo_style = wo_excel->add_new_style( ). lo_style->font->bold = ls_styles-style->font->bold. @@ -1370,7 +1369,7 @@ CLASS zcl_excel_converter IMPLEMENTATION. IF l_line <= 1. CLEAR l_hidden. ELSE. - LOOP AT wt_sort_values INTO ls_sort_values WHERE is_collapsed = abap_false. + LOOP AT wt_sort_values INTO ls_sort_values USING KEY collapsed WHERE is_collapsed = abap_false. IF l_hidden < ls_sort_values-sort_level. l_hidden = ls_sort_values-sort_level. ENDIF. @@ -1418,7 +1417,7 @@ CLASS zcl_excel_converter IMPLEMENTATION. = . -new = abap_false. l_line = -sort_level. - LOOP AT wt_sort_values ASSIGNING WHERE sort_level >= l_line. + LOOP AT wt_sort_values ASSIGNING WHERE sort_level >= l_line. "#EC CI_HASHSEQ -row_int = l_row_int. ENDLOOP. ENDIF. diff --git a/src/not_cloud/zcl_excel_converter.clas.locals_def.abap b/src/not_cloud/zcl_excel_converter.clas.locals_def.abap index a61e25e..0347815 100644 --- a/src/not_cloud/zcl_excel_converter.clas.locals_def.abap +++ b/src/not_cloud/zcl_excel_converter.clas.locals_def.abap @@ -4,46 +4,48 @@ TYPES ty_style_type TYPE c LENGTH 1. -TYPES: BEGIN OF ts_alv_types, - seoclass TYPE seoclsname, - clsname TYPE seoclsname, - END OF ts_alv_types, - tt_alv_types TYPE HASHED TABLE OF ts_alv_types WITH UNIQUE KEY seoclass. +TYPES: BEGIN OF ts_alv_types, + seoclass TYPE seoclsname, + clsname TYPE seoclsname, + END 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, - sort_level TYPE int4, - is_collapsed TYPE flag, - END OF ts_sort_values, +TYPES: BEGIN OF ts_sort_values, + 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. -TYPES: BEGIN OF ts_subtotal_rows, - row_int TYPE zexcel_cell_row, - row_int_start TYPE zexcel_cell_row, - columnname TYPE fieldname, - END OF ts_subtotal_rows, + tt_sort_values TYPE HASHED TABLE OF ts_sort_values WITH UNIQUE KEY primary_key COMPONENTS fieldname + WITH NON-UNIQUE SORTED KEY collapsed COMPONENTS is_collapsed fieldname + ##TABKEY[PRIMARY_KEY][COLLAPSED]. +TYPES: BEGIN OF ts_subtotal_rows, + row_int TYPE zexcel_cell_row, + row_int_start TYPE zexcel_cell_row, + columnname TYPE fieldname, + END OF ts_subtotal_rows, - tt_subtotal_rows TYPE HASHED TABLE OF ts_subtotal_rows WITH UNIQUE KEY row_int. + tt_subtotal_rows TYPE HASHED TABLE OF ts_subtotal_rows WITH UNIQUE KEY row_int. -TYPES: BEGIN OF ts_styles, - type TYPE ty_style_type, - alignment TYPE zexcel_alignment, - inttype TYPE abap_typekind, - decimals TYPE int1, - style TYPE REF TO zcl_excel_style, - guid TYPE zexcel_cell_style, - END OF ts_styles, +TYPES: BEGIN OF ts_styles, + type TYPE ty_style_type, + alignment TYPE zexcel_alignment, + inttype TYPE abap_typekind, + decimals TYPE int1, + style TYPE REF TO zcl_excel_style, + guid TYPE zexcel_cell_style, + END OF ts_styles, + tt_styles TYPE HASHED TABLE OF ts_styles WITH UNIQUE KEY primary_key COMPONENTS type alignment inttype decimals + WITH NON-UNIQUE SORTED KEY guid COMPONENTS guid . - tt_styles TYPE HASHED TABLE OF ts_styles WITH UNIQUE KEY type alignment inttype decimals. +TYPES: BEGIN OF ts_color_styles, + guid_old TYPE zexcel_cell_style, + fontcolor TYPE zexcel_style_color_argb, + fillcolor TYPE zexcel_style_color_argb, + style_new TYPE REF TO zcl_excel_style, + END OF ts_color_styles, -TYPES: BEGIN OF ts_color_styles, - guid_old TYPE zexcel_cell_style, - fontcolor TYPE zexcel_style_color_argb, - fillcolor TYPE zexcel_style_color_argb, - style_new TYPE REF TO zcl_excel_style, - END OF ts_color_styles, - - tt_color_styles TYPE HASHED TABLE OF ts_color_styles WITH UNIQUE KEY guid_old fontcolor fillcolor. + tt_color_styles TYPE HASHED TABLE OF ts_color_styles WITH UNIQUE KEY guid_old fontcolor fillcolor. diff --git a/src/zcl_excel.clas.abap b/src/zcl_excel.clas.abap index e52a699..a04367b 100644 --- a/src/zcl_excel.clas.abap +++ b/src/zcl_excel.clas.abap @@ -269,7 +269,7 @@ CLASS zcl_excel IMPLEMENTATION. LIKE LINE OF t_stylemapping2. DATA: style TYPE REF TO zcl_excel_style. - LOOP AT me->t_stylemapping1 ASSIGNING WHERE added_to_iterator IS INITIAL. + LOOP AT me->t_stylemapping1 ASSIGNING USING KEY added_to_iterator WHERE added_to_iterator IS INITIAL. READ TABLE me->t_stylemapping2 ASSIGNING WITH TABLE KEY guid = -guid. CHECK sy-subrc = 0. " Should always be true since these tables are being filled parallel diff --git a/src/zcl_excel_autofilter.clas.abap b/src/zcl_excel_autofilter.clas.abap index 39a6465..e84d502 100644 --- a/src/zcl_excel_autofilter.clas.abap +++ b/src/zcl_excel_autofilter.clas.abap @@ -18,8 +18,8 @@ CLASS zcl_excel_autofilter DEFINITION logical_operator TYPE tv_logical_operator, tr_textfilter2 TYPE RANGE OF string, END OF ts_filter . - TYPES: - tt_filters TYPE SORTED TABLE OF ts_filter WITH UNIQUE KEY column . + TYPES: tt_filters TYPE SORTED TABLE OF ts_filter WITH UNIQUE KEY column + WITH NON-UNIQUE SORTED KEY rule COMPONENTS rule. DATA filter_area TYPE zexcel_s_autofilter_area . CONSTANTS mc_filter_rule_single_values TYPE tv_filter_rule VALUE 'single_values'. "#EC NOTEXT @@ -192,7 +192,7 @@ CLASS zcl_excel_autofilter IMPLEMENTATION. DATA: ls_filter LIKE LINE OF rt_filter. - LOOP AT me->mt_filters ASSIGNING WHERE rule = mc_filter_rule_single_values. + LOOP AT me->mt_filters ASSIGNING USING KEY rule WHERE rule = mc_filter_rule_single_values. ls_filter-column = -column. LOOP AT -t_values ASSIGNING . @@ -223,7 +223,7 @@ CLASS zcl_excel_autofilter IMPLEMENTATION. LOOP AT mt_filters ASSIGNING WHERE column >= me->filter_area-col_start - AND column <= me->filter_area-col_end. + AND column <= me->filter_area-col_end. "#EC CI_SORTSEQ CASE -rule. diff --git a/src/zcl_excel_fill_template.clas.abap b/src/zcl_excel_fill_template.clas.abap index e4e1701..1421c18 100644 --- a/src/zcl_excel_fill_template.clas.abap +++ b/src/zcl_excel_fill_template.clas.abap @@ -192,7 +192,7 @@ CLASS zcl_excel_fill_template IMPLEMENTATION. * update merged cells before range - LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from >= lv_start_row AND row_to <= lv_stop_row. + LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from >= lv_start_row AND row_to <= lv_stop_row. "#EC CI_SORTSEQ ls_merged_cell-row_from = ls_merged_cell-row_from + cv_diff. ls_merged_cell-row_to = ls_merged_cell-row_to + cv_diff. @@ -216,7 +216,7 @@ CLASS zcl_excel_fill_template IMPLEMENTATION. APPEND ls_cell TO lt_tmp_cells_template. ENDLOOP. - LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from >= -start AND row_to <= -stop. + LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from >= -start AND row_to <= -stop. "#EC CI_SORTSEQ APPEND ls_merged_cell TO lt_tmp_merged_cells_template. ENDLOOP. @@ -271,7 +271,7 @@ CLASS zcl_excel_fill_template IMPLEMENTATION. ct_cells = lt_cells_result. - LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from > -stop. + LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from > -stop. "#EC CI_SORTSEQ ls_merged_cell-row_from = ls_merged_cell-row_from + cv_diff. ls_merged_cell-row_to = ls_merged_cell-row_to + cv_diff. diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap index 076c885..0c7c40f 100644 --- a/src/zcl_excel_reader_2007.clas.abap +++ b/src/zcl_excel_reader_2007.clas.abap @@ -392,9 +392,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. DATA: lt_row_data TYPE ltt_row_data, ls_row_data LIKE LINE OF lt_row_data, lt_collapse_rows TYPE HASHED TABLE OF i WITH UNIQUE KEY table_line, - lv_collapsed TYPE abap_bool, - lv_outline_level TYPE i, lv_next_consecutive_row TYPE i, lt_outline_rows TYPE zcl_excel_worksheet=>mty_ts_outlines_row, @@ -428,7 +426,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. lv_outline_level = sy-index. CLEAR lv_next_consecutive_row. CLEAR ls_outline_row. - LOOP AT lt_row_data ASSIGNING WHERE outline_level >= lv_outline_level. + LOOP AT lt_row_data ASSIGNING WHERE outline_level >= lv_outline_level. "#EC CI_SORTSEQ IF lv_next_consecutive_row <> -row " A gap --> close all open outlines AND lv_next_consecutive_row IS NOT INITIAL. " First time in loop. @@ -4232,7 +4230,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. *--------------------------------------------------------------------* * Get referenced Cells, Build ranges for easy lookup *--------------------------------------------------------------------* - LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref <> space. + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref <> space. "#EC CI_HASHSEQ CLEAR ls_referenced_cell. ls_referenced_cell-sheet = ls_ref_formula-sheet. @@ -4268,7 +4266,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. * For each referencing cell determine the referenced cell * and resolve the formula *--------------------------------------------------------------------* - LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref = space. + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref = space. "#EC CI_HASHSEQ CLEAR lv_current_cell. diff --git a/src/zcl_excel_row.clas.abap b/src/zcl_excel_row.clas.abap index 61479ae..8d66add 100644 --- a/src/zcl_excel_row.clas.abap +++ b/src/zcl_excel_row.clas.abap @@ -116,8 +116,9 @@ CLASS zcl_excel_row IMPLEMENTATION. ELSE. lv_previous_row = me->row_index - 1. lt_row_outlines = io_worksheet->get_row_outlines( ). - READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_to = lv_previous_row " last line of an outline - collapsed = abap_true. " that is collapsed + + READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_to COMPONENTS row_to = lv_previous_row " last line of an outline + collapsed = abap_true. " that is collapsed ENDIF. CHECK sy-subrc = 0. " ok - we found it r_collapsed = abap_true. @@ -140,11 +141,10 @@ CLASS zcl_excel_row IMPLEMENTATION. CHECK io_worksheet IS BOUND. lt_row_outlines = io_worksheet->get_row_outlines( ). + LOOP AT lt_row_outlines ASSIGNING WHERE row_from <= me->row_index - AND row_to >= me->row_index. - + AND row_to >= me->row_index. "#EC CI_SORTSEQ ADD 1 TO r_outline_level. - ENDLOOP. ENDMETHOD. @@ -168,19 +168,18 @@ CLASS zcl_excel_row IMPLEMENTATION. METHOD get_visible. DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row. - FIELD-SYMBOLS: LIKE LINE OF lt_row_outlines. r_visible = me->visible. CHECK r_visible = abap_true. " Currently visible --> but maybe the new outline methodology will hide it implicitly CHECK io_worksheet IS BOUND. " But we have to see the worksheet to make sure lt_row_outlines = io_worksheet->get_row_outlines( ). - LOOP AT lt_row_outlines ASSIGNING WHERE row_from <= me->row_index - AND row_to >= me->row_index - AND collapsed = abap_true. " row is in a collapsed outline --> not visible - CLEAR r_visible. - RETURN. " one hit is enough to ensure invisibility + LOOP AT lt_row_outlines TRANSPORTING NO FIELDS WHERE row_from <= me->row_index + AND row_to >= me->row_index + AND collapsed = abap_true. "#EC CI_SORTSEQ + CLEAR r_visible. + RETURN. " one hit is enough to ensure invisibility ENDLOOP. ENDMETHOD. diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index 574f577..a4a2376 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -21,8 +21,8 @@ CLASS zcl_excel_worksheet DEFINITION row_to TYPE i, collapsed TYPE abap_bool, END OF mty_s_outline_row . - TYPES: - mty_ts_outlines_row TYPE SORTED TABLE OF mty_s_outline_row WITH UNIQUE KEY row_from row_to . + TYPES: mty_ts_outlines_row TYPE SORTED TABLE OF mty_s_outline_row WITH UNIQUE KEY primary_key COMPONENTS row_from row_to + WITH NON-UNIQUE SORTED KEY row_to COMPONENTS row_to collapsed. TYPES: BEGIN OF mty_s_ignored_errors, "! Cell reference (e.g. "A1") or list like "A1 A2" or range "A1:G1" @@ -2270,7 +2270,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. ENDIF. " Date & Time in excel style - LOOP AT me->sheet_content ASSIGNING WHERE cell_style IS NOT INITIAL AND data_type IS INITIAL. + LOOP AT me->sheet_content ASSIGNING WHERE cell_style IS NOT INITIAL AND data_type IS INITIAL. "#EC CI_SORTSEQ ls_style_conv-cell_style = -cell_style. APPEND ls_style_conv TO lt_style_conv. ENDLOOP. @@ -2442,7 +2442,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. LOOP AT me->mt_merged_cells TRANSPORTING NO FIELDS WHERE row_from <= ip_cell_row AND row_to >= ip_cell_row - AND col_from <= lv_column AND col_to >= lv_column. + AND col_from <= lv_column AND col_to >= lv_column. "#EC CI_SORTSEQ DELETE me->mt_merged_cells. EXIT. ENDLOOP. @@ -4320,7 +4320,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. LOOP AT me->mt_merged_cells TRANSPORTING NO FIELDS WHERE NOT ( row_from > ls_merge-row_to OR row_to < ls_merge-row_from OR col_from > ls_merge-col_to - OR col_to < ls_merge-col_from ). + OR col_to < ls_merge-col_from ). "#EC CI_SORTSEQ lv_errormessage = 'Overlapping merges'(404). zcx_excel=>raise_text( lv_errormessage ). diff --git a/src/zcl_excel_writer_2007.clas.abap b/src/zcl_excel_writer_2007.clas.abap index a9b6386..45f47c6 100644 --- a/src/zcl_excel_writer_2007.clas.abap +++ b/src/zcl_excel_writer_2007.clas.abap @@ -3368,18 +3368,18 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. DATA: - ld_1 TYPE string, - ld_2 TYPE string, - ld_3 TYPE string, - ld_4 TYPE string, - ld_5 TYPE string, - ld_7 TYPE string, + ld_1 TYPE string, + ld_2 TYPE string, + ld_3 TYPE string, + ld_4 TYPE string, + ld_5 TYPE string, + ld_7 TYPE string, - ls_odd_header TYPE zexcel_s_worksheet_head_foot, - ls_odd_footer TYPE zexcel_s_worksheet_head_foot, - ls_even_header TYPE zexcel_s_worksheet_head_foot, - ls_even_footer TYPE zexcel_s_worksheet_head_foot, - lv_content TYPE string. + ls_odd_header TYPE zexcel_s_worksheet_head_foot, + ls_odd_footer TYPE zexcel_s_worksheet_head_foot, + ls_even_header TYPE zexcel_s_worksheet_head_foot, + ls_even_footer TYPE zexcel_s_worksheet_head_foot, + lv_content TYPE string. * INIT_RESULT @@ -3737,13 +3737,13 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. METHOD create_xl_sheet. ** Constant node name - DATA: lc_xml_node_worksheet TYPE string VALUE 'worksheet', + DATA: lc_xml_node_worksheet TYPE string VALUE 'worksheet', " Node namespace - lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', - lc_xml_node_comp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', - lc_xml_node_comp_pref TYPE string VALUE 'x14ac', - lc_xml_node_ig_ns TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'. + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + lc_xml_node_comp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + lc_xml_node_comp_pref TYPE string VALUE 'x14ac', + lc_xml_node_ig_ns TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'. DATA: lo_document TYPE REF TO if_ixml_document, lo_element_root TYPE REF TO if_ixml_element, @@ -4039,9 +4039,9 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. lo_table TYPE REF TO zcl_excel_table, lo_link TYPE REF TO zcl_excel_hyperlink. - DATA: lv_value TYPE string, - lv_relation_id TYPE i, - lv_index_str TYPE string. + DATA: lv_value TYPE string, + lv_relation_id TYPE i, + lv_index_str TYPE string. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP @@ -4453,7 +4453,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. LOOP AT lt_table_areas TRANSPORTING NO FIELDS WHERE top <= -cell_row AND bottom >= -cell_row AND left <= -cell_column - AND right >= -cell_column. + AND right >= -cell_column. "#EC CI_SORTSEQ EXIT. ENDLOOP. IF sy-subrc = 0. @@ -4550,8 +4550,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. ENDIF. rv_ixml_sheet_data_root->append_child( new_child = lo_element_2 ). " row node ENDIF. - DELETE io_worksheet->sheet_content WHERE cell_value = lc_dummy_cell_content. " Get rid of dummyentries - + DELETE io_worksheet->sheet_content WHERE cell_value = lc_dummy_cell_content. "#EC CI_SORTSEQ " Get rid of dummyentries ENDMETHOD. diff --git a/src/zexcel_t_stylemapping1.ttyp.xml b/src/zexcel_t_stylemapping1.ttyp.xml index fee06b9..e7d3b82 100644 --- a/src/zexcel_t_stylemapping1.ttyp.xml +++ b/src/zexcel_t_stylemapping1.ttyp.xml @@ -11,7 +11,7 @@ H K U - 0003 + 0005 Stylemapping: Values -> GUID @@ -21,12 +21,26 @@ 0001 DYNAMIC_STYLE_GUID + + ZEXCEL_T_STYLEMAPPING1 + ADDED_TO_ITERATOR + 0001 + 0193 + ADDED_TO_ITERATOR + ZEXCEL_T_STYLEMAPPING1 0002 0097 COMPLETE_STYLEX + + ZEXCEL_T_STYLEMAPPING1 + ADDED_TO_ITERATOR + 0002 + 0192 + GUID + ZEXCEL_T_STYLEMAPPING1 0003 @@ -34,6 +48,16 @@ COMPLETE_STYLE + + + ZEXCEL_T_STYLEMAPPING1 + ADDED_TO_ITERATOR + E + S + K + added_to_iterator + +