mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 02:12:05 +08:00
Fix issue 1013 part1 (#1039)
* Replace pass by value with reference #1013 * Possible sequential read on sorted/hashed table #1014 * Update src/not_cloud/zcl_excel_converter.clas.locals_def.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * remove comments and old coding * fix UT errors * remove more comments and old coding * Improvements / Fix aesthetic regression on XML --------- Co-authored-by: Lars Hvam <larshp@hotmail.com> Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> Co-authored-by: Domi Bigl <dominik.bigl@cadaxo.com> Co-authored-by: Abo <andrea@borgia.bo.it> Co-authored-by: sandraros <sandra.rossi@gmail.com>
This commit is contained in:
parent
ca6fda29ed
commit
9fde3924bb
|
@ -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.
|
|||
<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.
|
||||
LOOP AT wt_sort_values ASSIGNING <fs_sortv> WHERE sort_level >= l_line. "#EC CI_HASHSEQ
|
||||
<fs_sortv>-row_int = l_row_int.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
|
|
@ -19,7 +19,9 @@ TYPES: BEGIN OF ts_sort_values,
|
|||
is_collapsed TYPE flag,
|
||||
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 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,
|
||||
|
@ -36,8 +38,8 @@ TYPES: BEGIN OF ts_styles,
|
|||
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 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 .
|
||||
|
||||
TYPES: BEGIN OF ts_color_styles,
|
||||
guid_old TYPE zexcel_cell_style,
|
||||
|
|
|
@ -269,7 +269,7 @@ CLASS zcl_excel IMPLEMENTATION.
|
|||
<style2> LIKE LINE OF t_stylemapping2.
|
||||
DATA: style TYPE REF TO zcl_excel_style.
|
||||
|
||||
LOOP AT me->t_stylemapping1 ASSIGNING <style1> WHERE added_to_iterator IS INITIAL.
|
||||
LOOP AT me->t_stylemapping1 ASSIGNING <style1> USING KEY added_to_iterator WHERE added_to_iterator IS INITIAL.
|
||||
READ TABLE me->t_stylemapping2 ASSIGNING <style2> WITH TABLE KEY guid = <style1>-guid.
|
||||
CHECK sy-subrc = 0. " Should always be true since these tables are being filled parallel
|
||||
|
||||
|
|
|
@ -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 <ls_filter> WHERE rule = mc_filter_rule_single_values.
|
||||
LOOP AT me->mt_filters ASSIGNING <ls_filter> USING KEY rule WHERE rule = mc_filter_rule_single_values.
|
||||
|
||||
ls_filter-column = <ls_filter>-column.
|
||||
LOOP AT <ls_filter>-t_values ASSIGNING <ls_value>.
|
||||
|
@ -223,7 +223,7 @@ CLASS zcl_excel_autofilter IMPLEMENTATION.
|
|||
|
||||
|
||||
LOOP AT mt_filters ASSIGNING <ls_filter> 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 <ls_filter>-rule.
|
||||
|
||||
|
|
|
@ -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 >= <ls_range>-start AND row_to <= <ls_range>-stop.
|
||||
LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from >= <ls_range>-start AND row_to <= <ls_range>-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 > <ls_range>-stop.
|
||||
LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from > <ls_range>-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.
|
||||
|
||||
|
|
|
@ -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 <ls_row_data> WHERE outline_level >= lv_outline_level.
|
||||
LOOP AT lt_row_data ASSIGNING <ls_row_data> WHERE outline_level >= lv_outline_level. "#EC CI_SORTSEQ
|
||||
|
||||
IF lv_next_consecutive_row <> <ls_row_data>-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.
|
||||
|
|
|
@ -116,7 +116,8 @@ 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
|
||||
|
||||
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
|
||||
|
@ -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 <ls_row_outline> 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: <ls_row_outline> 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 <ls_row_outline> WHERE row_from <= me->row_index
|
||||
|
||||
LOOP AT lt_row_outlines TRANSPORTING NO FIELDS WHERE row_from <= me->row_index
|
||||
AND row_to >= me->row_index
|
||||
AND collapsed = abap_true. " row is in a collapsed outline --> not visible
|
||||
AND collapsed = abap_true. "#EC CI_SORTSEQ
|
||||
CLEAR r_visible.
|
||||
RETURN. " one hit is enough to ensure invisibility
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -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 <ls_sheet_content> WHERE cell_style IS NOT INITIAL AND data_type IS INITIAL.
|
||||
LOOP AT me->sheet_content ASSIGNING <ls_sheet_content> WHERE cell_style IS NOT INITIAL AND data_type IS INITIAL. "#EC CI_SORTSEQ
|
||||
ls_style_conv-cell_style = <ls_sheet_content>-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 ).
|
||||
|
||||
|
|
|
@ -4453,7 +4453,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
|||
LOOP AT lt_table_areas TRANSPORTING NO FIELDS WHERE top <= <ls_sheet_content>-cell_row
|
||||
AND bottom >= <ls_sheet_content>-cell_row
|
||||
AND left <= <ls_sheet_content>-cell_column
|
||||
AND right >= <ls_sheet_content>-cell_column.
|
||||
AND right >= <ls_sheet_content>-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.
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<ACCESSMODE>H</ACCESSMODE>
|
||||
<KEYDEF>K</KEYDEF>
|
||||
<KEYKIND>U</KEYKIND>
|
||||
<KEYFDCOUNT>0003</KEYFDCOUNT>
|
||||
<KEYFDCOUNT>0005</KEYFDCOUNT>
|
||||
<DDTEXT>Stylemapping: Values -> GUID</DDTEXT>
|
||||
</DD40V>
|
||||
<DD42V>
|
||||
|
@ -21,12 +21,26 @@
|
|||
<ROWTYPEPOS>0001</ROWTYPEPOS>
|
||||
<KEYFIELD>DYNAMIC_STYLE_GUID</KEYFIELD>
|
||||
</DD42V>
|
||||
<DD42V>
|
||||
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
|
||||
<SECKEYNAME>ADDED_TO_ITERATOR</SECKEYNAME>
|
||||
<KEYFDPOS>0001</KEYFDPOS>
|
||||
<ROWTYPEPOS>0193</ROWTYPEPOS>
|
||||
<KEYFIELD>ADDED_TO_ITERATOR</KEYFIELD>
|
||||
</DD42V>
|
||||
<DD42V>
|
||||
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
|
||||
<KEYFDPOS>0002</KEYFDPOS>
|
||||
<ROWTYPEPOS>0097</ROWTYPEPOS>
|
||||
<KEYFIELD>COMPLETE_STYLEX</KEYFIELD>
|
||||
</DD42V>
|
||||
<DD42V>
|
||||
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
|
||||
<SECKEYNAME>ADDED_TO_ITERATOR</SECKEYNAME>
|
||||
<KEYFDPOS>0002</KEYFDPOS>
|
||||
<ROWTYPEPOS>0192</ROWTYPEPOS>
|
||||
<KEYFIELD>GUID</KEYFIELD>
|
||||
</DD42V>
|
||||
<DD42V>
|
||||
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
|
||||
<KEYFDPOS>0003</KEYFDPOS>
|
||||
|
@ -34,6 +48,16 @@
|
|||
<KEYFIELD>COMPLETE_STYLE</KEYFIELD>
|
||||
</DD42V>
|
||||
</DD42V>
|
||||
<DD43V>
|
||||
<DD43V>
|
||||
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
|
||||
<SECKEYNAME>ADDED_TO_ITERATOR</SECKEYNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<ACCESSMODE>S</ACCESSMODE>
|
||||
<KIND>K</KIND>
|
||||
<KEYDESCRIPTION>added_to_iterator</KEYDESCRIPTION>
|
||||
</DD43V>
|
||||
</DD43V>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
|
|
Loading…
Reference in New Issue
Block a user