From 2d1d7d3befd905635e24e5f96e052aa97e1e0d0c Mon Sep 17 00:00:00 2001 From: Ivan Femia Date: Sun, 14 Oct 2012 13:57:34 +0000 Subject: [PATCH] Ready to test #193 #194 #207 Thanks to Vladimir Scheglov git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@340 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049 --- ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk | 134 +++++++++++++++++++++++---- ZA2X/DTEL/ZEXCEL_PANE_STATE.slnk | 4 + ZA2X/DTEL/ZEXCEL_PANE_TYPE.slnk | 4 + ZA2X/TABL/ZEXCEL_PANE.slnk | 9 ++ 4 files changed, 134 insertions(+), 17 deletions(-) create mode 100644 ZA2X/DTEL/ZEXCEL_PANE_STATE.slnk create mode 100644 ZA2X/DTEL/ZEXCEL_PANE_TYPE.slnk create mode 100644 ZA2X/TABL/ZEXCEL_PANE.slnk diff --git a/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk b/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk index 6f943d8..3d9cf7e 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk @@ -1242,7 +1242,7 @@ endmethod. - method LOAD_WORKSHEET. + METHOD load_worksheet. TYPES: BEGIN OF t_cell, r TYPE string, t TYPE string, @@ -1255,7 +1255,10 @@ endmethod. width TYPE float, customwidth TYPE string, style TYPE string, + bestfit TYPE string, + collapsed TYPE string, hidden TYPE string, + outlinelevel TYPE string, END OF t_column. TYPES: BEGIN OF t_sheetview, @@ -1278,6 +1281,9 @@ endmethod. thickbot TYPE string, customformat TYPE string, thicktop TYPE string, + collapsed TYPE string, + hidden TYPE string, + outlinelevel TYPE string, END OF t_row. TYPES: BEGIN OF t_page_setup, @@ -1332,6 +1338,12 @@ endmethod. sheetview_elem TYPE REF TO if_ixml_element, sheetview TYPE t_sheetview, + pane_elem TYPE REF TO if_ixml_element, + pane TYPE zexcel_pane, + pane_cell_row_a TYPE string, + pane_cell_row TYPE zexcel_cell_row, + pane_cell_col_a TYPE zexcel_cell_column_alpha, + pane_cell_col TYPE zexcel_cell_column, mergecells TYPE REF TO if_ixml_node_collection, mergecell_elem TYPE REF TO if_ixml_element, @@ -1364,9 +1376,14 @@ endmethod. column TYPE t_column, column_alpha TYPE zexcel_cell_column_alpha, column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + outline_level TYPE int4, rows TYPE REF TO if_ixml_node_collection, row TYPE t_row, + max_col TYPE i, "for use with SPANS element + min_col TYPE i, "for use with SPANS element + max_col_s TYPE char10, "for use with SPANS element + min_col_s TYPE char10, "for use with SPANS element row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, path TYPE string, @@ -1418,10 +1435,35 @@ endmethod. WHILE row_elem IS BOUND. fill_struct_from_attributes( EXPORTING ip_element = row_elem CHANGING cp_structure = row ). + SPLIT row-spans AT ':' INTO min_col_s max_col_s. + index = max_col_s. + IF index > max_col. + max_col = index. + ENDIF. cell_row = row-r. - IF row-customheight = '1'. + IF row-customheight = '1' OR row-collapsed = lc_xml_attr_true OR row-collapsed = lc_xml_attr_true_int OR + row-hidden = lc_xml_attr_true OR row-hidden = lc_xml_attr_true_int OR row-outlineLevel > '0'. row_dimension = io_worksheet->get_row_dimension( cell_row ). - row_dimension->set_row_height( row-ht ). + IF row-customheight = '1'. + row_dimension->set_row_height( row-ht ). + ENDIF. + + IF row-collapsed = lc_xml_attr_true OR row-collapsed = lc_xml_attr_true_int. + row_dimension->set_collapsed( abap_true ). + ENDIF. + + IF row-hidden = lc_xml_attr_true OR row-hidden = lc_xml_attr_true_int. + row_dimension->set_visible( abap_false ). + ENDIF. + + IF row-outlineLevel > ''. +* outline_level = condense( row-outlineLevel ). "For basis 7.02 and higher + CONDENSE row-outlineLevel. + outline_level = row-outlineLevel. + IF outline_level > 0. + row_dimension->set_outline_level( outline_level ). + ENDIF. + ENDIF. ENDIF. cells = row_elem->get_elements_by_tag_name( name = 'c' ). @@ -1493,27 +1535,64 @@ endmethod. fill_struct_from_attributes( EXPORTING ip_element = column_elem CHANGING cp_structure = column ). column_elem ?= iterator->get_next( ). IF column-customwidth = lc_xml_attr_true OR - column-customwidth = lc_xml_attr_true_int. + column-customwidth = lc_xml_attr_true_int OR + column-bestfit = lc_xml_attr_true OR + column-bestfit = lc_xml_attr_true_int OR + column-collapsed = lc_xml_attr_true OR + column-collapsed = lc_xml_attr_true_int OR + column-hidden = lc_xml_attr_true OR + column-hidden = lc_xml_attr_true_int OR + column-outlineLevel > '' OR + column-style > ''. index = column-min. - WHILE index <= column-max. +WHILE index <= column-max AND index <= max_col. column_alpha = zcl_excel_common=>convert_column2alpha( index ). column_dimension = io_worksheet->get_column_dimension( column_alpha ). - column_dimension->set_width( column-width ). - ADD 1 TO index. - ENDWHILE. - ENDIF. - IF column-hidden = lc_xml_attr_true OR - column-hidden = lc_xml_attr_true_int. - index = column-min. - WHILE index <= column-max. - column_alpha = zcl_excel_common=>convert_column2alpha( index ). - column_dimension = io_worksheet->get_column_dimension( column_alpha ). - column_dimension->set_visible( abap_false ). + IF column-customwidth = lc_xml_attr_true OR column-customwidth = lc_xml_attr_true_int. + column_dimension->set_width( column-width ). + ENDIF. + + IF column-bestfit = lc_xml_attr_true OR column-bestfit = lc_xml_attr_true_int. + column_dimension->set_auto_size( abap_true ). + ENDIF. + + IF column-collapsed = lc_xml_attr_true OR column-collapsed = lc_xml_attr_true_int. + column_dimension->set_collapsed( abap_true ). + ENDIF. + + IF column-hidden = lc_xml_attr_true OR column-hidden = lc_xml_attr_true_int. + column_dimension->set_visible( abap_false ). + ENDIF. + + IF column-outlineLevel > ''. + outline_level = condense( column-outlineLevel ). + IF outline_level > 0. + column_dimension->set_outline_level( outline_level ). + ENDIF. + ENDIF. + + IF column-style > ''. + sy-index = column-style + 1. + READ TABLE styles INTO style INDEX sy-index. + column_dimension->set_column_style_by_guid( style->get_guid( ) ). + ENDIF. + ADD 1 TO index. ENDWHILE. ENDIF. +* Fix 207 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 +* IF column-hidden = lc_xml_attr_true OR +* column-hidden = lc_xml_attr_true_int. +* index = column-min. +* WHILE index <= column-max. +* column_alpha = zcl_excel_common=>convert_column2alpha( index ). +* column_dimension = io_worksheet->get_column_dimension( column_alpha ). +* column_dimension->set_visible( abap_false ). +* ADD 1 TO index. +* ENDWHILE. +* ENDIF. ENDWHILE. "Now we need to get information from the sheetView node @@ -1609,7 +1688,28 @@ endmethod. ENDIF. -endmethod. + " Start fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + " Read pane + pane_elem = sheetview_elem->find_from_name( name = 'pane' ). + IF pane_elem IS BOUND. + fill_struct_from_attributes( EXPORTING ip_element = pane_elem CHANGING cp_structure = pane ). + FIND REGEX '^(\w+)(\d+)$' IN pane-topleftcell SUBMATCHES pane_cell_col_a + pane_cell_row_a. + pane_cell_row = pane_cell_row_a. + pane_cell_col = zcl_excel_common=>convert_column2int( pane_cell_col_a ). + SUBTRACT 1 FROM: pane_cell_col, pane_cell_row. + IF pane_cell_col > 0 AND pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = pane_cell_row + ip_num_columns = pane_cell_col ). + ELSEIF pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = pane_cell_row ). + ELSE. + io_worksheet->freeze_panes( ip_num_columns = pane_cell_col ). + ENDIF. + ENDIF. + " End fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + +ENDMETHOD. diff --git a/ZA2X/DTEL/ZEXCEL_PANE_STATE.slnk b/ZA2X/DTEL/ZEXCEL_PANE_STATE.slnk new file mode 100644 index 0000000..c06feae --- /dev/null +++ b/ZA2X/DTEL/ZEXCEL_PANE_STATE.slnk @@ -0,0 +1,4 @@ + + + + diff --git a/ZA2X/DTEL/ZEXCEL_PANE_TYPE.slnk b/ZA2X/DTEL/ZEXCEL_PANE_TYPE.slnk new file mode 100644 index 0000000..e3bd68d --- /dev/null +++ b/ZA2X/DTEL/ZEXCEL_PANE_TYPE.slnk @@ -0,0 +1,4 @@ + + + + diff --git a/ZA2X/TABL/ZEXCEL_PANE.slnk b/ZA2X/TABL/ZEXCEL_PANE.slnk new file mode 100644 index 0000000..d616ea9 --- /dev/null +++ b/ZA2X/TABL/ZEXCEL_PANE.slnk @@ -0,0 +1,9 @@ + + + + + + + + +