diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap index 70dae56..53fc484 100644 --- a/src/zcl_excel_reader_2007.clas.abap +++ b/src/zcl_excel_reader_2007.clas.abap @@ -2190,6 +2190,7 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. ENDIF. WHEN OTHERS. + lo_range = -worksheet->add_new_range( ). ENDCASE. ENDIF. diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index 6ef57ac..ec2e692 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -4505,27 +4505,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. METHOD set_title. -*--------------------------------------------------------------------* -* ToDos: -* 2do §1 The current coding for replacing a named ranges name -* after renaming a sheet should be checked if it is -* really working if sheetname should be escaped -*--------------------------------------------------------------------* - -*--------------------------------------------------------------------* -* issue #230 - Pimp my Code -* - Stefan Schmoecker, (wip ) 2012-12-08 -* - ... -* changes: aligning code -* message made to support multilinguality -*--------------------------------------------------------------------* -* issue#243 - ' is not allowed as first character in sheet title -* - Stefan Schmoecker, 2012-12-02 -* changes: added additional check for ' as first character -*--------------------------------------------------------------------* DATA: lo_worksheets_iterator TYPE REF TO zcl_excel_collection_iterator, lo_worksheet TYPE REF TO zcl_excel_worksheet, - errormessage TYPE string, lv_rangesheetname_old TYPE string, lv_rangesheetname_new TYPE string, lo_ranges_iterator TYPE REF TO zcl_excel_collection_iterator, @@ -4555,14 +4536,14 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. * Check whether title is unique in workbook *--------------------------------------------------------------------* lo_worksheets_iterator = me->excel->get_worksheets_iterator( ). - WHILE lo_worksheets_iterator->has_next( ) = 'X'. + WHILE lo_worksheets_iterator->has_next( ) = abap_true. lo_worksheet ?= lo_worksheets_iterator->get_next( ). CHECK me->guid <> lo_worksheet->get_guid( ). " Don't check against itself IF ip_title = lo_worksheet->get_title( ). " Not unique --> raise exception - errormessage = 'Duplicate sheetname &'. - REPLACE '&' IN errormessage WITH ip_title. - zcx_excel=>raise_text( errormessage ). + lv_errormessage = 'Duplicate sheetname &'. + REPLACE '&' IN lv_errormessage WITH ip_title. + zcx_excel=>raise_text( lv_errormessage ). ENDIF. ENDWHILE. @@ -4570,21 +4551,17 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. *--------------------------------------------------------------------* * Remember old sheetname and rename sheet to desired name *--------------------------------------------------------------------* - CONCATENATE me->title '!' INTO lv_rangesheetname_old. + lv_rangesheetname_old = zcl_excel_common=>escape_string( me->title ) && '!'. me->title = ip_title. *--------------------------------------------------------------------* * After changing this worksheet's title we have to adjust * all ranges that are referring to this worksheet. *--------------------------------------------------------------------* -* 2do §1 - Check if the following quickfix is solid -* I fear it isn't - but this implementation is better then -* nothing at all since it handles a supposed majority of cases -*--------------------------------------------------------------------* - CONCATENATE me->title '!' INTO lv_rangesheetname_new. + lv_rangesheetname_new = zcl_excel_common=>escape_string( me->title ) && '!'. - lo_ranges_iterator = me->excel->get_ranges_iterator( ). - WHILE lo_ranges_iterator->has_next( ) = 'X'. + lo_ranges_iterator = me->excel->get_ranges_iterator( ). "workbookglobal ranges + WHILE lo_ranges_iterator->has_next( ) = abap_true. lo_range ?= lo_ranges_iterator->get_next( ). lv_range_value = lo_range->get_value( ). @@ -4595,6 +4572,20 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. ENDWHILE. + IF me->ranges IS BOUND. "not yet bound if called from worksheet's constructor + lo_ranges_iterator = me->get_ranges_iterator( ). "sheetlocal ranges, repeat rows and columns + WHILE lo_ranges_iterator->has_next( ) = abap_true. + + lo_range ?= lo_ranges_iterator->get_next( ). + lv_range_value = lo_range->get_value( ). + REPLACE ALL OCCURRENCES OF lv_rangesheetname_old IN lv_range_value WITH lv_rangesheetname_new. + IF sy-subrc = 0. + lo_range->set_range_value( lv_range_value ). + ENDIF. + + ENDWHILE. + ENDIF. + ENDMETHOD. "SET_TITLE