From bae673121b2a4981f4a5a49f7ffdc1db452f2b9c Mon Sep 17 00:00:00 2001 From: Domi Bigl Date: Fri, 25 Oct 2024 20:10:59 +0200 Subject: [PATCH 1/7] Fix dump for GUI download (#1276) * fix gui download dump * remove detailed exceptions --- src/not_cloud/zcl_excel_converter.clas.abap | 34 ++++++++++----------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/not_cloud/zcl_excel_converter.clas.abap b/src/not_cloud/zcl_excel_converter.clas.abap index 814ca9d..e3c05b3 100644 --- a/src/not_cloud/zcl_excel_converter.clas.abap +++ b/src/not_cloud/zcl_excel_converter.clas.abap @@ -1664,26 +1664,19 @@ CLASS zcl_excel_converter IMPLEMENTATION. cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount filename = l_dir filetype = 'BIN' - CHANGING data_tab = lt_file ). - cl_gui_frontend_services=>execute( - EXPORTING - document = l_dir - EXCEPTIONS - cntl_error = 1 - error_no_gui = 2 - bad_parameter = 3 - file_not_found = 4 - path_not_found = 5 - file_extension_unknown = 6 - error_execute_failed = 7 - synchronous_failed = 8 - not_supported_by_gui = 9 - ). + CHANGING data_tab = lt_file + EXCEPTIONS OTHERS = 1 ). IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno - WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ELSE. + cl_gui_frontend_services=>execute( EXPORTING document = l_dir + EXCEPTIONS OTHERS = 1 ). + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. ENDIF. - ENDIF. @@ -1812,7 +1805,12 @@ CLASS zcl_excel_converter IMPLEMENTATION. cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount filename = l_dir filetype = 'BIN' - CHANGING data_tab = lt_file ). + CHANGING data_tab = lt_file + EXCEPTIONS OTHERS = 1 ). + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. ENDIF. ENDMETHOD. ENDCLASS. From 4eb3df1611167a9dfeb765ba253e7f5c666de93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20H=C3=BCtk=C3=B6per?= Date: Sun, 5 Jan 2025 15:16:30 +0100 Subject: [PATCH 2/7] Options to skip hidden rows and columns for CSV format (#1268) * Options to skip hidden rows and columns for CSV format Add options to skip hidden rows and columns when saving the data in CSV format. This is especially useful, when converting an ALV to an Excel object and saving it as CSV file. ALV layouts often display only selected columns. * Adding missing data definition Adding missing data definition for lo_autofilter. * Fix dates not converterted to external format Method get_default_excel_date_format of class zcl_excel_worksheet uses language "E" (English) to determine the date format from domain XUDATFM. Method create_csv of class zcl_excel_writer_csv has a logic to determine the field type from the number format. For this also the values from domain XUDATFM are used. But here they are read with sy-langu. Due to this, fields are not correctly identified as "date" when the user language is not English. Solution: Additionally read domain values with language "E". * Trigger filter area validation Trigger filter area validation * Fix date identification logic for newer AS ABAP versions The texts of domain XUDATFM changed in newer systems: NW 7.40: DD.MM.YYYY NW 7.52: DD.MM.YYYY (Gregorian Date) This breaks the date identification logic. New logic copied from get_date_format_des of class cl_abap_datfm, which is called in method get_default_excel_date_format of class zcl_excel_worksheet to get the users default date pattern. * Performance improvement for skip hidden rows Performance improvement for skip hidden rows --------- Co-authored-by: Domi Bigl Co-authored-by: sandraros <34005250+sandraros@users.noreply.github.com> --- src/zcl_excel_writer_csv.clas.abap | 80 ++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 14 deletions(-) diff --git a/src/zcl_excel_writer_csv.clas.abap b/src/zcl_excel_writer_csv.clas.abap index 7aa976b..4c0dbc8 100644 --- a/src/zcl_excel_writer_csv.clas.abap +++ b/src/zcl_excel_writer_csv.clas.abap @@ -30,6 +30,12 @@ CLASS zcl_excel_writer_csv DEFINITION CLASS-METHODS set_initial_ext_date IMPORTING !ip_value TYPE char10 DEFAULT c_default . + CLASS-METHODS set_skip_hidden_rows + IMPORTING + !ip_value TYPE abap_bool. + CLASS-METHODS set_skip_hidden_columns + IMPORTING + !ip_value TYPE abap_bool. *"* protected components of class ZCL_EXCEL_WRITER_CSV *"* do not include other source files here!!! PROTECTED SECTION. @@ -45,6 +51,8 @@ CLASS zcl_excel_writer_csv DEFINITION CLASS-DATA worksheet_name TYPE zexcel_worksheets_name . CLASS-DATA worksheet_index TYPE zexcel_active_worksheet . CLASS-DATA initial_ext_date TYPE char10 VALUE c_default. + CLASS-DATA skip_hidden_rows TYPE abap_bool. + CLASS-DATA skip_hidden_columns TYPE abap_bool. METHODS create RETURNING @@ -91,6 +99,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. DATA: lo_iterator TYPE REF TO zcl_excel_collection_iterator, lo_worksheet TYPE REF TO zcl_excel_worksheet. + DATA: lo_autofilter TYPE REF TO zcl_excel_autofilter. + DATA: lv_row_hidden TYPE abap_bool. + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, lv_row TYPE i, lv_col TYPE i, @@ -113,8 +124,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. * --- Retrieve SAP date format CLEAR ls_format. SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' - AND ddlanguage = sy-langu. + AND ( ddlanguage = sy-langu OR ddlanguage = 'E' ). ls_format-cmpname = 'DATE'. + ls_format-attvalue = ls_format-attvalue(10). " Ignore description, only use pattern CONDENSE ls_format-attvalue. CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. APPEND ls_format TO lt_format. @@ -151,11 +163,54 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. SORT lt_cell_data BY cell_row cell_column. + + IF skip_hidden_rows = abap_true. +* --- Retrieve autofilters (to identify hidden rows) + lo_autofilter = excel->get_autofilters_reference( )->get( io_worksheet = lo_worksheet ). + IF lo_autofilter IS NOT INITIAL. + lo_autofilter->get_filter_area( ). " trigger filter area validation + ENDIF. + ENDIF. + lv_row = 1. lv_col = 1. CLEAR lv_string. LOOP AT lt_cell_data ASSIGNING . +* --- Check, if row is hidden + AT NEW cell_row. + IF lo_autofilter IS NOT INITIAL. + lv_row_hidden = lo_autofilter->is_row_hidden( iv_row = -cell_row ). + ENDIF. + ENDAT. + +* --- Add empty rows + WHILE lv_row < -cell_row. + CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. + lv_row = lv_row + 1. + lv_col = 1. + ENDWHILE. + +* --- Skip hidden rows + IF lv_row_hidden = abap_true. + lv_row = -cell_row + 1. + lv_col = 1. + CONTINUE. + ENDIF. + +* --- Add empty columns + WHILE lv_col < -cell_column. + CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. + lv_col = lv_col + 1. + ENDWHILE. + +* --- Skip hidden columns + IF skip_hidden_columns = abap_true AND + lo_worksheet->get_column( ip_column = -cell_column )->get_visible( ) = abap_false. + lv_col = -cell_column + 1. + CONTINUE. + ENDIF. + * --- Retrieve Cell Style format and data type CLEAR ls_numfmt. IF -data_type IS INITIAL AND -cell_style IS NOT INITIAL. @@ -210,19 +265,6 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. ENDIF. " lv_attrname IS NOT INITIAL. ENDIF. " -data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. -* --- Add empty rows - WHILE lv_row < -cell_row. - CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. - lv_row = lv_row + 1. - lv_col = 1. - ENDWHILE. - -* --- Add empty columns - WHILE lv_col < -cell_column. - CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. - lv_col = lv_col + 1. - ENDWHILE. - * ----- Use format to determine the data type and display format. CASE -data_type. @@ -318,6 +360,16 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. ENDMETHOD. + METHOD set_skip_hidden_rows. + skip_hidden_rows = ip_value. + ENDMETHOD. + + + METHOD set_skip_hidden_columns. + skip_hidden_columns = ip_value. + ENDMETHOD. + + METHOD zif_excel_writer~write_file. me->excel = io_excel. ep_file = me->create( ). From 13da36b7a21b9864a6cdc2b221f3a55e09ee7f43 Mon Sep 17 00:00:00 2001 From: sandraros <34005250+sandraros@users.noreply.github.com> Date: Sat, 8 Feb 2025 10:02:22 +0100 Subject: [PATCH 3/7] Dump ITAB_DUPLICATE in reader=>load_shared_strings (#1288) Fix #1287 --- src/zcl_excel_reader_2007.clas.abap | 40 +++++++++++++++++------------ 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap index 53fc484..076c885 100644 --- a/src/zcl_excel_reader_2007.clas.abap +++ b/src/zcl_excel_reader_2007.clas.abap @@ -999,25 +999,31 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. *--------------------------------------------------------------------* CLEAR: lv_current_offset. WHILE lo_node_si_child IS BOUND. " actually these children of are -tags - CLEAR: ls_rtf. + lv_tag_name = lo_node_si_child->get_name( ). + IF lv_tag_name = 'r'. - " extracting rich text formating data - lo_node_r_child_rpr ?= lo_node_si_child->find_from_name_ns( name = 'rPr' uri = namespace-main ). - IF lo_node_r_child_rpr IS BOUND. - lo_font = load_style_font( lo_node_r_child_rpr ). - ls_rtf-font = lo_font->get_structure( ). - ENDIF. - ls_rtf-offset = lv_current_offset. - " extract the ... part of each -tag - lo_node_r_child_t ?= lo_node_si_child->find_from_name_ns( name = 't' uri = namespace-main ). - IF lo_node_r_child_t IS BOUND. - lv_node_value = unescape_string_value( lo_node_r_child_t->get_value( ) ). - CONCATENATE -value lv_node_value INTO -value RESPECTING BLANKS. - ls_rtf-length = strlen( lv_node_value ). - ENDIF. + CLEAR: ls_rtf. - lv_current_offset = strlen( -value ). - APPEND ls_rtf TO -rtf. + " extracting rich text formating data + lo_node_r_child_rpr ?= lo_node_si_child->find_from_name_ns( name = 'rPr' uri = namespace-main ). + IF lo_node_r_child_rpr IS BOUND. + lo_font = load_style_font( lo_node_r_child_rpr ). + ls_rtf-font = lo_font->get_structure( ). + ENDIF. + ls_rtf-offset = lv_current_offset. + " extract the ... part of each -tag + lo_node_r_child_t ?= lo_node_si_child->find_from_name_ns( name = 't' uri = namespace-main ). + IF lo_node_r_child_t IS BOUND. + lv_node_value = unescape_string_value( lo_node_r_child_t->get_value( ) ). + CONCATENATE -value lv_node_value INTO -value RESPECTING BLANKS. + ls_rtf-length = strlen( lv_node_value ). + + IF ls_rtf-length > 0. + lv_current_offset = strlen( -value ). + APPEND ls_rtf TO -rtf. + ENDIF. + ENDIF. + ENDIF. lo_node_si_child ?= lo_node_si_child->get_next( ). From 8428eb04d2e20bf702f83ba10e2e493ff4241249 Mon Sep 17 00:00:00 2001 From: Domi Bigl Date: Sat, 8 Feb 2025 19:47:27 +0100 Subject: [PATCH 4/7] usea APLHA for cols in reference string (#1279) fixes #1215 --- src/zcl_excel_table.clas.abap | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/zcl_excel_table.clas.abap b/src/zcl_excel_table.clas.abap index 6887e3f..d6ecbea 100644 --- a/src/zcl_excel_table.clas.abap +++ b/src/zcl_excel_table.clas.abap @@ -174,8 +174,10 @@ CLASS zcl_excel_table IMPLEMENTATION. METHOD get_reference. - DATA: lv_column TYPE zexcel_cell_column, + DATA: lv_start_column TYPE zexcel_cell_column, + lv_end_column TYPE zexcel_cell_column, lv_table_lines TYPE i, + lv_left_column TYPE zexcel_cell_column_alpha, lv_right_column TYPE zexcel_cell_column_alpha, ls_field_catalog TYPE zexcel_s_fieldcatalog, lv_bottom_row TYPE zexcel_cell_row, @@ -185,13 +187,12 @@ CLASS zcl_excel_table IMPLEMENTATION. FIELD-SYMBOLS: TYPE STANDARD TABLE. *column - lv_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). + lv_start_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). lv_table_lines = 0. LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. ADD 1 TO lv_table_lines. ENDLOOP. - lv_column = lv_column + lv_table_lines - 1. - lv_right_column = zcl_excel_common=>convert_column2alpha( lv_column ). + lv_end_column = lv_start_column + lv_table_lines - 1. *row ASSIGN table_data->* TO . @@ -208,7 +209,9 @@ CLASS zcl_excel_table IMPLEMENTATION. lv_top_row_string = zcl_excel_common=>number_to_excel_string( settings-top_left_row ). lv_bottom_row_string = zcl_excel_common=>number_to_excel_string( lv_bottom_row ). - CONCATENATE settings-top_left_column lv_top_row_string + lv_left_column = zcl_excel_common=>convert_column2alpha( lv_start_column ). + lv_right_column = zcl_excel_common=>convert_column2alpha( lv_end_column ). + CONCATENATE lv_left_column lv_top_row_string ':' lv_right_column lv_bottom_row_string INTO ov_reference. From a1af09f064ea0aec3aae058efd121354ac8dae48 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sun, 9 Feb 2025 16:29:59 +0100 Subject: [PATCH 5/7] Create SECURITY.md: Reporting Security Issues (#1289) Co-authored-by: Domi Bigl --- SECURITY.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..63bce7d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,3 @@ +# Reporting Security Issues + +To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/abap2xlsx/abap2xlsx/security/advisories/new) tab. From ca6fda29edd3ccf6e4f6997a6351032577366a82 Mon Sep 17 00:00:00 2001 From: pksingh78 <102946017+pksingh78@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:29:14 +0530 Subject: [PATCH 6/7] Replace pass by value with reference (#1037) * Replace pass by value with reference #1013 --------- Co-authored-by: Lars Hvam Co-authored-by: Gregor Wolf Co-authored-by: Abo Co-authored-by: Domi Bigl --- src/zcl_excel_theme.clas.abap | 42 +++++++++---------- src/zcl_excel_theme_color_scheme.clas.abap | 2 +- src/zcl_excel_theme_font_scheme.clas.abap | 48 +++++++++++----------- src/zcl_excel_worksheet.clas.abap | 3 +- 4 files changed, 48 insertions(+), 47 deletions(-) diff --git a/src/zcl_excel_theme.clas.abap b/src/zcl_excel_theme.clas.abap index 931c7a0..fffd590 100644 --- a/src/zcl_excel_theme.clas.abap +++ b/src/zcl_excel_theme.clas.abap @@ -24,10 +24,10 @@ CLASS zcl_excel_theme DEFINITION VALUE(rv_xstring) TYPE xstring . METHODS set_color IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_srgb) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL - VALUE(iv_syscolorname) TYPE string OPTIONAL - VALUE(iv_syscolorlast) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL . + iv_type TYPE string + iv_srgb TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL + iv_syscolorname TYPE string OPTIONAL + iv_syscolorlast TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL . METHODS set_color_scheme_name IMPORTING iv_name TYPE string . @@ -38,31 +38,31 @@ CLASS zcl_excel_theme DEFINITION iv_typeface TYPE string . METHODS set_latin_font IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_typeface) TYPE string - VALUE(iv_panose) TYPE string OPTIONAL - VALUE(iv_pitchfamily) TYPE string OPTIONAL - VALUE(iv_charset) TYPE string OPTIONAL . + iv_type TYPE string + iv_typeface TYPE string + iv_panose TYPE string OPTIONAL + iv_pitchfamily TYPE string OPTIONAL + iv_charset TYPE string OPTIONAL . METHODS set_ea_font IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_typeface) TYPE string - VALUE(iv_panose) TYPE string OPTIONAL - VALUE(iv_pitchfamily) TYPE string OPTIONAL - VALUE(iv_charset) TYPE string OPTIONAL . + iv_type TYPE string + iv_typeface TYPE string + iv_panose TYPE string OPTIONAL + iv_pitchfamily TYPE string OPTIONAL + iv_charset TYPE string OPTIONAL . METHODS set_cs_font IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_typeface) TYPE string - VALUE(iv_panose) TYPE string OPTIONAL - VALUE(iv_pitchfamily) TYPE string OPTIONAL - VALUE(iv_charset) TYPE string OPTIONAL . + iv_type TYPE string + iv_typeface TYPE string + iv_panose TYPE string OPTIONAL + iv_pitchfamily TYPE string OPTIONAL + iv_charset TYPE string OPTIONAL . METHODS set_font_scheme_name IMPORTING - VALUE(iv_name) TYPE string . + iv_name TYPE string . METHODS set_theme_name IMPORTING - VALUE(iv_name) TYPE string . + iv_name TYPE string . PROTECTED SECTION. DATA elements TYPE REF TO zcl_excel_theme_elements . diff --git a/src/zcl_excel_theme_color_scheme.clas.abap b/src/zcl_excel_theme_color_scheme.clas.abap index daba628..887b64f 100644 --- a/src/zcl_excel_theme_color_scheme.clas.abap +++ b/src/zcl_excel_theme_color_scheme.clas.abap @@ -54,7 +54,7 @@ CLASS zcl_excel_theme_color_scheme DEFINITION METHODS constructor . METHODS set_name IMPORTING - VALUE(iv_name) TYPE string . + iv_name TYPE string . PROTECTED SECTION. DATA name TYPE string . diff --git a/src/zcl_excel_theme_font_scheme.clas.abap b/src/zcl_excel_theme_font_scheme.clas.abap index 15313d8..216c2fa 100644 --- a/src/zcl_excel_theme_font_scheme.clas.abap +++ b/src/zcl_excel_theme_font_scheme.clas.abap @@ -58,41 +58,41 @@ CLASS zcl_excel_theme_font_scheme DEFINITION !io_document TYPE REF TO if_ixml_document . METHODS modify_font IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_script) TYPE string - VALUE(iv_typeface) TYPE string . + iv_type TYPE string + iv_script TYPE string + iv_typeface TYPE string . METHODS modify_latin_font IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_typeface) TYPE string - VALUE(iv_panose) TYPE string OPTIONAL - VALUE(iv_pitchfamily) TYPE string OPTIONAL - VALUE(iv_charset) TYPE string OPTIONAL . + iv_type TYPE string + iv_typeface TYPE string + iv_panose TYPE string OPTIONAL + iv_pitchfamily TYPE string OPTIONAL + iv_charset TYPE string OPTIONAL . METHODS modify_ea_font IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_typeface) TYPE string - VALUE(iv_panose) TYPE string OPTIONAL - VALUE(iv_pitchfamily) TYPE string OPTIONAL - VALUE(iv_charset) TYPE string OPTIONAL . + iv_type TYPE string + iv_typeface TYPE string + iv_panose TYPE string OPTIONAL + iv_pitchfamily TYPE string OPTIONAL + iv_charset TYPE string OPTIONAL . METHODS modify_cs_font IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_typeface) TYPE string - VALUE(iv_panose) TYPE string OPTIONAL - VALUE(iv_pitchfamily) TYPE string OPTIONAL - VALUE(iv_charset) TYPE string OPTIONAL . + iv_type TYPE string + iv_typeface TYPE string + iv_panose TYPE string OPTIONAL + iv_pitchfamily TYPE string OPTIONAL + iv_charset TYPE string OPTIONAL . METHODS constructor . PROTECTED SECTION. METHODS modify_lec_fonts IMPORTING - VALUE(iv_type) TYPE string - VALUE(iv_font_type) TYPE string - VALUE(iv_typeface) TYPE string - VALUE(iv_panose) TYPE string OPTIONAL - VALUE(iv_pitchfamily) TYPE string OPTIONAL - VALUE(iv_charset) TYPE string OPTIONAL . + iv_type TYPE string + iv_font_type TYPE string + iv_typeface TYPE string + iv_panose TYPE string OPTIONAL + iv_pitchfamily TYPE string OPTIONAL + iv_charset TYPE string OPTIONAL . PRIVATE SECTION. DATA font_scheme TYPE t_scheme . diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index 0e7cd98..574f577 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -74,7 +74,8 @@ CLASS zcl_excel_worksheet DEFINITION 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 SORTED TABLE OF mty_merge WITH UNIQUE KEY table_line. + TYPES: ty_area TYPE c LENGTH 1 . From 9fde3924bb1b5bf0ccc93817057deab76d18d2fa Mon Sep 17 00:00:00 2001 From: pksingh78 <102946017+pksingh78@users.noreply.github.com> Date: Sat, 8 Mar 2025 23:53:02 +0530 Subject: [PATCH 7/7] 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 Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> Co-authored-by: Domi Bigl Co-authored-by: Abo Co-authored-by: sandraros --- src/not_cloud/zcl_excel_converter.clas.abap | 7 +- .../zcl_excel_converter.clas.locals_def.abap | 76 ++++++++++--------- src/zcl_excel.clas.abap | 2 +- src/zcl_excel_autofilter.clas.abap | 8 +- src/zcl_excel_fill_template.clas.abap | 6 +- src/zcl_excel_reader_2007.clas.abap | 8 +- src/zcl_excel_row.clas.abap | 21 +++-- src/zcl_excel_worksheet.clas.abap | 10 +-- src/zcl_excel_writer_2007.clas.abap | 45 ++++++----- src/zexcel_t_stylemapping1.ttyp.xml | 26 ++++++- 10 files changed, 115 insertions(+), 94 deletions(-) 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 + +