diff --git a/src/zcl_excel_comment.clas.abap b/src/zcl_excel_comment.clas.abap index f9ad9e0..2848b7d 100644 --- a/src/zcl_excel_comment.clas.abap +++ b/src/zcl_excel_comment.clas.abap @@ -5,9 +5,42 @@ CLASS zcl_excel_comment DEFINITION PUBLIC SECTION. - CONSTANTS default_right_column TYPE i VALUE 4. "#EC NOTEXT - CONSTANTS default_bottom_row TYPE i VALUE 15. "#EC NOTEXT + TYPES: + BEGIN OF ty_rtf_fragment. + INCLUDE TYPE zexcel_s_style_font AS rtf. + TYPES: + text TYPE string, + END OF ty_rtf_fragment . + TYPES: + ty_rtf_fragments TYPE STANDARD TABLE OF ty_rtf_fragment + WITH NON-UNIQUE DEFAULT KEY . + TYPES: + BEGIN OF ty_box, + left_column TYPE i, + left_offset TYPE i, + top_row TYPE i, + top_offset TYPE i, + right_column TYPE i, + right_offset TYPE i, + bottom_row TYPE i, + bottom_offset TYPE i, + END OF ty_box . + CONSTANTS: + BEGIN OF gc_default_box, + left_column TYPE i VALUE 2, + left_offset TYPE i VALUE 15, + top_row TYPE i VALUE 11, + top_offset TYPE i VALUE 10, + right_column TYPE i VALUE 4, + right_offset TYPE i VALUE 31, + bottom_row TYPE i VALUE 15, + bottom_offset TYPE i VALUE 9, + END OF gc_default_box . + + CLASS-METHODS get_default_style + RETURNING + VALUE(es_default) TYPE zexcel_s_style_font . METHODS constructor . METHODS get_bottom_offset RETURNING @@ -45,38 +78,47 @@ CLASS zcl_excel_comment DEFINITION METHODS get_top_row RETURNING VALUE(rp_result) TYPE i . + METHODS set_box + IMPORTING + !is_box TYPE ty_box . METHODS set_text IMPORTING - !ip_text TYPE string + !ip_text TYPE string OPTIONAL + !is_style TYPE zexcel_s_style_font OPTIONAL !ip_ref TYPE string OPTIONAL - !ip_left_column TYPE i DEFAULT 2 - !ip_left_offset TYPE i DEFAULT 15 - !ip_top_row TYPE i DEFAULT 11 - !ip_top_offset TYPE i DEFAULT 10 - !ip_right_column TYPE i DEFAULT default_right_column - !ip_right_offset TYPE i DEFAULT 31 - !ip_bottom_row TYPE i DEFAULT default_bottom_row - !ip_bottom_offset TYPE i DEFAULT 9. - + !ip_left_column TYPE i DEFAULT gc_default_box-left_column + !ip_left_offset TYPE i DEFAULT gc_default_box-left_offset + !ip_top_row TYPE i DEFAULT gc_default_box-top_row + !ip_top_offset TYPE i DEFAULT gc_default_box-top_offset + !ip_right_column TYPE i DEFAULT gc_default_box-right_column + !ip_right_offset TYPE i DEFAULT gc_default_box-right_offset + !ip_bottom_row TYPE i DEFAULT gc_default_box-bottom_row + !ip_bottom_offset TYPE i DEFAULT gc_default_box-bottom_offset . + METHODS get_text_rtf + RETURNING + VALUE(et_rtf) TYPE ty_rtf_fragments . + METHODS set_text_rtf + IMPORTING + !it_rtf TYPE ty_rtf_fragments OPTIONAL + !ip_ref TYPE string OPTIONAL + !is_box TYPE ty_box OPTIONAL . PROTECTED SECTION. - PRIVATE SECTION. +PRIVATE SECTION. - DATA bottom_offset TYPE i . - DATA bottom_row TYPE i . - DATA index TYPE string . - DATA ref TYPE string . - DATA left_column TYPE i . - DATA left_offset TYPE i . - DATA right_column TYPE i . - DATA right_offset TYPE i . - DATA text TYPE string . - DATA top_offset TYPE i . - DATA top_row TYPE i . + DATA index TYPE string . + DATA ref TYPE string . + DATA gt_rtf TYPE ty_rtf_fragments . + DATA gs_box TYPE ty_box . + + METHODS add_text + IMPORTING + !ip_text TYPE string + !is_style TYPE zexcel_s_style_font . ENDCLASS. -CLASS zcl_excel_comment IMPLEMENTATION. +CLASS ZCL_EXCEL_COMMENT IMPLEMENTATION. METHOD constructor. @@ -85,12 +127,12 @@ CLASS zcl_excel_comment IMPLEMENTATION. METHOD get_bottom_offset. - rp_result = bottom_offset. + rp_result = gs_box-bottom_offset. ENDMETHOD. METHOD get_bottom_row. - rp_result = bottom_row. + rp_result = gs_box-bottom_row. ENDMETHOD. @@ -100,12 +142,12 @@ CLASS zcl_excel_comment IMPLEMENTATION. METHOD get_left_column. - rp_result = left_column. + rp_result = gs_box-left_column. ENDMETHOD. METHOD get_left_offset. - rp_result = left_offset. + rp_result = gs_box-left_offset. ENDMETHOD. @@ -120,56 +162,112 @@ CLASS zcl_excel_comment IMPLEMENTATION. METHOD get_right_column. - rp_result = right_column. + rp_result = gs_box-right_column. ENDMETHOD. METHOD get_right_offset. - rp_result = right_offset. + rp_result = gs_box-right_offset. ENDMETHOD. METHOD get_text. - rp_text = me->text. + FIELD-SYMBOLS: LIKE LINE OF gt_rtf. + LOOP AT gt_rtf ASSIGNING . + CONCATENATE rp_text -text INTO rp_text. + ENDLOOP. ENDMETHOD. METHOD get_top_offset. - rp_result = top_offset. + rp_result = gs_box-top_offset. ENDMETHOD. METHOD get_top_row. - rp_result = top_row. + rp_result = gs_box-top_row. ENDMETHOD. METHOD set_text. - me->text = ip_text. IF ip_ref IS SUPPLIED. - me->ref = ip_ref. + ref = ip_ref. ENDIF. - me->left_column = ip_left_column. - me->left_offset = ip_left_offset. - - me->top_row = ip_top_row. - me->top_offset = ip_top_offset. - - IF ip_right_column IS NOT INITIAL. - me->right_column = ip_right_column. - ELSE. - me->right_column = default_right_column. +* Add a simple text with parameter IP_TEXT and style IS_STYLE + IF ip_text IS NOT INITIAL. + add_text( + ip_text = ip_text + is_style = is_style ). ENDIF. - me->right_offset = ip_right_offset. - IF ip_bottom_row IS NOT INITIAL. - me->bottom_row = ip_bottom_row. - ELSE. - me->bottom_row = default_bottom_row. - ENDIF. - me->bottom_offset = ip_bottom_offset. +* Parameters of the containing box + DATA ls_box TYPE ty_box. + ls_box-left_column = ip_left_column. + ls_box-left_offset = ip_left_offset. + ls_box-top_row = ip_top_row. + ls_box-top_offset = ip_top_offset. + ls_box-right_column = ip_right_column. + ls_box-right_offset = ip_right_offset. + ls_box-bottom_row = ip_bottom_row. + ls_box-bottom_offset = ip_bottom_offset. + set_box( ls_box ). + ENDMETHOD. + + METHOD set_box. + + gs_box = is_box. + + ENDMETHOD. + + + METHOD add_text. + + DATA ls_rtf LIKE LINE OF gt_rtf. + ls_rtf-text = ip_text. + IF is_style IS INITIAL. + ls_rtf-rtf = get_default_style( ). + ELSE. + ls_rtf-rtf = is_style. + ENDIF. + APPEND ls_rtf TO gt_rtf. + + ENDMETHOD. + + + METHOD get_default_style. + + es_default-bold = abap_true. + es_default-size = 9. + es_default-color-indexed = 81. + es_default-color-theme = zcl_excel_style_color=>c_theme_not_set. + es_default-name = `Tahoma`. + es_default-family = 2. + + ENDMETHOD. + + + METHOD get_text_rtf. + et_rtf = gt_rtf. + ENDMETHOD. + + + METHOD set_text_rtf. + +* Set a text, consisting of differently styled parts + gt_rtf = it_rtf. + + IF ip_ref IS SUPPLIED. + ref = ip_ref. + ENDIF. + +* Parameters of the containing box + IF is_box IS SUPPLIED. + set_box( is_box ). + ENDIF. + + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_comment.clas.xml b/src/zcl_excel_comment.clas.xml index b7ce4e4..c154612 100644 --- a/src/zcl_excel_comment.clas.xml +++ b/src/zcl_excel_comment.clas.xml @@ -17,21 +17,31 @@ E CONSTRUCTOR + + GET_DEFAULT_STYLE + E + Default style for formatted parts of comment + GET_INDEX E - Get index + Get index (in commentlist zcl_excel_comments) GET_REF E - Get reference + Get cell reference GET_TEXT E Get text + + GET_TEXT_RTF + E + Get text consisting of styled parts + INDEX E @@ -42,17 +52,72 @@ E Reference to cell (eg. 'B13') + + SET_BOX + E + Set box for display + SET_TEXT E Set text - TEXT + SET_TEXT_RTF E - Comment + Set text consisting of styled parts + + + ADD_TEXT + IS_STYLE + E + Style + + + GET_DEFAULT_STYLE + ES_DEFAULT + E + Cell Font + + + SET_TEXT + IP_REF + E + Cell reference (e.g. 'A1') + + + SET_TEXT + IP_TEXT + E + Text as string + + + SET_TEXT + IS_STYLE + E + Style (for richt text comment) + + + SET_TEXT_RTF + IP_REF + E + Cell reference (e.g. 'A1') + + + SET_TEXT_RTF + IS_BOX + E + Bounding box (optional) + + + SET_TEXT_RTF + IT_RTF + E + Comment with differently styled parts + + diff --git a/src/zcl_excel_comments.clas.abap b/src/zcl_excel_comments.clas.abap index b0b897e..83740fe 100644 --- a/src/zcl_excel_comments.clas.abap +++ b/src/zcl_excel_comments.clas.abap @@ -5,6 +5,12 @@ CLASS zcl_excel_comments DEFINITION PUBLIC SECTION. + TYPES: + ty_boxes TYPE STANDARD TABLE OF zcl_excel_comment=>ty_box + WITH NON-UNIQUE DEFAULT KEY . + + DATA gv_full_vml TYPE string READ-ONLY . + METHODS add IMPORTING !ip_comment TYPE REF TO zcl_excel_comment . @@ -12,7 +18,9 @@ CLASS zcl_excel_comments DEFINITION IMPORTING !ip_comment TYPE REF TO zcl_excel_comment . METHODS clear . - METHODS constructor . + METHODS constructor + IMPORTING + !io_from TYPE REF TO zcl_excel_comments OPTIONAL . METHODS get IMPORTING !ip_index TYPE zexcel_active_worksheet @@ -30,15 +38,20 @@ CLASS zcl_excel_comments DEFINITION METHODS size RETURNING VALUE(ep_size) TYPE i . + METHODS set_boxes + IMPORTING + !it_boxes TYPE ty_boxes OPTIONAL + !iv_full_vml TYPE string OPTIONAL . PROTECTED SECTION. - PRIVATE SECTION. +PRIVATE SECTION. - DATA comments TYPE REF TO zcl_excel_collection . + DATA comments TYPE REF TO zcl_excel_collection . + DATA gt_boxes TYPE ty_boxes . ENDCLASS. -CLASS zcl_excel_comments IMPLEMENTATION. +CLASS ZCL_EXCEL_COMMENTS IMPLEMENTATION. METHOD add. @@ -57,7 +70,15 @@ CLASS zcl_excel_comments IMPLEMENTATION. METHOD constructor. - CREATE OBJECT comments. + + IF io_from IS INITIAL. + CREATE OBJECT comments. + ELSE. +* Copy constructor: copy attributes from original + comments = io_from->comments. + gt_boxes = io_from->gt_boxes. + gv_full_vml = io_from->gv_full_vml. + ENDIF. ENDMETHOD. @@ -97,4 +118,37 @@ CLASS zcl_excel_comments IMPLEMENTATION. ep_size = comments->size( ). ENDMETHOD. + + + METHOD set_boxes. + + DATA: + lo_comments TYPE REF TO zcl_excel_collection_iterator, + lo_comment TYPE REF TO zcl_excel_comment. + + FIELD-SYMBOLS: + TYPE zcl_excel_comment=>ty_box. + + IF it_boxes IS NOT INITIAL. + gt_boxes = it_boxes. + ENDIF. + + IF iv_full_vml IS NOT INITIAL. + gv_full_vml = iv_full_vml. + ENDIF. + + IF gt_boxes IS NOT INITIAL. + + lo_comments = comments->get_iterator( ). + WHILE lo_comments->has_next( ) EQ abap_true. + READ TABLE gt_boxes INDEX 1 ASSIGNING . + CHECK sy-subrc EQ 0. + lo_comment ?= lo_comments->get_next( ). + lo_comment->set_box( ). + DELETE gt_boxes INDEX 1. + ENDWHILE. + + ENDIF. + + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_comments.clas.xml b/src/zcl_excel_comments.clas.xml index 0e69781..e10f0d2 100644 --- a/src/zcl_excel_comments.clas.xml +++ b/src/zcl_excel_comments.clas.xml @@ -37,6 +37,11 @@ E Returns an iterator + + GV_FULL_VML + E + Full VML with graphics information for the comment boxes + INCLUDE E @@ -52,12 +57,25 @@ E Deletes an Element from the Collection + + SET_BOXES + E + Propagate dimensions of the info boxes to the comments + SIZE E Specifies number of contained elements + + + CONSTRUCTOR + IO_FROM + E + Create new instance from this original + + diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap index 0c7c40f..e2e552f 100644 --- a/src/zcl_excel_reader_2007.clas.abap +++ b/src/zcl_excel_reader_2007.clas.abap @@ -13,361 +13,371 @@ CLASS zcl_excel_reader_2007 DEFINITION !ip_element TYPE REF TO if_ixml_element CHANGING !cp_structure TYPE any . - PROTECTED SECTION. +PROTECTED SECTION. - TYPES: + TYPES: *"* protected components of class ZCL_EXCEL_READER_2007 *"* do not include other source files here!!! - BEGIN OF t_relationship, - id TYPE string, - type TYPE string, - target TYPE string, - targetmode TYPE string, - worksheet TYPE REF TO zcl_excel_worksheet, - sheetid TYPE string, "ins #235 - repeat rows/cols - needed to identify correct sheet - localsheetid TYPE string, - END OF t_relationship . - TYPES: - BEGIN OF t_fileversion, - appname TYPE string, - lastedited TYPE string, - lowestedited TYPE string, - rupbuild TYPE string, - codename TYPE string, - END OF t_fileversion . - TYPES: - BEGIN OF t_sheet, - name TYPE string, - sheetid TYPE string, - id TYPE string, - state TYPE string, - END OF t_sheet . - TYPES: - BEGIN OF t_workbookpr, - codename TYPE string, - defaultthemeversion TYPE string, - END OF t_workbookpr . - TYPES: - BEGIN OF t_sheetpr, - codename TYPE string, - END OF t_sheetpr . - TYPES: - BEGIN OF t_range, - name TYPE string, - hidden TYPE string, "inserted with issue #235 because Autofilters didn't passthrough - localsheetid TYPE string, " issue #163 - END OF t_range . - TYPES: - t_fills TYPE STANDARD TABLE OF REF TO zcl_excel_style_fill WITH NON-UNIQUE DEFAULT KEY . - TYPES: - t_borders TYPE STANDARD TABLE OF REF TO zcl_excel_style_borders WITH NON-UNIQUE DEFAULT KEY . - TYPES: - t_fonts TYPE STANDARD TABLE OF REF TO zcl_excel_style_font WITH NON-UNIQUE DEFAULT KEY . - TYPES: - t_style_refs TYPE STANDARD TABLE OF REF TO zcl_excel_style WITH NON-UNIQUE DEFAULT KEY . - TYPES: - BEGIN OF t_color, - indexed TYPE string, - rgb TYPE string, - theme TYPE string, - tint TYPE string, - END OF t_color . - TYPES: - BEGIN OF t_rel_drawing, - id TYPE string, - content TYPE xstring, - file_ext TYPE string, - content_xml TYPE REF TO if_ixml_document, - END OF t_rel_drawing . - TYPES: - t_rel_drawings TYPE STANDARD TABLE OF t_rel_drawing WITH NON-UNIQUE DEFAULT KEY . - TYPES: - BEGIN OF gts_external_hyperlink, - id TYPE string, - target TYPE string, - END OF gts_external_hyperlink . - TYPES: - gtt_external_hyperlinks TYPE HASHED TABLE OF gts_external_hyperlink WITH UNIQUE KEY id . - TYPES: - BEGIN OF ty_ref_formulae, - sheet TYPE REF TO zcl_excel_worksheet, - row TYPE i, - column TYPE i, - si TYPE i, - ref TYPE string, - formula TYPE string, - END OF ty_ref_formulae . - TYPES: - tyt_ref_formulae TYPE HASHED TABLE OF ty_ref_formulae WITH UNIQUE KEY sheet row column . - TYPES: - BEGIN OF t_shared_string, - value TYPE string, - rtf TYPE zexcel_t_rtf, - END OF t_shared_string . - TYPES: - t_shared_strings TYPE STANDARD TABLE OF t_shared_string WITH DEFAULT KEY . - TYPES: - BEGIN OF t_table, - id TYPE string, - target TYPE string, - END OF t_table . - TYPES: - t_tables TYPE HASHED TABLE OF t_table WITH UNIQUE KEY id . + BEGIN OF t_relationship, + id TYPE string, + type TYPE string, + target TYPE string, + targetmode TYPE string, + worksheet TYPE REF TO zcl_excel_worksheet, + sheetid TYPE string, "ins #235 - repeat rows/cols - needed to identify correct sheet + localsheetid TYPE string, + END OF t_relationship . + TYPES: + BEGIN OF t_fileversion, + appname TYPE string, + lastedited TYPE string, + lowestedited TYPE string, + rupbuild TYPE string, + codename TYPE string, + END OF t_fileversion . + TYPES: + BEGIN OF t_sheet, + name TYPE string, + sheetid TYPE string, + id TYPE string, + state TYPE string, + END OF t_sheet . + TYPES: + BEGIN OF t_workbookpr, + codename TYPE string, + defaultthemeversion TYPE string, + END OF t_workbookpr . + TYPES: + BEGIN OF t_sheetpr, + codename TYPE string, + END OF t_sheetpr . + TYPES: + BEGIN OF t_range, + name TYPE string, + hidden TYPE string, "inserted with issue #235 because Autofilters didn't passthrough + localsheetid TYPE string, " issue #163 + END OF t_range . + TYPES: + t_fills TYPE STANDARD TABLE OF REF TO zcl_excel_style_fill WITH NON-UNIQUE DEFAULT KEY . + TYPES: + t_borders TYPE STANDARD TABLE OF REF TO zcl_excel_style_borders WITH NON-UNIQUE DEFAULT KEY . + TYPES: + t_fonts TYPE STANDARD TABLE OF REF TO zcl_excel_style_font WITH NON-UNIQUE DEFAULT KEY . + TYPES: + t_style_refs TYPE STANDARD TABLE OF REF TO zcl_excel_style WITH NON-UNIQUE DEFAULT KEY . + TYPES: + BEGIN OF t_color, + indexed TYPE string, + rgb TYPE string, + theme TYPE string, + tint TYPE string, + END OF t_color . + TYPES: + BEGIN OF t_rel_drawing, + id TYPE string, + content TYPE xstring, + file_ext TYPE string, + content_xml TYPE REF TO if_ixml_document, + END OF t_rel_drawing . + TYPES: + t_rel_drawings TYPE STANDARD TABLE OF t_rel_drawing WITH NON-UNIQUE DEFAULT KEY . + TYPES: + BEGIN OF gts_external_hyperlink, + id TYPE string, + target TYPE string, + END OF gts_external_hyperlink . + TYPES: + gtt_external_hyperlinks TYPE HASHED TABLE OF gts_external_hyperlink WITH UNIQUE KEY id . + TYPES: + BEGIN OF ty_ref_formulae, + sheet TYPE REF TO zcl_excel_worksheet, + row TYPE i, + column TYPE i, + si TYPE i, + ref TYPE string, + formula TYPE string, + END OF ty_ref_formulae . + TYPES: + tyt_ref_formulae TYPE HASHED TABLE OF ty_ref_formulae WITH UNIQUE KEY sheet row column . + TYPES: + BEGIN OF t_shared_string, + value TYPE string, + rtf TYPE zexcel_t_rtf, + END OF t_shared_string . + TYPES: + t_shared_strings TYPE STANDARD TABLE OF t_shared_string WITH DEFAULT KEY . + TYPES: + BEGIN OF t_table, + id TYPE string, + target TYPE string, + END OF t_table . + TYPES: + t_tables TYPE HASHED TABLE OF t_table WITH UNIQUE KEY id . - DATA shared_strings TYPE t_shared_strings . - DATA styles TYPE t_style_refs . - DATA mt_ref_formulae TYPE tyt_ref_formulae . - DATA mt_dxf_styles TYPE zexcel_t_styles_cond_mapping . + DATA shared_strings TYPE t_shared_strings . + DATA styles TYPE t_style_refs . + DATA mt_ref_formulae TYPE tyt_ref_formulae . + DATA mt_dxf_styles TYPE zexcel_t_styles_cond_mapping . + CONSTANTS: + BEGIN OF namespace, + x14ac TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac', + vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', "#EC NEEDED for future incorporation of XLSM-reader + c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', + a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main', + xdr TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', + mc TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + drawing TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + hyperlink TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', + image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + printer_settings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings', + shared_strings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + styles TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + theme TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + worksheet TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + relationships TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + main TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + END OF namespace . - METHODS fill_row_outlines - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS get_from_zip_archive - IMPORTING - !i_filename TYPE string - RETURNING - VALUE(r_content) TYPE xstring - RAISING - zcx_excel . - METHODS get_ixml_from_zip_archive - IMPORTING - !i_filename TYPE string - !is_normalizing TYPE abap_bool DEFAULT 'X' - RETURNING - VALUE(r_ixml) TYPE REF TO if_ixml_document - RAISING - zcx_excel . - METHODS load_drawing_anchor - IMPORTING - !io_anchor_element TYPE REF TO if_ixml_element - !io_worksheet TYPE REF TO zcl_excel_worksheet - !it_related_drawings TYPE t_rel_drawings . - METHODS load_shared_strings - IMPORTING - !ip_path TYPE string - RAISING - zcx_excel . - METHODS load_styles - IMPORTING - !ip_path TYPE string - !ip_excel TYPE REF TO zcl_excel - RAISING - zcx_excel . - METHODS load_dxf_styles - IMPORTING - !iv_path TYPE string - !io_excel TYPE REF TO zcl_excel - RAISING - zcx_excel . - METHODS load_style_borders - IMPORTING - !ip_xml TYPE REF TO if_ixml_document - RETURNING - VALUE(ep_borders) TYPE t_borders . - METHODS load_style_fills - IMPORTING - !ip_xml TYPE REF TO if_ixml_document - RETURNING - VALUE(ep_fills) TYPE t_fills . - METHODS load_style_font - IMPORTING - !io_xml_element TYPE REF TO if_ixml_element - RETURNING - VALUE(ro_font) TYPE REF TO zcl_excel_style_font . - METHODS load_style_fonts - IMPORTING - !ip_xml TYPE REF TO if_ixml_document - RETURNING - VALUE(ep_fonts) TYPE t_fonts . - METHODS load_style_num_formats - IMPORTING - !ip_xml TYPE REF TO if_ixml_document - RETURNING - VALUE(ep_num_formats) TYPE zcl_excel_style_number_format=>t_num_formats . - METHODS load_workbook - IMPORTING - !iv_workbook_full_filename TYPE string - !io_excel TYPE REF TO zcl_excel - RAISING - zcx_excel . - METHODS load_worksheet - IMPORTING - !ip_path TYPE string - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS load_worksheet_cond_format - IMPORTING - !io_ixml_worksheet TYPE REF TO if_ixml_document - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS load_worksheet_cond_format_aa - IMPORTING - !io_ixml_rule TYPE REF TO if_ixml_element - !io_style_cond TYPE REF TO zcl_excel_style_cond. - METHODS load_worksheet_cond_format_ci - IMPORTING - !io_ixml_rule TYPE REF TO if_ixml_element - !io_style_cond TYPE REF TO zcl_excel_style_cond . - METHODS load_worksheet_cond_format_cs - IMPORTING - !io_ixml_rule TYPE REF TO if_ixml_element - !io_style_cond TYPE REF TO zcl_excel_style_cond . - METHODS load_worksheet_cond_format_ex - IMPORTING - !io_ixml_rule TYPE REF TO if_ixml_element - !io_style_cond TYPE REF TO zcl_excel_style_cond . - METHODS load_worksheet_cond_format_is - IMPORTING - !io_ixml_rule TYPE REF TO if_ixml_element - !io_style_cond TYPE REF TO zcl_excel_style_cond . - METHODS load_worksheet_cond_format_db - IMPORTING - !io_ixml_rule TYPE REF TO if_ixml_element - !io_style_cond TYPE REF TO zcl_excel_style_cond . - METHODS load_worksheet_cond_format_t10 - IMPORTING - !io_ixml_rule TYPE REF TO if_ixml_element - !io_style_cond TYPE REF TO zcl_excel_style_cond . - METHODS load_worksheet_drawing - IMPORTING - !ip_path TYPE string - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS load_comments - IMPORTING - ip_path TYPE string - io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS load_worksheet_hyperlinks - IMPORTING - !io_ixml_worksheet TYPE REF TO if_ixml_document - !io_worksheet TYPE REF TO zcl_excel_worksheet - !it_external_hyperlinks TYPE gtt_external_hyperlinks - RAISING - zcx_excel . - METHODS load_worksheet_ignored_errors - IMPORTING - !io_ixml_worksheet TYPE REF TO if_ixml_document - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS load_worksheet_pagebreaks - IMPORTING - !io_ixml_worksheet TYPE REF TO if_ixml_document - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS load_worksheet_autofilter - IMPORTING - io_ixml_worksheet TYPE REF TO if_ixml_document - io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel. - METHODS load_worksheet_pagemargins - IMPORTING - !io_ixml_worksheet TYPE REF TO if_ixml_document - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - "!

