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. METHOD create_color_style.
DATA: ls_styles TYPE ts_styles. DATA: ls_styles TYPE ts_styles.
DATA: lo_style TYPE REF TO zcl_excel_style. DATA: lo_style TYPE REF TO zcl_excel_style.
READ TABLE wt_styles INTO ls_styles WITH KEY guid COMPONENTS guid = i_style.
READ TABLE wt_styles INTO ls_styles WITH KEY guid = i_style.
IF sy-subrc = 0. IF sy-subrc = 0.
lo_style = wo_excel->add_new_style( ). lo_style = wo_excel->add_new_style( ).
lo_style->font->bold = ls_styles-style->font->bold. lo_style->font->bold = ls_styles-style->font->bold.
@ -1370,7 +1369,7 @@ CLASS zcl_excel_converter IMPLEMENTATION.
IF l_line <= 1. IF l_line <= 1.
CLEAR l_hidden. CLEAR l_hidden.
ELSE. 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. IF l_hidden < ls_sort_values-sort_level.
l_hidden = ls_sort_values-sort_level. l_hidden = ls_sort_values-sort_level.
ENDIF. ENDIF.
@ -1418,7 +1417,7 @@ CLASS zcl_excel_converter IMPLEMENTATION.
<fs_sortval> = <fs_fldval>. <fs_sortval> = <fs_fldval>.
<fs_sortv>-new = abap_false. <fs_sortv>-new = abap_false.
l_line = <fs_sortv>-sort_level. 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. <fs_sortv>-row_int = l_row_int.
ENDLOOP. ENDLOOP.
ENDIF. ENDIF.
@ -1664,26 +1663,19 @@ CLASS zcl_excel_converter IMPLEMENTATION.
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount
filename = l_dir filename = l_dir
filetype = 'BIN' filetype = 'BIN'
CHANGING data_tab = lt_file ). CHANGING data_tab = lt_file
cl_gui_frontend_services=>execute( EXCEPTIONS OTHERS = 1 ).
EXPORTING IF sy-subrc <> 0.
document = l_dir MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
EXCEPTIONS WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
cntl_error = 1 ELSE.
error_no_gui = 2 cl_gui_frontend_services=>execute( EXPORTING document = l_dir
bad_parameter = 3 EXCEPTIONS OTHERS = 1 ).
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
).
IF sy-subrc <> 0. IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 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.
ENDIF. ENDIF.
ENDIF.
ENDIF. ENDIF.
@ -1812,7 +1804,12 @@ CLASS zcl_excel_converter IMPLEMENTATION.
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount
filename = l_dir filename = l_dir
filetype = 'BIN' 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. ENDIF.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -19,7 +19,9 @@ TYPES: BEGIN OF ts_sort_values,
is_collapsed TYPE flag, is_collapsed TYPE flag,
END OF ts_sort_values, 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, TYPES: BEGIN OF ts_subtotal_rows,
row_int TYPE zexcel_cell_row, row_int TYPE zexcel_cell_row,
row_int_start 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, style TYPE REF TO zcl_excel_style,
guid TYPE zexcel_cell_style, guid TYPE zexcel_cell_style,
END OF ts_styles, END OF ts_styles,
tt_styles TYPE HASHED TABLE OF ts_styles WITH UNIQUE KEY primary_key COMPONENTS type alignment inttype decimals
tt_styles TYPE HASHED TABLE OF ts_styles WITH UNIQUE KEY type alignment inttype decimals. WITH NON-UNIQUE SORTED KEY guid COMPONENTS guid .
TYPES: BEGIN OF ts_color_styles, TYPES: BEGIN OF ts_color_styles,
guid_old TYPE zexcel_cell_style, guid_old TYPE zexcel_cell_style,

View File

@ -269,7 +269,7 @@ CLASS zcl_excel IMPLEMENTATION.
<style2> LIKE LINE OF t_stylemapping2. <style2> LIKE LINE OF t_stylemapping2.
DATA: style TYPE REF TO zcl_excel_style. 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. 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 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, logical_operator TYPE tv_logical_operator,
tr_textfilter2 TYPE RANGE OF string, tr_textfilter2 TYPE RANGE OF string,
END OF ts_filter . END OF ts_filter .
TYPES: TYPES: tt_filters TYPE SORTED TABLE OF ts_filter WITH UNIQUE KEY column
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 . DATA filter_area TYPE zexcel_s_autofilter_area .
CONSTANTS mc_filter_rule_single_values TYPE tv_filter_rule VALUE 'single_values'. "#EC NOTEXT 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. 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. ls_filter-column = <ls_filter>-column.
LOOP AT <ls_filter>-t_values ASSIGNING <ls_value>. 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 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. CASE <ls_filter>-rule.

