diff --git a/src/demos/zdemo_excel40.prog.abap b/src/demos/zdemo_excel40.prog.abap index 0c3f3be..54bf595 100644 --- a/src/demos/zdemo_excel40.prog.abap +++ b/src/demos/zdemo_excel40.prog.abap @@ -1,8 +1,9 @@ REPORT zdemo_excel40. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_changer TYPE REF TO zif_excel_style_changer. DATA: lv_row TYPE zexcel_cell_row, lv_col TYPE i, @@ -29,41 +30,32 @@ START-OF-SELECTION. * - first 3 rows will have fontcolor set * These marked cells will be used for repeatable rows/columns on printpages *--------------------------------------------------------------------* - DO 100 TIMES. " Rows + lo_worksheet->set_area( + ip_column_start = 1 + ip_column_end = 20 + ip_row = 1 + ip_row_to = 100 + ip_formula = 'CHAR(64+COLUMN())&TEXT(ROW(),"????????0")' + ip_area = lo_worksheet->c_area-whole ). - lv_row = sy-index . - WRITE lv_row TO lv_row_char. - - DO 20 TIMES. - - lv_col = sy-index - 1. - CONCATENATE sy-abcde+lv_col(1) lv_row_char INTO lv_value. - lv_col = sy-index. - lo_worksheet->set_cell( ip_row = lv_row - ip_column = lv_col - ip_value = lv_value ). - - TRY. - IF lv_row <= 3. - lo_worksheet->change_cell_style( ip_column = lv_col - ip_row = lv_row - ip_fill_filltype = zcl_excel_style_fill=>c_fill_solid - ip_fill_fgcolor_rgb = zcl_excel_style_color=>c_yellow ). - ENDIF. - IF lv_col <= 4. - lo_worksheet->change_cell_style( ip_column = lv_col - ip_row = lv_row - ip_font_color_rgb = zcl_excel_style_color=>c_red ). - ENDIF. - CATCH zcx_excel . - ENDTRY. - - ENDDO. - - - - ENDDO. + lo_style_changer = zcl_excel_style_changer=>create( lo_excel ). + lo_style_changer->set_fill_filltype( zcl_excel_style_fill=>c_fill_solid ). + lo_style_changer->set_fill_fgcolor_rgb( zcl_excel_style_color=>c_yellow ). + lo_worksheet->change_area_style( + ip_column_start = 1 + ip_column_end = 20 + ip_row = 1 + ip_row_to = 3 + ip_style_changer = lo_style_changer ). + lo_style_changer = zcl_excel_style_changer=>create( lo_excel ). + lo_style_changer->set_font_color_rgb( zcl_excel_style_color=>c_red ). + lo_worksheet->change_area_style( + ip_column_start = 1 + ip_column_end = 4 + ip_row = 1 + ip_row_to = 100 + ip_style_changer = lo_style_changer ). *--------------------------------------------------------------------* * Printsettings diff --git a/src/demos/zdemo_excel40.prog.xml b/src/demos/zdemo_excel40.prog.xml index 4242d2e..d9e5dff 100644 --- a/src/demos/zdemo_excel40.prog.xml +++ b/src/demos/zdemo_excel40.prog.xml @@ -13,8 +13,8 @@ R - abap2xlsx Demo: Print settings - 30 + abap2xlsx Demo: Area and Print settings + 39 S diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index b5ada1f..fb5f19d 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -176,6 +176,15 @@ CLASS zcl_excel_worksheet DEFINITION METHODS calculate_column_widths RAISING zcx_excel . + METHODS change_area_style + IMPORTING + !ip_column_start TYPE simple + !ip_column_end TYPE simple OPTIONAL + !ip_row TYPE zexcel_cell_row + !ip_row_to TYPE zexcel_cell_row OPTIONAL + !ip_style_changer TYPE REF TO zif_excel_style_changer + RAISING + zcx_excel. METHODS change_cell_style IMPORTING !ip_column TYPE simple @@ -1387,6 +1396,65 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. ENDMETHOD. "CALCULATE_COLUMN_WIDTHS + METHOD change_area_style. + + DATA: lv_row TYPE zexcel_cell_row, + lv_row_start TYPE zexcel_cell_row, + lv_row_to TYPE zexcel_cell_row, + lv_column_int TYPE zexcel_cell_column_alpha, + lv_column TYPE zexcel_cell_column_alpha, + lv_column_start TYPE zexcel_cell_column_alpha, + lv_column_end TYPE zexcel_cell_column_alpha, + lv_column_start_int TYPE zexcel_cell_column_alpha, + lv_column_end_int TYPE zexcel_cell_column_alpha. + + lv_row_to = ip_row_to. + lv_row = ip_row. + + IF lv_row_to IS INITIAL OR ip_row_to IS NOT SUPPLIED. + lv_row_to = lv_row. + ENDIF. + + lv_column_start = ip_column_start. + lv_column_end = ip_column_end. + + IF lv_column_end IS INITIAL OR ip_column_end IS NOT SUPPLIED. + lv_column_end = lv_column_start. + ENDIF. + + lv_column_start_int = zcl_excel_common=>convert_column2int( lv_column_start ). + lv_column_end_int = zcl_excel_common=>convert_column2int( lv_column_end ). + + IF lv_column_start_int > lv_column_end_int OR lv_row > lv_row_to. + + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Wrong Merging Parameters'. + + ENDIF. + + lv_column_int = lv_column_start_int. + lv_row_start = lv_row. + WHILE lv_column_int <= lv_column_end_int. + + lv_column = zcl_excel_common=>convert_column2alpha( lv_column_int ). + lv_row = lv_row_start. + + WHILE lv_row <= lv_row_to. + + ip_style_changer->apply( ip_worksheet = me + ip_column = lv_column_int + ip_row = lv_row ). + + ADD 1 TO lv_row. + ENDWHILE. + + ADD 1 TO lv_column_int. + ENDWHILE. + + ENDMETHOD. + + METHOD change_cell_style. DATA: changer TYPE REF TO zif_excel_style_changer. diff --git a/src/zcl_excel_worksheet.clas.xml b/src/zcl_excel_worksheet.clas.xml index a9bcd5e..edad9b8 100644 --- a/src/zcl_excel_worksheet.clas.xml +++ b/src/zcl_excel_worksheet.clas.xml @@ -189,6 +189,12 @@ I Calculate widths for auto-size columns + + ZCL_EXCEL_WORKSHEET + CHANGE_AREA_STYLE + E + Change area style + ZCL_EXCEL_WORKSHEET CHANGE_CELL_STYLE