Load worksheet tables

- METHODS load_worksheet_tables - IMPORTING - io_ixml_worksheet TYPE REF TO if_ixml_document - io_worksheet TYPE REF TO zcl_excel_worksheet - iv_dirname TYPE string - it_tables TYPE t_tables - RAISING - zcx_excel . - CLASS-METHODS resolve_path - IMPORTING - !ip_path TYPE string - RETURNING - VALUE(rp_result) TYPE string . - METHODS resolve_referenced_formulae . - METHODS unescape_string_value - IMPORTING - i_value TYPE string - RETURNING - VALUE(result) TYPE string. - METHODS get_dxf_style_guid - IMPORTING - !io_ixml_dxf TYPE REF TO if_ixml_element - !io_excel TYPE REF TO zcl_excel - RETURNING - VALUE(rv_style_guid) TYPE zexcel_cell_style . - METHODS load_theme - IMPORTING - iv_path TYPE string - !ip_excel TYPE REF TO zcl_excel - RAISING - zcx_excel. - METHODS provided_string_is_escaped - IMPORTING - !value TYPE string - RETURNING - VALUE(is_escaped) TYPE abap_bool. + METHODS fill_row_outlines + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS get_from_zip_archive + IMPORTING + !i_filename TYPE string + RETURNING + VALUE(r_content) TYPE xstring + RAISING + zcx_excel . + METHODS get_ixml_from_zip_archive + IMPORTING + !i_filename TYPE string + !is_normalizing TYPE abap_bool DEFAULT 'X' + RETURNING + VALUE(r_ixml) TYPE REF TO if_ixml_document + RAISING + zcx_excel . + METHODS load_drawing_anchor + IMPORTING + !io_anchor_element TYPE REF TO if_ixml_element + !io_worksheet TYPE REF TO zcl_excel_worksheet + !it_related_drawings TYPE t_rel_drawings . + METHODS load_shared_strings + IMPORTING + !ip_path TYPE string + RAISING + zcx_excel . + METHODS load_styles + IMPORTING + !ip_path TYPE string + !ip_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . + METHODS load_dxf_styles + IMPORTING + !iv_path TYPE string + !io_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . + METHODS load_style_borders + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_borders) TYPE t_borders . + METHODS load_style_fills + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_fills) TYPE t_fills . + METHODS load_style_font + IMPORTING + !io_xml_element TYPE REF TO if_ixml_element + RETURNING + VALUE(ro_font) TYPE REF TO zcl_excel_style_font . + METHODS load_style_fonts + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_fonts) TYPE t_fonts . + METHODS load_style_num_formats + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_num_formats) TYPE zcl_excel_style_number_format=>t_num_formats . + METHODS load_workbook + IMPORTING + !iv_workbook_full_filename TYPE string + !io_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . + METHODS load_worksheet + IMPORTING + !ip_path TYPE string + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_cond_format + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_cond_format_aa + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_ci + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_cs + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_ex + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_is + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_db + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_t10 + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_drawing + IMPORTING + !ip_path TYPE string + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_comments + IMPORTING + !ip_path TYPE string + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_hyperlinks + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + !it_external_hyperlinks TYPE gtt_external_hyperlinks + RAISING + zcx_excel . + METHODS load_worksheet_ignored_errors + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_pagebreaks + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_autofilter + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_pagemargins + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + "!