View File

@ -192,7 +192,7 @@ CLASS zcl_excel_fill_template IMPLEMENTATION.
* update merged cells before range * 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_from = ls_merged_cell-row_from + cv_diff.
ls_merged_cell-row_to = ls_merged_cell-row_to + 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. APPEND ls_cell TO lt_tmp_cells_template.
ENDLOOP. 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. APPEND ls_merged_cell TO lt_tmp_merged_cells_template.
ENDLOOP. ENDLOOP.
@ -271,7 +271,7 @@ CLASS zcl_excel_fill_template IMPLEMENTATION.
ct_cells = lt_cells_result. 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_from = ls_merged_cell-row_from + cv_diff.
ls_merged_cell-row_to = ls_merged_cell-row_to + 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, DATA: lt_row_data TYPE ltt_row_data,
ls_row_data LIKE LINE OF lt_row_data, ls_row_data LIKE LINE OF lt_row_data,
lt_collapse_rows TYPE HASHED TABLE OF i WITH UNIQUE KEY table_line, lt_collapse_rows TYPE HASHED TABLE OF i WITH UNIQUE KEY table_line,
lv_collapsed TYPE abap_bool, lv_collapsed TYPE abap_bool,
lv_outline_level TYPE i, lv_outline_level TYPE i,
lv_next_consecutive_row TYPE i, lv_next_consecutive_row TYPE i,
lt_outline_rows TYPE zcl_excel_worksheet=>mty_ts_outlines_row, 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. lv_outline_level = sy-index.
CLEAR lv_next_consecutive_row. CLEAR lv_next_consecutive_row.
CLEAR ls_outline_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 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. 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. CLEAR: lv_current_offset.
WHILE lo_node_si_child IS BOUND. " actually these children of <si> are <r>-tags 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. CLEAR: ls_rtf.
" extracting rich text formating data " 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( ) ). 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. CONCATENATE <ls_shared_string>-value lv_node_value INTO <ls_shared_string>-value RESPECTING BLANKS.
ls_rtf-length = strlen( lv_node_value ). ls_rtf-length = strlen( lv_node_value ).
ENDIF.
IF ls_rtf-length > 0.
lv_current_offset = strlen( <ls_shared_string>-value ). lv_current_offset = strlen( <ls_shared_string>-value ).
APPEND ls_rtf TO <ls_shared_string>-rtf. APPEND ls_rtf TO <ls_shared_string>-rtf.
ENDIF.
ENDIF.
ENDIF.
lo_node_si_child ?= lo_node_si_child->get_next( ). 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 * 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. CLEAR ls_referenced_cell.
ls_referenced_cell-sheet = ls_ref_formula-sheet. 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 * For each referencing cell determine the referenced cell
* and resolve the formula * 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. CLEAR lv_current_cell.

View File

@ -116,7 +116,8 @@ CLASS zcl_excel_row IMPLEMENTATION.
ELSE. ELSE.
lv_previous_row = me->row_index - 1. lv_previous_row = me->row_index - 1.
lt_row_outlines = io_worksheet->get_row_outlines( ). 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 collapsed = abap_true. " that is collapsed
ENDIF. ENDIF.
CHECK sy-subrc = 0. " ok - we found it CHECK sy-subrc = 0. " ok - we found it
@ -140,11 +141,10 @@ CLASS zcl_excel_row IMPLEMENTATION.
CHECK io_worksheet IS BOUND. CHECK io_worksheet IS BOUND.
lt_row_outlines = io_worksheet->get_row_outlines( ). 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 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. ADD 1 TO r_outline_level.
ENDLOOP. ENDLOOP.
ENDMETHOD. ENDMETHOD.
@ -168,19 +168,18 @@ CLASS zcl_excel_row IMPLEMENTATION.
METHOD get_visible. METHOD get_visible.
DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row. 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. r_visible = me->visible.
CHECK r_visible = abap_true. " Currently visible --> but maybe the new outline methodology will hide it implicitly 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 CHECK io_worksheet IS BOUND. " But we have to see the worksheet to make sure
lt_row_outlines = io_worksheet->get_row_outlines( ). 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 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. CLEAR r_visible.
RETURN. " one hit is enough to ensure invisibility RETURN. " one hit is enough to ensure invisibility
ENDLOOP. ENDLOOP.
ENDMETHOD. ENDMETHOD.

