mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 19:16:10 +08:00
Header/footer images and comments together create wrong file destinations in sheet#.xml.rels (#1201)
* Update zcl_excel_writer_2007.clas.abap Fix #1214
This commit is contained in:
parent
191bf9cf61
commit
5cb47b143c
|
@ -145,8 +145,10 @@ CLASS zcl_excel_writer_2007 DEFINITION
|
||||||
METHODS create_xl_sheet_rels
|
METHODS create_xl_sheet_rels
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_worksheet TYPE REF TO zcl_excel_worksheet
|
!io_worksheet TYPE REF TO zcl_excel_worksheet
|
||||||
!iv_drawing_index TYPE i
|
!iv_drawing_index TYPE i OPTIONAL
|
||||||
!iv_comment_index TYPE i
|
!iv_comment_index TYPE i OPTIONAL
|
||||||
|
!iv_cmnt_vmlindex TYPE i OPTIONAL
|
||||||
|
!iv_hdft_vmlindex TYPE i OPTIONAL
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ep_content) TYPE xstring .
|
VALUE(ep_content) TYPE xstring .
|
||||||
METHODS create_xl_styles
|
METHODS create_xl_styles
|
||||||
|
@ -323,10 +325,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
lo_iterator TYPE REF TO zcl_excel_collection_iterator,
|
lo_iterator TYPE REF TO zcl_excel_collection_iterator,
|
||||||
lo_nested_iterator TYPE REF TO zcl_excel_collection_iterator,
|
lo_nested_iterator TYPE REF TO zcl_excel_collection_iterator,
|
||||||
lo_table TYPE REF TO zcl_excel_table,
|
lo_table TYPE REF TO zcl_excel_table,
|
||||||
lo_drawing TYPE REF TO zcl_excel_drawing,
|
lo_drawing TYPE REF TO zcl_excel_drawing.
|
||||||
lo_drawings TYPE REF TO zcl_excel_drawings,
|
|
||||||
lo_comment TYPE REF TO zcl_excel_comment, " (+) Issue #180
|
|
||||||
lo_comments TYPE REF TO zcl_excel_comments. " (+) Issue #180
|
|
||||||
|
|
||||||
DATA: lv_content TYPE xstring,
|
DATA: lv_content TYPE xstring,
|
||||||
lv_active TYPE flag,
|
lv_active TYPE flag,
|
||||||
|
@ -339,8 +338,13 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
lv_index_str TYPE string,
|
lv_index_str TYPE string,
|
||||||
lv_value TYPE string,
|
lv_value TYPE string,
|
||||||
lv_sheet_index TYPE i,
|
lv_sheet_index TYPE i,
|
||||||
|
lv_drawing_counter TYPE i,
|
||||||
|
lv_comment_counter TYPE i,
|
||||||
|
lv_vml_counter TYPE i,
|
||||||
lv_drawing_index TYPE i,
|
lv_drawing_index TYPE i,
|
||||||
lv_comment_index TYPE i. " (+) Issue #180
|
lv_comment_index TYPE i, " (+) Issue #180
|
||||||
|
lv_cmnt_vmlindex TYPE i,
|
||||||
|
lv_hdft_vmlindex TYPE i.
|
||||||
|
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
|
|
||||||
|
@ -433,37 +437,44 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
|
|
||||||
* Begin - Add - Issue #180
|
* Begin - Add - Issue #180
|
||||||
* Add comments **********************************
|
* Add comments **********************************
|
||||||
lo_comments = lo_worksheet->get_comments( ).
|
IF lo_worksheet->get_comments( )->is_empty( ) = abap_false.
|
||||||
IF lo_comments->is_empty( ) = abap_false.
|
|
||||||
lv_comment_index = lv_comment_index + 1.
|
|
||||||
|
|
||||||
" Create comment itself
|
" Create comment itself
|
||||||
lv_content = me->create_xl_comments( lo_worksheet ).
|
ADD 1 TO lv_comment_counter.
|
||||||
lv_xl_comment = me->c_xl_comments.
|
lv_comment_index = lv_comment_counter.
|
||||||
lv_index_str = lv_comment_index.
|
lv_index_str = lv_comment_index.
|
||||||
CONDENSE lv_index_str NO-GAPS.
|
CONDENSE lv_index_str NO-GAPS.
|
||||||
|
|
||||||
|
lv_content = me->create_xl_comments( lo_worksheet ).
|
||||||
|
lv_xl_comment = me->c_xl_comments.
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_comment WITH lv_index_str.
|
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_comment WITH lv_index_str.
|
||||||
lo_zip->add( name = lv_xl_comment
|
lo_zip->add( name = lv_xl_comment
|
||||||
content = lv_content ).
|
content = lv_content ).
|
||||||
|
|
||||||
" Create vmlDrawing that will host the comment
|
" Create vmlDrawing that will host the comment
|
||||||
|
ADD 1 TO lv_vml_counter.
|
||||||
|
lv_cmnt_vmlindex = lv_vml_counter.
|
||||||
|
lv_index_str = lv_cmnt_vmlindex.
|
||||||
|
CONDENSE lv_index_str NO-GAPS.
|
||||||
|
|
||||||
lv_content = me->create_xl_drawing_for_comments( lo_worksheet ).
|
lv_content = me->create_xl_drawing_for_comments( lo_worksheet ).
|
||||||
lv_xl_drawing_for_comment = me->cl_xl_drawing_for_comments.
|
lv_xl_drawing_for_comment = me->cl_xl_drawing_for_comments.
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_for_comment WITH lv_index_str.
|
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_for_comment WITH lv_index_str.
|
||||||
lo_zip->add( name = lv_xl_drawing_for_comment
|
lo_zip->add( name = lv_xl_drawing_for_comment
|
||||||
content = lv_content ).
|
content = lv_content ).
|
||||||
|
ELSE.
|
||||||
|
CLEAR: lv_comment_index, lv_cmnt_vmlindex.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
* End - Add - Issue #180
|
* End - Add - Issue #180
|
||||||
|
|
||||||
* Add drawings **********************************
|
* Add drawings **********************************
|
||||||
lo_drawings = lo_worksheet->get_drawings( ).
|
IF lo_worksheet->get_drawings( )->is_empty( ) = abap_false.
|
||||||
IF lo_drawings->is_empty( ) = abap_false.
|
ADD 1 TO lv_drawing_counter.
|
||||||
lv_drawing_index = lv_drawing_index + 1.
|
lv_drawing_index = lv_drawing_counter.
|
||||||
|
lv_index_str = lv_drawing_index.
|
||||||
|
CONDENSE lv_index_str NO-GAPS.
|
||||||
|
|
||||||
lv_content = me->create_xl_drawings( lo_worksheet ).
|
lv_content = me->create_xl_drawings( lo_worksheet ).
|
||||||
lv_xl_drawing = me->c_xl_drawings.
|
lv_xl_drawing = me->c_xl_drawings.
|
||||||
lv_index_str = lv_drawing_index.
|
|
||||||
CONDENSE lv_index_str NO-GAPS.
|
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing WITH lv_index_str.
|
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing WITH lv_index_str.
|
||||||
lo_zip->add( name = lv_xl_drawing
|
lo_zip->add( name = lv_xl_drawing
|
||||||
content = lv_content ).
|
content = lv_content ).
|
||||||
|
@ -473,15 +484,15 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str.
|
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str.
|
||||||
lo_zip->add( name = lv_xl_drawing_rels
|
lo_zip->add( name = lv_xl_drawing_rels
|
||||||
content = lv_content ).
|
content = lv_content ).
|
||||||
|
ELSE.
|
||||||
|
CLEAR lv_drawing_index.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
* Add Header/Footer image
|
* Add Header/Footer image
|
||||||
DATA: lt_drawings TYPE zexcel_t_drawings.
|
IF lines( lo_worksheet->get_header_footer_drawings( ) ) > 0. "Header or footer image exist
|
||||||
lt_drawings = lo_worksheet->get_header_footer_drawings( ).
|
ADD 1 TO lv_vml_counter.
|
||||||
IF lines( lt_drawings ) > 0. "Header or footer image exist
|
lv_hdft_vmlindex = lv_vml_counter.
|
||||||
|
lv_index_str = lv_hdft_vmlindex.
|
||||||
lv_comment_index = lv_comment_index + 1.
|
|
||||||
lv_index_str = lv_comment_index.
|
|
||||||
CONDENSE lv_index_str NO-GAPS.
|
CONDENSE lv_index_str NO-GAPS.
|
||||||
|
|
||||||
" Create vmlDrawing that will host the image
|
" Create vmlDrawing that will host the image
|
||||||
|
@ -497,13 +508,17 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str.
|
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str.
|
||||||
lo_zip->add( name = lv_xl_drawing_rels
|
lo_zip->add( name = lv_xl_drawing_rels
|
||||||
content = lv_content ).
|
content = lv_content ).
|
||||||
|
ELSE.
|
||||||
|
CLEAR lv_hdft_vmlindex.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
|
||||||
lv_xl_sheet_rels = me->c_xl_sheet_rels.
|
lv_xl_sheet_rels = me->c_xl_sheet_rels.
|
||||||
lv_content = me->create_xl_sheet_rels( io_worksheet = lo_worksheet
|
lv_content = me->create_xl_sheet_rels( io_worksheet = lo_worksheet
|
||||||
iv_drawing_index = lv_drawing_index
|
iv_drawing_index = lv_drawing_index
|
||||||
iv_comment_index = lv_comment_index ). " (+) Issue #180
|
iv_comment_index = lv_comment_index " (+) Issue #180
|
||||||
|
iv_cmnt_vmlindex = lv_cmnt_vmlindex
|
||||||
|
iv_hdft_vmlindex = lv_hdft_vmlindex ).
|
||||||
|
|
||||||
lv_index_str = lv_sheet_index.
|
lv_index_str = lv_sheet_index.
|
||||||
CONDENSE lv_index_str NO-GAPS.
|
CONDENSE lv_index_str NO-GAPS.
|
||||||
|
@ -3990,8 +4005,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lv_value TYPE string,
|
DATA: lv_value TYPE string,
|
||||||
lv_relation_id TYPE i,
|
lv_relation_id TYPE i,
|
||||||
lv_index_str TYPE string,
|
lv_index_str TYPE string.
|
||||||
lv_comment_index TYPE i.
|
|
||||||
|
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
* STEP 1: Create [Content_Types].xml into the root of the ZIP
|
* STEP 1: Create [Content_Types].xml into the root of the ZIP
|
||||||
|
@ -4035,10 +4049,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
ENDWHILE.
|
ENDWHILE.
|
||||||
|
|
||||||
* drawing
|
* drawing
|
||||||
DATA: lo_drawings TYPE REF TO zcl_excel_drawings.
|
IF iv_drawing_index > 0.
|
||||||
|
|
||||||
lo_drawings = io_worksheet->get_drawings( ).
|
|
||||||
IF lo_drawings->is_empty( ) = abap_false.
|
|
||||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
||||||
parent = lo_document ).
|
parent = lo_document ).
|
||||||
ADD 1 TO lv_relation_id.
|
ADD 1 TO lv_relation_id.
|
||||||
|
@ -4062,18 +4073,11 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
* Begin - Add - Issue #180
|
* Begin - Add - Issue #180
|
||||||
DATA: lo_comments TYPE REF TO zcl_excel_comments.
|
IF iv_cmnt_vmlindex > 0 AND iv_comment_index > 0.
|
||||||
|
|
||||||
lv_comment_index = iv_comment_index.
|
|
||||||
|
|
||||||
lo_comments = io_worksheet->get_comments( ).
|
|
||||||
IF lo_comments->is_empty( ) = abap_false.
|
|
||||||
" Drawing for comment
|
" Drawing for comment
|
||||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
||||||
parent = lo_document ).
|
parent = lo_document ).
|
||||||
|
|
||||||
ADD 1 TO lv_relation_id.
|
ADD 1 TO lv_relation_id.
|
||||||
ADD 1 TO lv_comment_index.
|
|
||||||
|
|
||||||
lv_value = lv_relation_id.
|
lv_value = lv_relation_id.
|
||||||
CONDENSE lv_value.
|
CONDENSE lv_value.
|
||||||
|
@ -4083,7 +4087,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
lo_element->set_attribute_ns( name = lc_xml_attr_type
|
lo_element->set_attribute_ns( name = lc_xml_attr_type
|
||||||
value = lc_xml_node_rid_drawing_cmt_tp ).
|
value = lc_xml_node_rid_drawing_cmt_tp ).
|
||||||
|
|
||||||
lv_index_str = iv_comment_index.
|
lv_index_str = iv_cmnt_vmlindex.
|
||||||
CONDENSE lv_index_str NO-GAPS.
|
CONDENSE lv_index_str NO-GAPS.
|
||||||
lv_value = me->cl_xl_drawing_for_comments.
|
lv_value = me->cl_xl_drawing_for_comments.
|
||||||
REPLACE 'xl' WITH '..' INTO lv_value.
|
REPLACE 'xl' WITH '..' INTO lv_value.
|
||||||
|
@ -4118,13 +4122,12 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
|
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
* header footer image
|
* header footer image
|
||||||
DATA: lt_drawings TYPE zexcel_t_drawings.
|
IF iv_hdft_vmlindex > 0. "Header or footer image exist
|
||||||
lt_drawings = io_worksheet->get_header_footer_drawings( ).
|
|
||||||
IF lines( lt_drawings ) > 0. "Header or footer image exist
|
|
||||||
ADD 1 TO lv_relation_id.
|
|
||||||
" Drawing for comment/header/footer
|
" Drawing for comment/header/footer
|
||||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
||||||
parent = lo_document ).
|
parent = lo_document ).
|
||||||
|
ADD 1 TO lv_relation_id.
|
||||||
|
|
||||||
lv_value = lv_relation_id.
|
lv_value = lv_relation_id.
|
||||||
CONDENSE lv_value.
|
CONDENSE lv_value.
|
||||||
CONCATENATE 'rId' lv_value INTO lv_value.
|
CONCATENATE 'rId' lv_value INTO lv_value.
|
||||||
|
@ -4133,7 +4136,7 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION.
|
||||||
lo_element->set_attribute_ns( name = lc_xml_attr_type
|
lo_element->set_attribute_ns( name = lc_xml_attr_type
|
||||||
value = lc_xml_node_rid_drawing_cmt_tp ).
|
value = lc_xml_node_rid_drawing_cmt_tp ).
|
||||||
|
|
||||||
lv_index_str = lv_comment_index.
|
lv_index_str = iv_hdft_vmlindex.
|
||||||
CONDENSE lv_index_str NO-GAPS.
|
CONDENSE lv_index_str NO-GAPS.
|
||||||
lv_value = me->cl_xl_drawing_for_comments.
|
lv_value = me->cl_xl_drawing_for_comments.
|
||||||
REPLACE 'xl' WITH '..' INTO lv_value.
|
REPLACE 'xl' WITH '..' INTO lv_value.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user