Load worksheet tables

+ METHODS load_worksheet_tables + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + !iv_dirname TYPE string + !it_tables TYPE t_tables + RAISING + zcx_excel . + CLASS-METHODS resolve_path + IMPORTING + !ip_path TYPE string + RETURNING + VALUE(rp_result) TYPE string . + METHODS resolve_referenced_formulae . + METHODS unescape_string_value + IMPORTING + !i_value TYPE string + RETURNING + VALUE(result) TYPE string . + METHODS get_dxf_style_guid + IMPORTING + !io_ixml_dxf TYPE REF TO if_ixml_element + !io_excel TYPE REF TO zcl_excel + RETURNING + VALUE(rv_style_guid) TYPE zexcel_cell_style . + METHODS load_theme + IMPORTING + !iv_path TYPE string + !ip_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . + METHODS provided_string_is_escaped + IMPORTING + !value TYPE string + RETURNING + VALUE(is_escaped) TYPE abap_bool . + METHODS load_comment_boxes + IMPORTING + !ip_path TYPE string + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . +PRIVATE SECTION. - CONSTANTS: BEGIN OF namespace, - x14ac TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac', - vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', "#EC NEEDED for future incorporation of XLSM-reader - c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', - a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main', - xdr TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', - mc TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', - r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', - chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', - drawing TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', - hyperlink TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', - image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', - office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', - printer_settings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings', - shared_strings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', - styles TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', - theme TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', - worksheet TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', - relationships TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', - core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', - main TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - END OF namespace. + DATA zip TYPE REF TO lcl_zip_archive . + DATA gid TYPE i . - PRIVATE SECTION. - - DATA zip TYPE REF TO lcl_zip_archive . - DATA: gid TYPE i. - - METHODS create_zip_archive - IMPORTING - !i_xlsx_binary TYPE xstring - !i_use_alternate_zip TYPE seoclsname OPTIONAL - RETURNING - VALUE(e_zip) TYPE REF TO lcl_zip_archive - RAISING - zcx_excel . - METHODS read_from_applserver - IMPORTING - !i_filename TYPE csequence - RETURNING - VALUE(r_excel_data) TYPE xstring - RAISING - zcx_excel. - METHODS read_from_local_file - IMPORTING - !i_filename TYPE csequence - RETURNING - VALUE(r_excel_data) TYPE xstring - RAISING - zcx_excel . + METHODS load_single_comment + IMPORTING + !io_node_comment TYPE REF TO if_ixml_element + RETURNING + VALUE(eo_comment) TYPE REF TO zcl_excel_comment . + METHODS create_zip_archive + IMPORTING + !i_xlsx_binary TYPE xstring + !i_use_alternate_zip TYPE seoclsname OPTIONAL + RETURNING + VALUE(e_zip) TYPE REF TO lcl_zip_archive + RAISING + zcx_excel . + METHODS read_from_applserver + IMPORTING + !i_filename TYPE csequence + RETURNING + VALUE(r_excel_data) TYPE xstring + RAISING + zcx_excel . + METHODS read_from_local_file + IMPORTING + !i_filename TYPE csequence + RETURNING + VALUE(r_excel_data) TYPE xstring + RAISING + zcx_excel . ENDCLASS. -CLASS zcl_excel_reader_2007 IMPLEMENTATION. +CLASS ZCL_EXCEL_READER_2007 IMPLEMENTATION. METHOD create_zip_archive. @@ -2267,7 +2277,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. workbookviewid TYPE string, showrowcolheaders TYPE string, righttoleft TYPE string, - topleftcell TYPE string, + topleftcell TYPE string, END OF lty_sheetview. TYPES: BEGIN OF lty_mergecell, @@ -2338,13 +2348,14 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. - CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', - lc_xml_attr_true_int TYPE string VALUE '1', - lc_rel_drawing TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', - lc_rel_hyperlink TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', - lc_rel_comments TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', - lc_rel_printer TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings'. - CONSTANTS lc_rel_table TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table'. + CONSTANTS: lc_xml_attr_true TYPE string VALUE `true`, + lc_xml_attr_true_int TYPE string VALUE `1`, + lc_rel_drawing TYPE string VALUE `http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing`, + lc_rel_vmldrawing TYPE string VALUE `http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing`, + lc_rel_hyperlink TYPE string VALUE `http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink`, + lc_rel_comments TYPE string VALUE `http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments`, + lc_rel_printer TYPE string VALUE `http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings`. + CONSTANTS lc_rel_table TYPE string VALUE `http://schemas.openxmlformats.org/officeDocument/2006/relationships/table`. DATA: lo_ixml_worksheet TYPE REF TO if_ixml_document, lo_ixml_cells TYPE REF TO if_ixml_node_collection, @@ -2493,10 +2504,19 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. * in the "load_worksheet_drawing" shouldn't lead to an abortion of the reading TRY. me->load_worksheet_drawing( ip_path = lv_path - io_worksheet = io_worksheet ). + io_worksheet = io_worksheet ). CATCH zcx_excel. "--> then ignore it ENDTRY. + WHEN lc_rel_vmldrawing. +* This file contains the dimensions of the boxes in which comments are displayed + TRY. + me->load_comment_boxes( ip_path = lv_path + io_worksheet = io_worksheet ). + CATCH zcx_excel. "--> then ignore it (boxes will get default values) + ENDTRY. + + WHEN lc_rel_printer. " Read Printer settings @@ -3669,48 +3689,31 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. ENDMETHOD. + METHOD load_comments. - DATA: lo_comments_xml TYPE REF TO if_ixml_document, - lo_node_comment TYPE REF TO if_ixml_element, - lo_node_comment_child TYPE REF TO if_ixml_element, - lo_node_r_child_t TYPE REF TO if_ixml_element, - lo_attr TYPE REF TO if_ixml_attribute, - lo_comment TYPE REF TO zcl_excel_comment, - lv_comment_text TYPE string, - lv_node_value TYPE string, - lv_attr_value TYPE string. - lo_comments_xml = me->get_ixml_from_zip_archive( ip_path ). + DATA: + lo_comments_xml TYPE REF TO if_ixml_document, + lo_node_comment TYPE REF TO if_ixml_element, + lo_comment TYPE REF TO zcl_excel_comment. - lo_node_comment ?= lo_comments_xml->find_from_name_ns( name = 'comment' uri = namespace-main ). + lo_comments_xml = get_ixml_from_zip_archive( i_filename = ip_path is_normalizing = abap_false ). + lo_node_comment = lo_comments_xml->find_from_name_ns( name = 'comment' uri = namespace-main ). WHILE lo_node_comment IS BOUND. - CLEAR lv_comment_text. - lo_attr = lo_node_comment->get_attribute_node_ns( name = 'ref' ). - lv_attr_value = lo_attr->get_value( ). - - lo_node_comment_child ?= lo_node_comment->get_first_child( ). - WHILE lo_node_comment_child IS BOUND. - " There will be rPr nodes here, but we do not support them - " in comments right now; see 'load_shared_strings' for handling. - " Extract the ... part of each -tag - lo_node_r_child_t ?= lo_node_comment_child->find_from_name_ns( name = 't' uri = namespace-main ). - IF lo_node_r_child_t IS BOUND. - lv_node_value = lo_node_r_child_t->get_value( ). - CONCATENATE lv_comment_text lv_node_value INTO lv_comment_text RESPECTING BLANKS. - ENDIF. - lo_node_comment_child ?= lo_node_comment_child->get_next( ). - ENDWHILE. - - CREATE OBJECT lo_comment. - lo_comment->set_text( ip_ref = lv_attr_value ip_text = lv_comment_text ). + lo_comment = load_single_comment( lo_node_comment ). io_worksheet->add_comment( lo_comment ). lo_node_comment ?= lo_node_comment->get_next( ). ENDWHILE. +* If the comment boxes had been loaded before the comments themselves, +* the box dimensions have to be propagated now into the individual comments + io_worksheet->set_comment_boxes( ). + ENDMETHOD. + METHOD load_worksheet_hyperlinks. DATA: lo_ixml_hyperlinks TYPE REF TO if_ixml_node_collection, @@ -4459,6 +4462,8 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. iv_zcl_excel_classname = iv_zcl_excel_classname ). ENDMETHOD. + + METHOD provided_string_is_escaped. "Check if passed value is really an escaped Character @@ -4474,4 +4479,143 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. ENDIF. ENDMETHOD. + + METHOD load_comment_boxes. + + CONSTANTS: + BEGIN OF lc_namespace, + vml TYPE string VALUE `urn:schemas-microsoft-com:vml`, + excel TYPE string VALUE `urn:schemas-microsoft-com:office:excel`, + END OF lc_namespace. + + DATA: + lo_anchor TYPE REF TO if_ixml_element, + lo_shape TYPE REF TO if_ixml_element, + lo_shapes TYPE REF TO if_ixml_node_collection, + lo_vml TYPE REF TO if_ixml_document, + lv_vml TYPE string, + ls_box TYPE zcl_excel_comment=>ty_box, + lt_boxes TYPE zcl_excel_comments=>ty_boxes, + lt_dims TYPE stringtab, + lv_dims TYPE string, + lv_dim TYPE string, + lv_shape_index TYPE i, + lv_total_shapes TYPE i. + + FIELD-SYMBOLS: + TYPE i. + + lo_vml = get_ixml_from_zip_archive( ip_path ). + + lo_shapes = lo_vml->get_elements_by_tag_name_ns( + name = `shape` + uri = lc_namespace-vml + ). + + lv_total_shapes = lo_shapes->get_length( ). + WHILE lv_shape_index < lv_total_shapes. + lo_shape ?= lo_shapes->get_item( lv_shape_index ). + CLEAR ls_box. + lo_anchor ?= lo_shape->find_from_name_ns( name = `Anchor` uri = lc_namespace-excel ). + IF lo_anchor IS BOUND. + lv_dims = lo_anchor->get_value( ). + SPLIT lv_dims AT `,` INTO TABLE lt_dims. + LOOP AT lt_dims INTO lv_dim. + ASSIGN COMPONENT sy-tabix OF STRUCTURE ls_box TO . + CHECK sy-subrc EQ 0. + TRY. + = lv_dim. + CATCH cx_sy_conversion_error. + ENDTRY. + ENDLOOP. + APPEND ls_box TO lt_boxes. + ENDIF. + + ADD 1 TO lv_shape_index. + ENDWHILE. + +* Serialize lo_vml into a string lv_vml and pass it to the comments object + CALL TRANSFORMATION id + SOURCE XML lo_vml + RESULT XML lv_vml. + + IF lt_boxes IS NOT INITIAL. + io_worksheet->set_comment_boxes( it_boxes = lt_boxes iv_full_vml = lv_vml ). + ENDIF. + + + ENDMETHOD. + + + METHOD load_single_comment. + +* Example +* +* +* +* +* +* +* +* +* +* +* +* Info: +* +* +* +* +* +* +* +* +* Demo Text +* +* ... + + + DATA: + lo_attr TYPE REF TO if_ixml_attribute, + lv_comment_text TYPE string, + lv_ref TYPE string. + + CREATE OBJECT eo_comment. + + lo_attr = io_node_comment->get_attribute_node_ns( name = 'ref' ). + lv_ref = lo_attr->get_value( ). + + DATA: + lo_rs TYPE REF TO if_ixml_node_collection, + lo_r TYPE REF TO if_ixml_element, + lo_t TYPE REF TO if_ixml_element, + lo_rpr TYPE REF TO if_ixml_element, + lo_font TYPE REF TO zcl_excel_style_font, + ls_rtf TYPE zcl_excel_comment=>ty_rtf_fragment, + lt_rtf TYPE zcl_excel_comment=>ty_rtf_fragments, + lv_r_index TYPE i, + lv_total_r TYPE i. + + lo_rs = io_node_comment->get_elements_by_tag_name_ns( name = `r` uri = namespace-main ). + lv_total_r = lo_rs->get_length( ). + WHILE lv_r_index < lv_total_r. + CLEAR: + ls_rtf. + lo_r ?= lo_rs->get_item( lv_r_index ). + lo_rpr ?= lo_r->find_from_name_ns( name = `rPr` uri = namespace-main ). + IF lo_rpr IS BOUND. + lo_font = load_style_font( lo_rpr ). + ls_rtf-rtf = lo_font->get_structure( ). + ENDIF. + lo_t ?= lo_r->find_from_name_ns( name = `t` uri = namespace-main ). + IF lo_t IS BOUND. + ls_rtf-text = lo_t->get_value( ). + ENDIF. + APPEND ls_rtf TO lt_rtf. + ADD 1 TO lv_r_index. + ENDWHILE. + + eo_comment->set_text_rtf( ip_ref = lv_ref it_rtf = lt_rtf ). + + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_reader_2007.clas.xml b/src/zcl_excel_reader_2007.clas.xml index 735a077..6e4b2ae 100644 --- a/src/zcl_excel_reader_2007.clas.xml +++ b/src/zcl_excel_reader_2007.clas.xml @@ -1,4 +1,4 @@ - + @@ -73,6 +73,11 @@ E Table with external hyperlinks + + LOAD_COMMENT_BOXES + E + Loads worksheet drawings + LOAD_DRAWING_ANCHOR E @@ -234,6 +239,20 @@ Zip Utility + + + LOAD_SINGLE_COMMENT + EO_COMMENT + E + Comment + + + LOAD_SINGLE_COMMENT + IO_NODE_COMMENT + E + Element of an XML Document + + diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index a4a2376..2bfe070 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -3,13 +3,13 @@ CLASS zcl_excel_worksheet DEFINITION CREATE PUBLIC . PUBLIC SECTION. + *"* public components of class ZCL_EXCEL_WORKSHEET *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_WORKSHEET *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_WORKSHEET *"* do not include other source files here!!! - INTERFACES zif_excel_sheet_printsettings . INTERFACES zif_excel_sheet_properties . INTERFACES zif_excel_sheet_protection . @@ -21,8 +21,9 @@ 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 primary_key COMPONENTS row_from row_to - WITH NON-UNIQUE SORTED KEY row_to COMPONENTS row_to collapsed. + 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" @@ -62,8 +63,8 @@ CLASS zcl_excel_worksheet DEFINITION END OF mty_s_column_formula . TYPES: mty_th_column_formula - TYPE HASHED TABLE OF mty_s_column_formula - WITH UNIQUE KEY id . + TYPE HASHED TABLE OF mty_s_column_formula + WITH UNIQUE KEY id . TYPES: ty_doc_url TYPE c LENGTH 255 . TYPES: @@ -74,8 +75,7 @@ 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 . @@ -103,8 +103,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. + DATA pane_top_left_cell TYPE string READ-ONLY . + DATA sheetview_top_left_cell TYPE string READ-ONLY . METHODS add_comment IMPORTING @@ -548,15 +548,15 @@ CLASS zcl_excel_worksheet DEFINITION !ip_row TYPE zexcel_cell_row OPTIONAL !ip_row_to TYPE zexcel_cell_row OPTIONAL !ip_style TYPE any OPTIONAL - !ip_value TYPE simple OPTIONAL "added parameter - !ip_formula TYPE zexcel_cell_formula OPTIONAL "added parameter + !ip_value TYPE simple OPTIONAL "added parameter + !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. + zcx_excel . METHODS set_print_gridlines IMPORTING !i_print_gridlines TYPE zexcel_print_gridlines . @@ -577,7 +577,7 @@ CLASS zcl_excel_worksheet DEFINITION IMPORTING !iv_columnrow TYPE csequence RAISING - zcx_excel. + zcx_excel . METHODS set_show_gridlines IMPORTING !i_show_gridlines TYPE zexcel_show_gridlines . @@ -694,6 +694,10 @@ CLASS zcl_excel_worksheet DEFINITION !er_data TYPE REF TO data RAISING zcx_excel . + METHODS set_comment_boxes + IMPORTING + !it_boxes TYPE zcl_excel_comments=>ty_boxes OPTIONAL + !iv_full_vml TYPE string OPTIONAL . PROTECTED SECTION. METHODS set_table_reference IMPORTING @@ -857,7 +861,7 @@ ENDCLASS. -CLASS zcl_excel_worksheet IMPLEMENTATION. +CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION. METHOD add_comment. @@ -2612,16 +2616,11 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. METHOD get_comments. - DATA: lo_comment TYPE REF TO zcl_excel_comment, - lo_iterator TYPE REF TO zcl_excel_collection_iterator. - CREATE OBJECT r_comments. - - lo_iterator = comments->get_iterator( ). - WHILE lo_iterator->has_next( ) = abap_true. - lo_comment ?= lo_iterator->get_next( ). - r_comments->include( lo_comment ). - ENDWHILE. +* Create a copy of the comments attribute + CREATE OBJECT r_comments + EXPORTING + io_from = comments. ENDMETHOD. "get_comments @@ -4869,4 +4868,9 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. METHOD zif_excel_sheet_vba_project~set_codename_pr. me->zif_excel_sheet_vba_project~codename_pr = ip_codename_pr. ENDMETHOD. "ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME_PR + + + METHOD set_comment_boxes. + comments->set_boxes( it_boxes = it_boxes iv_full_vml = iv_full_vml ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_worksheet.clas.xml b/src/zcl_excel_worksheet.clas.xml index 138c1c9..f66eab1 100644 --- a/src/zcl_excel_worksheet.clas.xml +++ b/src/zcl_excel_worksheet.clas.xml @@ -503,6 +503,11 @@ E Set column width + + SET_COMMENT_BOXES + E + Set dimensions of info boxes for comments + SET_DEFAULT_EXCEL_DATE_FORMAT E diff --git a/src/zcl_excel_writer_2007.clas.abap b/src/zcl_excel_writer_2007.clas.abap index 45f47c6..7073ac4 100644 --- a/src/zcl_excel_writer_2007.clas.abap +++ b/src/zcl_excel_writer_2007.clas.abap @@ -9,276 +9,288 @@ CLASS zcl_excel_writer_2007 DEFINITION INTERFACES zif_excel_writer . METHODS constructor. - PROTECTED SECTION. +PROTECTED SECTION. + TYPES: *"* protected components of class ZCL_EXCEL_WRITER_2007 *"* do not include other source files here!!! - TYPES: BEGIN OF mty_column_formula_used, - id TYPE zexcel_s_cell_data-column_formula_id, - si TYPE string, - "! type: shared, etc. - t TYPE string, - END OF mty_column_formula_used, - mty_column_formulas_used TYPE HASHED TABLE OF mty_column_formula_used WITH UNIQUE KEY id. - CONSTANTS c_content_types TYPE string VALUE '[Content_Types].xml'. "#EC NOTEXT - CONSTANTS c_docprops_app TYPE string VALUE 'docProps/app.xml'. "#EC NOTEXT - CONSTANTS c_docprops_core TYPE string VALUE 'docProps/core.xml'. "#EC NOTEXT - CONSTANTS c_relationships TYPE string VALUE '_rels/.rels'. "#EC NOTEXT - CONSTANTS c_xl_calcchain TYPE string VALUE 'xl/calcChain.xml'. "#EC NOTEXT - CONSTANTS c_xl_drawings TYPE string VALUE 'xl/drawings/drawing#.xml'. "#EC NOTEXT - CONSTANTS c_xl_drawings_rels TYPE string VALUE 'xl/drawings/_rels/drawing#.xml.rels'. "#EC NOTEXT - CONSTANTS c_xl_relationships TYPE string VALUE 'xl/_rels/workbook.xml.rels'. "#EC NOTEXT - CONSTANTS c_xl_sharedstrings TYPE string VALUE 'xl/sharedStrings.xml'. "#EC NOTEXT - CONSTANTS c_xl_sheet TYPE string VALUE 'xl/worksheets/sheet#.xml'. "#EC NOTEXT - CONSTANTS c_xl_sheet_rels TYPE string VALUE 'xl/worksheets/_rels/sheet#.xml.rels'. "#EC NOTEXT - CONSTANTS c_xl_styles TYPE string VALUE 'xl/styles.xml'. "#EC NOTEXT - CONSTANTS c_xl_theme TYPE string VALUE 'xl/theme/theme1.xml'. "#EC NOTEXT - CONSTANTS c_xl_workbook TYPE string VALUE 'xl/workbook.xml'. "#EC NOTEXT - DATA excel TYPE REF TO zcl_excel . - DATA shared_strings TYPE zexcel_t_shared_string . - DATA styles_cond_mapping TYPE zexcel_t_styles_cond_mapping . - DATA styles_mapping TYPE zexcel_t_styles_mapping . - CONSTANTS c_xl_comments TYPE string VALUE 'xl/comments#.xml'. "#EC NOTEXT - CONSTANTS cl_xl_drawing_for_comments TYPE string VALUE 'xl/drawings/vmlDrawing#.vml'. "#EC NOTEXT - CONSTANTS c_xl_drawings_vml_rels TYPE string VALUE 'xl/drawings/_rels/vmlDrawing#.vml.rels'. "#EC NOTEXT - DATA ixml TYPE REF TO if_ixml. - DATA control_characters TYPE string. + BEGIN OF mty_column_formula_used, + id TYPE zexcel_s_cell_data-column_formula_id, + si TYPE string, + "! type: shared, etc. + t TYPE string, + END OF mty_column_formula_used . + TYPES: + mty_column_formulas_used TYPE HASHED TABLE OF mty_column_formula_used WITH UNIQUE KEY id . - METHODS create_xl_sheet_sheet_data - IMPORTING - !io_document TYPE REF TO if_ixml_document - !io_worksheet TYPE REF TO zcl_excel_worksheet - RETURNING - VALUE(rv_ixml_sheet_data_root) TYPE REF TO if_ixml_element - RAISING - zcx_excel . - METHODS add_further_data_to_zip - IMPORTING - !io_zip TYPE REF TO cl_abap_zip . - METHODS create - RETURNING - VALUE(ep_excel) TYPE xstring - RAISING - zcx_excel . - METHODS create_content_types - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_docprops_app - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_docprops_core - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_dxf_style - IMPORTING - !iv_cell_style TYPE zexcel_cell_style - !io_dxf_element TYPE REF TO if_ixml_element - !io_ixml_document TYPE REF TO if_ixml_document - !it_cellxfs TYPE zexcel_t_cellxfs - !it_fonts TYPE zexcel_t_style_font - !it_fills TYPE zexcel_t_style_fill - CHANGING - !cv_dfx_count TYPE i . - METHODS create_relationships - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_charts - IMPORTING - !io_drawing TYPE REF TO zcl_excel_drawing - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_comments - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_drawings - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_drawings_rels - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_drawing_anchor - IMPORTING - !io_drawing TYPE REF TO zcl_excel_drawing - !io_document TYPE REF TO if_ixml_document - !ip_index TYPE i - RETURNING - VALUE(ep_anchor) TYPE REF TO if_ixml_element . - METHODS create_xl_drawing_for_comments - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - RETURNING - VALUE(ep_content) TYPE xstring - RAISING - zcx_excel . - METHODS create_xl_relationships - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_sharedstrings - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_sheet - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - !iv_active TYPE flag DEFAULT '' - RETURNING - VALUE(ep_content) TYPE xstring - RAISING - zcx_excel . - METHODS create_xl_sheet_ignored_errors - IMPORTING - io_worksheet TYPE REF TO zcl_excel_worksheet - io_document TYPE REF TO if_ixml_document - io_element_root TYPE REF TO if_ixml_element. - METHODS create_xl_sheet_pagebreaks - IMPORTING - !io_document TYPE REF TO if_ixml_document - !io_parent TYPE REF TO if_ixml_element - !io_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel . - METHODS create_xl_sheet_rels - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - !iv_drawing_index TYPE i OPTIONAL - !iv_comment_index TYPE i OPTIONAL - !iv_cmnt_vmlindex TYPE i OPTIONAL - !iv_hdft_vmlindex TYPE i OPTIONAL - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_styles - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_styles_color_node - IMPORTING - !io_document TYPE REF TO if_ixml_document - !io_parent TYPE REF TO if_ixml_element - !iv_color_elem_name TYPE string DEFAULT 'color' - !is_color TYPE zexcel_s_style_color . - METHODS create_xl_styles_font_node - IMPORTING - !io_document TYPE REF TO if_ixml_document - !io_parent TYPE REF TO if_ixml_element - !is_font TYPE zexcel_s_style_font - !iv_use_rtf TYPE abap_bool DEFAULT abap_false . - METHODS create_xl_table - IMPORTING - !io_table TYPE REF TO zcl_excel_table - RETURNING - VALUE(ep_content) TYPE xstring - RAISING - zcx_excel . - METHODS create_xl_theme - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_workbook - RETURNING - VALUE(ep_content) TYPE xstring - RAISING - zcx_excel . - METHODS get_shared_string_index - IMPORTING - !ip_cell_value TYPE zexcel_cell_value - !it_rtf TYPE zexcel_t_rtf OPTIONAL - RETURNING - VALUE(ep_index) TYPE int4 . - METHODS create_xl_drawings_vml - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS set_vml_string - RETURNING - VALUE(ep_content) TYPE string . - METHODS create_xl_drawings_vml_rels - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS escape_string_value - IMPORTING - !iv_value TYPE zexcel_cell_value - RETURNING - VALUE(result) TYPE zexcel_cell_value. - METHODS set_vml_shape_footer - IMPORTING - !is_footer TYPE zexcel_s_worksheet_head_foot - RETURNING - VALUE(ep_content) TYPE string . - METHODS set_vml_shape_header - IMPORTING - !is_header TYPE zexcel_s_worksheet_head_foot - RETURNING - VALUE(ep_content) TYPE string . - METHODS create_xl_drawing_for_hdft_im - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xl_drawings_hdft_rels - IMPORTING - !io_worksheet TYPE REF TO zcl_excel_worksheet - RETURNING - VALUE(ep_content) TYPE xstring . - METHODS create_xml_document - RETURNING - VALUE(ro_document) TYPE REF TO if_ixml_document. - METHODS render_xml_document - IMPORTING - io_document TYPE REF TO if_ixml_document - RETURNING - VALUE(ep_content) TYPE xstring. - METHODS create_xl_sheet_column_formula - IMPORTING - io_document TYPE REF TO if_ixml_document - it_column_formulas TYPE zcl_excel_worksheet=>mty_th_column_formula - is_sheet_content TYPE zexcel_s_cell_data - EXPORTING - eo_element TYPE REF TO if_ixml_element - CHANGING - ct_column_formulas_used TYPE mty_column_formulas_used - cv_si TYPE i - RAISING - zcx_excel. - METHODS is_formula_shareable - IMPORTING - ip_formula TYPE string - RETURNING - VALUE(ep_shareable) TYPE abap_bool - RAISING - zcx_excel. - PRIVATE SECTION. + CONSTANTS c_content_types TYPE string VALUE '[Content_Types].xml' ##NO_TEXT. + CONSTANTS c_docprops_app TYPE string VALUE 'docProps/app.xml' ##NO_TEXT. + CONSTANTS c_docprops_core TYPE string VALUE 'docProps/core.xml' ##NO_TEXT. + CONSTANTS c_relationships TYPE string VALUE '_rels/.rels' ##NO_TEXT. + CONSTANTS c_xl_calcchain TYPE string VALUE 'xl/calcChain.xml' ##NO_TEXT. + CONSTANTS c_xl_drawings TYPE string VALUE 'xl/drawings/drawing#.xml' ##NO_TEXT. + CONSTANTS c_xl_drawings_rels TYPE string VALUE 'xl/drawings/_rels/drawing#.xml.rels' ##NO_TEXT. + CONSTANTS c_xl_relationships TYPE string VALUE 'xl/_rels/workbook.xml.rels' ##NO_TEXT. + CONSTANTS c_xl_sharedstrings TYPE string VALUE 'xl/sharedStrings.xml' ##NO_TEXT. + CONSTANTS c_xl_sheet TYPE string VALUE 'xl/worksheets/sheet#.xml' ##NO_TEXT. + CONSTANTS c_xl_sheet_rels TYPE string VALUE 'xl/worksheets/_rels/sheet#.xml.rels' ##NO_TEXT. + CONSTANTS c_xl_styles TYPE string VALUE 'xl/styles.xml' ##NO_TEXT. + CONSTANTS c_xl_theme TYPE string VALUE 'xl/theme/theme1.xml' ##NO_TEXT. + CONSTANTS c_xl_workbook TYPE string VALUE 'xl/workbook.xml' ##NO_TEXT. + DATA excel TYPE REF TO zcl_excel . + DATA shared_strings TYPE zexcel_t_shared_string . + DATA styles_cond_mapping TYPE zexcel_t_styles_cond_mapping . + DATA styles_mapping TYPE zexcel_t_styles_mapping . + CONSTANTS c_xl_comments TYPE string VALUE 'xl/comments#.xml' ##NO_TEXT. + CONSTANTS cl_xl_drawing_for_comments TYPE string VALUE 'xl/drawings/vmlDrawing#.vml' ##NO_TEXT. + CONSTANTS c_xl_drawings_vml_rels TYPE string VALUE 'xl/drawings/_rels/vmlDrawing#.vml.rels' ##NO_TEXT. + DATA ixml TYPE REF TO if_ixml . + DATA control_characters TYPE string . + + METHODS create_xl_sheet_sheet_data + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(rv_ixml_sheet_data_root) TYPE REF TO if_ixml_element + RAISING + zcx_excel . + METHODS add_further_data_to_zip + IMPORTING + !io_zip TYPE REF TO cl_abap_zip . + METHODS create + RETURNING + VALUE(ep_excel) TYPE xstring + RAISING + zcx_excel . + METHODS create_content_types + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_docprops_app + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_docprops_core + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_dxf_style + IMPORTING + !iv_cell_style TYPE zexcel_cell_style + !io_dxf_element TYPE REF TO if_ixml_element + !io_ixml_document TYPE REF TO if_ixml_document + !it_cellxfs TYPE zexcel_t_cellxfs + !it_fonts TYPE zexcel_t_style_font + !it_fills TYPE zexcel_t_style_fill + CHANGING + !cv_dfx_count TYPE i . + METHODS create_relationships + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_charts + IMPORTING + !io_drawing TYPE REF TO zcl_excel_drawing + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_comments + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawings + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawings_rels + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawing_anchor + IMPORTING + !io_drawing TYPE REF TO zcl_excel_drawing + !io_document TYPE REF TO if_ixml_document + !ip_index TYPE i + RETURNING + VALUE(ep_anchor) TYPE REF TO if_ixml_element . + METHODS create_xl_drawing_for_comments + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring + RAISING + zcx_excel . + METHODS create_xl_relationships + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_sharedstrings + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_sheet + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + !iv_active TYPE flag DEFAULT '' + RETURNING + VALUE(ep_content) TYPE xstring + RAISING + zcx_excel . + METHODS create_xl_sheet_ignored_errors + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + !io_document TYPE REF TO if_ixml_document + !io_element_root TYPE REF TO if_ixml_element . + METHODS create_xl_sheet_pagebreaks + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_parent TYPE REF TO if_ixml_element + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS create_xl_sheet_rels + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + !iv_drawing_index TYPE i OPTIONAL + !iv_comment_index TYPE i OPTIONAL + !iv_cmnt_vmlindex TYPE i OPTIONAL + !iv_hdft_vmlindex TYPE i OPTIONAL + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_styles + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_styles_color_node + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_parent TYPE REF TO if_ixml_element + !iv_color_elem_name TYPE string DEFAULT 'color' + !is_color TYPE zexcel_s_style_color . + METHODS create_xl_styles_font_node + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_parent TYPE REF TO if_ixml_element + !is_font TYPE zexcel_s_style_font + !iv_use_rtf TYPE abap_bool DEFAULT abap_false . + METHODS create_xl_table + IMPORTING + !io_table TYPE REF TO zcl_excel_table + RETURNING + VALUE(ep_content) TYPE xstring + RAISING + zcx_excel . + METHODS create_xl_theme + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_workbook + RETURNING + VALUE(ep_content) TYPE xstring + RAISING + zcx_excel . + METHODS get_shared_string_index + IMPORTING + !ip_cell_value TYPE zexcel_cell_value + !it_rtf TYPE zexcel_t_rtf OPTIONAL + RETURNING + VALUE(ep_index) TYPE int4 . + METHODS create_xl_drawings_vml + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS set_vml_string + RETURNING + VALUE(ep_content) TYPE string . + METHODS create_xl_drawings_vml_rels + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS escape_string_value + IMPORTING + !iv_value TYPE zexcel_cell_value + RETURNING + VALUE(result) TYPE zexcel_cell_value . + METHODS set_vml_shape_footer + IMPORTING + !is_footer TYPE zexcel_s_worksheet_head_foot + RETURNING + VALUE(ep_content) TYPE string . + METHODS set_vml_shape_header + IMPORTING + !is_header TYPE zexcel_s_worksheet_head_foot + RETURNING + VALUE(ep_content) TYPE string . + METHODS create_xl_drawing_for_hdft_im + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawings_hdft_rels + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xml_document + RETURNING + VALUE(ro_document) TYPE REF TO if_ixml_document . + METHODS render_xml_document + IMPORTING + !io_document TYPE REF TO if_ixml_document OPTIONAL + !iv_document_as_string TYPE string OPTIONAL + PREFERRED PARAMETER io_document + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_sheet_column_formula + IMPORTING + !io_document TYPE REF TO if_ixml_document + !it_column_formulas TYPE zcl_excel_worksheet=>mty_th_column_formula + !is_sheet_content TYPE zexcel_s_cell_data + EXPORTING + !eo_element TYPE REF TO if_ixml_element + CHANGING + !ct_column_formulas_used TYPE mty_column_formulas_used + !cv_si TYPE i + RAISING + zcx_excel . + METHODS is_formula_shareable + IMPORTING + !ip_formula TYPE string + RETURNING + VALUE(ep_shareable) TYPE abap_bool + RAISING + zcx_excel . +PRIVATE SECTION. + + TYPES: + tv_charbool TYPE c LENGTH 5 . *"* private components of class ZCL_EXCEL_WRITER_2007 *"* do not include other source files here!!! - CONSTANTS c_off TYPE string VALUE '0'. "#EC NOTEXT - CONSTANTS c_on TYPE string VALUE '1'. "#EC NOTEXT - CONSTANTS c_xl_printersettings TYPE string VALUE 'xl/printerSettings/printerSettings#.bin'. "#EC NOTEXT - TYPES: tv_charbool TYPE c LENGTH 5. + CONSTANTS c_off TYPE string VALUE '0' ##NO_TEXT. + CONSTANTS c_on TYPE string VALUE '1' ##NO_TEXT. + CONSTANTS c_xl_printersettings TYPE string VALUE 'xl/printerSettings/printerSettings#.bin' ##NO_TEXT. - METHODS add_1_val_child_node - IMPORTING - io_document TYPE REF TO if_ixml_document - io_parent TYPE REF TO if_ixml_element - iv_elem_name TYPE string - iv_attr_name TYPE string - iv_attr_value TYPE string. - METHODS flag2bool - IMPORTING - !ip_flag TYPE flag - RETURNING - VALUE(ep_boolean) TYPE tv_charbool . - METHODS number2string - IMPORTING - !ip_number TYPE numeric - RETURNING - VALUE(ep_string) TYPE string. + METHODS get_comment_anchor + IMPORTING + !io_comment TYPE REF TO zcl_excel_comment + RETURNING + VALUE(ev_anchor) TYPE string . + METHODS add_1_val_child_node + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_parent TYPE REF TO if_ixml_element + !iv_elem_name TYPE string + !iv_attr_name TYPE string + !iv_attr_value TYPE string . + METHODS flag2bool + IMPORTING + !ip_flag TYPE flag + RETURNING + VALUE(ep_boolean) TYPE tv_charbool . + METHODS number2string + IMPORTING + !ip_number TYPE numeric + RETURNING + VALUE(ep_string) TYPE string . ENDCLASS. -CLASS zcl_excel_writer_2007 IMPLEMENTATION. +CLASS ZCL_EXCEL_WRITER_2007 IMPLEMENTATION. METHOD add_1_val_child_node. @@ -2338,55 +2350,22 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. METHOD create_xl_comments. -** Constant node name - CONSTANTS: lc_xml_node_comments TYPE string VALUE 'comments', - lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - " authors - lc_xml_node_author TYPE string VALUE 'author', - lc_xml_node_authors TYPE string VALUE 'authors', - " comments - lc_xml_node_commentlist TYPE string VALUE 'commentList', - lc_xml_node_comment TYPE string VALUE 'comment', - lc_xml_node_text TYPE string VALUE 'text', - lc_xml_node_r TYPE string VALUE 'r', - lc_xml_node_rpr TYPE string VALUE 'rPr', - lc_xml_node_b TYPE string VALUE 'b', - lc_xml_node_sz TYPE string VALUE 'sz', - lc_xml_node_color TYPE string VALUE 'color', - lc_xml_node_rfont TYPE string VALUE 'rFont', -* lc_xml_node_charset TYPE string VALUE 'charset', - lc_xml_node_family TYPE string VALUE 'family', - lc_xml_node_t TYPE string VALUE 't', - " comments attributes - lc_xml_attr_ref TYPE string VALUE 'ref', - lc_xml_attr_authorid TYPE string VALUE 'authorId', - lc_xml_attr_val TYPE string VALUE 'val', - lc_xml_attr_indexed TYPE string VALUE 'indexed', - lc_xml_attr_xmlspacing TYPE string VALUE 'xml:space'. - - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element_authors TYPE REF TO if_ixml_element, - lo_element_author TYPE REF TO if_ixml_element, - lo_element_commentlist TYPE REF TO if_ixml_element, - lo_element_comment TYPE REF TO if_ixml_element, - lo_element_text TYPE REF TO if_ixml_element, - lo_element_r TYPE REF TO if_ixml_element, - lo_element_rpr TYPE REF TO if_ixml_element, - lo_element_b TYPE REF TO if_ixml_element, - lo_element_sz TYPE REF TO if_ixml_element, - lo_element_color TYPE REF TO if_ixml_element, - lo_element_rfont TYPE REF TO if_ixml_element, -* lo_element_charset TYPE REF TO if_ixml_element, - lo_element_family TYPE REF TO if_ixml_element, - lo_element_t TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO zcl_excel_collection_iterator, - lo_comments TYPE REF TO zcl_excel_comments, - lo_comment TYPE REF TO zcl_excel_comment. - DATA: lv_rel_id TYPE i, - lv_author TYPE string. + DATA: + lo_comment TYPE REF TO zcl_excel_comment, + lo_comments TYPE REF TO zcl_excel_comments, + lo_document TYPE REF TO if_ixml_document, + lo_element_author TYPE REF TO if_ixml_element, + lo_element_authors TYPE REF TO if_ixml_element, + lo_element_comment TYPE REF TO if_ixml_element, + lo_element_commentlist TYPE REF TO if_ixml_element, + lo_element_r TYPE REF TO if_ixml_element, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_rpr TYPE REF TO if_ixml_element, + lo_element_t TYPE REF TO if_ixml_element, + lo_element_text TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO zcl_excel_collection_iterator, + lv_author TYPE string. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP @@ -2394,76 +2373,76 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. *********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_comments + lo_element_root = lo_document->create_simple_element( name = `comments` parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = `xmlns` + value = `http://schemas.openxmlformats.org/spreadsheetml/2006/main` ). ********************************************************************** * STEP 4: Create authors * TO-DO: management of several authors - lo_element_authors = lo_document->create_simple_element( name = lc_xml_node_authors - parent = lo_document ). + lo_element_authors = lo_document->create_simple_element( name = `authors` + parent = lo_element_root ). - lo_element_author = lo_document->create_simple_element( name = lc_xml_node_author - parent = lo_document ). + lo_element_author = lo_document->create_simple_element( name = `author` + parent = lo_element_authors ). lv_author = sy-uname. lo_element_author->set_value( lv_author ). - lo_element_authors->append_child( new_child = lo_element_author ). - lo_element_root->append_child( new_child = lo_element_authors ). - ********************************************************************** * STEP 5: Create comments - lo_element_commentlist = lo_document->create_simple_element( name = lc_xml_node_commentlist - parent = lo_document ). + lo_element_commentlist = lo_document->create_simple_element( name = `commentList` + parent = lo_element_root ). lo_comments = io_worksheet->get_comments( ). + DATA: + lt_rtf TYPE zcl_excel_comment=>ty_rtf_fragments. + FIELD-SYMBOLS: + TYPE zcl_excel_comment=>ty_rtf_fragment. + lo_iterator = lo_comments->get_iterator( ). WHILE lo_iterator->has_next( ) EQ abap_true. lo_comment ?= lo_iterator->get_next( ). - lo_element_comment = lo_document->create_simple_element( name = lc_xml_node_comment - parent = lo_document ). - lo_element_comment->set_attribute_ns( name = lc_xml_attr_ref + lo_element_comment = lo_document->create_simple_element( name = `comment` + parent = lo_element_commentlist ). + lo_element_comment->set_attribute_ns( name = `ref` value = lo_comment->get_ref( ) ). - lo_element_comment->set_attribute_ns( name = lc_xml_attr_authorid - value = '0' ). " TO-DO + lo_element_comment->set_attribute_ns( name = `authorId` + value = `0` ). " TO-DO - lo_element_text = lo_document->create_simple_element( name = lc_xml_node_text - parent = lo_document ). - lo_element_r = lo_document->create_simple_element( name = lc_xml_node_r - parent = lo_document ). - lo_element_rpr = lo_document->create_simple_element( name = lc_xml_node_rpr - parent = lo_document ). + lo_element_text = lo_document->create_simple_element( name = `text` + parent = lo_element_comment ). - lo_element_b = lo_document->create_simple_element( name = lc_xml_node_b - parent = lo_document ). - lo_element_rpr->append_child( new_child = lo_element_b ). + lt_rtf = lo_comment->get_text_rtf( ). - add_1_val_child_node( io_document = lo_document io_parent = lo_element_rpr iv_elem_name = lc_xml_node_sz iv_attr_name = lc_xml_attr_val iv_attr_value = '9' ). - add_1_val_child_node( io_document = lo_document io_parent = lo_element_rpr iv_elem_name = lc_xml_node_color iv_attr_name = lc_xml_attr_indexed iv_attr_value = '81' ). - add_1_val_child_node( io_document = lo_document io_parent = lo_element_rpr iv_elem_name = lc_xml_node_rfont iv_attr_name = lc_xml_attr_val iv_attr_value = 'Tahoma' ). - add_1_val_child_node( io_document = lo_document io_parent = lo_element_rpr iv_elem_name = lc_xml_node_family iv_attr_name = lc_xml_attr_val iv_attr_value = '2' ). + LOOP AT lt_rtf ASSIGNING . - lo_element_r->append_child( new_child = lo_element_rpr ). - lo_element_t = lo_document->create_simple_element( name = lc_xml_node_t - parent = lo_document ). - lo_element_t->set_attribute_ns( name = lc_xml_attr_xmlspacing - value = 'preserve' ). - lo_element_t->set_value( lo_comment->get_text( ) ). - lo_element_r->append_child( new_child = lo_element_t ). + lo_element_r = lo_document->create_simple_element( name = `r` + parent = lo_element_text ). + lo_element_rpr = lo_document->create_simple_element( name = `rPr` + parent = lo_element_r ). + + create_xl_styles_font_node( + io_document = lo_document + io_parent = lo_element_rpr + is_font = -rtf + iv_use_rtf = abap_true " generate , not element for font + ). + + lo_element_t = lo_document->create_simple_element( name = `t` + parent = lo_element_r ). + lo_element_t->set_attribute_ns( name = `xml:space` + value = `preserve` ). + lo_element_t->set_value( -text ). + + ENDLOOP. - lo_element_text->append_child( new_child = lo_element_r ). - lo_element_comment->append_child( new_child = lo_element_text ). - lo_element_commentlist->append_child( new_child = lo_element_comment ). ENDWHILE. - lo_element_root->append_child( new_child = lo_element_commentlist ). - ********************************************************************** * STEP 5: Create xstring stream ep_content = render_xml_document( lo_document ). @@ -3095,107 +3074,47 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. ENDMETHOD. - METHOD create_xl_drawing_for_comments. -** Constant node name - CONSTANTS: lc_xml_node_xml TYPE string VALUE 'xml', - lc_xml_node_ns_v TYPE string VALUE 'urn:schemas-microsoft-com:vml', - lc_xml_node_ns_o TYPE string VALUE 'urn:schemas-microsoft-com:office:office', - lc_xml_node_ns_x TYPE string VALUE 'urn:schemas-microsoft-com:office:excel', - " shapelayout - lc_xml_node_shapelayout TYPE string VALUE 'o:shapelayout', - lc_xml_node_idmap TYPE string VALUE 'o:idmap', - " shapetype - lc_xml_node_shapetype TYPE string VALUE 'v:shapetype', - lc_xml_node_stroke TYPE string VALUE 'v:stroke', - lc_xml_node_path TYPE string VALUE 'v:path', - " shape - lc_xml_node_shape TYPE string VALUE 'v:shape', - lc_xml_node_fill TYPE string VALUE 'v:fill', - lc_xml_node_shadow TYPE string VALUE 'v:shadow', - lc_xml_node_textbox TYPE string VALUE 'v:textbox', - lc_xml_node_div TYPE string VALUE 'div', - lc_xml_node_clientdata TYPE string VALUE 'x:ClientData', - lc_xml_node_movewithcells TYPE string VALUE 'x:MoveWithCells', - lc_xml_node_sizewithcells TYPE string VALUE 'x:SizeWithCells', - lc_xml_node_anchor TYPE string VALUE 'x:Anchor', - lc_xml_node_autofill TYPE string VALUE 'x:AutoFill', - lc_xml_node_row TYPE string VALUE 'x:Row', - lc_xml_node_column TYPE string VALUE 'x:Column', - " attributes, - lc_xml_attr_vext TYPE string VALUE 'v:ext', - lc_xml_attr_data TYPE string VALUE 'data', - lc_xml_attr_id TYPE string VALUE 'id', - lc_xml_attr_coordsize TYPE string VALUE 'coordsize', - lc_xml_attr_ospt TYPE string VALUE 'o:spt', - lc_xml_attr_joinstyle TYPE string VALUE 'joinstyle', - lc_xml_attr_path TYPE string VALUE 'path', - lc_xml_attr_gradientshapeok TYPE string VALUE 'gradientshapeok', - lc_xml_attr_oconnecttype TYPE string VALUE 'o:connecttype', - lc_xml_attr_type TYPE string VALUE 'type', - lc_xml_attr_style TYPE string VALUE 'style', - lc_xml_attr_fillcolor TYPE string VALUE 'fillcolor', - lc_xml_attr_oinsetmode TYPE string VALUE 'o:insetmode', - lc_xml_attr_color TYPE string VALUE 'color', - lc_xml_attr_color2 TYPE string VALUE 'color2', - lc_xml_attr_on TYPE string VALUE 'on', - lc_xml_attr_obscured TYPE string VALUE 'obscured', - lc_xml_attr_objecttype TYPE string VALUE 'ObjectType', - " attributes values - lc_xml_attr_val_edit TYPE string VALUE 'edit', - lc_xml_attr_val_rect TYPE string VALUE 'rect', - lc_xml_attr_val_t TYPE string VALUE 't', - lc_xml_attr_val_miter TYPE string VALUE 'miter', - lc_xml_attr_val_auto TYPE string VALUE 'auto', - lc_xml_attr_val_black TYPE string VALUE 'black', - lc_xml_attr_val_none TYPE string VALUE 'none', - lc_xml_attr_val_msodir TYPE string VALUE 'mso-direction-alt:auto', - lc_xml_attr_val_note TYPE string VALUE 'Note'. +METHOD create_xl_drawing_for_comments. + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + "shapelayout + lo_element_shapelayout TYPE REF TO if_ixml_element, + lo_element_idmap TYPE REF TO if_ixml_element, + "shapetype + lo_element_shapetype TYPE REF TO if_ixml_element, + lo_element_stroke TYPE REF TO if_ixml_element, + lo_element_path TYPE REF TO if_ixml_element, + "shape + lo_element_shape TYPE REF TO if_ixml_element, + lo_element_fill TYPE REF TO if_ixml_element, + lo_element_shadow TYPE REF TO if_ixml_element, + lo_element_textbox TYPE REF TO if_ixml_element, + lo_element_div TYPE REF TO if_ixml_element, + lo_element_clientdata TYPE REF TO if_ixml_element, + lo_element_movewithcells TYPE REF TO if_ixml_element, + lo_element_sizewithcells TYPE REF TO if_ixml_element, + lo_element_anchor TYPE REF TO if_ixml_element, + lo_element_autofill TYPE REF TO if_ixml_element, + lo_element_row TYPE REF TO if_ixml_element, + lo_element_column TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO zcl_excel_collection_iterator, + lo_anchors TYPE REF TO if_ixml_node_collection, + lo_anchor TYPE REF TO if_ixml_element, + lo_comments TYPE REF TO zcl_excel_comments, + lo_comment TYPE REF TO zcl_excel_comment, + lv_row TYPE zexcel_cell_row, + lv_str_column TYPE zexcel_cell_column_alpha, + lv_column TYPE zexcel_cell_column, + lv_index TYPE i, + lv_attr_id_index TYPE i, + lv_attr_id TYPE string, + lv_int_value TYPE i, + lv_int_value_string TYPE string, + lv_anchor TYPE string. - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - "shapelayout - lo_element_shapelayout TYPE REF TO if_ixml_element, - lo_element_idmap TYPE REF TO if_ixml_element, - "shapetype - lo_element_shapetype TYPE REF TO if_ixml_element, - lo_element_stroke TYPE REF TO if_ixml_element, - lo_element_path TYPE REF TO if_ixml_element, - "shape - lo_element_shape TYPE REF TO if_ixml_element, - lo_element_fill TYPE REF TO if_ixml_element, - lo_element_shadow TYPE REF TO if_ixml_element, - lo_element_textbox TYPE REF TO if_ixml_element, - lo_element_div TYPE REF TO if_ixml_element, - lo_element_clientdata TYPE REF TO if_ixml_element, - lo_element_movewithcells TYPE REF TO if_ixml_element, - lo_element_sizewithcells TYPE REF TO if_ixml_element, - lo_element_anchor TYPE REF TO if_ixml_element, - lo_element_autofill TYPE REF TO if_ixml_element, - lo_element_row TYPE REF TO if_ixml_element, - lo_element_column TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO zcl_excel_collection_iterator, - lo_comments TYPE REF TO zcl_excel_comments, - lo_comment TYPE REF TO zcl_excel_comment, - lv_row TYPE zexcel_cell_row, - lv_str_column TYPE zexcel_cell_column_alpha, - lv_column TYPE zexcel_cell_column, - lv_index TYPE i, - lv_attr_id_index TYPE i, - lv_attr_id TYPE string, - lv_int_value TYPE i, - lv_int_value_string TYPE string. - DATA: lv_rel_id TYPE i. - DATA lv_anchor TYPE string. - DATA lv_bottom_row TYPE i. - DATA lv_right_column TYPE i. - DATA lv_bottom_row_str TYPE string. - DATA lv_right_column_str TYPE string. - DATA lv_top_row TYPE i. - DATA lv_left_column TYPE i. - DATA lv_top_row_str TYPE string. - DATA lv_left_column_str TYPE string. - + lo_comments = io_worksheet->get_comments( ). + IF lo_comments->gv_full_vml IS INITIAL. ********************************************************************** * STEP 1: Create XML document @@ -3203,59 +3122,48 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. *********************************************************************** * STEP 2: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_xml - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns:v' value = lc_xml_node_ns_v ). - lo_element_root->set_attribute_ns( name = 'xmlns:o' value = lc_xml_node_ns_o ). - lo_element_root->set_attribute_ns( name = 'xmlns:x' value = lc_xml_node_ns_x ). + lo_element_root = lo_document->create_simple_element( name = `xml` parent = lo_document ). + lo_element_root->set_attribute_ns( name = `xmlns:v` value = `urn:schemas-microsoft-com:vml` ). + lo_element_root->set_attribute_ns( name = `xmlns:o` value = `urn:schemas-microsoft-com:office:office` ). + lo_element_root->set_attribute_ns( name = `xmlns:x` value = `urn:schemas-microsoft-com:office:excel` ). ********************************************************************** * STEP 3: Create o:shapeLayout * TO-DO: management of several authors - lo_element_shapelayout = lo_document->create_simple_element( name = lc_xml_node_shapelayout - parent = lo_document ). + lo_element_shapelayout = lo_document->create_simple_element( name = `o:shapelayout` + parent = lo_element_root ). - lo_element_shapelayout->set_attribute_ns( name = lc_xml_attr_vext - value = lc_xml_attr_val_edit ). + lo_element_shapelayout->set_attribute_ns( name = `v:ext` + value = `edit` ). - lo_element_idmap = lo_document->create_simple_element( name = lc_xml_node_idmap - parent = lo_document ). - lo_element_idmap->set_attribute_ns( name = lc_xml_attr_vext value = lc_xml_attr_val_edit ). - lo_element_idmap->set_attribute_ns( name = lc_xml_attr_data value = '1' ). - - lo_element_shapelayout->append_child( new_child = lo_element_idmap ). - - lo_element_root->append_child( new_child = lo_element_shapelayout ). + lo_element_idmap = lo_document->create_simple_element( name = `o:idmap` + parent = lo_element_shapelayout ). + lo_element_idmap->set_attribute_ns( name = `v:ext` value = `edit` ). + lo_element_idmap->set_attribute_ns( name = `data` value = `1` ). ********************************************************************** * STEP 4: Create v:shapetype - lo_element_shapetype = lo_document->create_simple_element( name = lc_xml_node_shapetype - parent = lo_document ). + lo_element_shapetype = lo_document->create_simple_element( name = `v:shapetype` + parent = lo_element_root ). - lo_element_shapetype->set_attribute_ns( name = lc_xml_attr_id value = '_x0000_t202' ). - lo_element_shapetype->set_attribute_ns( name = lc_xml_attr_coordsize value = '21600,21600' ). - lo_element_shapetype->set_attribute_ns( name = lc_xml_attr_ospt value = '202' ). - lo_element_shapetype->set_attribute_ns( name = lc_xml_attr_path value = 'm,l,21600r21600,l21600,xe' ). + lo_element_shapetype->set_attribute_ns( name = `id` value = `_x0000_t202` ). + lo_element_shapetype->set_attribute_ns( name = `coordsize` value = `21600,21600` ). + lo_element_shapetype->set_attribute_ns( name = `o:spt` value = `202` ). + lo_element_shapetype->set_attribute_ns( name = `path` value = `m,l,21600r21600,l21600,xe` ). - lo_element_stroke = lo_document->create_simple_element( name = lc_xml_node_stroke - parent = lo_document ). - lo_element_stroke->set_attribute_ns( name = lc_xml_attr_joinstyle value = lc_xml_attr_val_miter ). + lo_element_stroke = lo_document->create_simple_element( name = `v:stroke` + parent = lo_element_shapetype ). + lo_element_stroke->set_attribute_ns( name = `joinstyle` value = `miter` ). - lo_element_path = lo_document->create_simple_element( name = lc_xml_node_path - parent = lo_document ). - lo_element_path->set_attribute_ns( name = lc_xml_attr_gradientshapeok value = lc_xml_attr_val_t ). - lo_element_path->set_attribute_ns( name = lc_xml_attr_oconnecttype value = lc_xml_attr_val_rect ). - - lo_element_shapetype->append_child( new_child = lo_element_stroke ). - lo_element_shapetype->append_child( new_child = lo_element_path ). - - lo_element_root->append_child( new_child = lo_element_shapetype ). + lo_element_path = lo_document->create_simple_element( name = `v:path` + parent = lo_element_shapetype ). + lo_element_path->set_attribute_ns( name = `gradientshapeok` value = `t` ). + lo_element_path->set_attribute_ns( name = `o:connecttype` value = `rect` ). ********************************************************************** * STEP 4: Create v:shapetype - lo_comments = io_worksheet->get_comments( ). lo_iterator = lo_comments->get_iterator( ). WHILE lo_iterator->has_next( ) EQ abap_true. @@ -3267,56 +3175,54 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. e_row = lv_row ). lv_column = zcl_excel_common=>convert_column2int( lv_str_column ). - lo_element_shape = lo_document->create_simple_element( name = lc_xml_node_shape - parent = lo_document ). + lo_element_shape = lo_document->create_simple_element( name = `v:shape` + parent = lo_element_root ). lv_attr_id_index = 1024 + lv_index. lv_attr_id = lv_attr_id_index. - CONCATENATE '_x0000_s' lv_attr_id INTO lv_attr_id. - lo_element_shape->set_attribute_ns( name = lc_xml_attr_id value = lv_attr_id ). - lo_element_shape->set_attribute_ns( name = lc_xml_attr_type value = '#_x0000_t202' ). - lo_element_shape->set_attribute_ns( name = lc_xml_attr_style value = 'size:auto;width:auto;height:auto;position:absolute;margin-left:117pt;margin-top:172.5pt;z-index:1;visibility:hidden' ). - lo_element_shape->set_attribute_ns( name = lc_xml_attr_fillcolor value = '#ffffe1' ). - lo_element_shape->set_attribute_ns( name = lc_xml_attr_oinsetmode value = lc_xml_attr_val_auto ). + CONCATENATE `_x0000_s` lv_attr_id INTO lv_attr_id. + lo_element_shape->set_attribute_ns( name = `id` value = lv_attr_id ). + lo_element_shape->set_attribute_ns( name = `type` value = `#_x0000_t202` ). + lo_element_shape->set_attribute_ns( name = `style` value = `size:auto;width:auto;height:auto;position:absolute;margin-left:117pt;margin-top:172.5pt;z-index:1;visibility:hidden` ). + lo_element_shape->set_attribute_ns( name = `fillcolor` value = `#ffffe1` ). + lo_element_shape->set_attribute_ns( name = `o:insetmode` value = `auto` ). " Fill - lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill - parent = lo_document ). - lo_element_fill->set_attribute_ns( name = lc_xml_attr_color2 value = '#ffffe1' ). - lo_element_shape->append_child( new_child = lo_element_fill ). + lo_element_fill = lo_document->create_simple_element( name = `v:fill` + parent = lo_element_shape ). + lo_element_fill->set_attribute_ns( name = `color2` value = `#ffffe1` ). + " Shadow - lo_element_shadow = lo_document->create_simple_element( name = lc_xml_node_shadow - parent = lo_document ). - lo_element_shadow->set_attribute_ns( name = lc_xml_attr_on value = lc_xml_attr_val_t ). - lo_element_shadow->set_attribute_ns( name = lc_xml_attr_color value = lc_xml_attr_val_black ). - lo_element_shadow->set_attribute_ns( name = lc_xml_attr_obscured value = lc_xml_attr_val_t ). - lo_element_shape->append_child( new_child = lo_element_shadow ). + lo_element_shadow = lo_document->create_simple_element( name = `v:shadow` + parent = lo_element_shape ). + lo_element_shadow->set_attribute_ns( name = `on` value = `t` ). + lo_element_shadow->set_attribute_ns( name = `color` value = `black` ). + lo_element_shadow->set_attribute_ns( name = `obscured` value = `t` ). + " Path - lo_element_path = lo_document->create_simple_element( name = lc_xml_node_path - parent = lo_document ). - lo_element_path->set_attribute_ns( name = lc_xml_attr_oconnecttype value = lc_xml_attr_val_none ). - lo_element_shape->append_child( new_child = lo_element_path ). + lo_element_path = lo_document->create_simple_element( name = `v:path` + parent = lo_element_shape ). + lo_element_path->set_attribute_ns( name = `o:connecttype` value = `none` ). + " Textbox - lo_element_textbox = lo_document->create_simple_element( name = lc_xml_node_textbox - parent = lo_document ). - lo_element_textbox->set_attribute_ns( name = lc_xml_attr_style value = lc_xml_attr_val_msodir ). - lo_element_div = lo_document->create_simple_element( name = lc_xml_node_div - parent = lo_document ). - lo_element_div->set_attribute_ns( name = lc_xml_attr_style value = 'text-align:left' ). - lo_element_textbox->append_child( new_child = lo_element_div ). - lo_element_shape->append_child( new_child = lo_element_textbox ). + lo_element_textbox = lo_document->create_simple_element( name = `v:textbox` + parent = lo_element_shape ). + lo_element_textbox->set_attribute_ns( name = `style` value = `mso-direction-alt:auto` ). + lo_element_div = lo_document->create_simple_element( name = `div` + parent = lo_element_div ). + lo_element_div->set_attribute_ns( name = `style` value = `text-align:left` ). + " ClientData - lo_element_clientdata = lo_document->create_simple_element( name = lc_xml_node_clientdata - parent = lo_document ). - lo_element_clientdata->set_attribute_ns( name = lc_xml_attr_objecttype value = lc_xml_attr_val_note ). - lo_element_movewithcells = lo_document->create_simple_element( name = lc_xml_node_movewithcells - parent = lo_document ). - lo_element_clientdata->append_child( new_child = lo_element_movewithcells ). - lo_element_sizewithcells = lo_document->create_simple_element( name = lc_xml_node_sizewithcells - parent = lo_document ). - lo_element_clientdata->append_child( new_child = lo_element_sizewithcells ). - lo_element_anchor = lo_document->create_simple_element( name = lc_xml_node_anchor - parent = lo_document ). + lo_element_clientdata = lo_document->create_simple_element( name = `x:ClientData` + parent = lo_element_shape ). + lo_element_clientdata->set_attribute_ns( name = `ObjectType` value = `Note` ). + lo_element_movewithcells = lo_document->create_simple_element( name = `x:MoveWithCells` + parent = lo_element_clientdata ). + lo_element_sizewithcells = lo_document->create_simple_element( name = `x:SizeWithCells` + parent = lo_element_clientdata ). + + lo_element_anchor = lo_document->create_simple_element( name = `x:Anchor` + parent = lo_element_clientdata ). " Anchor represents 4 pairs of numbers: " ( left column, left offset ), ( top row, top offset ), @@ -3324,44 +3230,61 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. " Offsets are a number of pixels. " Reference: Anchor Class at " https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.vml.spreadsheet.anchor?view=openxml-3.0.1 - lv_anchor = number2string( lo_comment->get_left_column( ) ) - && `, ` && number2string( lo_comment->get_left_offset( ) ) - && `, ` && number2string( lo_comment->get_top_row( ) ) - && `, ` && number2string( lo_comment->get_top_offset( ) ) - && `, ` && number2string( lo_comment->get_right_column( ) ) - && `, ` && number2string( lo_comment->get_right_offset( ) ) - && `, ` && number2string( lo_comment->get_bottom_row( ) ) - && `, ` && number2string( lo_comment->get_bottom_offset( ) ). + lv_anchor = get_comment_anchor( lo_comment ). lo_element_anchor->set_value( lv_anchor ). - lo_element_clientdata->append_child( new_child = lo_element_anchor ). - lo_element_autofill = lo_document->create_simple_element( name = lc_xml_node_autofill - parent = lo_document ). - lo_element_autofill->set_value( 'False' ). - lo_element_clientdata->append_child( new_child = lo_element_autofill ). - lo_element_row = lo_document->create_simple_element( name = lc_xml_node_row - parent = lo_document ). + lo_element_autofill = lo_document->create_simple_element( name = `x:AutoFill` + parent = lo_element_clientdata ). + lo_element_autofill->set_value( `False` ). + + lo_element_row = lo_document->create_simple_element( name = `x:Row` + parent = lo_element_clientdata ). lv_int_value = lv_row - 1. lv_int_value_string = lv_int_value. lo_element_row->set_value( lv_int_value_string ). - lo_element_clientdata->append_child( new_child = lo_element_row ). - lo_element_column = lo_document->create_simple_element( name = lc_xml_node_column - parent = lo_document ). + + lo_element_column = lo_document->create_simple_element( name = `x:Column` + parent = lo_element_clientdata ). lv_int_value = lv_column - 1. lv_int_value_string = lv_int_value. lo_element_column->set_value( lv_int_value_string ). - lo_element_clientdata->append_child( new_child = lo_element_column ). - lo_element_shape->append_child( new_child = lo_element_clientdata ). - - lo_element_root->append_child( new_child = lo_element_shape ). ENDWHILE. ********************************************************************** * STEP 6: Create xstring stream ep_content = render_xml_document( lo_document ). - ENDMETHOD. + ELSE. + +* Replace the eight numbers in with the current values +* (they may have been changed before calling the writer + lo_document = ixml->create_document( ). + CALL TRANSFORMATION id + SOURCE XML lo_comments->gv_full_vml + RESULT XML lo_document. + + lo_anchors = lo_document->get_elements_by_tag_name_ns( + name = `anchor` + uri = `urn:schemas-microsoft-com:office:excel` + ). + + lo_iterator = lo_comments->get_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_anchor ?= lo_anchors->get_item( sy-index - 1 ). + IF lo_anchor IS NOT BOUND. + EXIT. + ENDIF. + lo_comment ?= lo_iterator->get_next( ). + lv_anchor = get_comment_anchor( lo_comment ). + lo_anchor->set_value( lv_anchor ). + ENDWHILE. + + ep_content = render_xml_document( lo_document ). + + ENDIF. + +ENDMETHOD. METHOD create_xl_drawing_for_hdft_im. @@ -4430,8 +4353,6 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. lo_element_2->set_attribute_ns( name = 's' value = lv_value ). lo_element_2->set_attribute_ns( name = 'customFormat' value = '1' ). ENDIF. - ELSE. - ENDIF. ENDWHILE. @@ -6254,10 +6175,14 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. " and then to convert the STRING variable to UTF-8 using method CL_ABAP_CODEPAGE=>CONVERT_TO. " 1) RENDER TO XML STRING - lo_streamfactory = me->ixml->create_stream_factory( ). - lo_ostream = lo_streamfactory->create_ostream_cstring( string = lv_string ). - lo_renderer = me->ixml->create_renderer( ostream = lo_ostream document = io_document ). - lo_renderer->render( ). + IF io_document IS BOUND. + lo_streamfactory = me->ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_cstring( string = lv_string ). + lo_renderer = me->ixml->create_renderer( ostream = lo_ostream document = io_document ). + lo_renderer->render( ). + ELSE. + lv_string = iv_document_as_string. + ENDIF. " 2) CONVERT IT TO UTF-8 "----------------- @@ -6571,4 +6496,17 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. ep_file = me->create( ). ENDMETHOD. + + + METHOD get_comment_anchor. + ev_anchor = number2string( io_comment->get_left_column( ) ) + && `, ` && number2string( io_comment->get_left_offset( ) ) + && `, ` && number2string( io_comment->get_top_row( ) ) + && `, ` && number2string( io_comment->get_top_offset( ) ) + && `, ` && number2string( io_comment->get_right_column( ) ) + && `, ` && number2string( io_comment->get_right_offset( ) ) + && `, ` && number2string( io_comment->get_bottom_row( ) ) + && `, ` && number2string( io_comment->get_bottom_offset( ) ). + CONDENSE ev_anchor. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_writer_2007.clas.xml b/src/zcl_excel_writer_2007.clas.xml index 03cb1e5..8175dbb 100644 --- a/src/zcl_excel_writer_2007.clas.xml +++ b/src/zcl_excel_writer_2007.clas.xml @@ -53,6 +53,11 @@ E Create 'xl/charts/chart1.xml' + + CREATE_XL_COMMENTS + E + Create 'xl/comments1.xml' + CREATE_XL_DRAWINGS E @@ -83,6 +88,11 @@ E Create 'xl/drawings/drawing1.xml' + + CREATE_XL_DRAWING_FOR_COMMENTS + E + Create 'xl/drawings/vmlDrawing1.vml' (style for comments) + CREATE_XL_RELATIONSHIPS E @@ -269,6 +279,26 @@ Styles mapping + + + GET_COMMENT_ANCHOR + IO_COMMENT + E + Comment + + + RENDER_XML_DOCUMENT + IO_DOCUMENT + E + XML Doc as object + + + RENDER_XML_DOCUMENT + IV_DOCUMENT_AS_STRING + E + XML Doc as string + +