View File

@ -174,8 +174,10 @@ CLASS zcl_excel_table IMPLEMENTATION.
METHOD get_reference. 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_table_lines TYPE i,
lv_left_column TYPE zexcel_cell_column_alpha,
lv_right_column TYPE zexcel_cell_column_alpha, lv_right_column TYPE zexcel_cell_column_alpha,
ls_field_catalog TYPE zexcel_s_fieldcatalog, ls_field_catalog TYPE zexcel_s_fieldcatalog,
lv_bottom_row TYPE zexcel_cell_row, lv_bottom_row TYPE zexcel_cell_row,
@ -185,13 +187,12 @@ CLASS zcl_excel_table IMPLEMENTATION.
FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE.
*column *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. lv_table_lines = 0.
LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true.
ADD 1 TO lv_table_lines. ADD 1 TO lv_table_lines.
ENDLOOP. ENDLOOP.
lv_column = lv_column + lv_table_lines - 1. lv_end_column = lv_start_column + lv_table_lines - 1.
lv_right_column = zcl_excel_common=>convert_column2alpha( lv_column ).
*row *row
ASSIGN table_data->* TO <fs_table>. 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_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 ). 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. 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 . VALUE(rv_xstring) TYPE xstring .
METHODS set_color METHODS set_color
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_srgb) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL iv_srgb TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL
VALUE(iv_syscolorname) TYPE string OPTIONAL iv_syscolorname TYPE string OPTIONAL
VALUE(iv_syscolorlast) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL . iv_syscolorlast TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL .
METHODS set_color_scheme_name METHODS set_color_scheme_name
IMPORTING IMPORTING
iv_name TYPE string . iv_name TYPE string .
@ -38,31 +38,31 @@ CLASS zcl_excel_theme DEFINITION
iv_typeface TYPE string . iv_typeface TYPE string .
METHODS set_latin_font METHODS set_latin_font
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_typeface) TYPE string iv_typeface TYPE string
VALUE(iv_panose) TYPE string OPTIONAL iv_panose TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL iv_pitchfamily TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL . iv_charset TYPE string OPTIONAL .
METHODS set_ea_font METHODS set_ea_font
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_typeface) TYPE string iv_typeface TYPE string
VALUE(iv_panose) TYPE string OPTIONAL iv_panose TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL iv_pitchfamily TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL . iv_charset TYPE string OPTIONAL .
METHODS set_cs_font METHODS set_cs_font
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_typeface) TYPE string iv_typeface TYPE string
VALUE(iv_panose) TYPE string OPTIONAL iv_panose TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL iv_pitchfamily TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL . iv_charset TYPE string OPTIONAL .
METHODS set_font_scheme_name METHODS set_font_scheme_name
IMPORTING IMPORTING
VALUE(iv_name) TYPE string . iv_name TYPE string .
METHODS set_theme_name METHODS set_theme_name
IMPORTING IMPORTING
VALUE(iv_name) TYPE string . iv_name TYPE string .
PROTECTED SECTION. PROTECTED SECTION.
DATA elements TYPE REF TO zcl_excel_theme_elements . 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 constructor .
METHODS set_name METHODS set_name
IMPORTING IMPORTING
VALUE(iv_name) TYPE string . iv_name TYPE string .
PROTECTED SECTION. PROTECTED SECTION.
DATA name TYPE string . 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 . !io_document TYPE REF TO if_ixml_document .
METHODS modify_font METHODS modify_font
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_script) TYPE string iv_script TYPE string
VALUE(iv_typeface) TYPE string . iv_typeface TYPE string .
METHODS modify_latin_font METHODS modify_latin_font
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_typeface) TYPE string iv_typeface TYPE string
VALUE(iv_panose) TYPE string OPTIONAL iv_panose TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL iv_pitchfamily TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL . iv_charset TYPE string OPTIONAL .
METHODS modify_ea_font METHODS modify_ea_font
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_typeface) TYPE string iv_typeface TYPE string
VALUE(iv_panose) TYPE string OPTIONAL iv_panose TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL iv_pitchfamily TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL . iv_charset TYPE string OPTIONAL .
METHODS modify_cs_font METHODS modify_cs_font
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_typeface) TYPE string iv_typeface TYPE string
VALUE(iv_panose) TYPE string OPTIONAL iv_panose TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL iv_pitchfamily TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL . iv_charset TYPE string OPTIONAL .
METHODS constructor . METHODS constructor .
PROTECTED SECTION. PROTECTED SECTION.
METHODS modify_lec_fonts METHODS modify_lec_fonts
IMPORTING IMPORTING
VALUE(iv_type) TYPE string iv_type TYPE string
VALUE(iv_font_type) TYPE string iv_font_type TYPE string
VALUE(iv_typeface) TYPE string iv_typeface TYPE string
VALUE(iv_panose) TYPE string OPTIONAL iv_panose TYPE string OPTIONAL
VALUE(iv_pitchfamily) TYPE string OPTIONAL iv_pitchfamily TYPE string OPTIONAL
VALUE(iv_charset) TYPE string OPTIONAL . iv_charset TYPE string OPTIONAL .
PRIVATE SECTION. PRIVATE SECTION.
DATA font_scheme TYPE t_scheme . DATA font_scheme TYPE t_scheme .

