Merge branch 'main' into patch-load-workbook-rework

This commit is contained in:
Abo 2025-03-08 19:32:51 +01:00 committed by GitHub
commit 1ae866d5e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 279 additions and 195 deletions

3
SECURITY.md Normal file
View File

@ -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.

View File

@ -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.
@ -1664,26 +1663,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.
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 +1804,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.

View File

@ -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,

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -388,9 +388,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,
@ -424,7 +422,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.
@ -995,6 +993,9 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
*--------------------------------------------------------------------*
CLEAR: lv_current_offset.
WHILE lo_node_si_child IS BOUND. " actually these children of <si> are <r>-tags
lv_tag_name = lo_node_si_child->get_name( ).
IF lv_tag_name = 'r'.
CLEAR: ls_rtf.
" extracting rich text formating data
@ -1010,10 +1011,13 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
lv_node_value = unescape_string_value( lo_node_r_child_t->get_value( ) ).
CONCATENATE <ls_shared_string>-value lv_node_value INTO <ls_shared_string>-value RESPECTING BLANKS.
ls_rtf-length = strlen( lv_node_value ).
ENDIF.
IF ls_rtf-length > 0.
lv_current_offset = strlen( <ls_shared_string>-value ).
APPEND ls_rtf TO <ls_shared_string>-rtf.
ENDIF.
ENDIF.
ENDIF.
lo_node_si_child ?= lo_node_si_child->get_next( ).
@ -4218,7 +4222,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.
@ -4254,7 +4258,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.

View File

@ -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.

View File

@ -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: <fs_table> 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 <fs_table>.
@ -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.

View File

@ -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 .

View File

@ -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 .

View File

@ -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 .

View File

@ -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"
@ -75,6 +75,7 @@ CLASS zcl_excel_worksheet DEFINITION
END OF mty_merge .
TYPES:
mty_ts_merge TYPE SORTED TABLE OF mty_merge WITH UNIQUE KEY table_line.
TYPES:
ty_area TYPE c LENGTH 1 .
@ -2269,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.
@ -2441,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.
@ -4319,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 ).

View File

@ -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.

View File

@ -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 <fs_sheet_content>.
* --- 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 = <fs_sheet_content>-cell_row ).
ENDIF.
ENDAT.
* --- Add empty rows
WHILE lv_row < <fs_sheet_content>-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 = <fs_sheet_content>-cell_row + 1.
lv_col = 1.
CONTINUE.
ENDIF.
* --- Add empty columns
WHILE lv_col < <fs_sheet_content>-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 = <fs_sheet_content>-cell_column )->get_visible( ) = abap_false.
lv_col = <fs_sheet_content>-cell_column + 1.
CONTINUE.
ENDIF.
* --- Retrieve Cell Style format and data type
CLEAR ls_numfmt.
IF <fs_sheet_content>-data_type IS INITIAL AND <fs_sheet_content>-cell_style IS NOT INITIAL.
@ -210,19 +265,6 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
ENDIF. " lv_attrname IS NOT INITIAL.
ENDIF. " <fs_sheet_content>-data_type IS INITIAL AND ls_numfmt IS NOT INITIAL.
* --- Add empty rows
WHILE lv_row < <fs_sheet_content>-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 < <fs_sheet_content>-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 <fs_sheet_content>-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( ).

View File

@ -11,7 +11,7 @@
<ACCESSMODE>H</ACCESSMODE>
<KEYDEF>K</KEYDEF>
<KEYKIND>U</KEYKIND>
<KEYFDCOUNT>0003</KEYFDCOUNT>
<KEYFDCOUNT>0005</KEYFDCOUNT>
<DDTEXT>Stylemapping: Values -&gt; 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>