mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 05:12:03 +08:00
* Read UTF-8 input file correctly * Classes for cell coments As contributed by guillaumegarcia13 * Support for comments (Issue #180) As contributed by guillaumegarcia13
This commit is contained in:
parent
f06d074592
commit
aaad50440d
|
@ -21,6 +21,9 @@ public section.
|
|||
value(RO_AUTOFILTER) type ref to ZCL_EXCEL_AUTOFILTER
|
||||
raising
|
||||
ZCX_EXCEL .
|
||||
methods ADD_NEW_COMMENT
|
||||
returning
|
||||
value(EO_COMMENT) type ref to ZCL_EXCEL_COMMENT .
|
||||
methods ADD_NEW_DRAWING
|
||||
importing
|
||||
!IP_TYPE type ZEXCEL_DRAWING_TYPE default ZCL_EXCEL_DRAWING=>TYPE_IMAGE
|
||||
|
@ -160,6 +163,7 @@ private section.
|
|||
data T_STYLEMAPPING1 type ZEXCEL_T_STYLEMAPPING1 .
|
||||
data T_STYLEMAPPING2 type ZEXCEL_T_STYLEMAPPING2 .
|
||||
data THEME type ref to ZCL_EXCEL_THEME .
|
||||
data COMMENTS type ref to ZCL_EXCEL_COMMENTS .
|
||||
|
||||
methods GET_STYLE_FROM_GUID
|
||||
importing
|
||||
|
@ -184,6 +188,13 @@ METHOD add_new_autofilter.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD add_new_comment.
|
||||
CREATE OBJECT eo_comment.
|
||||
|
||||
comments->add( eo_comment ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method ADD_NEW_DRAWING.
|
||||
* Create default blank worksheet
|
||||
CREATE OBJECT eo_drawing
|
||||
|
@ -276,6 +287,7 @@ method CONSTRUCTOR.
|
|||
CREATE OBJECT charts
|
||||
EXPORTING
|
||||
ip_type = zcl_excel_drawing=>type_chart.
|
||||
CREATE OBJECT comments.
|
||||
CREATE OBJECT legacy_palette.
|
||||
CREATE OBJECT autofilters.
|
||||
|
||||
|
|
71
src/zcl_excel_comment.clas.abap
Normal file
71
src/zcl_excel_comment.clas.abap
Normal file
|
@ -0,0 +1,71 @@
|
|||
class ZCL_EXCEL_COMMENT definition
|
||||
public
|
||||
final
|
||||
create public .
|
||||
|
||||
public section.
|
||||
type-pools ABAP .
|
||||
|
||||
methods CONSTRUCTOR .
|
||||
methods GET_NAME
|
||||
returning
|
||||
value(R_NAME) type STRING .
|
||||
methods GET_INDEX
|
||||
returning
|
||||
value(RP_INDEX) type STRING .
|
||||
methods GET_REF
|
||||
returning
|
||||
value(RP_REF) type STRING .
|
||||
methods GET_TEXT
|
||||
returning
|
||||
value(RP_TEXT) type STRING .
|
||||
methods SET_TEXT
|
||||
importing
|
||||
!IP_TEXT type STRING
|
||||
!IP_REF type STRING optional .
|
||||
protected section.
|
||||
private section.
|
||||
|
||||
data INDEX type STRING .
|
||||
data REF type STRING .
|
||||
data TEXT type STRING .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_EXCEL_COMMENT IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_index.
|
||||
rp_index = me->index.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_ref.
|
||||
rp_ref = me->ref.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method GET_TEXT.
|
||||
rp_text = me->text.
|
||||
endmethod.
|
||||
|
||||
|
||||
METHOD set_text.
|
||||
me->text = ip_text.
|
||||
|
||||
IF ip_ref IS SUPPLIED.
|
||||
me->ref = ip_ref.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
67
src/zcl_excel_comment.clas.xml
Normal file
67
src/zcl_excel_comment.clas.xml
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Comment</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
<DESCRIPTIONS>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>CONSTRUCTOR</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>CONSTRUCTOR</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>GET_INDEX</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Get index</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>GET_REF</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Get reference</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>GET_TEXT</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Get text</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>INDEX</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Index in collection</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>REF</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Reference to cell (eg. 'B13')</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>SET_TEXT</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Set text</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENT</CLSNAME>
|
||||
<CMPNAME>TEXT</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Comment</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
</DESCRIPTIONS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
100
src/zcl_excel_comments.clas.abap
Normal file
100
src/zcl_excel_comments.clas.abap
Normal file
|
@ -0,0 +1,100 @@
|
|||
class ZCL_EXCEL_COMMENTS definition
|
||||
public
|
||||
final
|
||||
create public .
|
||||
|
||||
public section.
|
||||
|
||||
methods ADD
|
||||
importing
|
||||
!IP_COMMENT type ref to ZCL_EXCEL_COMMENT .
|
||||
methods INCLUDE
|
||||
importing
|
||||
!IP_COMMENT type ref to ZCL_EXCEL_COMMENT .
|
||||
methods CLEAR .
|
||||
methods CONSTRUCTOR .
|
||||
methods GET
|
||||
importing
|
||||
!IP_INDEX type ZEXCEL_ACTIVE_WORKSHEET
|
||||
returning
|
||||
value(EO_COMMENT) type ref to ZCL_EXCEL_COMMENT .
|
||||
methods GET_ITERATOR
|
||||
returning
|
||||
value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR .
|
||||
methods IS_EMPTY
|
||||
returning
|
||||
value(IS_EMPTY) type FLAG .
|
||||
methods REMOVE
|
||||
importing
|
||||
!IP_COMMENT type ref to ZCL_EXCEL_COMMENT .
|
||||
methods SIZE
|
||||
returning
|
||||
value(EP_SIZE) type I .
|
||||
protected section.
|
||||
private section.
|
||||
|
||||
data COMMENTS type ref to CL_OBJECT_COLLECTION .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_EXCEL_COMMENTS IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add.
|
||||
DATA: lv_index TYPE i.
|
||||
|
||||
comments->add( ip_comment ).
|
||||
lv_index = comments->if_object_collection~size( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD clear.
|
||||
comments->clear( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
CREATE OBJECT comments.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method GET.
|
||||
DATA lv_index TYPE i.
|
||||
lv_index = ip_index.
|
||||
eo_comment ?= comments->if_object_collection~get( lv_index ).
|
||||
|
||||
endmethod.
|
||||
|
||||
|
||||
method GET_ITERATOR.
|
||||
|
||||
eo_iterator ?= comments->if_object_collection~get_iterator( ).
|
||||
endmethod.
|
||||
|
||||
|
||||
METHOD include.
|
||||
comments->add( ip_comment ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method IS_EMPTY.
|
||||
|
||||
is_empty = comments->if_object_collection~is_empty( ).
|
||||
endmethod.
|
||||
|
||||
|
||||
method REMOVE.
|
||||
|
||||
comments->remove( ip_comment ).
|
||||
endmethod.
|
||||
|
||||
|
||||
method SIZE.
|
||||
|
||||
ep_size = comments->if_object_collection~size( ).
|
||||
endmethod.
|
||||
ENDCLASS.
|
73
src/zcl_excel_comments.clas.xml
Normal file
73
src/zcl_excel_comments.clas.xml
Normal file
|
@ -0,0 +1,73 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Comments collection</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
<DESCRIPTIONS>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>ADD</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Adds an Element to the Collection</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>CLEAR</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Initializes the Collection</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>CONSTRUCTOR</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>CONSTRUCTOR</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>GET</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Gets Element</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>GET_ITERATOR</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Returns an iterator</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>INCLUDE</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Adds an Element to the Collection</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>IS_EMPTY</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Checks whether elements are contained</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>REMOVE</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Deletes an Element from the Collection</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_COMMENTS</CLSNAME>
|
||||
<CMPNAME>SIZE</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Specifies number of contained elements</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
</DESCRIPTIONS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -33,6 +33,9 @@ class ZCL_EXCEL_WORKSHEET definition
|
|||
data STYLES type ZEXCEL_T_SHEET_STYLE .
|
||||
data TABCOLOR type ZEXCEL_S_TABCOLOR read-only .
|
||||
|
||||
methods ADD_COMMENT
|
||||
importing
|
||||
!IP_COMMENT type ref to ZCL_EXCEL_COMMENT .
|
||||
methods ADD_DRAWING
|
||||
importing
|
||||
!IP_DRAWING type ref to ZCL_EXCEL_DRAWING .
|
||||
|
@ -293,11 +296,17 @@ class ZCL_EXCEL_WORKSHEET definition
|
|||
value(EP_DIMENSION_RANGE) type STRING
|
||||
raising
|
||||
ZCX_EXCEL .
|
||||
methods GET_COMMENTS
|
||||
returning
|
||||
value(R_COMMENTS) type ref to ZCL_EXCEL_COMMENTS .
|
||||
methods GET_DRAWINGS
|
||||
importing
|
||||
!IP_TYPE type ZEXCEL_DRAWING_TYPE optional
|
||||
returning
|
||||
value(R_DRAWINGS) type ref to ZCL_EXCEL_DRAWINGS .
|
||||
methods GET_COMMENTS_ITERATOR
|
||||
returning
|
||||
value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR .
|
||||
methods GET_DRAWINGS_ITERATOR
|
||||
importing
|
||||
!IP_TYPE type ZEXCEL_DRAWING_TYPE
|
||||
|
@ -575,6 +584,7 @@ methods SET_AREA_STYLE
|
|||
data DATA_VALIDATIONS type ref to ZCL_EXCEL_DATA_VALIDATIONS .
|
||||
data DEFAULT_EXCEL_DATE_FORMAT type ZEXCEL_NUMBER_FORMAT .
|
||||
data DEFAULT_EXCEL_TIME_FORMAT type ZEXCEL_NUMBER_FORMAT .
|
||||
data COMMENTS type ref to ZCL_EXCEL_COMMENTS .
|
||||
data DRAWINGS type ref to ZCL_EXCEL_DRAWINGS .
|
||||
data FREEZE_PANE_CELL_COLUMN type ZEXCEL_CELL_COLUMN .
|
||||
data FREEZE_PANE_CELL_ROW type ZEXCEL_CELL_ROW .
|
||||
|
@ -623,6 +633,11 @@ ENDCLASS.
|
|||
CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add_comment.
|
||||
comments->include( ip_comment ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method ADD_DRAWING.
|
||||
case IP_DRAWING->GET_TYPE( ).
|
||||
when ZCL_EXCEL_DRAWING=>TYPE_IMAGE.
|
||||
|
@ -3724,6 +3739,7 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
ME->ZIF_EXCEL_SHEET_PROTECTION~INITIALIZE( ).
|
||||
ME->ZIF_EXCEL_SHEET_PROPERTIES~INITIALIZE( ).
|
||||
create object HYPERLINKS.
|
||||
CREATE OBJECT comments. " (+) Issue #180
|
||||
|
||||
* initialize active cell coordinates
|
||||
ACTIVE_CELL-CELL_ROW = 1.
|
||||
|
@ -3900,6 +3916,27 @@ CLASS ZCL_EXCEL_WORKSHEET IMPLEMENTATION.
|
|||
endmethod.
|
||||
|
||||
|
||||
METHOD get_comments.
|
||||
DATA: lo_comment TYPE REF TO zcl_excel_comment,
|
||||
lo_iterator TYPE REF TO cl_object_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.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_comments_iterator.
|
||||
eo_iterator = comments->get_iterator( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method GET_DATA_VALIDATIONS_ITERATOR.
|
||||
|
||||
EO_ITERATOR = ME->DATA_VALIDATIONS->GET_ITERATOR( ).
|
||||
|
|
|
@ -31,6 +31,8 @@ protected section.
|
|||
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.
|
||||
|
||||
methods CREATE_XL_SHEET_SHEET_DATA
|
||||
importing
|
||||
|
@ -71,6 +73,11 @@ protected section.
|
|||
!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
|
||||
|
@ -88,6 +95,11 @@ protected section.
|
|||
!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 .
|
||||
methods CREATE_XL_RELATIONSHIPS
|
||||
returning
|
||||
value(EP_CONTENT) type XSTRING .
|
||||
|
@ -113,6 +125,7 @@ protected section.
|
|||
importing
|
||||
!IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET
|
||||
!IV_DRAWING_INDEX type I
|
||||
!IV_COMMENT_INDEX type I
|
||||
returning
|
||||
value(EP_CONTENT) type XSTRING .
|
||||
methods CREATE_XL_STYLES
|
||||
|
@ -181,17 +194,23 @@ method CREATE.
|
|||
lo_nested_iterator TYPE REF TO cl_object_collection_iterator,
|
||||
lo_table TYPE REF TO zcl_excel_table,
|
||||
lo_drawing TYPE REF TO zcl_excel_drawing,
|
||||
lo_drawings TYPE REF TO zcl_excel_drawings.
|
||||
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,
|
||||
lv_active TYPE flag,
|
||||
lv_xl_sheet TYPE string,
|
||||
lv_xl_sheet_rels TYPE string,
|
||||
lv_xl_drawing TYPE string,
|
||||
lv_xl_drawing_rels TYPE string,
|
||||
lv_syindex TYPE string,
|
||||
lv_value TYPE string,
|
||||
lv_drawing_index TYPE i.
|
||||
DATA: lv_content TYPE xstring,
|
||||
lv_active TYPE flag,
|
||||
lv_xl_sheet TYPE string,
|
||||
lv_xl_sheet_rels TYPE string,
|
||||
lv_xl_drawing_for_comment TYPE string, " (+) Issue #180
|
||||
lv_xl_comment TYPE string, " (+) Issue #180
|
||||
lv_xl_comment_rels TYPE string, " (+) Issue #180
|
||||
lv_xl_drawing TYPE string,
|
||||
lv_xl_drawing_rels TYPE string,
|
||||
lv_syindex TYPE string,
|
||||
lv_value TYPE string,
|
||||
lv_drawing_index TYPE i,
|
||||
lv_comment_index TYPE i. " (+) Issue #180
|
||||
|
||||
**********************************************************************
|
||||
* Start of insertion # issue 139 - Dateretention of cellstyles
|
||||
|
@ -262,6 +281,7 @@ method CREATE.
|
|||
lo_iterator = me->excel->get_worksheets_iterator( ).
|
||||
lo_active_worksheet = me->excel->get_active_worksheet( ).
|
||||
lv_drawing_index = 1.
|
||||
lv_comment_index = 1. " (+) Issue #180
|
||||
|
||||
WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true.
|
||||
lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ).
|
||||
|
@ -273,7 +293,8 @@ method CREATE.
|
|||
lv_content = me->create_xl_sheet( io_worksheet = lo_worksheet
|
||||
iv_active = lv_active ).
|
||||
lv_xl_sheet = me->c_xl_sheet.
|
||||
MOVE sy-index TO lv_syindex.
|
||||
MOVE sy-index TO: lv_syindex,
|
||||
lv_comment_index. " (+) Issue #180
|
||||
SHIFT lv_syindex RIGHT DELETING TRAILING space.
|
||||
SHIFT lv_syindex LEFT DELETING LEADING space.
|
||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet WITH lv_syindex.
|
||||
|
@ -282,7 +303,8 @@ method CREATE.
|
|||
|
||||
lv_xl_sheet_rels = me->c_xl_sheet_rels.
|
||||
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
|
||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet_rels WITH lv_syindex.
|
||||
lo_zip->add( name = lv_xl_sheet_rels
|
||||
content = lv_content ).
|
||||
|
@ -299,6 +321,30 @@ method CREATE.
|
|||
content = lv_content ).
|
||||
ENDWHILE.
|
||||
|
||||
* Begin - Add - Issue #180
|
||||
* Add comments **********************************
|
||||
lo_comments = lo_worksheet->get_comments( ).
|
||||
IF lo_comments->is_empty( ) = abap_false.
|
||||
MOVE lv_comment_index TO lv_syindex.
|
||||
SHIFT lv_syindex RIGHT DELETING TRAILING space.
|
||||
SHIFT lv_syindex LEFT DELETING LEADING space.
|
||||
|
||||
" Create comment itself
|
||||
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_syindex.
|
||||
lo_zip->add( name = lv_xl_comment
|
||||
content = lv_content ).
|
||||
|
||||
" Create vmlDrawing that will host the comment
|
||||
lv_content = me->create_xl_drawing_for_comments( lo_worksheet ).
|
||||
lv_xl_drawing_for_comment = me->cl_xl_drawing_for_comments.
|
||||
REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_for_comment WITH lv_syindex.
|
||||
lo_zip->add( name = lv_xl_drawing_for_comment
|
||||
content = lv_content ).
|
||||
ENDIF.
|
||||
* End - Add - Issue #180
|
||||
|
||||
* Add drawings **********************************
|
||||
lo_drawings = lo_worksheet->get_drawings( ).
|
||||
IF lo_drawings->is_empty( ) = abap_false.
|
||||
|
@ -385,6 +431,7 @@ method CREATE_CONTENT_TYPES.
|
|||
" Node extension
|
||||
lc_xml_node_rels_ext TYPE string VALUE 'rels',
|
||||
lc_xml_node_xml_ext TYPE string VALUE 'xml',
|
||||
lc_xml_node_xml_vml TYPE string VALUE 'vml', " (+) GGAR
|
||||
" Node partnumber
|
||||
lc_xml_node_theme_pn TYPE string VALUE '/xl/theme/theme1.xml',
|
||||
lc_xml_node_styles_pn TYPE string VALUE '/xl/styles.xml',
|
||||
|
@ -399,12 +446,14 @@ method CREATE_CONTENT_TYPES.
|
|||
lc_xml_node_styles_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',
|
||||
lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',
|
||||
lc_xml_node_rels_ct TYPE string VALUE 'application/vnd.openxmlformats-package.relationships+xml',
|
||||
lc_xml_node_vml_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.vmlDrawing',
|
||||
lc_xml_node_xml_ct TYPE string VALUE 'application/xml',
|
||||
lc_xml_node_props_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.extended-properties+xml',
|
||||
lc_xml_node_worksheet_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',
|
||||
lc_xml_node_strings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',
|
||||
lc_xml_node_core_ct TYPE string VALUE 'application/vnd.openxmlformats-package.core-properties+xml',
|
||||
lc_xml_node_table_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml',
|
||||
lc_xml_node_comments_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml', " (+) GGAR
|
||||
lc_xml_node_drawings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawing+xml',
|
||||
lc_xml_node_chart_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'.
|
||||
|
||||
|
@ -425,6 +474,7 @@ method CREATE_CONTENT_TYPES.
|
|||
lv_worksheets_numc TYPE numc3,
|
||||
lv_xml_node_worksheet_pn TYPE string,
|
||||
lv_value TYPE string,
|
||||
lv_comment_index TYPE i VALUE 1, " (+) GGAR
|
||||
lv_drawing_index TYPE i VALUE 1,
|
||||
lv_index_str TYPE string.
|
||||
|
||||
|
@ -468,6 +518,17 @@ method CREATE_CONTENT_TYPES.
|
|||
value = lc_xml_node_xml_ct ).
|
||||
lo_element_root->append_child( new_child = lo_element ).
|
||||
|
||||
* Begin - Add - GGAR
|
||||
" VML node (for comments)
|
||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_default
|
||||
parent = lo_document ).
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_extension
|
||||
value = lc_xml_node_xml_vml ).
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_contenttype
|
||||
value = lc_xml_node_vml_ct ).
|
||||
lo_element_root->append_child( new_child = lo_element ).
|
||||
* End - Add - GGAR
|
||||
|
||||
" Theme node
|
||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_override
|
||||
parent = lo_document ).
|
||||
|
@ -542,6 +603,29 @@ method CREATE_CONTENT_TYPES.
|
|||
lo_element_root->append_child( new_child = lo_element ).
|
||||
ENDWHILE.
|
||||
|
||||
* Begin - Add - GGAR
|
||||
" Comments
|
||||
DATA: lo_comments TYPE REF TO zcl_excel_comments.
|
||||
|
||||
lo_comments = lo_worksheet->get_comments( ).
|
||||
IF lo_comments->is_empty( ) = abap_false.
|
||||
lv_index_str = lv_comment_index.
|
||||
CONDENSE lv_index_str NO-GAPS.
|
||||
CONCATENATE '/' me->c_xl_comments INTO lv_value.
|
||||
REPLACE '#' WITH lv_index_str INTO lv_value.
|
||||
|
||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_override
|
||||
parent = lo_document ).
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_partname
|
||||
value = lv_value ).
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_contenttype
|
||||
value = lc_xml_node_comments_ct ).
|
||||
lo_element_root->append_child( new_child = lo_element ).
|
||||
|
||||
ADD 1 TO lv_comment_index.
|
||||
ENDIF.
|
||||
* End - Add - GGAR
|
||||
|
||||
" Drawings
|
||||
DATA: lo_drawings TYPE REF TO zcl_excel_drawings.
|
||||
|
||||
|
@ -2162,6 +2246,172 @@ METHOD create_xl_charts.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
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_ixml TYPE REF TO if_ixml,
|
||||
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_encoding TYPE REF TO if_ixml_encoding,
|
||||
lo_streamfactory TYPE REF TO if_ixml_stream_factory,
|
||||
lo_ostream TYPE REF TO if_ixml_ostream,
|
||||
lo_renderer TYPE REF TO if_ixml_renderer,
|
||||
lo_iterator TYPE REF TO cl_object_collection_iterator,
|
||||
lo_comments TYPE REF TO zcl_excel_comments,
|
||||
lo_comment TYPE REF TO zcl_excel_comment.
|
||||
DATA: lv_rel_id TYPE i.
|
||||
|
||||
DEFINE add_1_val_child_node.
|
||||
* &1: parent element
|
||||
* &2: child element
|
||||
* &3: element name
|
||||
* &4: attribute name
|
||||
* &5: attribute value
|
||||
|
||||
&2 = lo_document->create_simple_element( name = &3
|
||||
parent = lo_document ).
|
||||
IF &4 IS NOT INITIAL.
|
||||
&2->set_attribute_ns( name = &4
|
||||
value = &5 ).
|
||||
ENDIF.
|
||||
&1->append_child( new_child = &2 ).
|
||||
END-OF-DEFINITION.
|
||||
|
||||
|
||||
**********************************************************************
|
||||
* STEP 1: Create [Content_Types].xml into the root of the ZIP
|
||||
lo_ixml = cl_ixml=>create( ).
|
||||
|
||||
**********************************************************************
|
||||
* STEP 2: Set document attributes
|
||||
lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian
|
||||
character_set = 'utf-8' ).
|
||||
lo_document = lo_ixml->create_document( ).
|
||||
lo_document->set_encoding( lo_encoding ).
|
||||
lo_document->set_standalone( abap_true ).
|
||||
|
||||
***********************************************************************
|
||||
* STEP 3: Create main node relationships
|
||||
lo_element_root = lo_document->create_simple_element( name = lc_xml_node_comments
|
||||
parent = lo_document ).
|
||||
lo_element_root->set_attribute_ns( name = 'xmlns'
|
||||
value = lc_xml_node_ns ).
|
||||
|
||||
**********************************************************************
|
||||
* 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_author = lo_document->create_simple_element( name = lc_xml_node_author
|
||||
parent = lo_document ).
|
||||
lo_element_author->set_value( |{ sy-uname }| ).
|
||||
|
||||
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_comments = io_worksheet->get_comments( ).
|
||||
|
||||
lo_iterator = lo_comments->get_iterator( ).
|
||||
WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true.
|
||||
lo_comment ?= lo_iterator->if_object_collection_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
|
||||
value = lo_comment->get_ref( ) ).
|
||||
lo_element_comment->set_attribute_ns( name = lc_xml_attr_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_b = lo_document->create_simple_element( name = lc_xml_node_b
|
||||
parent = lo_document ).
|
||||
lo_element_rpr->append_child( new_child = lo_element_b ).
|
||||
|
||||
add_1_val_child_node lo_element_rpr: lo_element_sz lc_xml_node_sz lc_xml_attr_val '9',
|
||||
lo_element_color lc_xml_node_color lc_xml_attr_indexed '81',
|
||||
lo_element_rfont lc_xml_node_rfont lc_xml_attr_val 'Tahoma',
|
||||
lo_element_family lc_xml_node_family lc_xml_attr_val '2'
|
||||
* lo_element_charset lc_xml_node_charset lc_xml_attr_val '1'
|
||||
.
|
||||
|
||||
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_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
|
||||
lo_streamfactory = lo_ixml->create_stream_factory( ).
|
||||
lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ).
|
||||
lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ).
|
||||
lo_renderer->render( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method CREATE_XL_DRAWINGS.
|
||||
|
||||
|
||||
|
@ -2638,6 +2888,266 @@ method CREATE_XL_DRAWING_ANCHOR.
|
|||
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'.
|
||||
|
||||
|
||||
DATA: lo_ixml TYPE REF TO if_ixml,
|
||||
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_encoding TYPE REF TO if_ixml_encoding,
|
||||
lo_streamfactory TYPE REF TO if_ixml_stream_factory,
|
||||
lo_ostream TYPE REF TO if_ixml_ostream,
|
||||
lo_renderer TYPE REF TO if_ixml_renderer,
|
||||
lo_iterator TYPE REF TO cl_object_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.
|
||||
DATA: lv_rel_id TYPE i.
|
||||
|
||||
DEFINE add_1_val_child_node.
|
||||
* &1: parent element
|
||||
* &2: child element
|
||||
* &3: element name
|
||||
* &4: attribute name
|
||||
* &5: attribute value
|
||||
|
||||
&2 = lo_document->create_simple_element( name = &3
|
||||
parent = lo_document ).
|
||||
IF &4 IS NOT INITIAL.
|
||||
&2->set_attribute_ns( name = &4
|
||||
value = &5 ).
|
||||
ENDIF.
|
||||
&1->append_child( new_child = &2 ).
|
||||
END-OF-DEFINITION.
|
||||
|
||||
|
||||
**********************************************************************
|
||||
* STEP 1: Create XML document
|
||||
lo_ixml = cl_ixml=>create( ).
|
||||
lo_document = lo_ixml->create_document( ).
|
||||
|
||||
***********************************************************************
|
||||
* 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 ),
|
||||
name = 'xmlns:o' value = lc_xml_node_ns_o ),
|
||||
name = 'xmlns:x' value = lc_xml_node_ns_x ).
|
||||
|
||||
**********************************************************************
|
||||
* 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->set_attribute_ns( name = lc_xml_attr_vext
|
||||
value = lc_xml_attr_val_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 ),
|
||||
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 ).
|
||||
|
||||
**********************************************************************
|
||||
* STEP 4: Create v:shapetype
|
||||
|
||||
lo_element_shapetype = lo_document->create_simple_element( name = lc_xml_node_shapetype
|
||||
parent = lo_document ).
|
||||
|
||||
lo_element_shapetype->set_attribute_ns( : name = lc_xml_attr_id value = '_x0000_t202' ),
|
||||
name = lc_xml_attr_coordsize value = '21600,21600' ),
|
||||
name = lc_xml_attr_ospt value = '202' ),
|
||||
name = lc_xml_attr_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_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 ),
|
||||
name = lc_xml_attr_oconnecttype value = lc_xml_attr_val_rect ).
|
||||
|
||||
lo_element_shapetype->append_child( : new_child = lo_element_stroke ),
|
||||
new_child = lo_element_path ).
|
||||
|
||||
lo_element_root->append_child( new_child = lo_element_shapetype ).
|
||||
|
||||
**********************************************************************
|
||||
* STEP 4: Create v:shapetype
|
||||
|
||||
lo_comments = io_worksheet->get_comments( ).
|
||||
|
||||
lo_iterator = lo_comments->get_iterator( ).
|
||||
WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true.
|
||||
lv_index = sy-index.
|
||||
lo_comment ?= lo_iterator->if_object_collection_iterator~get_next( ).
|
||||
|
||||
zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING i_columnrow = lo_comment->get_ref( )
|
||||
IMPORTING e_column = lv_str_column
|
||||
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->set_attribute_ns( : name = lc_xml_attr_id value = |_x0000_s{ 1024 + lv_index }| ),
|
||||
name = lc_xml_attr_type value = '#_x0000_t202' ),
|
||||
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' ),
|
||||
name = lc_xml_attr_fillcolor value = '#ffffe1' ),
|
||||
name = lc_xml_attr_oinsetmode value = lc_xml_attr_val_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 ).
|
||||
" 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 ),
|
||||
name = lc_xml_attr_color value = lc_xml_attr_val_black ),
|
||||
name = lc_xml_attr_obscured value = lc_xml_attr_val_t ).
|
||||
lo_element_shape->append_child( new_child = lo_element_shadow ).
|
||||
" 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 ).
|
||||
" 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 ).
|
||||
" 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_anchor->set_value( '2, 15, 11, 10, 4, 31, 15, 9' ).
|
||||
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_row->set_value( '12' ).
|
||||
lo_element_row->set_value( |{ lv_row - 1 }| ).
|
||||
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->set_value( '1' ).
|
||||
lo_element_column->set_value( |{ lv_column - 1 }| ).
|
||||
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
|
||||
lo_streamfactory = lo_ixml->create_stream_factory( ).
|
||||
lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ).
|
||||
lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ).
|
||||
lo_renderer->render( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
method CREATE_XL_RELATIONSHIPS.
|
||||
|
||||
|
||||
|
@ -2976,6 +3486,7 @@ METHOD create_xl_sheet.
|
|||
lc_xml_node_mergecell TYPE string VALUE 'mergeCell',
|
||||
lc_xml_node_mergecells TYPE string VALUE 'mergeCells',
|
||||
lc_xml_node_drawing TYPE string VALUE 'drawing',
|
||||
lc_xml_node_drawing_for_cmt TYPE string VALUE 'legacyDrawing',
|
||||
lc_xml_node_headerfooter TYPE string VALUE 'headerFooter',
|
||||
lc_xml_node_oddheader TYPE string VALUE 'oddHeader',
|
||||
lc_xml_node_oddfooter TYPE string VALUE 'oddFooter',
|
||||
|
@ -4520,6 +5031,27 @@ METHOD create_xl_sheet.
|
|||
lo_element_root->append_child( new_child = lo_element ).
|
||||
ENDIF.
|
||||
|
||||
* Begin - Add - Issue #180
|
||||
" (Legacy) drawings for comments
|
||||
DATA: lo_drawing_for_comments TYPE REF TO zcl_excel_comments.
|
||||
|
||||
lo_drawing_for_comments = io_worksheet->get_comments( ).
|
||||
IF lo_drawing_for_comments->is_empty( ) = abap_false.
|
||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing_for_cmt
|
||||
parent = lo_document ).
|
||||
ADD 1 TO lv_relation_id. " +1 for legacyDrawings
|
||||
|
||||
lv_value = lv_relation_id.
|
||||
CONDENSE lv_value.
|
||||
CONCATENATE 'rId' lv_value INTO lv_value.
|
||||
lo_element->set_attribute( name = 'r:id'
|
||||
value = lv_value ).
|
||||
lo_element_root->append_child( new_child = lo_element ).
|
||||
|
||||
ADD 1 TO lv_relation_id. " +1 for comments (not referenced in XL sheet but let's reserve the rId)
|
||||
ENDIF.
|
||||
* End - Add - Issue #180
|
||||
|
||||
* tables
|
||||
DATA lv_table_count TYPE i.
|
||||
|
||||
|
@ -4656,11 +5188,13 @@ METHOD create_xl_sheet_rels.
|
|||
lc_xml_attr_target_mode TYPE string VALUE 'TargetMode',
|
||||
lc_xml_val_external TYPE string VALUE 'External',
|
||||
" Node namespace
|
||||
lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships',
|
||||
lc_xml_node_rid_table_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',
|
||||
lc_xml_node_rid_printer_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings',
|
||||
lc_xml_node_rid_drawing_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',
|
||||
lc_xml_node_rid_link_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'.
|
||||
lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships',
|
||||
lc_xml_node_rid_table_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',
|
||||
lc_xml_node_rid_printer_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings',
|
||||
lc_xml_node_rid_drawing_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',
|
||||
lc_xml_node_rid_comment_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', " (+) Issue #180
|
||||
lc_xml_node_rid_drawing_cmt_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', " (+) Issue #180
|
||||
lc_xml_node_rid_link_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'.
|
||||
|
||||
DATA: lo_ixml TYPE REF TO if_ixml,
|
||||
lo_document TYPE REF TO if_ixml_document,
|
||||
|
@ -4754,6 +5288,58 @@ METHOD create_xl_sheet_rels.
|
|||
lo_element_root->append_child( new_child = lo_element ).
|
||||
ENDIF.
|
||||
|
||||
* Begin - Add - Issue #180
|
||||
DATA: lo_comments TYPE REF TO zcl_excel_comments.
|
||||
|
||||
lo_comments = io_worksheet->get_comments( ).
|
||||
IF lo_comments->is_empty( ) = abap_false.
|
||||
" Drawing for comment
|
||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
||||
parent = lo_document ).
|
||||
|
||||
ADD 1 TO lv_relation_id.
|
||||
|
||||
lv_value = lv_relation_id.
|
||||
CONDENSE lv_value.
|
||||
CONCATENATE 'rId' lv_value INTO lv_value.
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_id
|
||||
value = lv_value ).
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_type
|
||||
value = lc_xml_node_rid_drawing_cmt_tp ).
|
||||
|
||||
lv_index_str = iv_comment_index.
|
||||
CONDENSE lv_index_str NO-GAPS.
|
||||
MOVE me->cl_xl_drawing_for_comments TO lv_value.
|
||||
REPLACE 'xl' WITH '..' INTO lv_value.
|
||||
REPLACE '#' WITH lv_index_str INTO lv_value.
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_target
|
||||
value = lv_value ).
|
||||
lo_element_root->append_child( new_child = lo_element ).
|
||||
|
||||
" Comment
|
||||
lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship
|
||||
parent = lo_document ).
|
||||
ADD 1 TO lv_relation_id.
|
||||
|
||||
lv_value = lv_relation_id.
|
||||
CONDENSE lv_value.
|
||||
CONCATENATE 'rId' lv_value INTO lv_value.
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_id
|
||||
value = lv_value ).
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_type
|
||||
value = lc_xml_node_rid_comment_tp ).
|
||||
|
||||
lv_index_str = iv_comment_index.
|
||||
CONDENSE lv_index_str NO-GAPS.
|
||||
MOVE me->c_xl_comments TO lv_value.
|
||||
REPLACE 'xl' WITH '..' INTO lv_value.
|
||||
REPLACE '#' WITH lv_index_str INTO lv_value.
|
||||
lo_element->set_attribute_ns( name = lc_xml_attr_target
|
||||
value = lv_value ).
|
||||
lo_element_root->append_child( new_child = lo_element ).
|
||||
ENDIF.
|
||||
* End - Add - Issue #180
|
||||
|
||||
lo_iterator = io_worksheet->get_tables_iterator( ).
|
||||
WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true.
|
||||
lo_table ?= lo_iterator->if_object_collection_iterator~get_next( ).
|
||||
|
|
63
src/zdemo_excel_comments.prog.abap
Normal file
63
src/zdemo_excel_comments.prog.abap
Normal file
|
@ -0,0 +1,63 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Report ZDEMO_EXCEL_COMMENTS
|
||||
*&
|
||||
*&---------------------------------------------------------------------*
|
||||
*&
|
||||
*&
|
||||
*&---------------------------------------------------------------------*
|
||||
REPORT zdemo_excel_comments.
|
||||
|
||||
DATA: lo_excel TYPE REF TO zcl_excel,
|
||||
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
||||
lo_comment TYPE REF TO zcl_excel_comment,
|
||||
lo_hyperlink TYPE REF TO zcl_excel_hyperlink.
|
||||
|
||||
CONSTANTS: gc_save_file_name TYPE string VALUE 'Comments.xlsx'.
|
||||
INCLUDE zdemo_excel_outputopt_incl.
|
||||
|
||||
|
||||
START-OF-SELECTION.
|
||||
" Creates active sheet
|
||||
CREATE OBJECT lo_excel.
|
||||
|
||||
" Get active sheet
|
||||
lo_worksheet = lo_excel->get_active_worksheet( ).
|
||||
* lo_worksheet->set_title( ip_title = 'Sheet1' ).
|
||||
lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ).
|
||||
lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = sy-datum ).
|
||||
lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = sy-uzeit ).
|
||||
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'http://www.abap2xlsx.org' ).
|
||||
lo_worksheet->set_cell( ip_column = 'B' ip_row = 4 ip_value = 'Click here to visit abap2xlsx homepage' ip_hyperlink = lo_hyperlink ).
|
||||
|
||||
" Comments
|
||||
lo_comment = lo_excel->add_new_comment( ).
|
||||
lo_comment->set_text( ip_ref = 'B13' ip_text = 'This is how it begins to be debug time...' ).
|
||||
lo_worksheet->add_comment( lo_comment ).
|
||||
lo_comment = lo_excel->add_new_comment( ).
|
||||
lo_comment->set_text( ip_ref = 'C18' ip_text = 'Another comment' ).
|
||||
lo_worksheet->add_comment( lo_comment ).
|
||||
lo_comment = lo_excel->add_new_comment( ).
|
||||
lo_comment->set_text( ip_ref = 'F6' ip_text = |A comment split{ cl_abap_char_utilities=>cr_lf }on 2 lines?| ).
|
||||
lo_worksheet->add_comment( lo_comment ).
|
||||
|
||||
" Second sheet
|
||||
lo_worksheet = lo_excel->add_new_worksheet( ).
|
||||
lo_worksheet->set_default_excel_date_format( zcl_excel_style_number_format=>c_format_date_yyyymmdd ).
|
||||
lo_worksheet->set_title( ip_title = 'Sheet2' ).
|
||||
lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Date Format set to YYYYMMDD' ).
|
||||
" Insert current date
|
||||
lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Current Date:' ).
|
||||
lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = sy-datum ).
|
||||
|
||||
lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet3!B2' ).
|
||||
lo_worksheet->set_cell( ip_column = 'A' ip_row = 6 ip_value = 'This is link to the third sheet' ip_hyperlink = lo_hyperlink ).
|
||||
|
||||
lo_comment = lo_excel->add_new_comment( ).
|
||||
lo_comment->set_text( ip_ref = 'A8' ip_text = 'What about a comment on second sheet?' ).
|
||||
" lo_comment->set_text( ip_column = 'A' ip_row = 8 ip_text = 'What about a comment on second sheet?' ).
|
||||
lo_worksheet->add_comment( lo_comment ).
|
||||
|
||||
lo_excel->set_active_sheet_index_by_name( 'Sheet1' ).
|
||||
|
||||
*** Create output
|
||||
lcl_output=>output( lo_excel ).
|
36
src/zdemo_excel_comments.prog.xml
Normal file
36
src/zdemo_excel_comments.prog.xml
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZDEMO_EXCEL_COMMENTS</NAME>
|
||||
<STATE>A</STATE>
|
||||
<VARCL>X</VARCL>
|
||||
<SUBC>1</SUBC>
|
||||
<RSTAT>T</RSTAT>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_PATH</KEY>
|
||||
<ENTRY>.</ENTRY>
|
||||
<LENGTH>9</LENGTH>
|
||||
<SPLIT>D</SPLIT>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>RB_BACK</KEY>
|
||||
<LENGTH>17</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>abap2xlsx Demo: Hello World</ENTRY>
|
||||
<LENGTH>28</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user