Merge branch 'main' into hvam/normalize1212

This commit is contained in:
Lars Hvam 2024-02-15 15:39:33 +01:00 committed by GitHub
commit 30193b82f8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 138 additions and 66 deletions

View File

@ -1,4 +1,4 @@
Apache License
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
@ -186,7 +186,7 @@ Apache License
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Copyright 2010 abap2xlsx Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2262,6 +2262,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
workbookviewid TYPE string,
showrowcolheaders TYPE string,
righttoleft TYPE string,
topleftcell TYPE string,
END OF lty_sheetview.
TYPES: BEGIN OF lty_mergecell,
@ -2812,6 +2813,9 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
io_worksheet->zif_excel_sheet_properties~zoomscale_normal = ls_sheetview-zoomscalenormal.
io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = ls_sheetview-zoomscalepagelayoutview.
io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = ls_sheetview-zoomscalesheetlayoutview.
IF ls_sheetview-topleftcell IS NOT INITIAL.
io_worksheet->set_sheetview_top_left_cell( ls_sheetview-topleftcell ).
ENDIF.
"Add merge cell information
lo_ixml_mergecells = lo_ixml_worksheet->get_elements_by_tag_name_ns( name = 'mergeCell' uri = namespace-main ).
@ -2928,21 +2932,12 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ENDIF.
" Start fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007
" Read pane
lo_ixml_pane_elem = lo_ixml_sheetview_elem->find_from_name_ns( name = 'pane' uri = namespace-main ).
IF lo_ixml_pane_elem IS BOUND.
fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_pane_elem CHANGING cp_structure = ls_excel_pane ).
" Issue #194
" Replace REGEX with method from the common class
zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING
i_columnrow = ls_excel_pane-topleftcell
IMPORTING
e_column = lv_pane_cell_col_a " Cell Column
e_row = lv_pane_cell_row ). " Natural number
lv_pane_cell_col = zcl_excel_common=>convert_column2int( lv_pane_cell_col_a ).
SUBTRACT 1 FROM: lv_pane_cell_col,
lv_pane_cell_row.
lv_pane_cell_col = ls_excel_pane-xsplit.
lv_pane_cell_row = ls_excel_pane-ysplit.
IF lv_pane_cell_col > 0
AND lv_pane_cell_row > 0.
io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row
@ -2952,8 +2947,10 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
ELSE.
io_worksheet->freeze_panes( ip_num_columns = lv_pane_cell_col ).
ENDIF.
IF ls_excel_pane-topleftcell IS NOT INITIAL.
io_worksheet->set_pane_top_left_cell( ls_excel_pane-topleftcell ).
ENDIF.
ENDIF.
" End fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007
" Start fix 276 Read data validations
lo_ixml_datavalidations = lo_ixml_worksheet->get_elements_by_tag_name_ns( name = 'dataValidation' uri = namespace-main ).

View File

