mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 19:16:10 +08:00
Update zcl_excel_reader_2007.clas.abap
This commit is contained in:
parent
d25eb31d78
commit
0c68ff0c79
|
@ -22,10 +22,6 @@ CLASS zcl_excel_reader_2007 DEFINITION
|
||||||
id TYPE string,
|
id TYPE string,
|
||||||
type TYPE string,
|
type TYPE string,
|
||||||
target TYPE string,
|
target TYPE string,
|
||||||
targetmode TYPE string,
|
|
||||||
worksheet TYPE REF TO zcl_excel_worksheet,
|
|
||||||
sheetid TYPE string, "ins #235 - repeat rows/cols - needed to identify correct sheet
|
|
||||||
localsheetid TYPE string,
|
|
||||||
END OF t_relationship .
|
END OF t_relationship .
|
||||||
TYPES:
|
TYPES:
|
||||||
BEGIN OF t_fileversion,
|
BEGIN OF t_fileversion,
|
||||||
|
@ -1829,7 +1825,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
lv_full_filename TYPE string,
|
lv_full_filename TYPE string,
|
||||||
|
|
||||||
lo_rels_workbook TYPE REF TO if_ixml_document,
|
lo_rels_workbook TYPE REF TO if_ixml_document,
|
||||||
lt_worksheets TYPE STANDARD TABLE OF t_relationship WITH NON-UNIQUE DEFAULT KEY,
|
lt_sheetrelations TYPE STANDARD TABLE OF t_relationship WITH NON-UNIQUE DEFAULT KEY,
|
||||||
lo_workbook TYPE REF TO if_ixml_document,
|
lo_workbook TYPE REF TO if_ixml_document,
|
||||||
lv_workbook_index TYPE i,
|
lv_workbook_index TYPE i,
|
||||||
lv_worksheet_path TYPE string,
|
lv_worksheet_path TYPE string,
|
||||||
|
@ -1840,6 +1836,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
||||||
lo_range TYPE REF TO zcl_excel_range,
|
lo_range TYPE REF TO zcl_excel_range,
|
||||||
lv_worksheet_title TYPE zexcel_sheet_title,
|
lv_worksheet_title TYPE zexcel_sheet_title,
|
||||||
|
lt_worksheets LIKE TABLE OF lo_worksheet,
|
||||||
lv_tabix TYPE i, " #235 - repeat rows/cols. Needed to link defined name to correct worksheet
|
lv_tabix TYPE i, " #235 - repeat rows/cols. Needed to link defined name to correct worksheet
|
||||||
|
|
||||||
ls_range TYPE t_range,
|
ls_range TYPE t_range,
|
||||||
|
@ -1864,7 +1861,6 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
* #229: Set active worksheet - end data declarations
|
* #229: Set active worksheet - end data declarations
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
FIELD-SYMBOLS: <worksheet> TYPE t_relationship.
|
|
||||||
|
|
||||||
|
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
|
@ -1962,7 +1958,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
* thus we only store this information for use when parsing the workbookfile for sheetinformations
|
* thus we only store this information for use when parsing the workbookfile for sheetinformations
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
WHEN lcv_worksheet.
|
WHEN lcv_worksheet.
|
||||||
APPEND ls_relationship TO lt_worksheets.
|
APPEND ls_relationship TO lt_sheetrelations.
|
||||||
|
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
* §2.2 Styles - This holds the styles that are used in all worksheets
|
* §2.2 Styles - This holds the styles that are used in all worksheets
|
||||||
|
@ -1996,12 +1992,12 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
lo_workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ).
|
lo_workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ).
|
||||||
|
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
* §3.1 Names and order of of worksheets
|
* §3.1 Names and O R D E R of worksheets
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
lo_node ?= lo_workbook->find_from_name_ns( name = 'sheet' uri = namespace-main ).
|
lo_node ?= lo_workbook->find_from_name_ns( name = 'sheet' uri = namespace-main ).
|
||||||
lv_workbook_index = 1.
|
|
||||||
WHILE lo_node IS BOUND.
|
WHILE lo_node IS BOUND.
|
||||||
|
|
||||||
|
lv_workbook_index = sy-index.
|
||||||
me->fill_struct_from_attributes( EXPORTING
|
me->fill_struct_from_attributes( EXPORTING
|
||||||
ip_element = lo_node
|
ip_element = lo_node
|
||||||
CHANGING
|
CHANGING
|
||||||
|
@ -2035,19 +2031,16 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
* Load worksheetdata
|
* Load worksheetdata
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
READ TABLE lt_worksheets ASSIGNING <worksheet> WITH KEY id = ls_sheet-id.
|
READ TABLE lt_worksheets INTO ls_relationship WITH KEY id = ls_sheet-id. "rId
|
||||||
IF sy-subrc = 0.
|
IF sy-subrc = 0.
|
||||||
<worksheet>-sheetid = ls_sheet-sheetid. "ins #235 - repeat rows/cols - needed to identify correct sheet
|
CONCATENATE lv_path ls_relationship-target
|
||||||
<worksheet>-localsheetid = |{ lv_workbook_index - 1 }|.
|
|
||||||
CONCATENATE lv_path <worksheet>-target
|
|
||||||
INTO lv_worksheet_path.
|
INTO lv_worksheet_path.
|
||||||
me->load_worksheet( ip_path = lv_worksheet_path
|
me->load_worksheet( ip_path = lv_worksheet_path
|
||||||
io_worksheet = lo_worksheet ).
|
io_worksheet = lo_worksheet ).
|
||||||
<worksheet>-worksheet = lo_worksheet.
|
APPEND lo_worksheet TO lt_worksheets. "in this order (§3.1) for localsheetid
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
lo_node ?= lo_node->get_next( ).
|
lo_node ?= lo_node->get_next( ).
|
||||||
ADD 1 TO lv_workbook_index.
|
|
||||||
|
|
||||||
ENDWHILE.
|
ENDWHILE.
|
||||||
SORT lt_worksheets BY sheetid. " needed for localSheetid -referencing
|
SORT lt_worksheets BY sheetid. " needed for localSheetid -referencing
|
||||||
|
@ -2097,12 +2090,11 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
lv_range_value = lo_node->get_value( ).
|
lv_range_value = lo_node->get_value( ).
|
||||||
|
|
||||||
IF ls_range-localsheetid IS NOT INITIAL. " issue #163+
|
IF ls_range-localsheetid IS NOT INITIAL. " issue #163+
|
||||||
* READ TABLE lt_worksheets ASSIGNING <worksheet> WITH KEY id = ls_range-localsheetid. "del issue #235 - repeat rows/cols " issue #163+
|
|
||||||
* lo_range = <worksheet>-worksheet->add_new_range( ). "del issue #235 - repeat rows/cols " issue #163+
|
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
* issue#235 - repeat rows/columns - begin
|
* issue#235 - repeat rows/columns - begin
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
READ TABLE lt_worksheets ASSIGNING <worksheet> WITH KEY localsheetid = ls_range-localsheetid.
|
lv_tabix = ls_range-localsheetid + 1.
|
||||||
|
READ TABLE lt_worksheets INTO lo_worksheet INDEX lv_tabix.
|
||||||
IF sy-subrc = 0.
|
IF sy-subrc = 0.
|
||||||
CASE ls_range-name.
|
CASE ls_range-name.
|
||||||
|
|
||||||
|
@ -2119,7 +2111,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
e_row_end = ls_area-row_end ).
|
e_row_end = ls_area-row_end ).
|
||||||
ls_area-col_start = zcl_excel_common=>convert_column2int( lv_col_start_alpha ).
|
ls_area-col_start = zcl_excel_common=>convert_column2int( lv_col_start_alpha ).
|
||||||
ls_area-col_end = zcl_excel_common=>convert_column2int( lv_col_end_alpha ).
|
ls_area-col_end = zcl_excel_common=>convert_column2int( lv_col_end_alpha ).
|
||||||
lo_autofilter = io_excel->add_new_autofilter( io_sheet = <worksheet>-worksheet ) .
|
lo_autofilter = io_excel->add_new_autofilter( io_sheet = lo_worksheet ) .
|
||||||
lo_autofilter->set_filter_area( is_area = ls_area ).
|
lo_autofilter->set_filter_area( is_area = ls_area ).
|
||||||
CATCH zcx_excel.
|
CATCH zcx_excel.
|
||||||
" we expected a range but it was not usable, so just ignore it
|
" we expected a range but it was not usable, so just ignore it
|
||||||
|
@ -2130,18 +2122,16 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
* repeat print rows/columns
|
* repeat print rows/columns
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
WHEN zif_excel_sheet_printsettings=>gcv_print_title_name.
|
WHEN zif_excel_sheet_printsettings=>gcv_print_title_name.
|
||||||
lo_range = <worksheet>-worksheet->add_new_range( ).
|
|
||||||
lo_range->name = zif_excel_sheet_printsettings=>gcv_print_title_name.
|
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
* This might be a temporary solution. Maybe ranges get be reworked
|
* This might be a temporary solution. Maybe ranges get be reworked
|
||||||
* to support areas consisting of multiple rectangles
|
* to support areas consisting of multiple rectangles
|
||||||
* But for now just split the range into row and columnpart
|
* But for now just split the range into row and columnpart
|
||||||
*--------------------------------------------------------------------*
|
*--------------------------------------------------------------------*
|
||||||
CLEAR:lv_range_value_1,
|
IF lv_range_value IS NOT INITIAL.
|
||||||
lv_range_value_2.
|
* We don't need a range object here no more, because since the
|
||||||
IF lv_range_value IS INITIAL.
|
* parameter i_allow_1dim_range is passed below anything works
|
||||||
* Empty --> nothing to do
|
* fine within worksheet's method print_title_set_range, which
|
||||||
ELSE.
|
* now creates the range object and sets name and value correctly.
|
||||||
IF lv_range_value(1) = `'`. " Escaped
|
IF lv_range_value(1) = `'`. " Escaped
|
||||||
lv_regex = `^('[^']*')+![^,]*,`.
|
lv_regex = `^('[^']*')+![^,]*,`.
|
||||||
ELSE.
|
ELSE.
|
||||||
|
@ -2155,42 +2145,44 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
lv_range_value_1 = lv_range_value(lv_position_temp).
|
lv_range_value_1 = lv_range_value(lv_position_temp).
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_range_value_1 = lv_range_value.
|
lv_range_value_1 = lv_range_value.
|
||||||
|
CLEAR lv_range_value_2.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
|
||||||
* 1st range
|
* 1st range
|
||||||
zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1
|
zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1
|
||||||
i_allow_1dim_range = abap_true
|
i_allow_1dim_range = abap_true
|
||||||
IMPORTING e_column_start = lv_col_start_alpha
|
IMPORTING e_column_start = lv_col_start_alpha
|
||||||
e_column_end = lv_col_end_alpha
|
e_column_end = lv_col_end_alpha
|
||||||
e_row_start = lv_row_start
|
e_row_start = lv_row_start
|
||||||
e_row_end = lv_row_end ).
|
e_row_end = lv_row_end ).
|
||||||
IF lv_col_start_alpha IS NOT INITIAL.
|
IF lv_col_start_alpha IS NOT INITIAL.
|
||||||
<worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha
|
lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha
|
||||||
iv_columns_to = lv_col_end_alpha ).
|
iv_columns_to = lv_col_end_alpha ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
IF lv_row_start IS NOT INITIAL.
|
IF lv_row_start IS NOT INITIAL.
|
||||||
<worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start
|
lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start
|
||||||
iv_rows_to = lv_row_end ).
|
iv_rows_to = lv_row_end ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
* 2nd range
|
* 2nd range
|
||||||
zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2
|
zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2
|
||||||
i_allow_1dim_range = abap_true
|
i_allow_1dim_range = abap_true
|
||||||
IMPORTING e_column_start = lv_col_start_alpha
|
IMPORTING e_column_start = lv_col_start_alpha
|
||||||
e_column_end = lv_col_end_alpha
|
e_column_end = lv_col_end_alpha
|
||||||
e_row_start = lv_row_start
|
e_row_start = lv_row_start
|
||||||
e_row_end = lv_row_end ).
|
e_row_end = lv_row_end ).
|
||||||
IF lv_col_start_alpha IS NOT INITIAL.
|
IF lv_col_start_alpha IS NOT INITIAL.
|
||||||
<worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha
|
lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha
|
||||||
iv_columns_to = lv_col_end_alpha ).
|
iv_columns_to = lv_col_end_alpha ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
IF lv_row_start IS NOT INITIAL.
|
IF lv_row_start IS NOT INITIAL.
|
||||||
<worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start
|
lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start
|
||||||
iv_rows_to = lv_row_end ).
|
iv_rows_to = lv_row_end ).
|
||||||
|
ENDIF.
|
||||||
|
ELSE.
|
||||||
|
lo_range = lo_worksheet->add_new_range( ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
WHEN OTHERS.
|
WHEN OTHERS.
|
||||||
lo_range = <worksheet>-worksheet->add_new_range( ).
|
lo_range = lo_worksheet->add_new_range( ).
|
||||||
|
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -2200,7 +2192,6 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION.
|
||||||
ELSE. " issue #163+
|
ELSE. " issue #163+
|
||||||
lo_range = io_excel->add_new_range( ). " issue #163+
|
lo_range = io_excel->add_new_range( ). " issue #163+
|
||||||
ENDIF. " issue #163+
|
ENDIF. " issue #163+
|
||||||
* lo_range = ip_excel->add_new_range( ). " issue #163-
|
|
||||||
IF lo_range IS BOUND. "ins issue #235 - repeat rows/cols
|
IF lo_range IS BOUND. "ins issue #235 - repeat rows/cols
|
||||||
lo_range->name = ls_range-name.
|
lo_range->name = ls_range-name.
|
||||||
lo_range->set_range_value( lv_range_value ).
|
lo_range->set_range_value( lv_range_value ).
|
||||||
|
|
Loading…
Reference in New Issue
Block a user