diff --git a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk
index a5c0f20..c70801c 100644
--- a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk
+++ b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk
@@ -1166,15 +1166,17 @@ ENDCLASS. "lcl_Excel_Common_Test
ABAP
-
+
+
-
-
-
+
+
+
+
diff --git a/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk b/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk
index 42e976d..1f6bdc6 100644
--- a/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk
+++ b/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk
@@ -1,35 +1,44 @@
-
-
-
-
-
-
+
+
-
@@ -192,10 +201,13 @@ ENDCLASS. "lcl_gui_alv_grid DEFINITION
-
-
+
+
+
+
+
@@ -203,6 +215,9 @@ ENDCLASS. "lcl_gui_alv_grid DEFINITION
+
+
+
@@ -211,44 +226,44 @@ ENDCLASS. "lcl_gui_alv_grid DEFINITION
ABAP
SLIS
SOI
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
method ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_COLUMNS.
@@ -301,7 +316,7 @@ ENDCLASS. "lcl_gui_alv_grid DEFINITION
method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_COLUMNS.
*--------------------------------------------------------------------*
* issue#235 - repeat rows/columns
-* - Stefan Schmöcker, 2012-12-02
+* - Stefan Schmöcker, 2012-12-02
*--------------------------------------------------------------------*
DATA: lv_col_from_int TYPE i,
@@ -350,7 +365,7 @@ ENDCLASS. "lcl_gui_alv_grid DEFINITION
method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_ROWS.
*--------------------------------------------------------------------*
* issue#235 - repeat rows/columns
-* - Stefan Schmöcker, 2012-12-02
+* - Stefan Schmöcker, 2012-12-02
*--------------------------------------------------------------------*
DATA: lv_errormessage TYPE string.
@@ -2618,7 +2633,7 @@ ENDCLASS. "lcl_gui_alv_grid DEFINITION
method BIND_TABLE.
*--------------------------------------------------------------------*
* issue #230 - Pimp my Code
-* - Stefan Schmöcker, (wi p) 2012-12-01
+* - Stefan Schmöcker, (wi p) 2012-12-01
* - ...
* aligning code
* message made to support multilinguality
@@ -3191,7 +3206,7 @@ ENDMETHOD.
* ).
* " For an easy start we just take the number of characters as the width
* width = strlen( cell_value ).
-* " Addition to solve issue #120, contribution by Stefan Schm#ÃâÃâÃâÃâÃâÃâ ÃâÃâÃâÃâÃâ̢̮̮ÃâÃâ¬ÃâÃÅ¡#cker
+* " Addition to solve issue #120, contribution by Stefan Schmöcker
* " Calculate width using Font Size and Font Type
* IF cell_style IS BOUND
* AND cell_style->font IS BOUND.
@@ -3685,12 +3700,33 @@ ENDMETHOD.
endmethod.
- method DELETE_MERGE.
+
+
+ METHOD delete_merge.
- DELETE sheet_content_merge INDEX 1.
- DELETE sheet_content_merge INDEX 1.
+ FIELD-SYMBOLS: <ls_merged_cell> LIKE LINE OF me->mt_merged_cells.
+ DATA: is_merged TYPE abap_bool.
+*--------------------------------------------------------------------*
+* If cell information is passed delete merge including this cell,
+* otherwise delete all merges
+*--------------------------------------------------------------------*
+ IF ip_cell_column IS INITIAL
+ OR ip_cell_row IS INITIAL.
+ CLEAR me->mt_merged_cells.
+ ELSE.
+ LOOP AT me->mt_merged_cells ASSIGNING <ls_merged_cell>.
- endmethod.
+ is_merged = me->is_cell_merged( ip_column = ip_cell_column
+ ip_row = ip_cell_row ).
+ IF is_merged = abap_true.
+ DELETE me->mt_merged_cells. " Delete this merge, that includes this cell
+ EXIT.
+ ENDIF.
+
+ ENDLOOP.
+ ENDIF.
+
+ENDMETHOD.
@@ -4078,78 +4114,30 @@ ENDMETHOD.
- method GET_MERGE.
+ METHOD get_merge.
- DATA: lv_column_start TYPE string,
- lv_column_end TYPE string,
- lv_row TYPE string,
- lv_index TYPE sy-tabix,
- ls_sheet_content TYPE zexcel_s_cell_data,
- range_from TYPE string,
- range_to TYPE string,
- lv_merge_range TYPE string,
- lv_count TYPE string.
+ FIELD-SYMBOLS: <ls_merged_cell> LIKE LINE OF me->mt_merged_cells.
- FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data.
+ DATA: lv_col_from TYPE string,
+ lv_col_to TYPE string,
+ lv_row_from TYPE string,
+ lv_row_to TYPE string,
+ lv_merge_range TYPE string.
- DESCRIBE TABLE sheet_content_merge LINES lv_count.
+ LOOP AT me->mt_merged_cells ASSIGNING <ls_merged_cell>.
- WHILE lv_count GT lv_index.
-* LOOP AT sheet_content_merge ASSIGNING <fs_sheet_content>.
- lv_index = lv_index + 1.
- READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX lv_index.
- lv_column_start = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ).
- lv_row = <fs_sheet_content>-cell_row.
- SHIFT lv_column_start RIGHT DELETING TRAILING space.
- SHIFT lv_column_start LEFT DELETING LEADING space.
- SHIFT lv_row RIGHT DELETING TRAILING space.
- SHIFT lv_row LEFT DELETING LEADING space.
- CONCATENATE lv_column_start lv_row
- INTO range_from.
-
- lv_index = lv_index + 1.
- READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX lv_index.
- lv_column_end = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ).
- lv_row = <fs_sheet_content>-cell_row.
- SHIFT lv_column_end RIGHT DELETING TRAILING space.
- SHIFT lv_column_end LEFT DELETING LEADING space.
- SHIFT lv_row RIGHT DELETING TRAILING space.
- SHIFT lv_row LEFT DELETING LEADING space.
- CONCATENATE lv_column_end lv_row
- INTO range_to.
-
- CONCATENATE range_from range_to INTO lv_merge_range
- SEPARATED BY ':'.
+ lv_col_from = zcl_excel_common=>convert_column2alpha( <ls_merged_cell>-col_from ).
+ lv_col_to = zcl_excel_common=>convert_column2alpha( <ls_merged_cell>-col_to ).
+ lv_row_from = <ls_merged_cell>-row_from.
+ lv_row_to = <ls_merged_cell>-row_to .
+ CONCATENATE lv_col_from lv_row_from ':' lv_col_to lv_row_to
+ INTO lv_merge_range.
+ CONDENSE lv_merge_range NO-GAPS.
APPEND lv_merge_range TO merge_range.
- ENDWHILE.
-* ENDLOOP.
-* READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX 1.
-* IF sy-subrc EQ 0 AND <fs_sheet_content> IS ASSIGNED.
-* lv_column_start = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ).
-* lv_row = <fs_sheet_content>-cell_row.
-* SHIFT lv_column_start RIGHT DELETING TRAILING space.
-* SHIFT lv_column_start LEFT DELETING LEADING space.
-* SHIFT lv_row RIGHT DELETING TRAILING space.
-* SHIFT lv_row LEFT DELETING LEADING space.
-* CONCATENATE lv_column_start lv_row
-* INTO range_from.
-* ENDIF.
-* READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX 2.
-* IF sy-subrc EQ 0 AND <fs_sheet_content> IS ASSIGNED.
-* lv_column_end = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ).
-* SHIFT lv_column_end RIGHT DELETING TRAILING space.
-* SHIFT lv_column_end LEFT DELETING LEADING space.
-* CONCATENATE lv_column_end lv_row
-* INTO range_to.
-* ENDIF.
+ ENDLOOP.
-* IF range_from NE space AND range_to NE space.
-* CONCATENATE range_from range_to INTO ep_merge_range
-* SEPARATED BY ':'.
-* ENDIF.
-
- endmethod.
+ENDMETHOD.
@@ -4235,11 +4223,11 @@ ENDMETHOD.
- method GET_VALUE_TYPE.
- DATA: lo_addit TYPE REF TO cl_abap_elemdescr,
- ls_dfies TYPE dfies,
- l_function TYPE funcname,
- l_value(50) TYPE c.
+ METHOD get_value_type.
+ DATA: lo_addit TYPE REF TO cl_abap_elemdescr,
+ ls_dfies TYPE dfies,
+ l_function TYPE funcname,
+ l_value(50) TYPE c.
ep_value = ip_value.
ep_value_type = cl_abap_typedescr=>typekind_string. " Thats our default if something goes wrong.
@@ -4266,18 +4254,22 @@ ENDMETHOD.
IF sy-subrc = 0.
CALL FUNCTION l_function
EXPORTING
- input = ip_value
+ input = ip_value
IMPORTING
* LONG_TEXT =
- output = l_value
+ output = l_value
* SHORT_TEXT =
EXCEPTIONS
- OTHERS = 1.
+ OTHERS = 1.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
- ep_value = l_value.
+ TRY.
+ ep_value = l_value.
+ CATCH cx_root.
+ ep_value = ip_value.
+ ENDTRY.
ENDIF.
ENDIF.
ENDIF.
@@ -4286,31 +4278,36 @@ ENDMETHOD.
ENDIF.
ENDIF.
- endmethod.
+ENDMETHOD.
- method IS_CELL_MERGED.
- DATA lt_merge_range TYPE string_table.
+ METHOD is_cell_merged.
- FIELD-SYMBOLS <lv_merge_range> LIKE LINE OF lt_merge_range.
+ DATA: lv_column TYPE i.
+ FIELD-SYMBOLS: <ls_merged_cell> LIKE LINE OF me->mt_merged_cells.
- lt_merge_range = me->get_merge( ).
+ lv_column = zcl_excel_common=>convert_column2int( ip_column ).
- LOOP AT lt_merge_range ASSIGNING <lv_merge_range>.
- rp_is_merged = zcl_excel_common=>is_cell_in_range(
- ip_column = ip_column
- ip_row = ip_row
- ip_range = <lv_merge_range> ).
- IF rp_is_merged = abap_true.
- EXIT.
+ rp_is_merged = abap_false. " Assume not in merged area
+
+ LOOP AT me->mt_merged_cells ASSIGNING <ls_merged_cell>.
+
+ IF <ls_merged_cell>-col_from <= lv_column
+ AND <ls_merged_cell>-col_to >= lv_column
+ AND <ls_merged_cell>-row_from <= ip_row
+ AND <ls_merged_cell>-row_to >= ip_row.
+ rp_is_merged = abap_true. " until we are proven different
+ RETURN.
ENDIF.
+
ENDLOOP.
-endmethod.
+
+ENDMETHOD.
method PRINT_TITLE_SET_RANGE.
@@ -4451,7 +4448,7 @@ endmethod.
* Begin of change issue #152 - don't touch exisiting style if only value is passed
* lv_style_guid = ip_style.
lv_column = zcl_excel_common=>convert_column2int( ip_column ).
- READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH TABLE KEY cell_row = ip_row " Changed to access via table key , Stefan Schmöcker, 2013-08-03
+ READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH TABLE KEY cell_row = ip_row " Changed to access via table key , Stefan Schmöcker, 2013-08-03
cell_column = lv_column.
IF sy-subrc = 0.
IF ip_style IS INITIAL.
@@ -4767,41 +4764,54 @@ endmethod.
- method SET_MERGE.
+ METHOD set_merge.
- DATA: lv_column_start TYPE zexcel_cell_column,
- lv_column_end TYPE zexcel_cell_column,
- ls_sheet_content TYPE zexcel_s_cell_data,
- lv_row_alpha TYPE string.
+ DATA: ls_merge TYPE mty_merge,
+ lv_errormessage TYPE string.
- FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data.
+ FIELD-SYMBOLS: <ls_merge> LIKE LINE OF me->mt_merged_cells.
- lv_column_start = zcl_excel_common=>convert_column2int( ip_column_start ).
- lv_column_end = zcl_excel_common=>convert_column2int( ip_column_end ).
-
- ls_sheet_content-cell_row = ip_row.
- ls_sheet_content-cell_column = lv_column_start.
- lv_row_alpha = ip_row.
- SHIFT lv_row_alpha RIGHT DELETING TRAILING space.
- SHIFT lv_row_alpha LEFT DELETING LEADING space.
- CONCATENATE ip_column_start lv_row_alpha INTO ls_sheet_content-cell_coords.
- INSERT ls_sheet_content INTO TABLE sheet_content_merge.
-
- ls_sheet_content-cell_column = lv_column_end.
- IF ip_row_to IS SUPPLIED.
- ls_sheet_content-cell_row = ip_row_to.
- lv_row_alpha = ip_row_to.
- ELSE.
- lv_row_alpha = ip_row.
- ls_sheet_content-cell_row = ip_row.
+*--------------------------------------------------------------------*
+* Build new range area to insert into range table
+*--------------------------------------------------------------------*
+ ls_merge-row_from = ip_row.
+ ls_merge-row_to = ip_row_to.
+ IF ls_merge-row_from > ls_merge-row_to.
+ lv_errormessage = 'Merge: First row larger then last row'(405).
+ RAISE EXCEPTION TYPE zcx_excel
+ EXPORTING
+ error = lv_errormessage.
ENDIF.
- SHIFT lv_row_alpha RIGHT DELETING TRAILING space.
- SHIFT lv_row_alpha LEFT DELETING LEADING space.
- CONCATENATE ip_column_end lv_row_alpha INTO ls_sheet_content-cell_coords.
- INSERT ls_sheet_content INTO TABLE sheet_content_merge.
+ ls_merge-col_from = zcl_excel_common=>convert_column2int( ip_column_start ).
+ ls_merge-col_to = zcl_excel_common=>convert_column2int( ip_column_end ).
+ IF ls_merge-col_from > ls_merge-col_to.
+ lv_errormessage = 'Merge: First column larger then last column'(406).
+ RAISE EXCEPTION TYPE zcx_excel
+ EXPORTING
+ error = lv_errormessage.
+ ENDIF.
- endmethod.
+*--------------------------------------------------------------------*
+* Check merge not overlapping with existing merges
+*--------------------------------------------------------------------*
+ LOOP AT me->mt_merged_cells TRANSPORTING NO FIELDS WHERE NOT ( row_from > ls_merge-row_to
+ OR row_to < ls_merge-row_from
+ OR col_from > ls_merge-col_to
+ OR col_to < ls_merge-col_from ).
+ lv_errormessage = 'Overlapping merges'(404).
+ RAISE EXCEPTION TYPE zcx_excel
+ EXPORTING
+ error = lv_errormessage.
+
+ ENDLOOP.
+
+*--------------------------------------------------------------------*
+* Everything seems ok --> add to merge table
+*--------------------------------------------------------------------*
+ INSERT ls_merge INTO TABLE me->mt_merged_cells.
+
+ENDMETHOD.
@@ -4990,7 +5000,7 @@ ENDMETHOD.
method SET_TITLE.
*--------------------------------------------------------------------*
* ToDos:
-* 2doç1 The current coding for replacing a named ranges name
+* 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
*--------------------------------------------------------------------*
@@ -5066,7 +5076,7 @@ ENDMETHOD.
* 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
+* 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
*--------------------------------------------------------------------*