View File

@ -21,8 +21,8 @@ CLASS zcl_excel_worksheet DEFINITION
row_to TYPE i, row_to TYPE i,
collapsed TYPE abap_bool, collapsed TYPE abap_bool,
END OF mty_s_outline_row . END OF mty_s_outline_row .
TYPES: TYPES: mty_ts_outlines_row TYPE SORTED TABLE OF mty_s_outline_row WITH UNIQUE KEY primary_key COMPONENTS row_from row_to
mty_ts_outlines_row TYPE SORTED TABLE OF mty_s_outline_row WITH UNIQUE KEY row_from row_to . WITH NON-UNIQUE SORTED KEY row_to COMPONENTS row_to collapsed.
TYPES: TYPES:
BEGIN OF mty_s_ignored_errors, BEGIN OF mty_s_ignored_errors,
"! Cell reference (e.g. "A1") or list like "A1 A2" or range "A1:G1" "! Cell reference (e.g. "A1") or list like "A1 A2" or range "A1:G1"
@ -74,7 +74,8 @@ CLASS zcl_excel_worksheet DEFINITION
col_to TYPE i, col_to TYPE i,
END OF mty_merge . END OF mty_merge .
TYPES: 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: TYPES:
ty_area TYPE c LENGTH 1 . ty_area TYPE c LENGTH 1 .
@ -2269,7 +2270,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDIF. ENDIF.
" Date & Time in excel style " 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. ls_style_conv-cell_style = <ls_sheet_content>-cell_style.
APPEND ls_style_conv TO lt_style_conv. APPEND ls_style_conv TO lt_style_conv.
ENDLOOP. ENDLOOP.
@ -2441,7 +2442,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
LOOP AT me->mt_merged_cells TRANSPORTING NO FIELDS LOOP AT me->mt_merged_cells TRANSPORTING NO FIELDS
WHERE row_from <= ip_cell_row AND row_to >= ip_cell_row 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. DELETE me->mt_merged_cells.
EXIT. EXIT.
ENDLOOP. 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 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 row_to < ls_merge-row_from
OR col_from > ls_merge-col_to 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). lv_errormessage = 'Overlapping merges'(404).
zcx_excel=>raise_text( lv_errormessage ). 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 LOOP AT lt_table_areas TRANSPORTING NO FIELDS WHERE top <= <ls_sheet_content>-cell_row
AND bottom >= <ls_sheet_content>-cell_row AND bottom >= <ls_sheet_content>-cell_row
AND left <= <ls_sheet_content>-cell_column 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. EXIT.
ENDLOOP. ENDLOOP.
IF sy-subrc = 0. IF sy-subrc = 0.
@ -4550,8 +4550,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
ENDIF. ENDIF.
rv_ixml_sheet_data_root->append_child( new_child = lo_element_2 ). " row node rv_ixml_sheet_data_root->append_child( new_child = lo_element_2 ). " row node
ENDIF. 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. ENDMETHOD.

View File

