Possible sequential read on sorted/hashed table

#1014
This commit is contained in:
Prashant Kumar 2022-06-21 11:18:21 +00:00
parent 6097702f82
commit a4a7fe0340
8 changed files with 130 additions and 75 deletions

View File

@ -524,8 +524,10 @@ 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.
* Begin of ATC fix-issue-1014-part1
* 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.
* End of ATC fix-issue-1014-part1
IF sy-subrc = 0.
lo_style = wo_excel->add_new_style( ).
lo_style->font->bold = ls_styles-style->font->bold.
@ -1370,9 +1372,14 @@ 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.
IF l_hidden < ls_sort_values-sort_level.
l_hidden = ls_sort_values-sort_level.
* Begin of ATC fix-issue-1014-part1
* 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 sort_level. "WHERE is_collapsed = abap_false.
* End of ATC fix-issue-1014-part1
IF ls_sort_values-is_collapsed = abap_false. "ATC fix-issue-1014-part1
IF l_hidden < ls_sort_values-sort_level.
l_hidden = ls_sort_values-sort_level.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
@ -1418,8 +1425,13 @@ CLASS zcl_excel_converter IMPLEMENTATION.
<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.
* Begin of ATC fix-issue-1014-part1
* LOOP AT wt_sort_values ASSIGNING <fs_sortv> WHERE sort_level >= l_line.
LOOP AT wt_sort_values ASSIGNING <fs_sortv> USING KEY sort_level .
* End of ATC fix-issue-1014-part1
IF <fs_sortv>-sort_level >= l_line. "ATC fix-issue-1014-part1
<fs_sortv>-row_int = l_row_int.
ENDIF. "ATC fix-issue-1014-part1
ENDLOOP.
ENDIF.
ENDIF.

View File

@ -4,46 +4,56 @@
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,
* Begin of ATC fix-issue-1014-part1
* 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 primary_key COMPONENTS fieldname
WITH NON-UNIQUE SORTED KEY sort_level COMPONENTS sort_level is_collapsed .
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,
* End of ATC fix-issue-1014-part1
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,
* Begin of ATC fix-issue-1014-part1
* tt_styles TYPE HASHED TABLE OF ts_styles WITH UNIQUE KEY type alignment inttype decimals.
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 .
.
* End of ATC fix-issue-1014-part1
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.

View File

@ -192,7 +192,7 @@ CLASS zcl_excel_autofilter IMPLEMENTATION.
DATA: ls_filter LIKE LINE OF rt_filter.
LOOP AT me->mt_filters ASSIGNING <ls_filter> WHERE rule = mc_filter_rule_single_values.
LOOP AT me->mt_filters ASSIGNING <ls_filter> WHERE rule = mc_filter_rule_single_values. "#EC CI_HASHSEQ
ls_filter-column = <ls_filter>-column.
LOOP AT <ls_filter>-t_values ASSIGNING <ls_value>.

View File

@ -98,7 +98,11 @@ CLASS zcl_excel_reader_2007 DEFINITION
formula TYPE string,
END OF ty_ref_formulae .
TYPES:
tyt_ref_formulae TYPE HASHED TABLE OF ty_ref_formulae WITH UNIQUE KEY sheet row column .
* Begin of ATC fix-issue-1014-part1
* tyt_ref_formulae TYPE HASHED TABLE OF ty_ref_formulae WITH UNIQUE KEY sheet row column .
tyt_ref_formulae TYPE TABLE OF ty_ref_formulae WITH UNIQUE HASHED KEY hash_key COMPONENTS
sheet row column si ref formula.
* End of ATC fix-issue-1014-part1
TYPES:
BEGIN OF t_shared_string,
value TYPE string,
@ -361,8 +365,11 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
row TYPE i,
outline_level TYPE i,
END OF lts_row_data,
ltt_row_data TYPE SORTED TABLE OF lts_row_data WITH UNIQUE KEY row.
* Begin of ATC fix-issue-1014-part1
* ltt_row_data TYPE SORTED TABLE OF lts_row_data WITH UNIQUE KEY row.
ltt_row_data TYPE TABLE OF lts_row_data WITH NON-UNIQUE SORTED KEY sort_key
COMPONENTS outline_level.
* End of ATC fix-issue-1014-part1
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,

View File

@ -140,11 +140,15 @@ CLASS zcl_excel_row IMPLEMENTATION.
CHECK io_worksheet IS BOUND.
lt_row_outlines = io_worksheet->get_row_outlines( ).
LOOP AT lt_row_outlines ASSIGNING <ls_row_outline> WHERE row_from <= me->row_index
AND row_to >= me->row_index.
ADD 1 TO r_outline_level.
* Begin of ATC fix-issue-1014-part1
* LOOP AT lt_row_outlines ASSIGNING <ls_row_outline> WHERE row_from <= me->row_index
* AND row_to >= me->row_index.
LOOP AT lt_row_outlines ASSIGNING <ls_row_outline> USING KEY collapsed .
IF <ls_row_outline>-row_from <= me->row_index
AND <ls_row_outline>-row_to >= me->row_index.
* End of ATC fix-issue-1014-part1
ADD 1 TO r_outline_level.
ENDIF.
ENDLOOP.
ENDMETHOD.
@ -175,12 +179,21 @@ CLASS zcl_excel_row IMPLEMENTATION.
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 <ls_row_outline> 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
* Begin of ATC fix-issue-1014-part1
* LOOP AT lt_row_outlines ASSIGNING <ls_row_outline> WHERE row_from <= me->row_index
* AND row_to >= me->row_index
* AND collapsed = abap_true. " row is in a collapsed outline --> not visible
LOOP AT lt_row_outlines ASSIGNING <ls_row_outline> USING KEY collapsed.
IF <ls_row_outline>-row_from <= me->row_index
AND <ls_row_outline>-row_to >= me->row_index
AND <ls_row_outline>-collapsed = abap_true.
* End of ATC fix-issue-1014-part1
CLEAR r_visible.
RETURN. " one hit is enough to ensure invisibility
ENDIF. "ATC fix-issue-1014-part1
ENDLOOP.
ENDMETHOD.