@ -71,10 +71,7 @@ CLASS zcl_excel_theme DEFINITION
DATA extlst TYPE REF TO zcl_excel_theme_extlst .
PRIVATE SECTION.
DATA theme_changed TYPE abap_bool .
DATA theme_read TYPE abap_bool .
DATA name TYPE string .
DATA xmls_a TYPE string .
ENDCLASS.
@ -100,7 +97,6 @@ CLASS zcl_excel_theme IMPLEMENTATION.
lo_node_theme = io_theme_xml->get_root_element( )." find_from_name( name = c_theme ).
IF lo_node_theme IS BOUND.
name = lo_node_theme->get_attribute( name = c_theme_name ).
xmls_a = lo_node_theme->get_attribute( name = c_theme_xmlns ).
lo_theme_children = lo_node_theme->get_children( ).
lo_theme_iterator = lo_theme_children->create_iterator( ).
lo_theme_element ?= lo_theme_iterator->get_next( ).
@ -208,7 +204,6 @@ CLASS zcl_excel_theme IMPLEMENTATION.
lo_document = lo_ixml->create_document( ).
lo_document->set_encoding( lo_encoding ).
lo_document->set_standalone( abap_true ).
lo_document->set_namespace_prefix( prefix = 'a' ).
lo_element_root = lo_document->create_simple_element_ns( prefix = c_theme_prefix
name = c_theme

View File

@ -102,6 +102,8 @@ CLASS zcl_excel_worksheet DEFINITION
formula_in_other_column TYPE string,
END OF c_messages .
DATA mt_merged_cells TYPE mty_ts_merge READ-ONLY .
DATA pane_top_left_cell TYPE string READ-ONLY.
DATA sheetview_top_left_cell TYPE string READ-ONLY.
METHODS add_comment
IMPORTING
@ -549,6 +551,11 @@ CLASS zcl_excel_worksheet DEFINITION
!ip_formula TYPE zexcel_cell_formula OPTIONAL "added parameter
RAISING
zcx_excel .
METHODS set_pane_top_left_cell
IMPORTING
!iv_columnrow TYPE csequence
RAISING
zcx_excel.
METHODS set_print_gridlines
IMPORTING
!i_print_gridlines TYPE zexcel_print_gridlines .
@ -565,6 +572,11 @@ CLASS zcl_excel_worksheet DEFINITION
!iv_collapsed TYPE abap_bool
RAISING
zcx_excel .
METHODS set_sheetview_top_left_cell
IMPORTING
!iv_columnrow TYPE csequence
RAISING
zcx_excel.
METHODS set_show_gridlines
IMPORTING
!i_show_gridlines TYPE zexcel_show_gridlines .
@ -4301,6 +4313,25 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDMETHOD. "set_merge_style
METHOD set_pane_top_left_cell.
DATA lv_column_int TYPE zexcel_cell_column.
DATA lv_row TYPE zexcel_cell_row.
" Validate input value
zcl_excel_common=>convert_columnrow2column_a_row(
EXPORTING
i_columnrow = iv_columnrow
IMPORTING
e_column_int = lv_column_int
e_row = lv_row ).
IF lv_column_int NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_col AND zcl_excel_common=>c_excel_sheet_max_col
OR lv_row NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_row AND zcl_excel_common=>c_excel_sheet_max_row.
RAISE EXCEPTION TYPE zcx_excel EXPORTING error = 'Invalid column/row coordinates (valid values: A1 to XFD1048576)'.
ENDIF.
pane_top_left_cell = iv_columnrow.
ENDMETHOD.
METHOD set_print_gridlines.
me->print_gridlines = i_print_gridlines.
ENDMETHOD. "SET_PRINT_GRIDLINES
@ -4357,6 +4388,25 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
ENDMETHOD. "SET_ROW_OUTLINE
METHOD set_sheetview_top_left_cell.
DATA lv_column_int TYPE zexcel_cell_column.
DATA lv_row TYPE zexcel_cell_row.
" Validate input value
zcl_excel_common=>convert_columnrow2column_a_row(
EXPORTING
i_columnrow = iv_columnrow
IMPORTING
e_column_int = lv_column_int
e_row = lv_row ).
IF lv_column_int NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_col AND zcl_excel_common=>c_excel_sheet_max_col
OR lv_row NOT BETWEEN zcl_excel_common=>c_excel_sheet_min_row AND zcl_excel_common=>c_excel_sheet_max_row.
RAISE EXCEPTION TYPE zcx_excel EXPORTING error = 'Invalid column/row coordinates (valid values: A1 to XFD1048576)'.
ENDIF.
sheetview_top_left_cell = iv_columnrow.
ENDMETHOD.
METHOD set_show_gridlines.
me->show_gridlines = i_show_gridlines.
ENDMETHOD. "SET_SHOW_GRIDLINES

View File

@ -2666,7 +2666,6 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
METHOD create_xl_drawings_vml.
DATA:
lo_xml_document TYPE REF TO cl_xml_document,
ld_stream TYPE string.
@ -2677,11 +2676,6 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
* BODY
ld_stream = set_vml_string( ).
CREATE OBJECT lo_xml_document.
CALL METHOD lo_xml_document->parse_string
EXPORTING
stream = ld_stream.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = ld_stream
@ -3334,8 +3328,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
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,
lo_xml_document TYPE REF TO cl_xml_document.
lv_content TYPE string.
* INIT_RESULT
@ -3383,11 +3376,6 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
ld_7
INTO lv_content.
CREATE OBJECT lo_xml_document.
CALL METHOD lo_xml_document->parse_string
EXPORTING
stream = lv_content.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_content

View File

@ -395,6 +395,11 @@ CLASS lcl_create_xl_sheet IMPLEMENTATION.
value = '0' ).
ENDIF.
IF o_worksheet->sheetview_top_left_cell IS NOT INITIAL.
lo_element_2->set_attribute_ns( name = 'topLeftCell'
value = o_worksheet->sheetview_top_left_cell ).
ENDIF.
" freeze panes
o_worksheet->get_freeze_cell( IMPORTING ep_row = lv_freeze_cell_row
ep_column = lv_freeze_cell_column ).
@ -417,11 +422,15 @@ CLASS lcl_create_xl_sheet IMPLEMENTATION.
value = lv_value ).
ENDIF.
lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ).
lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ).
CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value.
lo_element_3->set_attribute_ns( name = 'topLeftCell'
value = lv_value ).
IF o_worksheet->pane_top_left_cell IS NOT INITIAL.
lo_element_3->set_attribute_ns( name = 'topLeftCell'
value = o_worksheet->pane_top_left_cell ).
ELSE.
lv_value = zcl_excel_common=>convert_column_a_row2columnrow( i_column = lv_freeze_cell_column
i_row = lv_freeze_cell_row ).
lo_element_3->set_attribute_ns( name = 'topLeftCell'
value = lv_value ).
ENDIF.
lo_element_3->set_attribute_ns( name = 'activePane'
value = 'bottomRight' ).