@ -30,6 +30,12 @@ CLASS zcl_excel_writer_csv DEFINITION
CLASS-METHODS set_initial_ext_date CLASS-METHODS set_initial_ext_date
IMPORTING IMPORTING
!ip_value TYPE char10 DEFAULT c_default . !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 *"* protected components of class ZCL_EXCEL_WRITER_CSV
*"* do not include other source files here!!! *"* do not include other source files here!!!
PROTECTED SECTION. PROTECTED SECTION.
@ -45,6 +51,8 @@ CLASS zcl_excel_writer_csv DEFINITION
CLASS-DATA worksheet_name TYPE zexcel_worksheets_name . CLASS-DATA worksheet_name TYPE zexcel_worksheets_name .
CLASS-DATA worksheet_index TYPE zexcel_active_worksheet . CLASS-DATA worksheet_index TYPE zexcel_active_worksheet .
CLASS-DATA initial_ext_date TYPE char10 VALUE c_default. 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 METHODS create
RETURNING RETURNING
@ -91,6 +99,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
DATA: lo_iterator TYPE REF TO zcl_excel_collection_iterator, DATA: lo_iterator TYPE REF TO zcl_excel_collection_iterator,
lo_worksheet TYPE REF TO zcl_excel_worksheet. 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, DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted,
lv_row TYPE i, lv_row TYPE i,
lv_col TYPE i, lv_col TYPE i,
@ -113,8 +124,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
* --- Retrieve SAP date format * --- Retrieve SAP date format
CLEAR ls_format. CLEAR ls_format.
SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' 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-cmpname = 'DATE'.
ls_format-attvalue = ls_format-attvalue(10). " Ignore description, only use pattern
CONDENSE ls_format-attvalue. CONDENSE ls_format-attvalue.
CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue.
APPEND ls_format TO lt_format. APPEND ls_format TO lt_format.
@ -151,11 +163,54 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
SORT lt_cell_data BY cell_row SORT lt_cell_data BY cell_row
cell_column. 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_row = 1.
lv_col = 1. lv_col = 1.
CLEAR lv_string. CLEAR lv_string.
LOOP AT lt_cell_data ASSIGNING <fs_sheet_content>. 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 * --- Retrieve Cell Style format and data type
CLEAR ls_numfmt. CLEAR ls_numfmt.
IF <fs_sheet_content>-data_type IS INITIAL AND <fs_sheet_content>-cell_style IS NOT INITIAL. 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. " lv_attrname IS NOT INITIAL.
ENDIF. " <fs_sheet_content>-data_type IS INITIAL AND ls_numfmt 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. * ----- Use format to determine the data type and display format.
CASE <fs_sheet_content>-data_type. CASE <fs_sheet_content>-data_type.
@ -318,6 +360,16 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
ENDMETHOD. 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. METHOD zif_excel_writer~write_file.
me->excel = io_excel. me->excel = io_excel.
ep_file = me->create( ). ep_file = me->create( ).

View File

@ -11,7 +11,7 @@
<ACCESSMODE>H</ACCESSMODE> <ACCESSMODE>H</ACCESSMODE>
<KEYDEF>K</KEYDEF> <KEYDEF>K</KEYDEF>
<KEYKIND>U</KEYKIND> <KEYKIND>U</KEYKIND>
<KEYFDCOUNT>0003</KEYFDCOUNT> <KEYFDCOUNT>0005</KEYFDCOUNT>
<DDTEXT>Stylemapping: Values -&gt; GUID</DDTEXT> <DDTEXT>Stylemapping: Values -&gt; GUID</DDTEXT>
</DD40V> </DD40V>
<DD42V> <DD42V>
@ -21,12 +21,26 @@
<ROWTYPEPOS>0001</ROWTYPEPOS> <ROWTYPEPOS>0001</ROWTYPEPOS>
<KEYFIELD>DYNAMIC_STYLE_GUID</KEYFIELD> <KEYFIELD>DYNAMIC_STYLE_GUID</KEYFIELD>
</DD42V> </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> <DD42V>
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME> <TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
<KEYFDPOS>0002</KEYFDPOS> <KEYFDPOS>0002</KEYFDPOS>
<ROWTYPEPOS>0097</ROWTYPEPOS> <ROWTYPEPOS>0097</ROWTYPEPOS>
<KEYFIELD>COMPLETE_STYLEX</KEYFIELD> <KEYFIELD>COMPLETE_STYLEX</KEYFIELD>
</DD42V> </DD42V>
<DD42V>
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
<SECKEYNAME>ADDED_TO_ITERATOR</SECKEYNAME>
<KEYFDPOS>0002</KEYFDPOS>
<ROWTYPEPOS>0192</ROWTYPEPOS>
<KEYFIELD>GUID</KEYFIELD>
</DD42V>
<DD42V> <DD42V>
<TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME> <TYPENAME>ZEXCEL_T_STYLEMAPPING1</TYPENAME>
<KEYFDPOS>0003</KEYFDPOS> <KEYFDPOS>0003</KEYFDPOS>
@ -34,6 +48,16 @@
<KEYFIELD>COMPLETE_STYLE</KEYFIELD> <KEYFIELD>COMPLETE_STYLE</KEYFIELD>
</DD42V> </DD42V>
</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:values>
</asx:abap> </asx:abap>
</abapGit> </abapGit>