View File

@ -22,7 +22,12 @@ CLASS zcl_excel_worksheet DEFINITION
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 .
* Begin of ATC fix-issue-1014-part1
* mty_ts_outlines_row TYPE SORTED TABLE OF mty_s_outline_row WITH UNIQUE KEY row_from row_to .
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 collapsed COMPONENTS collapsed.
* End of ATC fix-issue-1014-part1 .
TYPES:
BEGIN OF mty_s_ignored_errors,
"! Cell reference (e.g. "A1") or list like "A1 A2" or range "A1:G1"
@ -73,10 +78,11 @@ CLASS zcl_excel_worksheet DEFINITION
col_from TYPE i,
col_to TYPE i,
END OF mty_merge .
TYPES:
mty_ts_merge TYPE SORTED TABLE OF mty_merge WITH UNIQUE KEY table_line .
* mty_ts_merge TYPE TABLE OF mty_merge WITH UNIQUE SORTED KEY sort_key COMPONENTS row_from row_to.
TYPES:
* Begin of ATC fix-issue-1014-part1
* mty_ts_merge TYPE SORTED TABLE OF mty_merge WITH UNIQUE KEY table_line .
mty_ts_merge TYPE TABLE OF mty_merge WITH UNIQUE SORTED KEY sort_key COMPONENTS row_from row_to.
* End of ATC fix-issue-1014-part1
TYPES:
ty_area TYPE c LENGTH 1 .
@ -776,15 +782,15 @@ CLASS zcl_excel_worksheet DEFINITION
iv_default_descr TYPE c
it_field_catalog TYPE zexcel_t_fieldcatalog
RETURNING
VALUE(result) TYPE zexcel_t_fieldcatalog.
VALUE(result) TYPE zexcel_t_fieldcatalog.
METHODS normalize_columnrow_parameter
IMPORTING
ip_columnrow TYPE csequence OPTIONAL
ip_column TYPE simple OPTIONAL
ip_row TYPE zexcel_cell_row OPTIONAL
ip_columnrow TYPE csequence OPTIONAL
ip_column TYPE simple OPTIONAL
ip_row TYPE zexcel_cell_row OPTIONAL
EXPORTING
ep_column TYPE zexcel_cell_column
ep_row TYPE zexcel_cell_row
ep_column TYPE zexcel_cell_column
ep_row TYPE zexcel_cell_row
RAISING
zcx_excel.
METHODS normalize_range_parameter
@ -816,7 +822,7 @@ ENDCLASS.
CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
CLASS zcl_excel_worksheet IMPLEMENTATION.
METHOD add_comment.
@ -2969,9 +2975,9 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
lv_syindex TYPE c LENGTH 3,
lt_column_name_buffer TYPE SORTED TABLE OF string WITH UNIQUE KEY table_line.
FIELD-SYMBOLS: <ls_field_catalog> TYPE zexcel_s_fieldcatalog,
<scrtxt1> TYPE any,
<scrtxt2> TYPE any,
<scrtxt3> TYPE any.
<scrtxt1> TYPE any,
<scrtxt2> TYPE any,
<scrtxt3> TYPE any.
" Due restrinction of new table object we cannot have two column with the same name
" Check if a column with the same name exists, if exists add a counter

View File

@ -5924,7 +5924,12 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
lo_iterator TYPE REF TO zcl_excel_collection_iterator,
lo_table TYPE REF TO zcl_excel_table,
lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom,
* Begin of ATC fix-issue-1014-part1
* lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom,
lt_table_areas TYPE STANDARD TABLE OF lty_table_area WITH
NON-UNIQUE SORTED KEY sort_key
COMPONENTS left right top bottom,
* End of ATC fix-issue-1014-part1
ls_table_area LIKE LINE OF lt_table_areas,
lo_column TYPE REF TO zcl_excel_column,
@ -6264,7 +6269,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. " Get rid of dummyentries
ENDMETHOD.

View File

@ -12,7 +12,9 @@
<KEYDEF>K</KEYDEF>
<KEYKIND>U</KEYKIND>
<KEYFDCOUNT>0002</KEYFDCOUNT>
<GENERIC>X</GENERIC>
<DDTEXT>Excel worksheet content</DDTEXT>
<FURTHERSECKEY>W</FURTHERSECKEY>
</DD40V>
<DD42V>
<DD42V>