View File

@ -9,6 +9,9 @@ CLASS zcl_excel_writer_csv DEFINITION
INTERFACES zif_excel_writer .
"! Default value for initial dates e.g. user's format (DD.MM.YYYY, MM.DD.YYYY, etc.)
CONSTANTS c_default TYPE c LENGTH 10 VALUE 'DEFAULT' ##NO_TEXT.
CLASS-METHODS set_delimiter
IMPORTING
VALUE(ip_value) TYPE c DEFAULT ';' .
@ -24,7 +27,10 @@ CLASS zcl_excel_writer_csv DEFINITION
CLASS-METHODS set_active_sheet_index_by_name
IMPORTING
!i_worksheet_name TYPE zexcel_worksheets_name .
*"* protected components of class ZCL_EXCEL_WRITER_2007
CLASS-METHODS set_initial_ext_date
IMPORTING
!ip_value TYPE char10 DEFAULT c_default .
*"* protected components of class ZCL_EXCEL_WRITER_CSV
*"* do not include other source files here!!!
PROTECTED SECTION.
*"* private components of class ZCL_EXCEL_WRITER_CSV
@ -38,6 +44,7 @@ CLASS zcl_excel_writer_csv DEFINITION
eol TYPE c LENGTH 2 VALUE cl_abap_char_utilities=>cr_lf ##NO_TEXT.
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.
METHODS create
RETURNING
@ -53,7 +60,7 @@ ENDCLASS.
CLASS zcl_excel_writer_csv IMPLEMENTATION.
CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION.
METHOD create.
@ -220,24 +227,28 @@ CLASS zcl_excel_writer_csv IMPLEMENTATION.
CASE <fs_sheet_content>-data_type.
WHEN 'd' OR 'D'.
lc_value = zcl_excel_common=>excel_string_to_date( ip_value = <fs_sheet_content>-cell_value ).
TRY.
lv_date = lc_value.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_date
IMPORTING
date_external = lv_tmp
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc = 0.
lc_value = lv_tmp.
ENDIF.
IF <fs_sheet_content>-cell_value IS INITIAL AND initial_ext_date <> c_default.
lc_value = initial_ext_date.
ELSE.
lc_value = zcl_excel_common=>excel_string_to_date( ip_value = <fs_sheet_content>-cell_value ).
TRY.
lv_date = lc_value.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = lv_date
IMPORTING
date_external = lv_tmp
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc = 0.
lc_value = lv_tmp.
ENDIF.
CATCH cx_sy_conversion_no_number.
CATCH cx_sy_conversion_no_number.
ENDTRY.
ENDTRY.
ENDIF.
WHEN 't' OR 'T'.
lc_value = zcl_excel_common=>excel_string_to_time( ip_value = <fs_sheet_content>-cell_value ).
@ -302,6 +313,11 @@ CLASS zcl_excel_writer_csv IMPLEMENTATION.
ENDMETHOD.
METHOD set_initial_ext_date.
initial_ext_date = ip_value.
ENDMETHOD.
METHOD zif_excel_writer~write_file.
me->excel = io_excel.
ep_file = me->create( ).

