mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 06:16:14 +08:00

Currently following style options are supported: -fonts -borders -fills -number formats DEMO1 and DEMO2 updated git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@164 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049
836 lines
39 KiB
XML
836 lines
39 KiB
XML
<?xml version="1.0" encoding="utf-16"?>
|
|
<CLAS CLSNAME="ZCL_EXCEL_READER_2007" VERSION="1" LANGU="E" DESCRIPT="Read Excel 2007 into ZCL_EXCEL" UUID="DFAC2E4C81CE84F1B39B000C29B7D360" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" AUTHOR="BCUSER" CREATEDON="20100820" CHANGEDBY="BCUSER" CHANGEDON="20110414" CHGDANYON="00000000" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="702" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 ">
|
|
<implementing CLSNAME="ZCL_EXCEL_READER_2007" REFCLSNAME="ZIF_EXCEL_READER" VERSION="1" EXPOSURE="2" STATE="1" AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414" RELTYPE="1" EDITORDER="0 "/>
|
|
<publicSection>class ZCL_EXCEL_READER_2007 definition
|
|
public
|
|
final
|
|
create public .
|
|
|
|
public section.
|
|
*"* public components of class ZCL_EXCEL_READER_2007
|
|
*"* do not include other source files here!!!
|
|
type-pools IXML .
|
|
|
|
interfaces ZIF_EXCEL_READER .</publicSection>
|
|
<protectedSection>*"* protected components of class ZCL_EXCEL_READER_2007
|
|
*"* do not include other source files here!!!
|
|
protected section.</protectedSection>
|
|
<privateSection>private section.
|
|
*"* private components of class ZCL_EXCEL_READER_2007
|
|
*"* do not include other source files here!!!
|
|
|
|
data EXCEL2007 type XSTRING .
|
|
data ZIP type ref to CL_ABAP_ZIP .
|
|
data SHARED_STRINGS type STRINGTAB .
|
|
data STYLES type T_STYLE_REFS .
|
|
|
|
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
|
|
returning
|
|
value(R_IXML) type ref to IF_IXML_DOCUMENT
|
|
raising
|
|
ZCX_EXCEL .
|
|
methods LOAD_WORKSHEET
|
|
importing
|
|
!IP_PATH type STRING
|
|
!IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET .
|
|
methods FILL_STRUCT_FROM_ATTRIBUTES
|
|
importing
|
|
!IP_ELEMENT type ref to IF_IXML_ELEMENT
|
|
changing
|
|
!CP_STRUCTURE type ANY .
|
|
methods LOAD_WORKBOOK
|
|
importing
|
|
!IP_PATH type STRING
|
|
!IP_EXCEL type ref to ZCL_EXCEL .
|
|
methods LOAD_STYLE_BORDERS
|
|
importing
|
|
!IP_XML type ref to IF_IXML_DOCUMENT
|
|
returning
|
|
value(EP_BORDERS) type T_BORDERS .
|
|
methods LOAD_STYLE_FONTS
|
|
importing
|
|
!IP_XML type ref to IF_IXML_DOCUMENT
|
|
returning
|
|
value(EP_FONTS) type T_FONTS .
|
|
methods LOAD_STYLE_FILLS
|
|
importing
|
|
!IP_XML type ref to IF_IXML_DOCUMENT
|
|
returning
|
|
value(EP_FILLS) type T_FILLS .
|
|
methods LOAD_STYLE_NUM_FORMATS
|
|
importing
|
|
!IP_XML type ref to IF_IXML_DOCUMENT
|
|
returning
|
|
value(EP_NUM_FORMATS) type T_NUM_FORMATS .
|
|
methods LOAD_STYLES
|
|
importing
|
|
!IP_PATH type STRING
|
|
!IP_EXCEL type ref to ZCL_EXCEL .
|
|
methods LOAD_SHARED_STRINGS
|
|
importing
|
|
!IP_PATH type STRING .</privateSection>
|
|
<localImplementation>*"* local class implementation for public class
|
|
*"* use this source file for the implementation part of
|
|
*"* local helper classes
|
|
TYPES: BEGIN OF t_relationship,
|
|
id TYPE string,
|
|
type TYPE string,
|
|
target TYPE string,
|
|
END OF t_relationship.</localImplementation>
|
|
<localTypes>*"* use this source file for any type declarations (class
|
|
*"* definitions, interfaces or data types) you need for method
|
|
*"* implementation or private method's signature
|
|
|
|
TYPES t_style_refs TYPE TABLE OF REF TO zcl_excel_style.
|
|
|
|
TYPES: BEGIN OF t_num_format,
|
|
id TYPE string,
|
|
format TYPE REF TO zcl_excel_style_number_format,
|
|
END OF t_num_format.
|
|
TYPES t_num_formats TYPE HASHED TABLE OF t_num_format WITH UNIQUE KEY id.
|
|
|
|
TYPES t_fills TYPE STANDARD TABLE OF REF TO zcl_excel_style_fill WITH DEFAULT KEY.
|
|
TYPES t_borders TYPE STANDARD TABLE OF REF TO zcl_excel_style_borders WITH DEFAULT KEY.
|
|
TYPES t_fonts TYPE STANDARD TABLE OF REF TO zcl_excel_style_font WITH DEFAULT KEY.
|
|
|
|
TYPES: BEGIN OF t_color,
|
|
indexed TYPE string,
|
|
rgb TYPE string,
|
|
theme TYPE string,
|
|
tint TYPE string,
|
|
END OF t_color.</localTypes>
|
|
<localMacros>*"* use this source file for any macro definitions you need
|
|
*"* in the implementation part of the class</localMacros>
|
|
<typeUsage CLSNAME="ZCL_EXCEL_READER_2007" TYPEGROUP="IXML" VERSION="1" TPUTYPE="0" EXPLICIT="X"/>
|
|
<forwardDeclaration>IXML</forwardDeclaration>
|
|
<attribute CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="EXCEL2007" VERSION="1" LANGU="E" DESCRIPT="Excel 2007 data" EXPOSURE="0" STATE="1" EDITORDER="1 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110415" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="XSTRING" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="702" TYPESRC_LENG="0 "/>
|
|
<attribute CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="SHARED_STRINGS" VERSION="1" LANGU="E" DESCRIPT="Table with Strings" EXPOSURE="0" STATE="1" EDITORDER="3 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDON="00000000" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="STRINGTAB" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="702" TYPESRC_LENG="0 "/>
|
|
<attribute CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="STYLES" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="4 " AUTHOR="BCUSER" CREATEDON="20110419" CHANGEDBY="BCUSER" CHANGEDON="20110419" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="T_STYLE_REFS" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="702" TYPESRC_LENG="0 "/>
|
|
<attribute CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="ZIP" VERSION="1" LANGU="E" DESCRIPT="Zip Utility" EXPOSURE="0" STATE="1" EDITORDER="2 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110415" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="CL_ABAP_ZIP" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="702" TYPESRC_LENG="0 "/>
|
|
<interfaceMethod CLSNAME="ZCL_EXCEL_READER_2007" CPDNAME="ZIF_EXCEL_READER~LOAD">
|
|
<source>METHOD zif_excel_reader~load.
|
|
|
|
CONSTANTS:
|
|
lc_core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',
|
|
lc_office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',
|
|
lc_relationships TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'.
|
|
|
|
DATA: rels TYPE REF TO if_ixml_document,
|
|
node TYPE REF TO if_ixml_element,
|
|
relationship TYPE t_relationship.
|
|
|
|
me->excel2007 = i_excel2007.
|
|
rels = me->get_ixml_from_zip_archive( '_rels/.rels' ).
|
|
|
|
CREATE OBJECT r_excel.
|
|
|
|
node ?= rels->find_from_name( 'Relationship' ).
|
|
WHILE node IS BOUND.
|
|
fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ).
|
|
|
|
CASE relationship-type.
|
|
WHEN lc_core_properties.
|
|
" TODO Map Document Properties to ZCL_EXCEL
|
|
WHEN lc_office_document.
|
|
load_workbook(
|
|
ip_path = relationship-target
|
|
ip_excel = r_excel ).
|
|
|
|
WHEN OTHERS.
|
|
ENDCASE.
|
|
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
|
|
ENDMETHOD.</source>
|
|
</interfaceMethod>
|
|
<interfaceMethod CLSNAME="ZCL_EXCEL_READER_2007" CPDNAME="ZIF_EXCEL_READER~LOAD_FILE">
|
|
<source>method ZIF_EXCEL_READER~LOAD_FILE.
|
|
DATA: excel_data TYPE xstring.
|
|
DATA filelength TYPE i.
|
|
DATA bin_tab TYPE TABLE OF x255.
|
|
" Background processing
|
|
DATA bin_data LIKE LINE OF bin_tab.
|
|
DATA len TYPE i.
|
|
DATA alen TYPE i.
|
|
|
|
IF sy-batch = abap_true.
|
|
DESCRIBE FIELD bin_data LENGTH len IN BYTE MODE.
|
|
OPEN DATASET i_filename FOR INPUT IN BINARY MODE.
|
|
WHILE sy-subrc = 0.
|
|
READ DATASET i_filename INTO bin_data MAXIMUM LENGTH len ACTUAL LENGTH alen.
|
|
APPEND bin_data TO bin_tab.
|
|
filelength = filelength + alen.
|
|
ENDWHILE.
|
|
CLOSE DATASET i_filename.
|
|
ELSE.
|
|
cl_gui_frontend_services=>gui_upload(
|
|
EXPORTING
|
|
filename = i_filename " Name of file
|
|
filetype = 'BIN' " File Type (ASCII, Binary)
|
|
IMPORTING
|
|
filelength = filelength
|
|
CHANGING
|
|
data_tab = bin_tab
|
|
EXCEPTIONS
|
|
file_open_error = 1
|
|
file_read_error = 2
|
|
no_batch = 3
|
|
gui_refuse_filetransfer = 4
|
|
invalid_type = 5
|
|
no_authority = 6
|
|
unknown_error = 7
|
|
bad_data_format = 8
|
|
header_not_allowed = 9
|
|
separator_not_allowed = 10
|
|
header_too_long = 11
|
|
unknown_dp_error = 12
|
|
access_denied = 13
|
|
dp_out_of_memory = 14
|
|
disk_full = 15
|
|
dp_timeout = 16
|
|
not_supported_by_gui = 17
|
|
error_no_gui = 18
|
|
OTHERS = 19
|
|
).
|
|
IF sy-subrc <> 0.
|
|
RAISE EXCEPTION TYPE zcx_excel
|
|
EXPORTING
|
|
error = 'A problem occured when reading the file'.
|
|
ENDIF.
|
|
ENDIF.
|
|
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
|
|
EXPORTING
|
|
input_length = filelength
|
|
IMPORTING
|
|
buffer = excel_data
|
|
TABLES
|
|
binary_tab = bin_tab.
|
|
r_excel = me->zif_excel_reader~load( excel_data ).
|
|
endmethod.</source>
|
|
</interfaceMethod>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="FILL_STRUCT_FROM_ATTRIBUTES" VERSION="1" LANGU="E" DESCRIPT="Fills structure fields based on XML node attributes" EXPOSURE="0" STATE="1" EDITORDER="4 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDBY="BCUSER" CHANGEDON="20110421" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="FILL_STRUCT_FROM_ATTRIBUTES" SCONAME="IP_ELEMENT" VERSION="1" LANGU="E" DESCRIPT="IF_IXML_ELEMENT" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_IXML_ELEMENT"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="FILL_STRUCT_FROM_ATTRIBUTES" SCONAME="CP_STRUCTURE" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDON="00000000" PARDECLTYP="2" PARPASSTYP="1" TYPTYPE="1" TYPE="ANY"/>
|
|
<source>METHOD fill_struct_from_attributes.
|
|
DATA: name TYPE string,
|
|
attributes TYPE REF TO if_ixml_named_node_map,
|
|
attribute TYPE REF TO if_ixml_attribute,
|
|
iterator TYPE REF TO if_ixml_node_iterator.
|
|
|
|
FIELD-SYMBOLS: <component> TYPE any.
|
|
|
|
CLEAR cp_structure.
|
|
|
|
attributes = ip_element->get_attributes( ).
|
|
iterator = attributes->create_iterator( ).
|
|
attribute ?= iterator->get_next( ).
|
|
WHILE attribute IS BOUND.
|
|
name = attribute->get_name( ).
|
|
TRANSLATE name TO UPPER CASE.
|
|
ASSIGN COMPONENT name OF STRUCTURE cp_structure TO <component>.
|
|
IF sy-subrc = 0.
|
|
<component> = attribute->get_value( ).
|
|
ENDIF.
|
|
attribute ?= iterator->get_next( ).
|
|
ENDWHILE.
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_FROM_ZIP_ARCHIVE" VERSION="1" LANGU="E" DESCRIPT="Read file from ZIP Archive" EXPOSURE="0" STATE="1" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414" MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_FROM_ZIP_ARCHIVE" SCONAME="I_FILENAME" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_FROM_ZIP_ARCHIVE" SCONAME="R_CONTENT" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="XSTRING"/>
|
|
<exception CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_FROM_ZIP_ARCHIVE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414"/>
|
|
<source>method GET_FROM_ZIP_ARCHIVE.
|
|
|
|
IF me->zip IS NOT BOUND.
|
|
CREATE OBJECT me->zip.
|
|
zip->load(
|
|
EXPORTING
|
|
zip = me->excel2007
|
|
EXCEPTIONS
|
|
zip_parse_error = 1
|
|
OTHERS = 2
|
|
).
|
|
IF sy-subrc <> 0.
|
|
RAISE EXCEPTION TYPE zcx_excel
|
|
EXPORTING
|
|
error = 'ZIP parse error'.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
zip->get(
|
|
EXPORTING
|
|
name = i_filename
|
|
IMPORTING
|
|
content = r_content " Contents
|
|
EXCEPTIONS
|
|
zip_index_error = 1
|
|
zip_decompression_error = 2
|
|
OTHERS = 3
|
|
).
|
|
IF sy-subrc <> 0.
|
|
RAISE EXCEPTION TYPE zcx_excel
|
|
EXPORTING
|
|
error = 'ZIP index or decompression error'.
|
|
ENDIF.
|
|
|
|
endmethod.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_IXML_FROM_ZIP_ARCHIVE" VERSION="1" LANGU="E" DESCRIPT="Read file from ZIP Archive" EXPOSURE="0" STATE="1" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414" MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_IXML_FROM_ZIP_ARCHIVE" SCONAME="I_FILENAME" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_IXML_FROM_ZIP_ARCHIVE" SCONAME="R_IXML" VERSION="1" LANGU="E" DESCRIPT="IF_IXML_DOCUMENT" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="IF_IXML_DOCUMENT"/>
|
|
<exception CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="GET_IXML_FROM_ZIP_ARCHIVE" SCONAME="ZCX_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Exceptions for ABAP2XLSX" MTDTYPE="0" EDITORDER="1 " AUTHOR="BCUSER" CREATEDON="20110408" CHANGEDBY="BCUSER" CHANGEDON="20110414"/>
|
|
<source>method GET_IXML_FROM_ZIP_ARCHIVE.
|
|
TYPE-POOLS: ixml.
|
|
|
|
DATA: content TYPE xstring.
|
|
|
|
DATA: ixml TYPE REF TO if_ixml,
|
|
streamfactory TYPE REF TO if_ixml_stream_factory,
|
|
istream TYPE REF TO if_ixml_istream,
|
|
parser TYPE REF TO if_ixml_parser.
|
|
|
|
content = me->get_from_zip_archive( i_filename ).
|
|
ixml = cl_ixml=>create( ).
|
|
streamfactory = ixml->create_stream_factory( ).
|
|
istream = streamfactory->create_istream_xstring( content ).
|
|
r_ixml = ixml->create_document( ).
|
|
parser = ixml->create_parser( stream_factory = streamfactory
|
|
istream = istream
|
|
document = r_ixml ).
|
|
parser->set_normalizing( ).
|
|
parser->set_validating( mode = if_ixml_parser=>co_no_validation ).
|
|
parser->parse( ).
|
|
|
|
endmethod.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_SHARED_STRINGS" VERSION="1" LANGU="E" DESCRIPT="Loads shared strings table" EXPOSURE="0" STATE="1" EDITORDER="11 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDBY="BCUSER" CHANGEDON="20110425" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_SHARED_STRINGS" SCONAME="IP_PATH" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
|
<source>METHOD load_shared_strings.
|
|
DATA: value TYPE string,
|
|
shared_strings_xml TYPE REF TO if_ixml_document,
|
|
tag_name TYPE string,
|
|
node TYPE REF TO if_ixml_element,
|
|
node2 TYPE REF TO if_ixml_element.
|
|
|
|
shared_strings_xml = me->get_ixml_from_zip_archive( ip_path ).
|
|
node ?= shared_strings_xml->find_from_name( 'si' ).
|
|
WHILE node IS BOUND.
|
|
node2 ?= node->get_first_child( ).
|
|
tag_name = node2->get_name( ).
|
|
IF tag_name = 't'.
|
|
value = node2->get_value( ).
|
|
APPEND value TO shared_strings.
|
|
ELSEIF tag_name = 'r'.
|
|
" TODO pharse Ritch text
|
|
ENDIF.
|
|
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLES" VERSION="1" LANGU="E" DESCRIPT="Loads styles" EXPOSURE="0" STATE="1" EDITORDER="10 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110416" CHANGEDBY="BCUSER" CHANGEDON="20110425" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLES" SCONAME="IP_PATH" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110416" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLES" SCONAME="IP_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Excel creator" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110419" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL"/>
|
|
<source>METHOD load_styles.
|
|
TYPES: BEGIN OF t_xf,
|
|
applyalignment TYPE string,
|
|
applyborder TYPE string,
|
|
applyfill TYPE string,
|
|
applyfont TYPE string,
|
|
applynumberformat TYPE string,
|
|
applyprotection TYPE string,
|
|
borderid TYPE string,
|
|
fillid TYPE string,
|
|
fontid TYPE string,
|
|
numfmtid TYPE string,
|
|
pivotbutton TYPE string,
|
|
quoteprefix TYPE string,
|
|
xfid TYPE string,
|
|
END OF t_xf.
|
|
|
|
DATA: styles_xml TYPE REF TO if_ixml_document,
|
|
iterator TYPE REF TO if_ixml_node_iterator,
|
|
nodes TYPE REF TO if_ixml_node_collection,
|
|
node TYPE REF TO if_ixml_element,
|
|
fills TYPE t_fills,
|
|
fill TYPE REF TO zcl_excel_style_fill,
|
|
num_formats TYPE t_num_formats,
|
|
num_format TYPE t_num_format,
|
|
cell_border TYPE REF TO zcl_excel_style_borders,
|
|
borders TYPE t_borders,
|
|
fonts TYPE t_fonts,
|
|
font TYPE REF TO zcl_excel_style_font,
|
|
style TYPE REF TO zcl_excel_style,
|
|
xf TYPE t_xf,
|
|
index TYPE i.
|
|
|
|
styles_xml = me->get_ixml_from_zip_archive( ip_path ).
|
|
|
|
num_formats = load_style_num_formats( styles_xml ).
|
|
fills = load_style_fills( styles_xml ).
|
|
borders = load_style_borders( styles_xml ).
|
|
fonts = load_style_fonts( styles_xml ).
|
|
|
|
"we have all the components of style, now build the style objects
|
|
node = styles_xml->find_from_name( name = 'cellXfs' ).
|
|
IF node IS BOUND.
|
|
nodes = node->get_elements_by_tag_name( name = 'xf' ).
|
|
iterator = nodes->create_iterator( ).
|
|
node ?= iterator->get_next( ).
|
|
WHILE node IS BOUND.
|
|
style = ip_excel->add_new_style( ).
|
|
fill_struct_from_attributes(
|
|
EXPORTING
|
|
ip_element = node
|
|
CHANGING
|
|
cp_structure = xf ).
|
|
|
|
IF xf-applyfill = '1' AND xf-fillid IS NOT INITIAL.
|
|
index = xf-fillid + 1.
|
|
READ TABLE fills INTO fill INDEX index.
|
|
IF sy-subrc = 0.
|
|
style->fill = fill.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
IF xf-numfmtid IS NOT INITIAL.
|
|
READ TABLE num_formats INTO num_format WITH TABLE KEY id = xf-numfmtid.
|
|
IF sy-subrc = 0.
|
|
style->number_format = num_format-format.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
IF xf-applyborder = '1' AND xf-borderid IS NOT INITIAL.
|
|
index = xf-borderid + 1.
|
|
READ TABLE borders INTO cell_border INDEX index.
|
|
IF sy-subrc = 0.
|
|
style->borders = cell_border.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
IF xf-applyfont = '1' AND xf-fontid IS NOT INITIAL.
|
|
index = xf-fontid + 1.
|
|
READ TABLE fonts INTO font INDEX index.
|
|
IF sy-subrc = 0.
|
|
style->font = font.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
INSERT style INTO TABLE styles.
|
|
node ?= iterator->get_next( ).
|
|
ENDWHILE.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_BORDERS" VERSION="1" LANGU="E" DESCRIPT="Loads 'borders' part of styles" EXPOSURE="0" STATE="1" EDITORDER="6 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_BORDERS" SCONAME="IP_XML" VERSION="1" LANGU="E" DESCRIPT="IF_IXML_DOCUMENT" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_IXML_DOCUMENT"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_BORDERS" SCONAME="EP_BORDERS" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="T_BORDERS"/>
|
|
<source>METHOD LOAD_STYLE_BORDERS.
|
|
DATA: node TYPE REF TO if_ixml_element,
|
|
node2 TYPE REF TO if_ixml_element,
|
|
node3 TYPE REF TO if_ixml_element,
|
|
cell_border TYPE REF TO zcl_excel_style_borders,
|
|
border TYPE REF TO zcl_excel_style_border,
|
|
color TYPE t_color.
|
|
|
|
node ?= ip_xml->find_from_name( 'border' ).
|
|
WHILE node IS BOUND.
|
|
CREATE OBJECT cell_border.
|
|
|
|
node2 ?= node->get_first_child( ).
|
|
WHILE node2 IS BOUND.
|
|
CREATE OBJECT border.
|
|
|
|
CASE node2->get_name( ).
|
|
WHEN 'left'.
|
|
cell_border->left = border.
|
|
WHEN 'right'.
|
|
cell_border->right = border.
|
|
WHEN 'top'.
|
|
cell_border->top = border.
|
|
WHEN 'bottom'.
|
|
cell_border->down = border.
|
|
WHEN 'diagonal'.
|
|
cell_border->diagonal = border.
|
|
ENDCASE.
|
|
|
|
border->border_style = node2->get_attribute( 'style' ).
|
|
node3 ?= node2->find_from_name( 'color' ).
|
|
IF node3 IS BOUND.
|
|
fill_struct_from_attributes(
|
|
EXPORTING
|
|
ip_element = node3
|
|
CHANGING
|
|
cp_structure = color ).
|
|
|
|
border->border_color = color-rgb.
|
|
ENDIF.
|
|
|
|
node2 ?= node2->get_next( ).
|
|
ENDWHILE.
|
|
|
|
INSERT cell_border INTO TABLE ep_borders.
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_FILLS" VERSION="1" LANGU="E" DESCRIPT="Loads 'fills' part of styles" EXPOSURE="0" STATE="1" EDITORDER="8 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDBY="BCUSER" CHANGEDON="20110425" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_FILLS" SCONAME="IP_XML" VERSION="1" LANGU="E" DESCRIPT="IF_IXML_DOCUMENT" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_IXML_DOCUMENT"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_FILLS" SCONAME="EP_FILLS" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="T_FILLS"/>
|
|
<source>METHOD LOAD_STYLE_FILLS.
|
|
DATA: value TYPE string,
|
|
node TYPE REF TO if_ixml_element,
|
|
node2 TYPE REF TO if_ixml_element,
|
|
node3 TYPE REF TO if_ixml_element,
|
|
fill TYPE REF TO zcl_excel_style_fill,
|
|
color TYPE t_color.
|
|
|
|
node ?= ip_xml->find_from_name( 'fill' ).
|
|
WHILE node IS BOUND.
|
|
CREATE OBJECT fill.
|
|
node2 ?= node->get_first_child( ).
|
|
value = node2->get_name( ).
|
|
CASE value.
|
|
WHEN 'patternFill'.
|
|
fill->filltype = node2->get_attribute( 'patternType' ).
|
|
|
|
node3 = node2->find_from_name( 'bgColor' ).
|
|
IF node3 IS BOUND.
|
|
fill_struct_from_attributes(
|
|
EXPORTING
|
|
ip_element = node3
|
|
CHANGING
|
|
cp_structure = color ).
|
|
IF color-indexed IS NOT INITIAL.
|
|
fill->bgcolor = color-indexed.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
node3 = node->find_from_name( 'fgColor' ).
|
|
IF node3 IS BOUND.
|
|
fill_struct_from_attributes(
|
|
EXPORTING
|
|
ip_element = node3
|
|
CHANGING
|
|
cp_structure = color ).
|
|
|
|
fill->fgcolor = color-rgb.
|
|
"fill-> = color-theme.
|
|
"fill-> = color-tint.
|
|
ENDIF.
|
|
WHEN 'gradientFill'.
|
|
"TODO
|
|
WHEN OTHERS.
|
|
ENDCASE.
|
|
|
|
INSERT fill INTO TABLE ep_fills.
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
|
|
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_FONTS" VERSION="1" LANGU="E" DESCRIPT="Loads 'fonts' part of styles" EXPOSURE="0" STATE="1" EDITORDER="7 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_FONTS" SCONAME="IP_XML" VERSION="1" LANGU="E" DESCRIPT="IF_IXML_DOCUMENT" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_IXML_DOCUMENT"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_FONTS" SCONAME="EP_FONTS" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="T_FONTS"/>
|
|
<source>METHOD load_style_fonts.
|
|
DATA: value TYPE string,
|
|
node TYPE REF TO if_ixml_element,
|
|
node2 TYPE REF TO if_ixml_element,
|
|
node3 TYPE REF TO if_ixml_element,
|
|
font TYPE REF TO zcl_excel_style_font,
|
|
color TYPE t_color.
|
|
|
|
node ?= ip_xml->find_from_name( 'font' ).
|
|
WHILE node IS BOUND.
|
|
CREATE OBJECT font.
|
|
IF node->find_from_name( 'b' ) IS BOUND.
|
|
font->bold = abap_true.
|
|
ENDIF.
|
|
|
|
IF node->find_from_name( 'i' ) IS BOUND.
|
|
font->italic = abap_true.
|
|
ENDIF.
|
|
|
|
node2 = node->find_from_name( 'u' ).
|
|
IF node2 IS BOUND.
|
|
font->underline = abap_true.
|
|
font->underline_mode = node2->get_attribute( 'val' ).
|
|
ENDIF.
|
|
|
|
IF node->find_from_name( 'strike' ) IS BOUND.
|
|
font->strikethrough = abap_true.
|
|
ENDIF.
|
|
|
|
node2 = node->find_from_name( 'sz' ).
|
|
IF node2 IS BOUND.
|
|
font->size = node2->get_attribute( 'val' ).
|
|
ENDIF.
|
|
|
|
node2 = node->find_from_name( 'name' ).
|
|
IF node2 IS BOUND.
|
|
font->name = node2->get_attribute( 'val' ).
|
|
ENDIF.
|
|
|
|
node2 = node->find_from_name( 'family' ).
|
|
IF node2 IS BOUND.
|
|
font->family = node2->get_attribute( 'val' ).
|
|
ENDIF.
|
|
|
|
node2 = node->find_from_name( 'scheme' ).
|
|
IF node2 IS BOUND.
|
|
font->scheme = node2->get_attribute( 'val' ).
|
|
ENDIF.
|
|
|
|
node2 = node->find_from_name( 'color' ).
|
|
IF node2 IS BOUND.
|
|
fill_struct_from_attributes(
|
|
EXPORTING
|
|
ip_element = node2
|
|
CHANGING
|
|
cp_structure = color ).
|
|
|
|
font->color = color-rgb.
|
|
ENDIF.
|
|
|
|
INSERT font INTO TABLE ep_fonts.
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
|
|
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_NUM_FORMATS" VERSION="1" LANGU="E" DESCRIPT="Loads 'number format' part of styles" EXPOSURE="0" STATE="1" EDITORDER="9 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDBY="BCUSER" CHANGEDON="20110425" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_NUM_FORMATS" SCONAME="IP_XML" VERSION="1" LANGU="E" DESCRIPT="IF_IXML_DOCUMENT" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDBY="BCUSER" CHANGEDON="20110425" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_IXML_DOCUMENT"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_STYLE_NUM_FORMATS" SCONAME="EP_NUM_FORMATS" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110425" CHANGEDON="00000000" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="T_NUM_FORMATS"/>
|
|
<source>METHOD LOAD_STYLE_NUM_FORMATS.
|
|
DATA: node TYPE REF TO if_ixml_element,
|
|
num_format TYPE t_num_format.
|
|
|
|
node ?= ip_xml->find_from_name( 'numFmt' ).
|
|
WHILE node IS BOUND.
|
|
CLEAR num_format.
|
|
|
|
CREATE OBJECT num_format-format.
|
|
num_format-format->format_code = node->get_attribute( 'formatCode' ).
|
|
num_format-id = node->get_attribute( 'numFmtId' ).
|
|
INSERT num_format INTO TABLE ep_num_formats.
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
|
|
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_WORKBOOK" VERSION="1" LANGU="E" DESCRIPT="Loads workbook" EXPOSURE="0" STATE="1" EDITORDER="5 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDBY="BCUSER" CHANGEDON="20110421" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_WORKBOOK" SCONAME="IP_PATH" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_WORKBOOK" SCONAME="IP_EXCEL" VERSION="1" LANGU="E" DESCRIPT="Excel creator" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL"/>
|
|
<source>METHOD load_workbook.
|
|
TYPES: BEGIN OF t_sheet,
|
|
name TYPE string,
|
|
sheetId TYPE string,
|
|
id TYPE string,
|
|
END OF t_sheet.
|
|
|
|
CONSTANTS: lc_shared_strings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',
|
|
lc_worksheet TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',
|
|
lc_styles TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles'.
|
|
|
|
DATA: rels TYPE REF TO if_ixml_document,
|
|
rels_workbook_path TYPE string,
|
|
rels_workbook TYPE REF TO if_ixml_document,
|
|
path TYPE string,
|
|
worksheets TYPE TABLE OF t_relationship,
|
|
workbook TYPE REF TO if_ixml_document,
|
|
workbook_index TYPE i,
|
|
worksheet_path TYPE string,
|
|
sheet TYPE t_sheet,
|
|
node TYPE REF TO if_ixml_element,
|
|
stripped_name TYPE chkfile,
|
|
dirname TYPE string,
|
|
relationship TYPE t_relationship,
|
|
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
|
worksheet_title TYPE zexcel_sheet_title.
|
|
|
|
FIELD-SYMBOLS: <worksheet> TYPE t_relationship.
|
|
|
|
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
|
|
EXPORTING
|
|
full_name = ip_path
|
|
IMPORTING
|
|
stripped_name = stripped_name
|
|
file_path = dirname.
|
|
|
|
" Read Workbook Relationships
|
|
CONCATENATE dirname '_rels/' stripped_name '.rels'
|
|
INTO rels_workbook_path.
|
|
|
|
rels_workbook = me->get_ixml_from_zip_archive( rels_workbook_path ).
|
|
|
|
node ?= rels_workbook->find_from_name( 'Relationship' ).
|
|
WHILE node is BOUND.
|
|
fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ).
|
|
|
|
CASE relationship-type.
|
|
WHEN lc_shared_strings.
|
|
" Read Shared Strings
|
|
CONCATENATE dirname relationship-target INTO path.
|
|
load_shared_strings( path ).
|
|
|
|
WHEN lc_worksheet.
|
|
" Read worksheets
|
|
APPEND relationship TO worksheets.
|
|
|
|
WHEN lc_styles.
|
|
CONCATENATE dirname relationship-target INTO path.
|
|
load_styles(
|
|
ip_path = path
|
|
ip_excel = ip_excel ).
|
|
|
|
WHEN OTHERS.
|
|
ENDCASE.
|
|
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
|
|
" Read Workbook
|
|
workbook = me->get_ixml_from_zip_archive( ip_path ).
|
|
node ?= workbook->find_from_name( 'sheet' ).
|
|
WHILE node is BOUND.
|
|
|
|
fill_struct_from_attributes(
|
|
EXPORTING
|
|
ip_element = node
|
|
CHANGING
|
|
cp_structure = sheet ).
|
|
|
|
worksheet_title = sheet-name.
|
|
IF workbook_index > 1.
|
|
lo_worksheet = ip_excel->add_new_worksheet( worksheet_title ).
|
|
ELSE.
|
|
lo_worksheet = ip_excel->get_active_worksheet( ).
|
|
lo_worksheet->set_title( worksheet_title ).
|
|
ENDIF.
|
|
|
|
READ TABLE worksheets ASSIGNING <worksheet>
|
|
WITH KEY id = sheet-id.
|
|
" WRITE: / worksheet_id, worksheet_title, <worksheet>-target.
|
|
CONCATENATE dirname <worksheet>-target INTO worksheet_path.
|
|
load_worksheet(
|
|
ip_path = worksheet_path
|
|
io_worksheet = lo_worksheet ).
|
|
|
|
node ?= node->get_next( ).
|
|
ENDWHILE.
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
<method CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_WORKSHEET" VERSION="1" LANGU="E" DESCRIPT="Loads worksheet" EXPOSURE="0" STATE="1" EDITORDER="3 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110414" CHANGEDBY="BCUSER" CHANGEDON="20110421" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_WORKSHEET" SCONAME="IP_PATH" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110414" CHANGEDON="00000000" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
|
<parameter CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="LOAD_WORKSHEET" SCONAME="IO_WORKSHEET" VERSION="1" LANGU="E" DESCRIPT="Excel creator" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20110415" CHANGEDBY="BCUSER" CHANGEDON="20110415" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="ZCL_EXCEL_WORKSHEET"/>
|
|
<source>METHOD load_worksheet.
|
|
TYPES: BEGIN OF t_cell,
|
|
r TYPE string,
|
|
t TYPE string,
|
|
s TYPE string,
|
|
END OF t_cell.
|
|
|
|
DATA: worksheet TYPE REF TO if_ixml_document,
|
|
rows TYPE REF TO if_ixml_node_collection,
|
|
cells TYPE REF TO if_ixml_node_collection,
|
|
iterator TYPE REF TO if_ixml_node_iterator,
|
|
iterator2 TYPE REF TO if_ixml_node_iterator,
|
|
row TYPE REF TO if_ixml_element,
|
|
cell_elem TYPE REF TO if_ixml_element,
|
|
cell TYPE t_cell,
|
|
index TYPE i,
|
|
value_elem TYPE REF TO if_ixml_element,
|
|
formula_elem TYPE REF TO if_ixml_element,
|
|
cell_value TYPE zexcel_cell_value,
|
|
cell_formula TYPE zexcel_cell_formula,
|
|
cell_column TYPE zexcel_cell_column_alpha,
|
|
cell_row TYPE zexcel_cell_row,
|
|
style TYPE REF TO zcl_excel_style,
|
|
style_guid TYPE zexcel_cell_style.
|
|
|
|
worksheet = me->get_ixml_from_zip_archive( ip_path ).
|
|
rows = worksheet->get_elements_by_tag_name( name = 'row' ).
|
|
iterator = rows->create_iterator( ).
|
|
row ?= iterator->get_next( ).
|
|
WHILE row IS BOUND.
|
|
cells = row->get_elements_by_tag_name( name = 'c' ).
|
|
iterator2 = cells->create_iterator( ).
|
|
cell_elem ?= iterator2->get_next( ).
|
|
WHILE cell_elem IS BOUND.
|
|
CLEAR: cell_value, cell_formula, style_guid.
|
|
|
|
fill_struct_from_attributes( EXPORTING ip_element = cell_elem CHANGING cp_structure = cell ).
|
|
|
|
value_elem = cell_elem->find_from_name( name = 'v' ).
|
|
|
|
CASE cell-t.
|
|
WHEN 's'. " String values are stored as index in shared string table
|
|
index = value_elem->get_value( ) + 1.
|
|
READ TABLE shared_strings INTO cell_value INDEX index.
|
|
WHEN 'inlineStr'. " inlineStr values are kept in special node
|
|
value_elem = cell_elem->find_from_name( name = 'is' ).
|
|
IF value_elem IS BOUND.
|
|
cell_value = value_elem->get_value( ).
|
|
ENDIF.
|
|
WHEN OTHERS. "other types are stored directly
|
|
IF value_elem IS BOUND.
|
|
cell_value = value_elem->get_value( ).
|
|
ENDIF.
|
|
ENDCASE.
|
|
|
|
CLEAR style_guid.
|
|
"read style based on index
|
|
IF cell-s IS NOT INITIAL.
|
|
index = cell-s + 1.
|
|
READ TABLE styles INTO style INDEX index.
|
|
IF sy-subrc = 0.
|
|
style_guid = style->get_guid( ).
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
formula_elem = cell_elem->find_from_name( name = 'f' ).
|
|
IF formula_elem IS BOUND.
|
|
cell_formula = formula_elem->get_value( ).
|
|
ENDIF.
|
|
|
|
IF NOT cell_value IS INITIAL OR NOT cell_formula IS INITIAL OR style_guid IS NOT INITIAL.
|
|
zcl_excel_common=>convert_columnrow2column_a_row(
|
|
EXPORTING
|
|
i_columnrow = cell-r
|
|
IMPORTING
|
|
e_column = cell_column
|
|
e_row = cell_row
|
|
).
|
|
io_worksheet->set_cell(
|
|
ip_column = cell_column " cell_elem Column
|
|
ip_row = cell_row " cell_elem Row
|
|
ip_value = cell_value " cell_elem Value
|
|
ip_formula = cell_formula
|
|
ip_data_type = cell-t
|
|
ip_style = style_guid ).
|
|
ENDIF.
|
|
|
|
cell_elem ?= iterator2->get_next( ).
|
|
ENDWHILE.
|
|
row ?= iterator->get_next( ).
|
|
ENDWHILE.
|
|
|
|
ENDMETHOD.</source>
|
|
</method>
|
|
</CLAS>
|