mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 16:56:11 +08:00
#25 Adding support for reading styles in the READER
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
This commit is contained in:
parent
10ed6cf230
commit
e8aa4ec888
|
@ -1,25 +1,28 @@
|
||||||
<?xml version="1.0" encoding="utf-16"?>
|
<?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="20101218" CHGDANYON="00000000" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="702" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 ">
|
<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="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" RELTYPE="1" EDITORDER="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
|
<publicSection>class ZCL_EXCEL_READER_2007 definition
|
||||||
public
|
public
|
||||||
final
|
final
|
||||||
create public .
|
create public .
|
||||||
|
|
||||||
|
public section.
|
||||||
*"* public components of class ZCL_EXCEL_READER_2007
|
*"* public components of class ZCL_EXCEL_READER_2007
|
||||||
*"* do not include other source files here!!!
|
*"* do not include other source files here!!!
|
||||||
public section.
|
type-pools IXML .
|
||||||
|
|
||||||
interfaces ZIF_EXCEL_READER .</publicSection>
|
interfaces ZIF_EXCEL_READER .</publicSection>
|
||||||
<protectedSection>*"* protected components of class ZCL_EXCEL_READER_2007
|
<protectedSection>*"* protected components of class ZCL_EXCEL_READER_2007
|
||||||
*"* do not include other source files here!!!
|
*"* do not include other source files here!!!
|
||||||
protected section.</protectedSection>
|
protected section.</protectedSection>
|
||||||
<privateSection>*"* private components of class ZCL_EXCEL_READER_2007
|
<privateSection>private section.
|
||||||
|
*"* private components of class ZCL_EXCEL_READER_2007
|
||||||
*"* do not include other source files here!!!
|
*"* do not include other source files here!!!
|
||||||
private section.
|
|
||||||
|
|
||||||
data EXCEL2007 type XSTRING .
|
data EXCEL2007 type XSTRING .
|
||||||
data ZIP type ref to CL_ABAP_ZIP .
|
data ZIP type ref to CL_ABAP_ZIP .
|
||||||
|
data SHARED_STRINGS type STRINGTAB .
|
||||||
|
data STYLES type T_STYLE_REFS .
|
||||||
|
|
||||||
methods GET_FROM_ZIP_ARCHIVE
|
methods GET_FROM_ZIP_ARCHIVE
|
||||||
importing
|
importing
|
||||||
|
@ -34,265 +37,121 @@ private section.
|
||||||
returning
|
returning
|
||||||
value(R_IXML) type ref to IF_IXML_DOCUMENT
|
value(R_IXML) type ref to IF_IXML_DOCUMENT
|
||||||
raising
|
raising
|
||||||
ZCX_EXCEL .</privateSection>
|
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
|
<localImplementation>*"* local class implementation for public class
|
||||||
*"* use this source file for the implementation part of
|
*"* use this source file for the implementation part of
|
||||||
*"* local helper classes</localImplementation>
|
*"* 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
|
<localTypes>*"* use this source file for any type declarations (class
|
||||||
*"* definitions, interfaces or data types) you need for method
|
*"* definitions, interfaces or data types) you need for method
|
||||||
*"* implementation or private method's signature
|
*"* implementation or private method's signature
|
||||||
|
|
||||||
TYPES:
|
TYPES t_style_refs TYPE TABLE OF REF TO zcl_excel_style.
|
||||||
BEGIN OF t_splice_entry,
|
|
||||||
name TYPE string,
|
TYPES: BEGIN OF t_num_format,
|
||||||
offset TYPE i,
|
id TYPE string,
|
||||||
length TYPE i,
|
format TYPE REF TO zcl_excel_style_number_format,
|
||||||
compressed TYPE i,
|
END OF t_num_format.
|
||||||
END OF t_splice_entry.
|
TYPES t_num_formats TYPE HASHED TABLE OF t_num_format WITH UNIQUE KEY id.
|
||||||
TYPES:
|
|
||||||
t_splice_entries TYPE STANDARD TABLE OF t_splice_entry WITH DEFAULT KEY.</localTypes>
|
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
|
<localMacros>*"* use this source file for any macro definitions you need
|
||||||
*"* in the implementation part of the class</localMacros>
|
*"* in the implementation part of the class</localMacros>
|
||||||
<textPool/>
|
<typeUsage CLSNAME="ZCL_EXCEL_READER_2007" TYPEGROUP="IXML" VERSION="1" TPUTYPE="0" EXPLICIT="X"/>
|
||||||
<classDocumentation/>
|
<forwardDeclaration>IXML</forwardDeclaration>
|
||||||
<attribute CLSNAME="ZCL_EXCEL_READER_2007" CMPNAME="EXCEL2007" VERSION="1" LANGU="E" DESCRIPT="Excel 2007 data" EXPOSURE="0" STATE="1" EDITORDER="0 " AUTHOR="BCUSER" CREATEDON="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" 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="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="ZIP" VERSION="1" LANGU="E" DESCRIPT="Zip Utility" EXPOSURE="0" STATE="1" EDITORDER="0 " AUTHOR="BCUSER" CREATEDON="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="CL_ABAP_ZIP" 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">
|
<interfaceMethod CLSNAME="ZCL_EXCEL_READER_2007" CPDNAME="ZIF_EXCEL_READER~LOAD">
|
||||||
<source>method ZIF_EXCEL_READER~LOAD.
|
<source>METHOD zif_excel_reader~load.
|
||||||
TYPES:
|
|
||||||
BEGIN OF t_worksheet,
|
|
||||||
id TYPE string,
|
|
||||||
target TYPE string,
|
|
||||||
END OF t_worksheet.
|
|
||||||
TYPES: t_worksheets TYPE TABLE OF t_worksheet.
|
|
||||||
|
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
lc_core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',
|
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_office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',
|
||||||
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_relationships TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'.
|
lc_relationships TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'.
|
||||||
|
|
||||||
TYPE-POOLS: ixml.
|
|
||||||
|
|
||||||
DATA: rels TYPE REF TO if_ixml_document,
|
DATA: rels TYPE REF TO if_ixml_document,
|
||||||
rels_coll TYPE REF TO if_ixml_node_collection,
|
node TYPE REF TO if_ixml_element,
|
||||||
rels_coll_index TYPE i,
|
relationship TYPE t_relationship.
|
||||||
workbook_path TYPE string,
|
|
||||||
rels_workbook_path TYPE string,
|
|
||||||
rels_workbook TYPE REF TO if_ixml_document,
|
|
||||||
rels_wb_coll TYPE REF TO if_ixml_node_collection,
|
|
||||||
rels_wb_coll_index TYPE i,
|
|
||||||
shared_strings_path TYPE string,
|
|
||||||
shared_strings TYPE REF TO if_ixml_document,
|
|
||||||
shared_strings_coll TYPE REF TO if_ixml_node_collection,
|
|
||||||
shared_strings_coll_index TYPE i,
|
|
||||||
worksheets TYPE t_worksheets,
|
|
||||||
workbook TYPE REF TO if_ixml_document,
|
|
||||||
workbook_coll TYPE REF TO if_ixml_node_collection,
|
|
||||||
workbook_index TYPE i,
|
|
||||||
worksheet_path TYPE string,
|
|
||||||
worksheet TYPE REF TO if_ixml_document,
|
|
||||||
worksheet_coll TYPE REF TO if_ixml_node_collection,
|
|
||||||
worksheet_index TYPE i.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <worksheet> TYPE t_worksheet.
|
|
||||||
|
|
||||||
DATA: node TYPE REF TO if_ixml_node,
|
|
||||||
value_elem TYPE REF TO if_ixml_element,
|
|
||||||
formula_elem TYPE REF TO if_ixml_element,
|
|
||||||
si TYPE REF TO if_ixml_node_list,
|
|
||||||
row TYPE REF TO if_ixml_node_list,
|
|
||||||
row_iterator TYPE REF TO if_ixml_node_iterator,
|
|
||||||
cell TYPE REF TO if_ixml_element,
|
|
||||||
attributes TYPE REF TO if_ixml_named_node_map,
|
|
||||||
attribute TYPE REF TO if_ixml_node,
|
|
||||||
col_attributes TYPE REF TO if_ixml_named_node_map,
|
|
||||||
attr_type TYPE string,
|
|
||||||
attr_target TYPE string,
|
|
||||||
attr_id TYPE string,
|
|
||||||
tag_name TYPE string,
|
|
||||||
r TYPE string,
|
|
||||||
cell_data_type TYPE string,
|
|
||||||
cell_column TYPE zexcel_cell_column_alpha,
|
|
||||||
cell_row TYPE zexcel_cell_row,
|
|
||||||
value TYPE string,
|
|
||||||
values TYPE stringtab,
|
|
||||||
value_index TYPE i,
|
|
||||||
cell_value TYPE zexcel_cell_value,
|
|
||||||
cell_formula TYPE zexcel_cell_formula,
|
|
||||||
stripped_name TYPE chkfile,
|
|
||||||
dirname TYPE string.
|
|
||||||
|
|
||||||
DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
|
||||||
worksheet_title TYPE zexcel_sheet_title,
|
|
||||||
worksheet_id TYPE string.
|
|
||||||
|
|
||||||
me->excel2007 = i_excel2007.
|
me->excel2007 = i_excel2007.
|
||||||
rels = me->get_ixml_from_zip_archive( '_rels/.rels' ).
|
rels = me->get_ixml_from_zip_archive( '_rels/.rels' ).
|
||||||
|
|
||||||
CREATE OBJECT r_excel.
|
CREATE OBJECT r_excel.
|
||||||
|
|
||||||
rels_coll = rels->get_elements_by_tag_name( name = 'Relationship' ).
|
node ?= rels->find_from_name( 'Relationship' ).
|
||||||
rels_coll_index = 0.
|
WHILE node IS BOUND.
|
||||||
WHILE rels_coll_index < rels_coll->get_length( ).
|
fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ).
|
||||||
node = rels_coll->get_item( rels_coll_index ).
|
|
||||||
rels_coll_index = rels_coll_index + 1.
|
CASE relationship-type.
|
||||||
attributes ?= node->get_attributes( ).
|
|
||||||
attribute ?= attributes->get_named_item_ns( 'Type' ).
|
|
||||||
attr_type = attribute->get_value( ).
|
|
||||||
CASE attr_type.
|
|
||||||
WHEN lc_core_properties.
|
WHEN lc_core_properties.
|
||||||
" TODO Map Document Properties to ZCL_EXCEL
|
" TODO Map Document Properties to ZCL_EXCEL
|
||||||
WHEN lc_office_document.
|
WHEN lc_office_document.
|
||||||
attribute ?= attributes->get_named_item_ns( 'Target' ).
|
load_workbook(
|
||||||
workbook_path = attribute->get_value( ).
|
ip_path = relationship-target
|
||||||
|
ip_excel = r_excel ).
|
||||||
|
|
||||||
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
|
|
||||||
EXPORTING
|
|
||||||
full_name = workbook_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 ).
|
|
||||||
rels_wb_coll =
|
|
||||||
rels_workbook->get_elements_by_tag_name( name = 'Relationship' ).
|
|
||||||
rels_wb_coll_index = 0.
|
|
||||||
WHILE rels_wb_coll_index < rels_wb_coll->get_length( ).
|
|
||||||
node = rels_wb_coll->get_item( rels_wb_coll_index ).
|
|
||||||
rels_wb_coll_index = rels_wb_coll_index + 1.
|
|
||||||
attributes ?= node->get_attributes( ).
|
|
||||||
attribute ?= attributes->get_named_item_ns( 'Type' ).
|
|
||||||
attr_type = attribute->get_value( ).
|
|
||||||
CASE attr_type.
|
|
||||||
WHEN lc_shared_strings.
|
|
||||||
" Read Shared Strings
|
|
||||||
attribute ?= attributes->get_named_item_ns( 'Target' ).
|
|
||||||
attr_target = attribute->get_value( ).
|
|
||||||
CONCATENATE dirname attr_target INTO shared_strings_path.
|
|
||||||
shared_strings = me->get_ixml_from_zip_archive( shared_strings_path ).
|
|
||||||
shared_strings_coll =
|
|
||||||
shared_strings->get_elements_by_tag_name( name = 'si' ).
|
|
||||||
shared_strings_coll_index = 0.
|
|
||||||
WHILE shared_strings_coll_index < shared_strings_coll->get_length( ).
|
|
||||||
node = shared_strings_coll->get_item( shared_strings_coll_index ).
|
|
||||||
shared_strings_coll_index = shared_strings_coll_index + 1.
|
|
||||||
si = node->get_children( ).
|
|
||||||
node = si->get_item( 0 ).
|
|
||||||
tag_name = node->get_name( ).
|
|
||||||
IF tag_name = 't'.
|
|
||||||
value = node->get_value( ).
|
|
||||||
APPEND value TO values.
|
|
||||||
ELSEIF tag_name = 'r'.
|
|
||||||
" TODO pharse Ritch text
|
|
||||||
ENDIF.
|
|
||||||
ENDWHILE.
|
|
||||||
WHEN lc_worksheet.
|
|
||||||
" Read worksheets
|
|
||||||
APPEND INITIAL LINE TO worksheets ASSIGNING <worksheet>.
|
|
||||||
attribute ?= attributes->get_named_item_ns( 'Id' ).
|
|
||||||
<worksheet>-id = attribute->get_value( ).
|
|
||||||
attribute ?= attributes->get_named_item_ns( 'Target' ).
|
|
||||||
<worksheet>-target = attribute->get_value( ).
|
|
||||||
" WRITE: / <worksheet>-id, ':', <worksheet>-target.
|
|
||||||
WHEN OTHERS.
|
|
||||||
ENDCASE.
|
|
||||||
ENDWHILE.
|
|
||||||
" Read Workbook
|
|
||||||
workbook = me->get_ixml_from_zip_archive( workbook_path ).
|
|
||||||
workbook_coll = workbook->get_elements_by_tag_name( name = 'sheet' ).
|
|
||||||
workbook_index = 0.
|
|
||||||
WHILE workbook_index < workbook_coll->get_length( ).
|
|
||||||
node = workbook_coll->get_item( workbook_index ).
|
|
||||||
workbook_index = workbook_index + 1.
|
|
||||||
attributes ?= node->get_attributes( ).
|
|
||||||
attribute ?= attributes->get_named_item_ns( 'name' ).
|
|
||||||
worksheet_title = attribute->get_value( ).
|
|
||||||
IF workbook_index > 1.
|
|
||||||
lo_worksheet = r_excel->add_new_worksheet( worksheet_title ).
|
|
||||||
ELSE.
|
|
||||||
lo_worksheet = r_excel->get_active_worksheet( ).
|
|
||||||
lo_worksheet->set_title( worksheet_title ).
|
|
||||||
ENDIF.
|
|
||||||
attribute ?= attributes->get_named_item_ns(
|
|
||||||
name = 'id'
|
|
||||||
uri = lc_relationships
|
|
||||||
).
|
|
||||||
worksheet_id = attribute->get_value( ).
|
|
||||||
READ TABLE worksheets ASSIGNING <worksheet>
|
|
||||||
WITH KEY id = worksheet_id.
|
|
||||||
" WRITE: / worksheet_id, worksheet_title, <worksheet>-target.
|
|
||||||
CONCATENATE dirname <worksheet>-target INTO worksheet_path.
|
|
||||||
worksheet = me->get_ixml_from_zip_archive( worksheet_path ).
|
|
||||||
worksheet_coll = worksheet->get_elements_by_tag_name( name = 'row' ).
|
|
||||||
worksheet_index = 0.
|
|
||||||
WHILE worksheet_index < worksheet_coll->get_length( ).
|
|
||||||
node = worksheet_coll->get_item( worksheet_index ).
|
|
||||||
worksheet_index = worksheet_index + 1.
|
|
||||||
row = node->get_children( ).
|
|
||||||
row_iterator = row->create_iterator( ).
|
|
||||||
cell ?= row_iterator->get_next( ).
|
|
||||||
WHILE NOT cell IS INITIAL.
|
|
||||||
col_attributes = cell->get_attributes( ).
|
|
||||||
attribute ?= col_attributes->get_named_item_ns( 'r' ).
|
|
||||||
r = attribute->get_value( ).
|
|
||||||
CLEAR: cell_data_type, cell_value, cell_formula.
|
|
||||||
attribute ?= col_attributes->get_named_item_ns( 't' ).
|
|
||||||
IF attribute IS BOUND.
|
|
||||||
cell_data_type = attribute->get_value( ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
value_elem = cell->find_from_name( name = 'v' ).
|
|
||||||
|
|
||||||
CASE cell_data_type.
|
|
||||||
WHEN 's'. " String values are stored as index in shared string table
|
|
||||||
value_index = value_elem->get_value( ) + 1.
|
|
||||||
READ TABLE values INTO cell_value INDEX value_index.
|
|
||||||
WHEN 'inlineStr'. " inlineStr values are kept in special node
|
|
||||||
value_elem = cell->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.
|
|
||||||
|
|
||||||
formula_elem = cell->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.
|
|
||||||
zcl_excel_common=>convert_columnrow2column_a_row(
|
|
||||||
EXPORTING
|
|
||||||
i_columnrow = r
|
|
||||||
IMPORTING
|
|
||||||
e_column = cell_column
|
|
||||||
e_row = cell_row
|
|
||||||
).
|
|
||||||
lo_worksheet->set_cell(
|
|
||||||
EXPORTING
|
|
||||||
ip_column = cell_column " Cell Column
|
|
||||||
ip_row = cell_row " Cell Row
|
|
||||||
ip_value = cell_value " Cell Value
|
|
||||||
ip_formula = cell_formula
|
|
||||||
ip_data_type = cell_data_type
|
|
||||||
).
|
|
||||||
ENDIF.
|
|
||||||
cell ?= row_iterator->get_next( ).
|
|
||||||
ENDWHILE.
|
|
||||||
ENDWHILE.
|
|
||||||
ENDWHILE.
|
|
||||||
WHEN OTHERS.
|
WHEN OTHERS.
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
|
|
||||||
|
node ?= node->get_next( ).
|
||||||
ENDWHILE.
|
ENDWHILE.
|
||||||
|
|
||||||
endmethod.</source>
|
ENDMETHOD.</source>
|
||||||
</interfaceMethod>
|
</interfaceMethod>
|
||||||
<interfaceMethod CLSNAME="ZCL_EXCEL_READER_2007" CPDNAME="ZIF_EXCEL_READER~LOAD_FILE">
|
<interfaceMethod CLSNAME="ZCL_EXCEL_READER_2007" CPDNAME="ZIF_EXCEL_READER~LOAD_FILE">
|
||||||
<source>method ZIF_EXCEL_READER~LOAD_FILE.
|
<source>method ZIF_EXCEL_READER~LOAD_FILE.
|
||||||
|
@ -359,10 +218,37 @@ endmethod.</source>
|
||||||
r_excel = me->zif_excel_reader~load( excel_data ).
|
r_excel = me->zif_excel_reader~load( excel_data ).
|
||||||
endmethod.</source>
|
endmethod.</source>
|
||||||
</interfaceMethod>
|
</interfaceMethod>
|
||||||
<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="0 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
<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="GET_FROM_ZIP_ARCHIVE" SCONAME="I_FILENAME" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
<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="GET_FROM_ZIP_ARCHIVE" SCONAME="R_CONTENT" VERSION="1" LANGU="E" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="XSTRING"/>
|
<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"/>
|
||||||
<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="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218"/>
|
<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.
|
<source>method GET_FROM_ZIP_ARCHIVE.
|
||||||
|
|
||||||
IF me->zip IS NOT BOUND.
|
IF me->zip IS NOT BOUND.
|
||||||
|
@ -398,12 +284,11 @@ endmethod.</source>
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
endmethod.</source>
|
endmethod.</source>
|
||||||
<methodDocumentation/>
|
|
||||||
</method>
|
</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="0 " DISPID="0 " AUTHOR="BCUSER" CREATEDON="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" MTDTYPE="0" MTDDECLTYP="0" MTDNEWEXC="X" R3RELEASE="702" BCMTDCAT="00" BCMTDSYN="0">
|
<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="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="STRING"/>
|
<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="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="3" TYPE="IF_IXML_DOCUMENT"/>
|
<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="20101212" CHANGEDBY="BCUSER" CHANGEDON="20101218"/>
|
<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.
|
<source>method GET_IXML_FROM_ZIP_ARCHIVE.
|
||||||
TYPE-POOLS: ixml.
|
TYPE-POOLS: ixml.
|
||||||
|
|
||||||
|
@ -427,6 +312,524 @@ endmethod.</source>
|
||||||
parser->parse( ).
|
parser->parse( ).
|
||||||
|
|
||||||
endmethod.</source>
|
endmethod.</source>
|
||||||
<methodDocumentation/>
|
</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>
|
</method>
|
||||||
</CLAS>
|
</CLAS>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<?xml version="1.0" encoding="utf-16"?>
|
<?xml version="1.0" encoding="utf-16"?>
|
||||||
<PROG NAME="ZDEMO_EXCEL1" VARCL="X" SUBC="1" CNAM="FEMIA" CDAT="20100711" UNAM="BCUSER" UDAT="20110119" VERN="000056" RSTAT="T" RMAND="001" RLOAD="E" FIXPT="X" SDATE="20110119" STIME="192131" IDATE="20110119" ITIME="192131" UCCHECK="X">
|
<PROG NAME="ZDEMO_EXCEL1" VARCL="X" SUBC="1" CNAM="FEMIA" CDAT="20100711" UNAM="BCUSER" UDAT="20110425" VERN="000061" RSTAT="T" RMAND="001" RLOAD="E" FIXPT="X" SDATE="20110425" STIME="232351" IDATE="20110425" ITIME="232351" UCCHECK="X">
|
||||||
<textPool>
|
<textPool>
|
||||||
<language SPRAS="E">
|
<language SPRAS="E">
|
||||||
<textElement ID="R" ENTRY="abap2xlsx Demo: Hello World" LENGTH="27 "/>
|
<textElement ID="R" ENTRY="abap2xlsx Demo: Hello World" LENGTH="27 "/>
|
||||||
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="9 "/>
|
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="24 "/>
|
||||||
|
<textElement ID="S" KEY="P_READER" ENTRY=" Write back after using Reader" LENGTH="37 "/>
|
||||||
</language>
|
</language>
|
||||||
</textPool>
|
</textPool>
|
||||||
<programDocumentation/>
|
|
||||||
<source>*&---------------------------------------------------------------------*
|
<source>*&---------------------------------------------------------------------*
|
||||||
*& Report ZDEMO_EXCEL1
|
*& Report ZDEMO_EXCEL1
|
||||||
*&
|
*&
|
||||||
|
@ -19,6 +19,7 @@ REPORT zdemo_excel1.
|
||||||
|
|
||||||
DATA: lo_excel TYPE REF TO zcl_excel,
|
DATA: lo_excel TYPE REF TO zcl_excel,
|
||||||
lo_excel_writer TYPE REF TO zif_excel_writer,
|
lo_excel_writer TYPE REF TO zif_excel_writer,
|
||||||
|
lo_excel_reader TYPE REF TO zif_excel_reader,
|
||||||
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
||||||
lo_hyperlink TYPE REF TO zcl_excel_hyperlink,
|
lo_hyperlink TYPE REF TO zcl_excel_hyperlink,
|
||||||
column_dimension TYPE REF TO zcl_excel_worksheet_columndime.
|
column_dimension TYPE REF TO zcl_excel_worksheet_columndime.
|
||||||
|
@ -33,7 +34,8 @@ DATA: lv_full_path TYPE string,
|
||||||
|
|
||||||
CONSTANTS: lv_default_file_name TYPE string VALUE '01_HelloWorld.xlsx'.
|
CONSTANTS: lv_default_file_name TYPE string VALUE '01_HelloWorld.xlsx'.
|
||||||
|
|
||||||
PARAMETERS: p_path TYPE zexcel_export_dir.
|
PARAMETERS: p_path TYPE zexcel_export_dir,
|
||||||
|
p_reader TYPE abap_bool AS CHECKBOX.
|
||||||
|
|
||||||
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
|
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
|
||||||
lv_workdir = p_path.
|
lv_workdir = p_path.
|
||||||
|
@ -88,5 +90,28 @@ START-OF-SELECTION.
|
||||||
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
|
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
|
||||||
filename = lv_full_path
|
filename = lv_full_path
|
||||||
filetype = 'BIN'
|
filetype = 'BIN'
|
||||||
CHANGING data_tab = lt_file_tab ).</source>
|
CHANGING data_tab = lt_file_tab ).
|
||||||
|
|
||||||
|
IF p_reader = abap_true.
|
||||||
|
CREATE OBJECT lo_excel_reader TYPE zcl_excel_reader_2007.
|
||||||
|
CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007.
|
||||||
|
lo_excel = lo_excel_reader->load_file( lv_full_path ).
|
||||||
|
lv_file = lo_excel_writer->write_file( lo_excel ).
|
||||||
|
REPLACE '.xlsx' IN lv_full_path WITH 'FromReader.xlsx'.
|
||||||
|
|
||||||
|
" Convert to binary
|
||||||
|
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
|
||||||
|
EXPORTING
|
||||||
|
buffer = lv_file
|
||||||
|
IMPORTING
|
||||||
|
output_length = lv_bytecount
|
||||||
|
TABLES
|
||||||
|
binary_tab = lt_file_tab.
|
||||||
|
|
||||||
|
" Save the file
|
||||||
|
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
|
||||||
|
filename = lv_full_path
|
||||||
|
filetype = 'BIN'
|
||||||
|
CHANGING data_tab = lt_file_tab ).
|
||||||
|
ENDIF.</source>
|
||||||
</PROG>
|
</PROG>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<?xml version="1.0" encoding="utf-16"?>
|
<?xml version="1.0" encoding="utf-16"?>
|
||||||
<PROG NAME="ZDEMO_EXCEL2" VARCL="X" SUBC="1" CNAM="FEMIA" CDAT="20100711" UNAM="BCUSER" UDAT="20101228" VERN="000032" RSTAT="T" RMAND="001" RLOAD="E" FIXPT="X" SDATE="20101228" STIME="105126" IDATE="20101228" ITIME="105126" UCCHECK="X">
|
<PROG NAME="ZDEMO_EXCEL2" VARCL="X" SUBC="1" CNAM="FEMIA" CDAT="20100711" UNAM="BCUSER" UDAT="20110425" VERN="000042" RSTAT="T" RMAND="001" RLOAD="E" FIXPT="X" SDATE="20110425" STIME="232237" IDATE="20110425" ITIME="232237" UCCHECK="X">
|
||||||
<textPool>
|
<textPool>
|
||||||
<language SPRAS="E">
|
<language SPRAS="E">
|
||||||
<textElement ID="R" ENTRY="abap2xlsx Demo: Styles" LENGTH="25 "/>
|
<textElement ID="R" ENTRY="abap2xlsx Demo: Styles" LENGTH="22 "/>
|
||||||
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="9 "/>
|
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="24 "/>
|
||||||
|
<textElement ID="S" KEY="P_READER" ENTRY=" Write back after using Reader" LENGTH="37 "/>
|
||||||
</language>
|
</language>
|
||||||
</textPool>
|
</textPool>
|
||||||
<programDocumentation/>
|
|
||||||
<source>*&---------------------------------------------------------------------*
|
<source>*&---------------------------------------------------------------------*
|
||||||
*& Report ZDEMO_EXCEL2
|
*& Report ZDEMO_EXCEL2
|
||||||
*& Test Styles for ABAP2XLSX
|
*& Test Styles for ABAP2XLSX
|
||||||
|
@ -19,6 +19,7 @@ REPORT zdemo_excel2.
|
||||||
|
|
||||||
DATA: lo_excel TYPE REF TO zcl_excel,
|
DATA: lo_excel TYPE REF TO zcl_excel,
|
||||||
lo_excel_writer TYPE REF TO zif_excel_writer,
|
lo_excel_writer TYPE REF TO zif_excel_writer,
|
||||||
|
lo_excel_reader TYPE REF TO zif_excel_reader,
|
||||||
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
||||||
lo_style_bold TYPE REF TO zcl_excel_style,
|
lo_style_bold TYPE REF TO zcl_excel_style,
|
||||||
lo_style_underline TYPE REF TO zcl_excel_style,
|
lo_style_underline TYPE REF TO zcl_excel_style,
|
||||||
|
@ -45,7 +46,8 @@ DATA: lv_full_path TYPE string,
|
||||||
|
|
||||||
CONSTANTS: lv_default_file_name TYPE string VALUE '02_Styles.xlsx'.
|
CONSTANTS: lv_default_file_name TYPE string VALUE '02_Styles.xlsx'.
|
||||||
|
|
||||||
PARAMETERS: p_path TYPE zexcel_export_dir.
|
PARAMETERS: p_path TYPE zexcel_export_dir,
|
||||||
|
p_reader TYPE abap_bool AS CHECKBOX.
|
||||||
|
|
||||||
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
|
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
|
||||||
lv_workdir = p_path.
|
lv_workdir = p_path.
|
||||||
|
@ -146,5 +148,28 @@ START-OF-SELECTION.
|
||||||
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
|
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
|
||||||
filename = lv_full_path
|
filename = lv_full_path
|
||||||
filetype = 'BIN'
|
filetype = 'BIN'
|
||||||
CHANGING data_tab = lt_file_tab ).</source>
|
CHANGING data_tab = lt_file_tab ).
|
||||||
|
|
||||||
|
IF p_reader = abap_true.
|
||||||
|
CREATE OBJECT lo_excel_reader TYPE zcl_excel_reader_2007.
|
||||||
|
CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007.
|
||||||
|
lo_excel = lo_excel_reader->load_file( lv_full_path ).
|
||||||
|
lv_file = lo_excel_writer->write_file( lo_excel ).
|
||||||
|
REPLACE '.xlsx' IN lv_full_path WITH 'FromReader.xlsx'.
|
||||||
|
|
||||||
|
" Convert to binary
|
||||||
|
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
|
||||||
|
EXPORTING
|
||||||
|
buffer = lv_file
|
||||||
|
IMPORTING
|
||||||
|
output_length = lv_bytecount
|
||||||
|
TABLES
|
||||||
|
binary_tab = lt_file_tab.
|
||||||
|
|
||||||
|
" Save the file
|
||||||
|
cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount
|
||||||
|
filename = lv_full_path
|
||||||
|
filetype = 'BIN'
|
||||||
|
CHANGING data_tab = lt_file_tab ).
|
||||||
|
ENDIF.</source>
|
||||||
</PROG>
|
</PROG>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user