View File

@ -32,6 +32,11 @@
<LANGU>I</LANGU>
<DESCRIPT>Create CSV ; Delimited format</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>C_DEFAULT</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Constant for string &apos;DEFAULT&apos;</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>DELIMITER</CMPNAME>
<LANGU>E</LANGU>
@ -72,6 +77,11 @@
<LANGU>I</LANGU>
<DESCRIPT>Excel creator</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>INITIAL_EXT_DATE</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Initial External Date</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>SET_ACTIVE_SHEET_INDEX</CMPNAME>
<LANGU>E</LANGU>
@ -122,6 +132,11 @@
<LANGU>I</LANGU>
<DESCRIPT>Set End Of Line character</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>SET_INITIAL_EXT_DATE</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Set Initial External Date (replacing default &apos;00.00.0000&apos;)</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CMPNAME>WORKSHEET_INDEX</CMPNAME>
<LANGU>E</LANGU>
@ -143,6 +158,14 @@
<DESCRIPT>Worksheets name</DESCRIPT>
</SEOCOMPOTX>
</DESCRIPTIONS>
<DESCRIPTIONS_SUB>
<SEOSUBCOTX>
<CMPNAME>SET_INITIAL_EXT_DATE</CMPNAME>
<SCONAME>IP_VALUE</SCONAME>
<LANGU>E</LANGU>
<DESCRIPT>Input Value</DESCRIPT>
</SEOSUBCOTX>
</DESCRIPTIONS_SUB>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -262,8 +262,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
lo_ostream TYPE REF TO if_ixml_ostream,
lo_renderer TYPE REF TO if_ixml_renderer.
DATA: lv_subrc TYPE sysubrc,
lv_contenttype TYPE string.
DATA: lv_contenttype TYPE string.
**********************************************************************
* STEP 3: Create standard contentType
@ -273,7 +272,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the extension bin definition
CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ).
lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ).
@ -342,7 +341,6 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
DATA: lv_xml_node_ridx_id TYPE string,
lv_size TYPE i,
lv_subrc TYPE sysubrc,
lv_syindex(2) TYPE c.
**********************************************************************
@ -353,7 +351,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the vbaProject relation
CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ).
lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ).
@ -406,8 +404,6 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
lo_ostream TYPE REF TO if_ixml_ostream,
lo_renderer TYPE REF TO if_ixml_renderer.
DATA: lv_subrc TYPE sysubrc.
**********************************************************************
* STEP 3: Create standard relationship
ep_content = super->create_xl_sheet( io_worksheet = io_worksheet
@ -417,7 +413,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the vbaProject relation
CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ).
lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ).
@ -458,8 +454,6 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
lo_ostream TYPE REF TO if_ixml_ostream,
lo_renderer TYPE REF TO if_ixml_renderer.
DATA: lv_subrc TYPE sysubrc.
**********************************************************************
* STEP 3: Create standard relationship
ep_content = super->create_xl_workbook( ).
@ -468,7 +462,7 @@ CLASS zcl_excel_writer_xlsm IMPLEMENTATION.
* STEP 2: modify XML adding the vbaProject relation
CREATE OBJECT lo_document_xml.
lv_subrc = lo_document_xml->parse_xstring( ep_content ).
lo_document_xml->parse_xstring( ep_content ).
lo_document ?= lo_document_xml->m_document.
lo_element_root = lo_document->if_ixml_node~get_first_child( ).