diff --git a/src/demos/zabap2xlsx_demo_show.prog.abap b/src/demos/zabap2xlsx_demo_show.prog.abap index 38f86b8be..fcb23a13b 100644 --- a/src/demos/zabap2xlsx_demo_show.prog.abap +++ b/src/demos/zabap2xlsx_demo_show.prog.abap @@ -10,28 +10,28 @@ REPORT zabap2xlsx_demo_show. CLASS lcl_perform DEFINITION CREATE PRIVATE. PUBLIC SECTION. CLASS-METHODS: setup_objects, - collect_reports, + collect_reports, - handle_nav FOR EVENT double_click OF cl_gui_alv_grid - IMPORTING e_row. + handle_nav FOR EVENT double_click OF cl_gui_alv_grid + IMPORTING e_row. PRIVATE SECTION. TYPES: BEGIN OF ty_reports, - progname TYPE reposrc-progname, - sort TYPE reposrc-progname, + progname TYPE reposrc-progname, + sort TYPE reposrc-progname, description TYPE repti, - filename TYPE string, + filename TYPE string, END OF ty_reports. CLASS-DATA: - lo_grid TYPE REF TO cl_gui_alv_grid, - lo_text TYPE REF TO cl_gui_textedit, - cl_document TYPE REF TO i_oi_document_proxy, + lo_grid TYPE REF TO cl_gui_alv_grid, + lo_text TYPE REF TO cl_gui_textedit, + cl_document TYPE REF TO i_oi_document_proxy, - t_reports TYPE STANDARD TABLE OF ty_reports WITH NON-UNIQUE DEFAULT KEY. - CLASS-DATA:error TYPE REF TO i_oi_error, - t_errors TYPE STANDARD TABLE OF REF TO i_oi_error WITH NON-UNIQUE DEFAULT KEY, - cl_control TYPE REF TO i_oi_container_control. "Office Dokument + t_reports TYPE STANDARD TABLE OF ty_reports WITH NON-UNIQUE DEFAULT KEY. + CLASS-DATA:error TYPE REF TO i_oi_error, + t_errors TYPE STANDARD TABLE OF REF TO i_oi_error WITH NON-UNIQUE DEFAULT KEY, + cl_control TYPE REF TO i_oi_container_control. "Office Dokument ENDCLASS. "lcl_perform DEFINITION @@ -50,8 +50,8 @@ END-OF-SELECTION. *----------------------------------------------------------------------* CLASS lcl_perform IMPLEMENTATION. METHOD setup_objects. - DATA: lo_split TYPE REF TO cl_gui_splitter_container, - lo_container TYPE REF TO cl_gui_container. + DATA: lo_split TYPE REF TO cl_gui_splitter_container, + lo_container TYPE REF TO cl_gui_container. DATA: it_fieldcat TYPE lvc_t_fcat, is_layout TYPE lvc_s_layo, @@ -202,13 +202,13 @@ CLASS lcl_perform IMPLEMENTATION. METHOD handle_nav. CONSTANTS: filename TYPE text80 VALUE 'ZABAP2XLSX_DEMO_SHOW.xlsx'. - DATA: wa_report LIKE LINE OF t_reports, - t_source TYPE STANDARD TABLE OF text255, - t_rawdata TYPE solix_tab, - wa_rawdata LIKE LINE OF t_rawdata, - bytecount TYPE i, - length TYPE i, - add_selopt TYPE flag. + DATA: wa_report LIKE LINE OF t_reports, + t_source TYPE STANDARD TABLE OF text255, + t_rawdata TYPE solix_tab, + wa_rawdata LIKE LINE OF t_rawdata, + bytecount TYPE i, + length TYPE i, + add_selopt TYPE flag. READ TABLE t_reports INTO wa_report INDEX e_row-index. @@ -235,14 +235,14 @@ CLASS lcl_perform IMPLEMENTATION. ENDIF. ENDIF. IF add_selopt IS INITIAL. - SUBMIT (wa_report-progname) AND RETURN "#EC CI_SUBMIT + SUBMIT (wa_report-progname) AND RETURN "#EC CI_SUBMIT WITH p_backfn = filename WITH rb_back = 'X' WITH rb_down = ' ' WITH rb_send = ' ' WITH rb_show = ' '. ELSE. - SUBMIT (wa_report-progname) VIA SELECTION-SCREEN AND RETURN "#EC CI_SUBMIT + SUBMIT (wa_report-progname) VIA SELECTION-SCREEN AND RETURN "#EC CI_SUBMIT WITH p_backfn = filename WITH rb_back = 'X' WITH rb_down = ' ' diff --git a/src/demos/zangry_birds.prog.abap b/src/demos/zangry_birds.prog.abap index d2164402a..46b5f709a 100644 --- a/src/demos/zangry_birds.prog.abap +++ b/src/demos/zangry_birds.prog.abap @@ -8,44 +8,44 @@ REPORT zangry_birds. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_border_light TYPE REF TO zcl_excel_style_border, - lo_style_color0 TYPE REF TO zcl_excel_style, - lo_style_color1 TYPE REF TO zcl_excel_style, - lo_style_color2 TYPE REF TO zcl_excel_style, - lo_style_color3 TYPE REF TO zcl_excel_style, - lo_style_color4 TYPE REF TO zcl_excel_style, - lo_style_color5 TYPE REF TO zcl_excel_style, - lo_style_color6 TYPE REF TO zcl_excel_style, - lo_style_color7 TYPE REF TO zcl_excel_style, - lo_style_credit TYPE REF TO zcl_excel_style, - lo_style_link TYPE REF TO zcl_excel_style, - lo_column TYPE REF TO zcl_excel_column, - lo_row TYPE REF TO zcl_excel_row, - lo_hyperlink TYPE REF TO zcl_excel_hyperlink. - -DATA: lv_style_color0_guid TYPE zexcel_cell_style, - lv_style_color1_guid TYPE zexcel_cell_style, - lv_style_color2_guid TYPE zexcel_cell_style, - lv_style_color3_guid TYPE zexcel_cell_style, - lv_style_color4_guid TYPE zexcel_cell_style, - lv_style_color5_guid TYPE zexcel_cell_style, - lv_style_color6_guid TYPE zexcel_cell_style, - lv_style_color7_guid TYPE zexcel_cell_style, - lv_style_credit_guid TYPE zexcel_cell_style, - lv_style_link_guid TYPE zexcel_cell_style. - -DATA: lv_col_str TYPE zexcel_cell_column_alpha, - lv_row TYPE i, - lv_col TYPE i, - lt_mapper TYPE TABLE OF zexcel_cell_style, - ls_mapper TYPE zexcel_cell_style. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_border_light TYPE REF TO zcl_excel_style_border, + lo_style_color0 TYPE REF TO zcl_excel_style, + lo_style_color1 TYPE REF TO zcl_excel_style, + lo_style_color2 TYPE REF TO zcl_excel_style, + lo_style_color3 TYPE REF TO zcl_excel_style, + lo_style_color4 TYPE REF TO zcl_excel_style, + lo_style_color5 TYPE REF TO zcl_excel_style, + lo_style_color6 TYPE REF TO zcl_excel_style, + lo_style_color7 TYPE REF TO zcl_excel_style, + lo_style_credit TYPE REF TO zcl_excel_style, + lo_style_link TYPE REF TO zcl_excel_style, + lo_column TYPE REF TO zcl_excel_column, + lo_row TYPE REF TO zcl_excel_row, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. + +DATA: lv_style_color0_guid TYPE zexcel_cell_style, + lv_style_color1_guid TYPE zexcel_cell_style, + lv_style_color2_guid TYPE zexcel_cell_style, + lv_style_color3_guid TYPE zexcel_cell_style, + lv_style_color4_guid TYPE zexcel_cell_style, + lv_style_color5_guid TYPE zexcel_cell_style, + lv_style_color6_guid TYPE zexcel_cell_style, + lv_style_color7_guid TYPE zexcel_cell_style, + lv_style_credit_guid TYPE zexcel_cell_style, + lv_style_link_guid TYPE zexcel_cell_style. + +DATA: lv_col_str TYPE zexcel_cell_column_alpha, + lv_row TYPE i, + lv_col TYPE i, + lt_mapper TYPE TABLE OF zexcel_cell_style, + ls_mapper TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, @@ -155,17 +155,17 @@ START-OF-SELECTION. DO 30 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 3 + " line 3 DO 28 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 5 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 4 + " line 4 DO 27 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 5 + " line 5 DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 15 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. @@ -173,7 +173,7 @@ START-OF-SELECTION. DO 6 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 6 + " line 6 DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 13 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. @@ -183,7 +183,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 7 + " line 7 DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 5 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -195,7 +195,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 8 + " line 8 DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -209,7 +209,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 9 + " line 9 DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -225,7 +225,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 10 + " line 10 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -240,7 +240,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 11 + " line 11 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -254,7 +254,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 12 + " line 12 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -271,7 +271,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 13 + " line 13 DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -285,7 +285,7 @@ START-OF-SELECTION. DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 14 + " line 14 DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -297,7 +297,7 @@ START-OF-SELECTION. DO 12 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 15 + " line 15 DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -309,7 +309,7 @@ START-OF-SELECTION. DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 16 + " line 16 DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 7 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -321,7 +321,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 17 + " line 17 DO 8 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -331,7 +331,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 18 + " line 18 DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 23 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -339,13 +339,13 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 19 + " line 19 DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 27 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 20 + " line 20 DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 23 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -353,7 +353,7 @@ START-OF-SELECTION. DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 21 + " line 21 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -365,7 +365,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 22 + " line 22 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -377,7 +377,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 23 + " line 23 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -389,7 +389,7 @@ START-OF-SELECTION. DO 8 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 24 + " line 24 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. @@ -403,7 +403,7 @@ START-OF-SELECTION. DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 25 + " line 25 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. @@ -419,7 +419,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 26 + " line 26 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. @@ -440,7 +440,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 27 + " line 27 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. @@ -463,7 +463,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 28 + " line 28 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. @@ -490,7 +490,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 29 + " line 29 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. @@ -510,7 +510,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 30 + " line 30 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. @@ -533,7 +533,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 31 + " line 31 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. @@ -554,7 +554,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 32 + " line 32 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -567,7 +567,7 @@ START-OF-SELECTION. DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 33 + " line 33 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -581,7 +581,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 34 + " line 34 DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -591,7 +591,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 35 + " line 35 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -603,7 +603,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 36 + " line 36 DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -614,7 +614,7 @@ START-OF-SELECTION. DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 37 + " line 37 DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -625,7 +625,7 @@ START-OF-SELECTION. DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 38 + " line 38 DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -635,7 +635,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 39 + " line 39 DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -643,7 +643,7 @@ START-OF-SELECTION. DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 40 + " line 40 DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -651,7 +651,7 @@ START-OF-SELECTION. DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 41 + " line 41 DO 8 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -659,7 +659,7 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 42 + " line 42 DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 5 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 6 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. @@ -667,24 +667,24 @@ START-OF-SELECTION. DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 43 + " line 43 DO 11 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 5 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. DO 7 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 44 + " line 44 DO 13 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 45 + " line 45 DO 16 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 13 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape - " line 46 + " line 46 DO 18 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. APPEND INITIAL LINE TO lt_mapper. " escape diff --git a/src/demos/zdemo_calendar_classes.prog.abap b/src/demos/zdemo_calendar_classes.prog.abap index 389417847..fc36bb79e 100644 --- a/src/demos/zdemo_calendar_classes.prog.abap +++ b/src/demos/zdemo_calendar_classes.prog.abap @@ -10,12 +10,12 @@ CLASS zcl_date_calculation DEFINITION. PUBLIC SECTION. CLASS-METHODS: months_between_two_dates - IMPORTING - i_date_from TYPE datum - i_date_to TYPE datum - i_incl_to TYPE flag - EXPORTING - e_month TYPE i. + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_incl_to TYPE flag + EXPORTING + e_month TYPE i. ENDCLASS. "ZCL_DATE_CALCULATION @@ -29,14 +29,14 @@ CLASS zcl_date_calculation IMPLEMENTATION. DATA: date_to TYPE datum. DATA: BEGIN OF datum_von, jjjj(4) TYPE n, - mm(2) TYPE n, - tt(2) TYPE n, + mm(2) TYPE n, + tt(2) TYPE n, END OF datum_von. DATA: BEGIN OF datum_bis, jjjj(4) TYPE n, - mm(2) TYPE n, - tt(2) TYPE n, + mm(2) TYPE n, + tt(2) TYPE n, END OF datum_bis. e_month = 0. @@ -107,52 +107,52 @@ ENDCLASS. "zcl_date_calculation_test IMPLEMENTATION CLASS zcl_helper DEFINITION. PUBLIC SECTION. CLASS-METHODS: - load_image - IMPORTING - filename TYPE string - RETURNING value(r_image) TYPE xstring, - add_calendar - IMPORTING - i_date_from TYPE datum - i_date_to TYPE datum - i_from_row TYPE zexcel_cell_row - i_from_col TYPE zexcel_cell_column_alpha - i_day_style TYPE zexcel_cell_style - i_cw_style TYPE zexcel_cell_style - CHANGING - c_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel, - add_calendar_landscape - IMPORTING - i_date_from TYPE datum - i_date_to TYPE datum - i_from_row TYPE zexcel_cell_row - i_from_col TYPE zexcel_cell_column_alpha - i_day_style TYPE zexcel_cell_style - i_cw_style TYPE zexcel_cell_style - CHANGING - c_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel, - add_a2x_footer - IMPORTING - i_from_row TYPE zexcel_cell_row - i_from_col TYPE zexcel_cell_column_alpha - CHANGING - c_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel, - add_calender_week - IMPORTING - i_date TYPE datum - i_row TYPE zexcel_cell_row - i_col TYPE zexcel_cell_column_alpha - i_style TYPE zexcel_cell_style - CHANGING - c_worksheet TYPE REF TO zcl_excel_worksheet - RAISING - zcx_excel. + load_image + IMPORTING + filename TYPE string + RETURNING VALUE(r_image) TYPE xstring, + add_calendar + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + i_day_style TYPE zexcel_cell_style + i_cw_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel, + add_calendar_landscape + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + i_day_style TYPE zexcel_cell_style + i_cw_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel, + add_a2x_footer + IMPORTING + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel, + add_calender_week + IMPORTING + i_date TYPE datum + i_row TYPE zexcel_cell_row + i_col TYPE zexcel_cell_column_alpha + i_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel. ENDCLASS. "zcl_helper DEFINITION *----------------------------------------------------------------------* @@ -216,21 +216,21 @@ CLASS zcl_helper IMPLEMENTATION. ENDMETHOD. "load_image METHOD add_calendar. DATA: day_names TYPE TABLE OF t246. - DATA: row TYPE zexcel_cell_row, - row_max TYPE i, - col_int TYPE zexcel_cell_column, - col_max TYPE i, - from_col_int TYPE zexcel_cell_column, - col TYPE zexcel_cell_column_alpha, - lo_column TYPE REF TO zcl_excel_column, - lo_row TYPE REF TO zcl_excel_row. - DATA: lv_date TYPE datum, - value TYPE string, - weekday TYPE wotnr, - weekrow TYPE wotnr VALUE 1, - day TYPE i, - width TYPE f, - height TYPE f. + DATA: row TYPE zexcel_cell_row, + row_max TYPE i, + col_int TYPE zexcel_cell_column, + col_max TYPE i, + from_col_int TYPE zexcel_cell_column, + col TYPE zexcel_cell_column_alpha, + lo_column TYPE REF TO zcl_excel_column, + lo_row TYPE REF TO zcl_excel_row. + DATA: lv_date TYPE datum, + value TYPE string, + weekday TYPE wotnr, + weekrow TYPE wotnr VALUE 1, + day TYPE i, + width TYPE f, + height TYPE f. DATA: hyperlink TYPE REF TO zcl_excel_hyperlink. FIELD-SYMBOLS: LIKE LINE OF day_names. @@ -345,7 +345,7 @@ CLASS zcl_helper IMPLEMENTATION. ENDWHILE. ENDMETHOD. "add_calendar METHOD add_a2x_footer. - DATA: value TYPE string, + DATA: value TYPE string, hyperlink TYPE REF TO zcl_excel_hyperlink. value = 'Created with abap2xlsx. Find more information at https://github.com/sapmentors/abap2xlsx.'(002). @@ -362,16 +362,16 @@ CLASS zcl_helper IMPLEMENTATION. METHOD add_calendar_landscape. DATA: day_names TYPE TABLE OF t246. - DATA: lv_date TYPE datum, - day TYPE i, - value TYPE string, - weekday TYPE wotnr. - DATA: row TYPE zexcel_cell_row, - from_col_int TYPE zexcel_cell_column, - col_int TYPE zexcel_cell_column, - col TYPE zexcel_cell_column_alpha. - DATA: lo_column TYPE REF TO zcl_excel_column, - lo_row TYPE REF TO zcl_excel_row. + DATA: lv_date TYPE datum, + day TYPE i, + value TYPE string, + weekday TYPE wotnr. + DATA: row TYPE zexcel_cell_row, + from_col_int TYPE zexcel_cell_column, + col_int TYPE zexcel_cell_column, + col TYPE zexcel_cell_column_alpha. + DATA: lo_column TYPE REF TO zcl_excel_column, + lo_row TYPE REF TO zcl_excel_row. FIELD-SYMBOLS: LIKE LINE OF day_names. diff --git a/src/demos/zdemo_excel1.prog.abap b/src/demos/zdemo_excel1.prog.abap index 56e7860ee..f660856b2 100644 --- a/src/demos/zdemo_excel1.prog.abap +++ b/src/demos/zdemo_excel1.prog.abap @@ -9,10 +9,10 @@ REPORT zdemo_excel1. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_hyperlink TYPE REF TO zcl_excel_hyperlink, - lo_column TYPE REF TO zcl_excel_column. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + lo_column TYPE REF TO zcl_excel_column. CONSTANTS: gc_save_file_name TYPE string VALUE '01_HelloWorld.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_excel10.prog.abap b/src/demos/zdemo_excel10.prog.abap index 95f4d8938..fd26907b9 100644 --- a/src/demos/zdemo_excel10.prog.abap +++ b/src/demos/zdemo_excel10.prog.abap @@ -8,14 +8,14 @@ REPORT zdemo_excel10. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_cond TYPE REF TO zcl_excel_style_cond, - lo_column TYPE REF TO zcl_excel_column. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_cond TYPE REF TO zcl_excel_style_cond, + lo_column TYPE REF TO zcl_excel_column. -DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, - ls_table_settings TYPE zexcel_s_table_settings, - ls_iconset TYPE zexcel_conditional_iconset. +DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings, + ls_iconset TYPE zexcel_conditional_iconset. CONSTANTS: gc_save_file_name TYPE string VALUE '10_iTabFieldCatalog.xlsx'. INCLUDE zdemo_excel_outputopt_incl. @@ -52,7 +52,7 @@ START-OF-SELECTION. lo_style_cond->priority = 1. DATA lt_test TYPE TABLE OF sflight. - SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_test ). diff --git a/src/demos/zdemo_excel11.prog.abap b/src/demos/zdemo_excel11.prog.abap index 93ad4d6de..11459fb71 100644 --- a/src/demos/zdemo_excel11.prog.abap +++ b/src/demos/zdemo_excel11.prog.abap @@ -10,11 +10,11 @@ REPORT zdemo_excel11. TYPE-POOLS: abap. -DATA: central_search TYPE bapibus1006_central_search, +DATA: central_search TYPE bapibus1006_central_search, addressdata_search TYPE bapibus1006_addr_search, - others_search TYPE bapibus1006_other_data. + others_search TYPE bapibus1006_other_data. DATA: searchresult TYPE TABLE OF bapibus1006_bp_addr, - return TYPE TABLE OF bapiret2. + return TYPE TABLE OF bapiret2. DATA: lines TYPE i. FIELD-SYMBOLS: LIKE LINE OF searchresult. DATA: centraldata TYPE bapibus1006_central, @@ -36,7 +36,7 @@ INCLUDE zdemo_excel_outputopt_incl. PARAMETERS: md TYPE flag RADIOBUTTON GROUP act. -SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-00a. +SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE TEXT-00a. PARAMETERS: partnerc TYPE bu_type DEFAULT 2, " Organizations postlcod TYPE ad_pstcd1 DEFAULT '8334*', country TYPE land1 DEFAULT 'DE', @@ -45,8 +45,8 @@ SELECTION-SCREEN END OF BLOCK a. PARAMETERS: rel TYPE flag RADIOBUTTON GROUP act DEFAULT 'X'. -SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-00b. -PARAMETERS: reltyp TYPE bu_reltyp DEFAULT 'BUR011', +SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE TEXT-00b. +PARAMETERS: reltyp TYPE bu_reltyp DEFAULT 'BUR011', partner TYPE bu_partner DEFAULT '191'. SELECTION-SCREEN END OF BLOCK b. @@ -63,7 +63,7 @@ START-OF-SELECTION. EXPORTING centraldata = central_search addressdata = addressdata_search - OTHERS = others_search + others = others_search TABLES searchresult = searchresult return = return. @@ -187,20 +187,20 @@ START-OF-SELECTION. ENDLOOP. - DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_body TYPE REF TO zcl_excel_style, - lo_border_dark TYPE REF TO zcl_excel_style_border, - lo_column TYPE REF TO zcl_excel_column, - lo_row TYPE REF TO zcl_excel_row. + DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_body TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lo_column TYPE REF TO zcl_excel_column, + lo_row TYPE REF TO zcl_excel_row. - DATA: lv_style_body_even_guid TYPE zexcel_cell_style, - lv_style_body_green TYPE zexcel_cell_style. + DATA: lv_style_body_even_guid TYPE zexcel_cell_style, + lv_style_body_green TYPE zexcel_cell_style. DATA: row TYPE zexcel_cell_row. - DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, - ls_table_settings TYPE zexcel_s_table_settings. + DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings. DATA: column TYPE zexcel_cell_column, column_alpha TYPE zexcel_cell_column_alpha, @@ -358,8 +358,8 @@ START-OF-SELECTION. lo_row->set_visible( abap_false ). DATA: highest_column TYPE zexcel_cell_column, - count TYPE int4, - col_alpha TYPE zexcel_cell_column_alpha. + count TYPE int4, + col_alpha TYPE zexcel_cell_column_alpha. highest_column = lo_worksheet->get_highest_column( ). count = 1. diff --git a/src/demos/zdemo_excel12.prog.abap b/src/demos/zdemo_excel12.prog.abap index e3f65bb60..541234a19 100644 --- a/src/demos/zdemo_excel12.prog.abap +++ b/src/demos/zdemo_excel12.prog.abap @@ -8,10 +8,10 @@ REPORT zdemo_excel12. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_column TYPE REF TO zcl_excel_column, - lo_row TYPE REF TO zcl_excel_row. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column TYPE REF TO zcl_excel_column, + lo_row TYPE REF TO zcl_excel_row. DATA: lv_file TYPE xstring, lv_bytecount TYPE i, diff --git a/src/demos/zdemo_excel13.prog.abap b/src/demos/zdemo_excel13.prog.abap index fa1a085d5..bb9d2ae71 100644 --- a/src/demos/zdemo_excel13.prog.abap +++ b/src/demos/zdemo_excel13.prog.abap @@ -8,11 +8,11 @@ REPORT zdemo_excel13. -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, lv_style_bold_border_guid TYPE zexcel_cell_style, - lo_style_bold_border TYPE REF TO zcl_excel_style, - lo_border_dark TYPE REF TO zcl_excel_style_border. + lo_style_bold_border TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border. CONSTANTS: gc_save_file_name TYPE string VALUE '13_MergedCells.xlsx'. diff --git a/src/demos/zdemo_excel14.prog.abap b/src/demos/zdemo_excel14.prog.abap index d65630a82..2e746c27f 100644 --- a/src/demos/zdemo_excel14.prog.abap +++ b/src/demos/zdemo_excel14.prog.abap @@ -8,34 +8,34 @@ REPORT zdemo_excel14. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_center TYPE REF TO zcl_excel_style, - lo_style_right TYPE REF TO zcl_excel_style, - lo_style_left TYPE REF TO zcl_excel_style, - lo_style_general TYPE REF TO zcl_excel_style, - lo_style_bottom TYPE REF TO zcl_excel_style, - lo_style_middle TYPE REF TO zcl_excel_style, - lo_style_top TYPE REF TO zcl_excel_style, - lo_style_justify TYPE REF TO zcl_excel_style, - lo_style_mixed TYPE REF TO zcl_excel_style, - lo_style_mixed_wrap TYPE REF TO zcl_excel_style, - lo_style_rotated TYPE REF TO zcl_excel_style, - lo_style_shrink TYPE REF TO zcl_excel_style, - lo_style_indent TYPE REF TO zcl_excel_style, - lv_style_center_guid TYPE zexcel_cell_style, - lv_style_right_guid TYPE zexcel_cell_style, - lv_style_left_guid TYPE zexcel_cell_style, - lv_style_general_guid TYPE zexcel_cell_style, - lv_style_bottom_guid TYPE zexcel_cell_style, - lv_style_middle_guid TYPE zexcel_cell_style, - lv_style_top_guid TYPE zexcel_cell_style, - lv_style_justify_guid TYPE zexcel_cell_style, - lv_style_mixed_guid TYPE zexcel_cell_style, +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_center TYPE REF TO zcl_excel_style, + lo_style_right TYPE REF TO zcl_excel_style, + lo_style_left TYPE REF TO zcl_excel_style, + lo_style_general TYPE REF TO zcl_excel_style, + lo_style_bottom TYPE REF TO zcl_excel_style, + lo_style_middle TYPE REF TO zcl_excel_style, + lo_style_top TYPE REF TO zcl_excel_style, + lo_style_justify TYPE REF TO zcl_excel_style, + lo_style_mixed TYPE REF TO zcl_excel_style, + lo_style_mixed_wrap TYPE REF TO zcl_excel_style, + lo_style_rotated TYPE REF TO zcl_excel_style, + lo_style_shrink TYPE REF TO zcl_excel_style, + lo_style_indent TYPE REF TO zcl_excel_style, + lv_style_center_guid TYPE zexcel_cell_style, + lv_style_right_guid TYPE zexcel_cell_style, + lv_style_left_guid TYPE zexcel_cell_style, + lv_style_general_guid TYPE zexcel_cell_style, + lv_style_bottom_guid TYPE zexcel_cell_style, + lv_style_middle_guid TYPE zexcel_cell_style, + lv_style_top_guid TYPE zexcel_cell_style, + lv_style_justify_guid TYPE zexcel_cell_style, + lv_style_mixed_guid TYPE zexcel_cell_style, lv_style_mixed_wrap_guid TYPE zexcel_cell_style, - lv_style_rotated_guid TYPE zexcel_cell_style, - lv_style_shrink_guid TYPE zexcel_cell_style, - lv_style_indent_guid TYPE zexcel_cell_style. + lv_style_rotated_guid TYPE zexcel_cell_style, + lv_style_shrink_guid TYPE zexcel_cell_style, + lv_style_indent_guid TYPE zexcel_cell_style. DATA: lo_row TYPE REF TO zcl_excel_row. diff --git a/src/demos/zdemo_excel16.prog.abap b/src/demos/zdemo_excel16.prog.abap index afba621d0..e7942f5ec 100644 --- a/src/demos/zdemo_excel16.prog.abap +++ b/src/demos/zdemo_excel16.prog.abap @@ -8,9 +8,9 @@ REPORT zdemo_excel16. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_drawing TYPE REF TO zcl_excel_drawing. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_drawing TYPE REF TO zcl_excel_drawing. DATA: ls_io TYPE skwf_io. @@ -18,9 +18,9 @@ DATA: ls_io TYPE skwf_io. CONSTANTS: gc_save_file_name TYPE string VALUE '16_Drawings.xlsx'. INCLUDE zdemo_excel_outputopt_incl. -PARAMETERS: p_objid TYPE sdok_docid DEFAULT '456694429165174BE10000000A1550C0', " Question mark in standard Web Dynpro WDT_QUIZ - p_class TYPE sdok_class DEFAULT 'M_IMAGE_P', - pobjtype TYPE skwf_ioty DEFAULT 'P'. +PARAMETERS: p_objid TYPE sdok_docid DEFAULT '456694429165174BE10000000A1550C0', " Question mark in standard Web Dynpro WDT_QUIZ + p_class TYPE sdok_class DEFAULT 'M_IMAGE_P', + pobjtype TYPE skwf_ioty DEFAULT 'P'. START-OF-SELECTION. @@ -29,10 +29,10 @@ START-OF-SELECTION. CREATE OBJECT lo_excel. "Load samle image - DATA: lt_bin TYPE solix_tab, - lv_len TYPE i, + DATA: lt_bin TYPE solix_tab, + lv_len TYPE i, lv_content TYPE xstring, - ls_key TYPE wwwdatatab. + ls_key TYPE wwwdatatab. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING diff --git a/src/demos/zdemo_excel17.prog.abap b/src/demos/zdemo_excel17.prog.abap index 29fc1260d..78faf87e0 100644 --- a/src/demos/zdemo_excel17.prog.abap +++ b/src/demos/zdemo_excel17.prog.abap @@ -8,12 +8,12 @@ REPORT zdemo_excel17. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_protection TYPE REF TO zcl_excel_style, - lv_style_protection_guid TYPE zexcel_cell_style, - lo_style TYPE REF TO zcl_excel_style, - lv_style TYPE zexcel_cell_style. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_protection TYPE REF TO zcl_excel_style, + lv_style_protection_guid TYPE zexcel_cell_style, + lo_style TYPE REF TO zcl_excel_style, + lv_style TYPE zexcel_cell_style. CONSTANTS: gc_save_file_name TYPE string VALUE '17_SheetProtection.xlsx'. diff --git a/src/demos/zdemo_excel18.prog.abap b/src/demos/zdemo_excel18.prog.abap index e28075dc0..4feafa94b 100644 --- a/src/demos/zdemo_excel18.prog.abap +++ b/src/demos/zdemo_excel18.prog.abap @@ -8,9 +8,9 @@ REPORT zdemo_excel18. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lv_style_protection_guid TYPE zexcel_cell_style. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_style_protection_guid TYPE zexcel_cell_style. CONSTANTS: gc_save_file_name TYPE string VALUE '18_BookProtection.xlsx'. diff --git a/src/demos/zdemo_excel19.prog.abap b/src/demos/zdemo_excel19.prog.abap index 9538759b8..2e55fdaa0 100644 --- a/src/demos/zdemo_excel19.prog.abap +++ b/src/demos/zdemo_excel19.prog.abap @@ -10,8 +10,8 @@ REPORT zdemo_excel19. TYPE-POOLS: abap. -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. CONSTANTS: gc_save_file_name TYPE string VALUE '19_SetActiveSheet.xlsx'. diff --git a/src/demos/zdemo_excel2.prog.abap b/src/demos/zdemo_excel2.prog.abap index fdad7b981..7a4d7780e 100644 --- a/src/demos/zdemo_excel2.prog.abap +++ b/src/demos/zdemo_excel2.prog.abap @@ -8,41 +8,41 @@ REPORT zdemo_excel2. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_bold TYPE REF TO zcl_excel_style, - lo_style_underline TYPE REF TO zcl_excel_style, - lo_style_filled TYPE REF TO zcl_excel_style, - lo_style_border TYPE REF TO zcl_excel_style, - lo_style_button TYPE REF TO zcl_excel_style, - lo_border_dark TYPE REF TO zcl_excel_style_border, - lo_border_light TYPE REF TO zcl_excel_style_border. - -DATA: lv_style_bold_guid TYPE zexcel_cell_style, - lv_style_underline_guid TYPE zexcel_cell_style, - lv_style_filled_guid TYPE zexcel_cell_style, - lv_style_filled_green_guid TYPE zexcel_cell_style, - lv_style_border_guid TYPE zexcel_cell_style, - lv_style_button_guid TYPE zexcel_cell_style, +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_bold TYPE REF TO zcl_excel_style, + lo_style_underline TYPE REF TO zcl_excel_style, + lo_style_filled TYPE REF TO zcl_excel_style, + lo_style_border TYPE REF TO zcl_excel_style, + lo_style_button TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lo_border_light TYPE REF TO zcl_excel_style_border. + +DATA: lv_style_bold_guid TYPE zexcel_cell_style, + lv_style_underline_guid TYPE zexcel_cell_style, + lv_style_filled_guid TYPE zexcel_cell_style, + lv_style_filled_green_guid TYPE zexcel_cell_style, + lv_style_border_guid TYPE zexcel_cell_style, + lv_style_button_guid TYPE zexcel_cell_style, lv_style_filled_turquoise_guid TYPE zexcel_cell_style, - lv_style_gr_cornerlb_guid TYPE zexcel_cell_style, - lv_style_gr_cornerlt_guid TYPE zexcel_cell_style, - lv_style_gr_cornerrb_guid TYPE zexcel_cell_style, - lv_style_gr_cornerrt_guid TYPE zexcel_cell_style, - lv_style_gr_horizontal90_guid TYPE zexcel_cell_style, + lv_style_gr_cornerlb_guid TYPE zexcel_cell_style, + lv_style_gr_cornerlt_guid TYPE zexcel_cell_style, + lv_style_gr_cornerrb_guid TYPE zexcel_cell_style, + lv_style_gr_cornerrt_guid TYPE zexcel_cell_style, + lv_style_gr_horizontal90_guid TYPE zexcel_cell_style, lv_style_gr_horizontal270_guid TYPE zexcel_cell_style, - lv_style_gr_horizontalb_guid TYPE zexcel_cell_style, - lv_style_gr_vertical_guid TYPE zexcel_cell_style, - lv_style_gr_vertical2_guid TYPE zexcel_cell_style, - lv_style_gr_fromcenter_guid TYPE zexcel_cell_style, - lv_style_gr_diagonal45_guid TYPE zexcel_cell_style, - lv_style_gr_diagonal45b_guid TYPE zexcel_cell_style, - lv_style_gr_diagonal135_guid TYPE zexcel_cell_style, - lv_style_gr_diagonal135b_guid TYPE zexcel_cell_style . - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. + lv_style_gr_horizontalb_guid TYPE zexcel_cell_style, + lv_style_gr_vertical_guid TYPE zexcel_cell_style, + lv_style_gr_vertical2_guid TYPE zexcel_cell_style, + lv_style_gr_fromcenter_guid TYPE zexcel_cell_style, + lv_style_gr_diagonal45_guid TYPE zexcel_cell_style, + lv_style_gr_diagonal45b_guid TYPE zexcel_cell_style, + lv_style_gr_diagonal135_guid TYPE zexcel_cell_style, + lv_style_gr_diagonal135b_guid TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_excel20.prog.abap b/src/demos/zdemo_excel20.prog.abap index dce3f7631..4bf5f5775 100644 --- a/src/demos/zdemo_excel20.prog.abap +++ b/src/demos/zdemo_excel20.prog.abap @@ -32,15 +32,15 @@ ENDCLASS. "lcl_handle_events IMPLEMENTATION * DATA DECLARATION *--------------------------------------------------------------------* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_alv TYPE REF TO cl_gui_alv_grid, - lo_salv TYPE REF TO cl_salv_table, - gr_events TYPE REF TO lcl_handle_events, - lr_events TYPE REF TO cl_salv_events_table, - gt_sbook TYPE TABLE OF sbook, - gt_listheader TYPE slis_t_listheader, - wa_listheader LIKE LINE OF gt_listheader. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_alv TYPE REF TO cl_gui_alv_grid, + lo_salv TYPE REF TO cl_salv_table, + gr_events TYPE REF TO lcl_handle_events, + lr_events TYPE REF TO cl_salv_events_table, + gt_sbook TYPE TABLE OF sbook, + gt_listheader TYPE slis_t_listheader, + wa_listheader LIKE LINE OF gt_listheader. DATA: l_path TYPE string, " local dir lv_workdir TYPE string, diff --git a/src/demos/zdemo_excel21.prog.abap b/src/demos/zdemo_excel21.prog.abap index 0d150e396..7cebcd91f 100644 --- a/src/demos/zdemo_excel21.prog.abap +++ b/src/demos/zdemo_excel21.prog.abap @@ -14,9 +14,9 @@ TYPES: style TYPE zexcel_cell_style, END OF t_color_style. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_filled TYPE REF TO zcl_excel_style. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_filled TYPE REF TO zcl_excel_style. DATA: color_styles TYPE TABLE OF t_color_style. @@ -36,7 +36,7 @@ DATA: red TYPE i, blue_str TYPE string. DATA: color TYPE zexcel_style_color_argb, - tint TYPE zexcel_style_color_tint. + tint TYPE zexcel_style_color_tint. DATA: row TYPE i, row_tmp TYPE i, diff --git a/src/demos/zdemo_excel22.prog.abap b/src/demos/zdemo_excel22.prog.abap index 33a1395f9..ba2e14ac7 100644 --- a/src/demos/zdemo_excel22.prog.abap +++ b/src/demos/zdemo_excel22.prog.abap @@ -8,16 +8,16 @@ REPORT zdemo_excel22. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style TYPE REF TO zcl_excel_style, - lo_style_date TYPE REF TO zcl_excel_style, - lo_style_editable TYPE REF TO zcl_excel_style, - lo_data_validation TYPE REF TO zcl_excel_data_validation. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style TYPE REF TO zcl_excel_style, + lo_style_date TYPE REF TO zcl_excel_style, + lo_style_editable TYPE REF TO zcl_excel_style, + lo_data_validation TYPE REF TO zcl_excel_data_validation. -DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, - ls_table_settings TYPE zexcel_s_table_settings, - ls_table_settings_out TYPE zexcel_s_table_settings. +DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings, + ls_table_settings_out TYPE zexcel_s_table_settings. DATA: lv_style_guid TYPE zexcel_cell_style. @@ -39,7 +39,7 @@ START-OF-SELECTION. lo_worksheet->set_title( ip_title = 'PN_MASSIVE' ). DATA lt_test TYPE TABLE OF sflight. - SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE " sheet style (white background) lo_style = lo_excel->add_new_style( ). diff --git a/src/demos/zdemo_excel23.prog.abap b/src/demos/zdemo_excel23.prog.abap index ce0334e6f..a20ed2eb6 100644 --- a/src/demos/zdemo_excel23.prog.abap +++ b/src/demos/zdemo_excel23.prog.abap @@ -10,9 +10,9 @@ REPORT zdemo_excel23. TYPE-POOLS: abap. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_hyperlink TYPE REF TO zcl_excel_hyperlink. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. CONSTANTS: gc_save_file_name TYPE string VALUE '23_Sheets_with_and_without_grid_lines.xlsx'. @@ -36,7 +36,7 @@ START-OF-SELECTION. lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. lo_worksheet->zif_excel_sheet_properties~zoomscale = 150. - lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_NORMAL = 150. + lo_worksheet->zif_excel_sheet_properties~zoomscale_normal = 150. lo_worksheet->sheet_setup->vertical_centered = abap_true. lo_worksheet->sheet_setup->horizontal_centered = abap_true. @@ -53,7 +53,7 @@ START-OF-SELECTION. lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. lo_worksheet->zif_excel_sheet_properties~zoomscale = 160. - lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_PAGELAYOUTVIEW = 200. + lo_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 200. " Third sheet lo_worksheet = lo_excel->add_new_worksheet( ). @@ -67,7 +67,7 @@ START-OF-SELECTION. lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. lo_worksheet->zif_excel_sheet_properties~zoomscale = 170. - lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_SHEETLAYOUTVIEW = 150. + lo_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 150. " Fourth sheet lo_worksheet = lo_excel->add_new_worksheet( ). @@ -80,9 +80,9 @@ START-OF-SELECTION. lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. lo_worksheet->zif_excel_sheet_properties~zoomscale = 150. - lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_NORMAL = 150. + lo_worksheet->zif_excel_sheet_properties~zoomscale_normal = 150. -" lo_worksheet->sheet_setup->vertical_centered = abap_true. + " lo_worksheet->sheet_setup->vertical_centered = abap_true. lo_worksheet->sheet_setup->horizontal_centered = abap_true. diff --git a/src/demos/zdemo_excel24.prog.abap b/src/demos/zdemo_excel24.prog.abap index 30201283c..44f81db39 100644 --- a/src/demos/zdemo_excel24.prog.abap +++ b/src/demos/zdemo_excel24.prog.abap @@ -10,14 +10,14 @@ REPORT zdemo_excel24. TYPE-POOLS: abap. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_column TYPE REF TO zcl_excel_column, - lo_hyperlink TYPE REF TO zcl_excel_hyperlink. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column TYPE REF TO zcl_excel_column, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, @@ -64,7 +64,7 @@ START-OF-SELECTION. lo_worksheet = lo_excel->add_new_worksheet( ). " TODO: It seems that the zcl_excel_style_number_format=>c_format_date_yyyymmddslash " does not produce a valid output - lo_worksheet->set_default_excel_date_format( zcl_excel_style_number_format=>c_format_date_yyyymmddslash ). + lo_worksheet->set_default_excel_date_format( zcl_excel_style_number_format=>c_format_date_yyyymmddslash ). lo_worksheet->set_title( ip_title = 'Sheet3' ). lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Date Format set to YYYY/MM/DD' ). " Insert current date @@ -81,7 +81,7 @@ START-OF-SELECTION. " http://support.microsoft.com/kb/214326/en-us lo_worksheet->set_title( ip_title = 'Sheet4' ). " Loop from Start Date to the Max Date current data in daily steps - CONSTANTS: lv_max type d VALUE '19000302'. + CONSTANTS: lv_max TYPE d VALUE '19000302'. DATA: lv_date TYPE d VALUE '19000226', lv_row TYPE i. diff --git a/src/demos/zdemo_excel25.prog.abap b/src/demos/zdemo_excel25.prog.abap index f99d2c680..01060a104 100644 --- a/src/demos/zdemo_excel25.prog.abap +++ b/src/demos/zdemo_excel25.prog.abap @@ -8,10 +8,10 @@ REPORT zdemo_excel25. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_exception TYPE REF TO cx_root. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_exception TYPE REF TO cx_root. DATA: lv_file TYPE xstring. diff --git a/src/demos/zdemo_excel26.prog.abap b/src/demos/zdemo_excel26.prog.abap index bf40ca17b..32b7dc78d 100644 --- a/src/demos/zdemo_excel26.prog.abap +++ b/src/demos/zdemo_excel26.prog.abap @@ -4,88 +4,88 @@ * export data from ALV (CL_GUI_ALV_GRID) object or cl_salv_table object * to Excel. *--------------------------------------------------------------------* -report zdemo_excel26. +REPORT zdemo_excel26. *----------------------------------------------------------------------* * CLASS lcl_handle_events DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -class lcl_handle_events definition. - public section. - methods: - on_user_command for event added_function of cl_salv_events - importing e_salv_function. -endclass. "lcl_handle_events DEFINITION +CLASS lcl_handle_events DEFINITION. + PUBLIC SECTION. + METHODS: + on_user_command FOR EVENT added_function OF cl_salv_events + IMPORTING e_salv_function. +ENDCLASS. "lcl_handle_events DEFINITION *----------------------------------------------------------------------* * CLASS lcl_handle_events IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -class lcl_handle_events implementation. - method on_user_command. - perform user_command." using e_salv_function text-i08. - endmethod. "on_user_command -endclass. "lcl_handle_events IMPLEMENTATION +CLASS lcl_handle_events IMPLEMENTATION. + METHOD on_user_command. + PERFORM user_command." using e_salv_function text-i08. + ENDMETHOD. "on_user_command +ENDCLASS. "lcl_handle_events IMPLEMENTATION *--------------------------------------------------------------------* * DATA DECLARATION *--------------------------------------------------------------------* -data: lo_excel type ref to zcl_excel, - lo_worksheet type ref to zcl_excel_worksheet, - lo_salv type ref to cl_salv_table, - gr_events type ref to lcl_handle_events, - lr_events type ref to cl_salv_events_table, - gt_sbook type table of sbook. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_salv TYPE REF TO cl_salv_table, + gr_events TYPE REF TO lcl_handle_events, + lr_events TYPE REF TO cl_salv_events_table, + gt_sbook TYPE TABLE OF sbook. -data: l_path type string, " local dir - lv_workdir type string, - lv_file_separator type c. +DATA: l_path TYPE string, " local dir + lv_workdir TYPE string, + lv_file_separator TYPE c. -constants: - lv_default_file_name type string value '26_Bind_ALV.xlsx'. +CONSTANTS: + lv_default_file_name TYPE string VALUE '26_Bind_ALV.xlsx'. *--------------------------------------------------------------------* *START-OF-SELECTION *--------------------------------------------------------------------* -start-of-selection. +START-OF-SELECTION. * get data * ------------------------------------------ - select * - into table gt_sbook[] - from sbook "#EC CI_NOWHERE - up to 10 rows. + SELECT * + INTO TABLE gt_sbook[] + FROM sbook "#EC CI_NOWHERE + UP TO 10 ROWS. * Display ALV * ------------------------------------------ - try. + TRY. cl_salv_table=>factory( - exporting + EXPORTING list_display = abap_false - importing + IMPORTING r_salv_table = lo_salv - changing + CHANGING t_table = gt_sbook[] ). - catch cx_salv_msg . - endtry. + CATCH cx_salv_msg . + ENDTRY. - try. + TRY. lo_salv->set_screen_status( - exporting + EXPORTING report = sy-repid pfstatus = 'ALV_STATUS' set_functions = lo_salv->c_functions_all ). - catch cx_salv_msg . - endtry. + CATCH cx_salv_msg . + ENDTRY. lr_events = lo_salv->get_event( ). - create object gr_events. - set handler gr_events->on_user_command for lr_events. + CREATE OBJECT gr_events. + SET HANDLER gr_events->on_user_command FOR lr_events. lo_salv->display( ). @@ -95,60 +95,60 @@ start-of-selection. *&---------------------------------------------------------------------* * ALV user command *--------------------------------------------------------------------* -form user_command . - if sy-ucomm = 'EXCEL'. +FORM user_command . + IF sy-ucomm = 'EXCEL'. * get save file path - cl_gui_frontend_services=>get_sapgui_workdir( changing sapworkdir = l_path ). + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = l_path ). cl_gui_cfw=>flush( ). cl_gui_frontend_services=>directory_browse( - exporting initial_folder = l_path - changing selected_folder = l_path ). + EXPORTING initial_folder = l_path + CHANGING selected_folder = l_path ). - if l_path is initial. + IF l_path IS INITIAL. cl_gui_frontend_services=>get_sapgui_workdir( - changing sapworkdir = lv_workdir ). + CHANGING sapworkdir = lv_workdir ). l_path = lv_workdir. - endif. + ENDIF. cl_gui_frontend_services=>get_file_separator( - changing file_separator = lv_file_separator ). + CHANGING file_separator = lv_file_separator ). - concatenate l_path lv_file_separator lv_default_file_name - into l_path. + CONCATENATE l_path lv_file_separator lv_default_file_name + INTO l_path. * export file to save file path - perform export_to_excel. + PERFORM export_to_excel. - endif. -endform. " USER_COMMAND + ENDIF. +ENDFORM. " USER_COMMAND *--------------------------------------------------------------------* * FORM EXPORT_TO_EXCEL *--------------------------------------------------------------------* * This subroutine is principal demo session *--------------------------------------------------------------------* -form export_to_excel raising zcx_excel. +FORM export_to_excel RAISING zcx_excel. * create zcl_excel_worksheet object - create object lo_excel. + CREATE OBJECT lo_excel. lo_worksheet = lo_excel->get_active_worksheet( ). lo_worksheet->set_title( ip_title = 'Sheet1' ). * write to excel using method Bin_object - try. + TRY. lo_worksheet->bind_alv( io_alv = lo_salv it_table = gt_sbook i_top = 2 i_left = 1 ). - catch zcx_excel . - endtry. + CATCH zcx_excel . + ENDTRY. - perform write_file. + PERFORM write_file. -endform. "EXPORT_TO_EXCEL +ENDFORM. "EXPORT_TO_EXCEL *&---------------------------------------------------------------------* *& Form WRITE_FILE *&---------------------------------------------------------------------* @@ -157,44 +157,44 @@ endform. "EXPORT_TO_EXCEL * --> p1 text * <-- p2 text *----------------------------------------------------------------------* -form write_file . - data: lt_file type solix_tab, - l_bytecount type i, - l_file type xstring. +FORM write_file . + DATA: lt_file TYPE solix_tab, + l_bytecount TYPE i, + l_file TYPE xstring. - data: lo_excel_writer type ref to zif_excel_writer. + DATA: lo_excel_writer TYPE REF TO zif_excel_writer. - data: ls_seoclass type seoclass. + DATA: ls_seoclass TYPE seoclass. - create object lo_excel_writer type zcl_excel_writer_2007. + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. l_file = lo_excel_writer->write_file( lo_excel ). - select single * into ls_seoclass - from seoclass - where clsname = 'CL_BCS_CONVERT'. + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_BCS_CONVERT'. - if sy-subrc = 0. - call method (ls_seoclass-clsname)=>xstring_to_solix - exporting + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>xstring_to_solix + EXPORTING iv_xstring = l_file - receiving + RECEIVING et_solix = lt_file. l_bytecount = xstrlen( l_file ). - else. + ELSE. " Convert to binary - call function 'SCMS_XSTRING_TO_BINARY' - exporting + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING buffer = l_file - importing + IMPORTING output_length = l_bytecount - tables + TABLES binary_tab = lt_file. - endif. + ENDIF. - cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount filename = l_path filetype = 'BIN' - changing data_tab = lt_file ). + CHANGING data_tab = lt_file ). -endform. " WRITE_FILE +ENDFORM. " WRITE_FILE diff --git a/src/demos/zdemo_excel27.prog.abap b/src/demos/zdemo_excel27.prog.abap index 5bb7d2896..e003dbe74 100644 --- a/src/demos/zdemo_excel27.prog.abap +++ b/src/demos/zdemo_excel27.prog.abap @@ -10,16 +10,16 @@ REPORT zdemo_excel27. CONSTANTS: c_fish TYPE string VALUE 'Fish'. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_range TYPE REF TO zcl_excel_range, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lo_style_cond TYPE REF TO zcl_excel_style_cond, - lo_style_1 TYPE REF TO zcl_excel_style, - lo_style_2 TYPE REF TO zcl_excel_style, - lv_style_1_guid TYPE zexcel_cell_style, - lv_style_2_guid TYPE zexcel_cell_style, - ls_cellis TYPE zexcel_conditional_cellis. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_style_cond TYPE REF TO zcl_excel_style_cond, + lo_style_1 TYPE REF TO zcl_excel_style, + lo_style_2 TYPE REF TO zcl_excel_style, + lv_style_1_guid TYPE zexcel_cell_style, + lv_style_2_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis. DATA: lv_title TYPE zexcel_sheet_title. diff --git a/src/demos/zdemo_excel28.prog.abap b/src/demos/zdemo_excel28.prog.abap index 01a0f5b04..2809c1f8d 100644 --- a/src/demos/zdemo_excel28.prog.abap +++ b/src/demos/zdemo_excel28.prog.abap @@ -8,14 +8,14 @@ REPORT zdemo_excel28. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_column TYPE REF TO zcl_excel_column. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column TYPE REF TO zcl_excel_column. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_excel29.prog.abap b/src/demos/zdemo_excel29.prog.abap index d56deb372..fe9e8c99f 100644 --- a/src/demos/zdemo_excel29.prog.abap +++ b/src/demos/zdemo_excel29.prog.abap @@ -8,24 +8,24 @@ REPORT zdemo_excel29. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_excel_reader TYPE REF TO zif_excel_reader. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_excel_reader TYPE REF TO zif_excel_reader. -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. -DATA: lv_full_path TYPE string, - lv_filename TYPE string, - lv_workdir TYPE string. +DATA: lv_full_path TYPE string, + lv_filename TYPE string, + lv_workdir TYPE string. PARAMETERS: p_path TYPE zexcel_export_dir OBLIGATORY. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. DATA: lt_filetable TYPE filetable, - lv_rc TYPE i. + lv_rc TYPE i. cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). cl_gui_cfw=>flush( ). diff --git a/src/demos/zdemo_excel3.prog.abap b/src/demos/zdemo_excel3.prog.abap index 5e03da8eb..7620b5413 100644 --- a/src/demos/zdemo_excel3.prog.abap +++ b/src/demos/zdemo_excel3.prog.abap @@ -10,16 +10,16 @@ REPORT zdemo_excel3. TYPE-POOLS: abap. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_column TYPE REF TO zcl_excel_column. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column TYPE REF TO zcl_excel_column. DATA: ls_table_settings TYPE zexcel_s_table_settings. DATA: lv_title TYPE zexcel_sheet_title, lt_carr TYPE TABLE OF scarr, - row TYPE zexcel_cell_row VALUE 2, + row TYPE zexcel_cell_row VALUE 2, lo_range TYPE REF TO zcl_excel_range. DATA: lo_data_validation TYPE REF TO zcl_excel_data_validation. FIELD-SYMBOLS: LIKE LINE OF lt_carr. @@ -43,7 +43,7 @@ START-OF-SELECTION. DATA lt_test TYPE TABLE OF sflight. IF p_empty <> abap_true. - SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE ENDIF. ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2. @@ -62,7 +62,7 @@ START-OF-SELECTION. lv_title = 'Data Validation'. lo_worksheet->set_title( lv_title ). lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = c_airlines ). - SELECT * FROM scarr INTO TABLE lt_carr. "#EC CI_NOWHERE + SELECT * FROM scarr INTO TABLE lt_carr. "#EC CI_NOWHERE LOOP AT lt_carr ASSIGNING . lo_worksheet->set_cell( ip_row = row ip_column = 'A' ip_value = -carrid ). row = row + 1. diff --git a/src/demos/zdemo_excel30.prog.abap b/src/demos/zdemo_excel30.prog.abap index bb078073e..d36baf8a2 100644 --- a/src/demos/zdemo_excel30.prog.abap +++ b/src/demos/zdemo_excel30.prog.abap @@ -8,10 +8,10 @@ REPORT zdemo_excel30. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_hyperlink TYPE REF TO zcl_excel_hyperlink, - lo_column TYPE REF TO zcl_excel_column. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + lo_column TYPE REF TO zcl_excel_column. DATA: lv_value TYPE string, diff --git a/src/demos/zdemo_excel31.prog.abap b/src/demos/zdemo_excel31.prog.abap index 6134f2a7e..dfcae8eb4 100644 --- a/src/demos/zdemo_excel31.prog.abap +++ b/src/demos/zdemo_excel31.prog.abap @@ -8,10 +8,10 @@ REPORT zdemo_excel31. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_hyperlink TYPE REF TO zcl_excel_hyperlink, - lo_column TYPE REF TO zcl_excel_column. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + lo_column TYPE REF TO zcl_excel_column. DATA: fieldval TYPE text80, diff --git a/src/demos/zdemo_excel33.prog.abap b/src/demos/zdemo_excel33.prog.abap index 4c6af9839..fe85bdc0b 100644 --- a/src/demos/zdemo_excel33.prog.abap +++ b/src/demos/zdemo_excel33.prog.abap @@ -10,10 +10,10 @@ REPORT zdemo_excel33. TYPE-POOLS: abap. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_converter TYPE REF TO zcl_excel_converter, - lo_autofilter TYPE REF TO zcl_excel_autofilter. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_converter TYPE REF TO zcl_excel_converter, + lo_autofilter TYPE REF TO zcl_excel_autofilter. DATA lt_test TYPE TABLE OF t005t. diff --git a/src/demos/zdemo_excel34.prog.abap b/src/demos/zdemo_excel34.prog.abap index 295c440f4..8d8b0f322 100644 --- a/src/demos/zdemo_excel34.prog.abap +++ b/src/demos/zdemo_excel34.prog.abap @@ -11,24 +11,24 @@ REPORT zdemo_excel34. CONSTANTS: width TYPE f VALUE '10.14'. CONSTANTS: height TYPE f VALUE '57.75'. -DATA: current_row TYPE i, - col TYPE i, - col_alpha TYPE zexcel_cell_column_alpha, - row TYPE i, - row_board TYPE i, - colorflag TYPE i, - color TYPE zexcel_style_color_argb, +DATA: current_row TYPE i, + col TYPE i, + col_alpha TYPE zexcel_cell_column_alpha, + row TYPE i, + row_board TYPE i, + colorflag TYPE i, + color TYPE zexcel_style_color_argb, - lo_column TYPE REF TO zcl_excel_column, - lo_row TYPE REF TO zcl_excel_row, + lo_column TYPE REF TO zcl_excel_column, + lo_row TYPE REF TO zcl_excel_row, - writing1 TYPE string, - writing2 TYPE string. + writing1 TYPE string, + writing2 TYPE string. -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. CONSTANTS: gc_save_file_name TYPE string VALUE '34_Static Styles_Chess.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_excel35.prog.abap b/src/demos/zdemo_excel35.prog.abap index 4bd750c1b..3a71ada82 100644 --- a/src/demos/zdemo_excel35.prog.abap +++ b/src/demos/zdemo_excel35.prog.abap @@ -8,28 +8,28 @@ REPORT zdemo_excel35. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_bold TYPE REF TO zcl_excel_style, - lo_style_underline TYPE REF TO zcl_excel_style, - lo_style_filled TYPE REF TO zcl_excel_style, - lo_style_border TYPE REF TO zcl_excel_style, - lo_style_button TYPE REF TO zcl_excel_style, - lo_border_dark TYPE REF TO zcl_excel_style_border, - lo_border_light TYPE REF TO zcl_excel_style_border. - -DATA: lv_style_bold_guid TYPE zexcel_cell_style, - lv_style_underline_guid TYPE zexcel_cell_style, - lv_style_filled_guid TYPE zexcel_cell_style, - lv_style_filled_green_guid TYPE zexcel_cell_style, - lv_style_border_guid TYPE zexcel_cell_style, - lv_style_button_guid TYPE zexcel_cell_style, +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_bold TYPE REF TO zcl_excel_style, + lo_style_underline TYPE REF TO zcl_excel_style, + lo_style_filled TYPE REF TO zcl_excel_style, + lo_style_border TYPE REF TO zcl_excel_style, + lo_style_button TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lo_border_light TYPE REF TO zcl_excel_style_border. + +DATA: lv_style_bold_guid TYPE zexcel_cell_style, + lv_style_underline_guid TYPE zexcel_cell_style, + lv_style_filled_guid TYPE zexcel_cell_style, + lv_style_filled_green_guid TYPE zexcel_cell_style, + lv_style_border_guid TYPE zexcel_cell_style, + lv_style_button_guid TYPE zexcel_cell_style, lv_style_filled_turquoise_guid TYPE zexcel_cell_style. -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, @@ -46,7 +46,7 @@ AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. p_path = lv_workdir. INITIALIZATION. - cl_gui_frontend_services=>GET_DESKTOP_DIRECTORY( CHANGING DESKTOP_DIRECTORY = lv_workdir ). + cl_gui_frontend_services=>get_desktop_directory( CHANGING desktop_directory = lv_workdir ). cl_gui_cfw=>flush( ). p_path = lv_workdir. diff --git a/src/demos/zdemo_excel36.prog.abap b/src/demos/zdemo_excel36.prog.abap index df4c14ae2..22112363d 100644 --- a/src/demos/zdemo_excel36.prog.abap +++ b/src/demos/zdemo_excel36.prog.abap @@ -2,14 +2,14 @@ *& Report ZDEMO_EXCEL36 REPORT zdemo_excel36. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_column TYPE REF TO zcl_excel_column, - col TYPE i. - -DATA: lo_style_arial20 TYPE REF TO zcl_excel_style, - lo_style_times11 TYPE REF TO zcl_excel_style, - lo_style_cambria8red TYPE REF TO zcl_excel_style. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column TYPE REF TO zcl_excel_column, + col TYPE i. + +DATA: lo_style_arial20 TYPE REF TO zcl_excel_style, + lo_style_times11 TYPE REF TO zcl_excel_style, + lo_style_cambria8red TYPE REF TO zcl_excel_style. DATA: lv_style_arial20_guid TYPE zexcel_cell_style, lv_style_times11_guid TYPE zexcel_cell_style, diff --git a/src/demos/zdemo_excel37.prog.abap b/src/demos/zdemo_excel37.prog.abap index 94dce0be2..dea631897 100644 --- a/src/demos/zdemo_excel37.prog.abap +++ b/src/demos/zdemo_excel37.prog.abap @@ -20,12 +20,12 @@ SELECTION-SCREEN END OF BLOCK blx. INCLUDE zdemo_excel_outputopt_incl. -SELECTION-SCREEN BEGIN OF BLOCK cls WITH FRAME TITLE text-cls. +SELECTION-SCREEN BEGIN OF BLOCK cls WITH FRAME TITLE TEXT-cls. PARAMETERS: lb_read TYPE seoclsname AS LISTBOX VISIBLE LENGTH 40 LOWER CASE OBLIGATORY DEFAULT 'Autodetect'(001). PARAMETERS: lb_write TYPE seoclsname AS LISTBOX VISIBLE LENGTH 40 LOWER CASE OBLIGATORY DEFAULT 'Autodetect'(001). SELECTION-SCREEN END OF BLOCK cls. -SELECTION-SCREEN BEGIN OF BLOCK bl_err WITH FRAME TITLE text-err. +SELECTION-SCREEN BEGIN OF BLOCK bl_err WITH FRAME TITLE TEXT-err. PARAMETERS: cb_errl AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: cb_dump AS CHECKBOX DEFAULT space. @@ -35,7 +35,7 @@ SELECTION-SCREEN END OF BLOCK bl_err. INITIALIZATION. PERFORM setup_listboxes. - cmt_dump = text-dum. + cmt_dump = TEXT-dum. GET PARAMETER ID 'GR8' FIELD gv_memid_gr8. p_upfile = gv_memid_gr8. diff --git a/src/demos/zdemo_excel38.prog.abap b/src/demos/zdemo_excel38.prog.abap index 4541561d5..c7c62ddf4 100644 --- a/src/demos/zdemo_excel38.prog.abap +++ b/src/demos/zdemo_excel38.prog.abap @@ -1,26 +1,26 @@ REPORT zdemo_excel38. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_column TYPE REF TO zcl_excel_column, - lo_drawing TYPE REF TO zcl_excel_drawing. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column TYPE REF TO zcl_excel_column, + lo_drawing TYPE REF TO zcl_excel_drawing. TYPES: BEGIN OF gty_icon, * name TYPE icon_name, "Fix #228 - name TYPE iconname, "Fix #228 - objid TYPE w3objid, + name TYPE iconname, "Fix #228 + objid TYPE w3objid, END OF gty_icon, gtyt_icon TYPE STANDARD TABLE OF gty_icon WITH NON-UNIQUE DEFAULT KEY. -DATA: lt_icon TYPE gtyt_icon, - lv_row TYPE sytabix, - ls_wwwdatatab TYPE wwwdatatab, - lt_mimedata TYPE STANDARD TABLE OF w3mime WITH NON-UNIQUE DEFAULT KEY, - lv_xstring TYPE xstring. +DATA: lt_icon TYPE gtyt_icon, + lv_row TYPE sytabix, + ls_wwwdatatab TYPE wwwdatatab, + lt_mimedata TYPE STANDARD TABLE OF w3mime WITH NON-UNIQUE DEFAULT KEY, + lv_xstring TYPE xstring. -FIELD-SYMBOLS: LIKE LINE OF lt_icon, - LIKE LINE OF lt_mimedata. +FIELD-SYMBOLS: LIKE LINE OF lt_icon, + LIKE LINE OF lt_mimedata. CONSTANTS: gc_save_file_name TYPE string VALUE '38_SAP-Icons.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_excel39.prog.abap b/src/demos/zdemo_excel39.prog.abap index cc6e1e397..81688ddec 100644 --- a/src/demos/zdemo_excel39.prog.abap +++ b/src/demos/zdemo_excel39.prog.abap @@ -139,7 +139,7 @@ START-OF-SELECTION. CALL METHOD lo_bar1_stacked->create_ax EXPORTING - ip_type = zcl_excel_graph_bars=>c_catax . + ip_type = zcl_excel_graph_bars=>c_catax. CALL METHOD lo_bar1_stacked->create_ax EXPORTING diff --git a/src/demos/zdemo_excel4.prog.abap b/src/demos/zdemo_excel4.prog.abap index f64bc5345..5b5f020f4 100644 --- a/src/demos/zdemo_excel4.prog.abap +++ b/src/demos/zdemo_excel4.prog.abap @@ -8,15 +8,15 @@ REPORT zdemo_excel4. -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_hyperlink TYPE REF TO zcl_excel_hyperlink, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, - lv_tabcolor TYPE zexcel_s_tabcolor, + lv_tabcolor TYPE zexcel_s_tabcolor, - ls_header TYPE zexcel_s_worksheet_head_foot, - ls_footer TYPE zexcel_s_worksheet_head_foot. + ls_header TYPE zexcel_s_worksheet_head_foot, + ls_footer TYPE zexcel_s_worksheet_head_foot. CONSTANTS: gc_save_file_name TYPE string VALUE '04_Sheets.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_excel40.prog.abap b/src/demos/zdemo_excel40.prog.abap index 1d61087b7..0c3f3be34 100644 --- a/src/demos/zdemo_excel40.prog.abap +++ b/src/demos/zdemo_excel40.prog.abap @@ -1,14 +1,14 @@ REPORT zdemo_excel40. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lv_row TYPE zexcel_cell_row, - lv_col TYPE i, - lv_row_char TYPE char10, - lv_value TYPE string, - ls_fontcolor TYPE zexcel_style_color_argb. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lv_row TYPE zexcel_cell_row, + lv_col TYPE i, + lv_row_char TYPE char10, + lv_value TYPE string, + ls_fontcolor TYPE zexcel_style_color_argb. CONSTANTS: gc_save_file_name TYPE string VALUE '40_Printsettings.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_excel41.prog.abap b/src/demos/zdemo_excel41.prog.abap index def611eab..c88be71b0 100644 --- a/src/demos/zdemo_excel41.prog.abap +++ b/src/demos/zdemo_excel41.prog.abap @@ -9,7 +9,7 @@ CONSTANTS: gc_save_file_name TYPE string VALUE 'ABAP2XLSX Inheritance.xlsx'. CLASS lcl_my_zcl_excel1 DEFINITION INHERITING FROM zcl_excel. PUBLIC SECTION. METHODS: constructor IMPORTING iv_sheetcount TYPE i DEFAULT 5 - RAISING zcx_excel. + RAISING zcx_excel. ENDCLASS. CLASS lcl_my_zcl_excel1 IMPLEMENTATION. @@ -77,7 +77,7 @@ DATA: go_excel1 TYPE REF TO lcl_my_zcl_excel1. DATA: go_excel2 TYPE REF TO lcl_my_zcl_excel2. -SELECTION-SCREEN BEGIN OF BLOCK bli WITH FRAME TITLE text-bli. +SELECTION-SCREEN BEGIN OF BLOCK bli WITH FRAME TITLE TEXT-bli. PARAMETERS: rbi_1 RADIOBUTTON GROUP rbi DEFAULT 'X' , " Simple inheritance rbi_2 RADIOBUTTON GROUP rbi. SELECTION-SCREEN END OF BLOCK bli. diff --git a/src/demos/zdemo_excel42.prog.abap b/src/demos/zdemo_excel42.prog.abap index 5ac9a6b44..7482a6c2f 100644 --- a/src/demos/zdemo_excel42.prog.abap +++ b/src/demos/zdemo_excel42.prog.abap @@ -6,18 +6,18 @@ *& *&---------------------------------------------------------------------* -REPORT ZDEMO_EXCEL42. -type-POOLS: vrm. +REPORT zdemo_excel42. +TYPE-POOLS: vrm. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_theme TYPE REF TO zcl_excel_theme, - lo_style type ref to zcl_excel_style, - lv_style_guid type ZEXCEL_CELL_STYLE. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_theme TYPE REF TO zcl_excel_theme, + lo_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style. DATA: gc_save_file_name TYPE string VALUE '42 Theme Manipulation demo.&'. -include zdemo_excel_outputopt_incl. +INCLUDE zdemo_excel_outputopt_incl. -initialization. +INITIALIZATION. START-OF-SELECTION. @@ -41,62 +41,62 @@ START-OF-SELECTION. lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Bold text' ip_style = lv_style_guid ). "create theme - create object lo_theme. + CREATE OBJECT lo_theme. lo_theme->set_theme_name( iv_name = 'Theme Demo 42 A2X' ). lo_theme->set_color_scheme_name( iv_name = 'Demo 42 A2X' ). "set theme colors lo_theme->set_color( - exporting + EXPORTING iv_type = zcl_excel_theme_color_scheme=>c_dark1 iv_srgb = '5F9EA0' * iv_syscolorname = * iv_syscolorlast = ). - lo_theme->set_color( - exporting - iv_type = zcl_excel_theme_color_scheme=>c_dark2 - iv_srgb = 'FFA500' + lo_theme->set_color( + EXPORTING + iv_type = zcl_excel_theme_color_scheme=>c_dark2 + iv_srgb = 'FFA500' * iv_syscolorname = * iv_syscolorlast = - ). - lo_theme->set_color( - exporting - iv_type = zcl_excel_theme_color_scheme=>c_light1 - iv_srgb = '778899' +). + lo_theme->set_color( + EXPORTING + iv_type = zcl_excel_theme_color_scheme=>c_light1 + iv_srgb = '778899' * iv_syscolorname = * iv_syscolorlast = - ). +). - lo_theme->set_color( - exporting - iv_type = zcl_excel_theme_color_scheme=>c_light1 - iv_srgb = '9932CC' + lo_theme->set_color( + EXPORTING + iv_type = zcl_excel_theme_color_scheme=>c_light1 + iv_srgb = '9932CC' * iv_syscolorname = * iv_syscolorlast = - ). +). lo_theme->set_font_scheme_name( iv_name = 'Demo 42 A2X' ). "set theme latin fonts - major and minor lo_theme->set_latin_font( - exporting + EXPORTING iv_type = zcl_excel_theme_font_scheme=>c_major iv_typeface = 'Britannic Bold' * iv_panose = * iv_pitchfamily = * iv_charset = ). - lo_theme->set_latin_font( - exporting - iv_type = zcl_excel_theme_font_scheme=>c_minor - iv_typeface = 'Broadway' + lo_theme->set_latin_font( + EXPORTING + iv_type = zcl_excel_theme_font_scheme=>c_minor + iv_typeface = 'Broadway' * iv_panose = * iv_pitchfamily = * iv_charset = - ). - "push theme to file - lo_excel->set_theme( io_theme = lo_theme ). + ). + "push theme to file + lo_excel->set_theme( io_theme = lo_theme ). - "output - lcl_output=>output( cl_excel = lo_excel ). + "output + lcl_output=>output( cl_excel = lo_excel ). diff --git a/src/demos/zdemo_excel5.prog.abap b/src/demos/zdemo_excel5.prog.abap index b6d42de9c..cb87e2a37 100644 --- a/src/demos/zdemo_excel5.prog.abap +++ b/src/demos/zdemo_excel5.prog.abap @@ -8,11 +8,11 @@ REPORT zdemo_excel5. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_cond TYPE REF TO zcl_excel_style_cond. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_cond TYPE REF TO zcl_excel_style_cond. -DATA: ls_iconset TYPE zexcel_conditional_iconset. +DATA: ls_iconset TYPE zexcel_conditional_iconset. diff --git a/src/demos/zdemo_excel6.prog.abap b/src/demos/zdemo_excel6.prog.abap index 24d3d2c82..e06ac545c 100644 --- a/src/demos/zdemo_excel6.prog.abap +++ b/src/demos/zdemo_excel6.prog.abap @@ -8,10 +8,10 @@ REPORT zdemo_excel6. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lv_row TYPE syindex, - lv_formula TYPE string. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_row TYPE syindex, + lv_formula TYPE string. CONSTANTS: gc_save_file_name TYPE string VALUE '06_Formulas.xlsx'. diff --git a/src/demos/zdemo_excel7.prog.abap b/src/demos/zdemo_excel7.prog.abap index 6b31cad43..3900a3210 100644 --- a/src/demos/zdemo_excel7.prog.abap +++ b/src/demos/zdemo_excel7.prog.abap @@ -8,16 +8,16 @@ REPORT zdemo_excel7. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_cond TYPE REF TO zcl_excel_style_cond. - -DATA: ls_iconset3 TYPE zexcel_conditional_iconset, - ls_iconset4 TYPE zexcel_conditional_iconset, - ls_iconset5 TYPE zexcel_conditional_iconset, - ls_databar TYPE zexcel_conditional_databar, - ls_colorscale2 TYPE zexcel_conditional_colorscale, - ls_colorscale3 TYPE zexcel_conditional_colorscale. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_cond TYPE REF TO zcl_excel_style_cond. + +DATA: ls_iconset3 TYPE zexcel_conditional_iconset, + ls_iconset4 TYPE zexcel_conditional_iconset, + ls_iconset5 TYPE zexcel_conditional_iconset, + ls_databar TYPE zexcel_conditional_databar, + ls_colorscale2 TYPE zexcel_conditional_colorscale, + ls_colorscale3 TYPE zexcel_conditional_colorscale. CONSTANTS: gc_save_file_name TYPE string VALUE '07_ConditionalAll.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_excel8.prog.abap b/src/demos/zdemo_excel8.prog.abap index 0f6e8464d..3c92f3cb0 100644 --- a/src/demos/zdemo_excel8.prog.abap +++ b/src/demos/zdemo_excel8.prog.abap @@ -8,9 +8,9 @@ REPORT zdemo_excel8. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_range TYPE REF TO zcl_excel_range. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range. DATA: lv_title TYPE zexcel_sheet_title. diff --git a/src/demos/zdemo_excel9.prog.abap b/src/demos/zdemo_excel9.prog.abap index 71b7814be..feb6d7955 100644 --- a/src/demos/zdemo_excel9.prog.abap +++ b/src/demos/zdemo_excel9.prog.abap @@ -13,10 +13,10 @@ CONSTANTS: c_fruits TYPE string VALUE 'Fruits', c_meat TYPE string VALUE 'Meat', c_fish TYPE string VALUE 'Fish'. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_range TYPE REF TO zcl_excel_range, - lo_data_validation TYPE REF TO zcl_excel_data_validation. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation. DATA: row TYPE zexcel_cell_row. @@ -154,21 +154,21 @@ START-OF-SELECTION. lo_data_validation->cell_row = row. lo_data_validation->cell_column = 'A'. lo_worksheet->set_cell( ip_row = row ip_column = 'A' ip_value = 'Select a value' ). - " 2nd + " 2nd lo_data_validation = lo_worksheet->add_new_data_validation( ). lo_data_validation->type = zcl_excel_data_validation=>c_type_list. lo_data_validation->formula1 = c_vegetables. lo_data_validation->cell_row = row. lo_data_validation->cell_column = 'B'. lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = 'Select a value' ). - " 3rd + " 3rd lo_data_validation = lo_worksheet->add_new_data_validation( ). lo_data_validation->type = zcl_excel_data_validation=>c_type_list. lo_data_validation->formula1 = c_meat. lo_data_validation->cell_row = row. lo_data_validation->cell_column = 'C'. lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = 'Select a value' ). - " 4th + " 4th lo_data_validation = lo_worksheet->add_new_data_validation( ). lo_data_validation->type = zcl_excel_data_validation=>c_type_list. lo_data_validation->formula1 = c_fish. @@ -180,13 +180,13 @@ START-OF-SELECTION. ENDWHILE. IF p_sbook = abap_true. - DATA: bookings type TABLE OF sbook. + DATA: bookings TYPE TABLE OF sbook. lo_worksheet = lo_excel->add_new_worksheet( ). lv_title = 'SBOOK'. lo_worksheet->set_title( lv_title ). - SELECT * from sbook INTO TABLE bookings UP TO 4000 ROWS. + SELECT * FROM sbook INTO TABLE bookings UP TO 4000 ROWS. lo_worksheet->bind_table( EXPORTING diff --git a/src/demos/zdemo_excel_comments.prog.abap b/src/demos/zdemo_excel_comments.prog.abap index d1afa28b7..dfaea09a5 100644 --- a/src/demos/zdemo_excel_comments.prog.abap +++ b/src/demos/zdemo_excel_comments.prog.abap @@ -7,11 +7,11 @@ *&---------------------------------------------------------------------* REPORT zdemo_excel_comments. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_comment TYPE REF TO zcl_excel_comment, - lo_hyperlink TYPE REF TO zcl_excel_hyperlink, - lv_comment TYPE string. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_comment TYPE REF TO zcl_excel_comment, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + lv_comment TYPE string. CONSTANTS: gc_save_file_name TYPE string VALUE 'Comments.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_excel_outputopt_incl.prog.abap b/src/demos/zdemo_excel_outputopt_incl.prog.abap index 4b7a7ee05..ab789df92 100644 --- a/src/demos/zdemo_excel_outputopt_incl.prog.abap +++ b/src/demos/zdemo_excel_outputopt_incl.prog.abap @@ -104,7 +104,7 @@ CLASS lcl_output IMPLEMENTATION. IF sy-batch IS INITIAL. cl_output->download_frontend( ). ELSE. - MESSAGE e802(ZABAP2XLSX). + MESSAGE e802(zabap2xlsx). ENDIF. WHEN rb_back. @@ -114,7 +114,7 @@ CLASS lcl_output IMPLEMENTATION. IF sy-batch IS INITIAL. cl_output->display_online( ). ELSE. - MESSAGE e803(ZABAP2XLSX). + MESSAGE e803(zabap2xlsx). ENDIF. WHEN rb_send. @@ -187,10 +187,10 @@ CLASS lcl_output IMPLEMENTATION. * If started in language w/o textelements translated set defaults * Furthermore I don't have to change the selectiontexts of all demoreports. DEFINE default_parametertext. - if %_&1_%_app_%-text = '&1' or - %_&1_%_app_%-text is initial. + IF %_&1_%_app_%-text = '&1' OR + %_&1_%_app_%-text IS INITIAL. %_&1_%_app_%-text = &2. - endif. + ENDIF. END-OF-DEFINITION. default_parametertext: rb_down 'Save to frontend', @@ -352,10 +352,10 @@ CLASS lcl_output IMPLEMENTATION. COMMIT WORK. IF sent = abap_true. - MESSAGE s805(ZABAP2XLSX). + MESSAGE s805(zabap2xlsx). MESSAGE 'Document ready to be sent - Check SOST or SCOT' TYPE 'I'. ELSE. - MESSAGE i804(ZABAP2XLSX) WITH p_email. + MESSAGE i804(zabap2xlsx) WITH p_email. ENDIF. CATCH cx_bcs INTO bcs_exception. diff --git a/src/demos/zdemo_excel_wda01.wdyn.xml b/src/demos/zdemo_excel_wda01.wdyn.xml index 4c14ceb6b..72fea4bd9 100644 --- a/src/demos/zdemo_excel_wda01.wdyn.xml +++ b/src/demos/zdemo_excel_wda01.wdyn.xml @@ -48,8 +48,17 @@ CL_WDY_MD_VIEW V_MAIN ROOTUIELEMENTCONTAINER + E V_MAIN + + + ZDEMO_EXCEL_WDA01 + V_MAIN + E + Web Dynpro View + + ZDEMO_EXCEL_WDA01 @@ -113,6 +122,13 @@ + + ZDEMO_EXCEL_WDA01 + V_MAIN + BTN_DOWNLOAD + A + ACTIVATE_ACCESS_KEY + ZDEMO_EXCEL_WDA01 V_MAIN @@ -153,6 +169,13 @@ IMAGE_FIRST X + + ZDEMO_EXCEL_WDA01 + V_MAIN + BTN_DOWNLOAD + A + IMAGE_IS_DECORATIVE + ZDEMO_EXCEL_WDA01 V_MAIN @@ -185,6 +208,14 @@ V_GUTTER 00 + + ZDEMO_EXCEL_WDA01 + V_MAIN + ROOTUIELEMENTCONTAINER + A + ARIA_LANDMARK + 10 + ZDEMO_EXCEL_WDA01 V_MAIN @@ -201,6 +232,13 @@ ENABLED X + + ZDEMO_EXCEL_WDA01 + V_MAIN + ROOTUIELEMENTCONTAINER + A + HANDLE_HOTKEYS + ZDEMO_EXCEL_WDA01 V_MAIN @@ -217,6 +255,22 @@ SCROLLING_MODE 02 + + ZDEMO_EXCEL_WDA01 + V_MAIN + ROOTUIELEMENTCONTAINER + A + SCROLL_LEFT + 0 + + + ZDEMO_EXCEL_WDA01 + V_MAIN + ROOTUIELEMENTCONTAINER + A + SCROLL_TOP + 0 + ZDEMO_EXCEL_WDA01 V_MAIN @@ -881,28 +935,28 @@ V_MAIN ONACTIONBTN_DOWNLOAD 3 - DATA: lo_excel TYPE REF TO zcl_excel, + DATA: lo_excel TYPE REF TO zcl_excel, ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 4 - lo_excel_writer TYPE REF TO zcl_excel_writer_2007, + lo_excel_writer TYPE REF TO zcl_excel_writer_2007, ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 5 - lo_worksheet TYPE REF TO zcl_excel_worksheet. + lo_worksheet TYPE REF TO zcl_excel_worksheet. ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 6 - DATA: lv_content TYPE xstring. + DATA: lv_content TYPE xstring. ZDEMO_EXCEL_WDA01 @@ -915,14 +969,14 @@ V_MAIN ONACTIONBTN_DOWNLOAD 8 - CREATE OBJECT lo_excel. + CREATE OBJECT lo_excel. ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 9 - lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet = lo_excel->get_active_worksheet( ). ZDEMO_EXCEL_WDA01 @@ -935,21 +989,21 @@ V_MAIN ONACTIONBTN_DOWNLOAD 11 - lo_worksheet->set_cell( ip_column = 'B' + lo_worksheet->set_cell( ip_column = 'B' ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 12 - ip_row = '2' + ip_row = '2' ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 13 - ip_value = 'Welcome to Web Dynpro and abap2xlsx.' ). + ip_value = 'Welcome to Web Dynpro and abap2xlsx.' ). ZDEMO_EXCEL_WDA01 @@ -962,14 +1016,14 @@ V_MAIN ONACTIONBTN_DOWNLOAD 15 - CREATE OBJECT lo_excel_writer. + CREATE OBJECT lo_excel_writer. ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 16 - lv_content = lo_excel_writer->zif_excel_writer~write_file( lo_excel ). + lv_content = lo_excel_writer->zif_excel_writer~write_file( lo_excel ). ZDEMO_EXCEL_WDA01 @@ -982,14 +1036,14 @@ V_MAIN ONACTIONBTN_DOWNLOAD 18 - DATA: lv_filename TYPE string. + DATA: lv_filename TYPE string. ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 19 - lv_filename = 'wda01.xlsx'. + lv_filename = 'wda01.xlsx'. ZDEMO_EXCEL_WDA01 @@ -1002,49 +1056,49 @@ V_MAIN ONACTIONBTN_DOWNLOAD 21 - CALL METHOD cl_wd_runtime_services=>attach_file_to_response + CALL METHOD cl_wd_runtime_services=>attach_file_to_response ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 22 - EXPORTING + EXPORTING ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 23 - i_filename = lv_filename + i_filename = lv_filename ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 24 - i_content = lv_content + i_content = lv_content ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 25 - i_mime_type = 'EXCEL' + i_mime_type = 'EXCEL' ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 26 - i_in_new_window = abap_false + i_in_new_window = abap_false ZDEMO_EXCEL_WDA01 V_MAIN ONACTIONBTN_DOWNLOAD 27 - i_inplace = abap_false. + i_inplace = abap_false. ZDEMO_EXCEL_WDA01 diff --git a/src/demos/zdemo_teched1.prog.abap b/src/demos/zdemo_teched1.prog.abap index b808474a4..b89dcdddb 100644 --- a/src/demos/zdemo_teched1.prog.abap +++ b/src/demos/zdemo_teched1.prog.abap @@ -12,13 +12,13 @@ REPORT zdemo_teched1. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched10.prog.abap b/src/demos/zdemo_teched10.prog.abap index 0ab50c269..d928d00d2 100644 --- a/src/demos/zdemo_teched10.prog.abap +++ b/src/demos/zdemo_teched10.prog.abap @@ -12,18 +12,18 @@ REPORT zdemo_teched10. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_reader TYPE REF TO zif_excel_reader, - lo_worksheet TYPE REF TO zcl_excel_worksheet. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_reader TYPE REF TO zif_excel_reader, + lo_worksheet TYPE REF TO zcl_excel_worksheet. DATA: lv_full_path TYPE string, lv_workdir TYPE string, lv_file_separator TYPE c. -DATA: lt_files TYPE filetable, - ls_file TYPE file_table, - lv_rc TYPE i, - lv_value TYPE zexcel_cell_value. +DATA: lt_files TYPE filetable, + ls_file TYPE file_table, + lv_rc TYPE i, + lv_value TYPE zexcel_cell_value. CONSTANTS: gc_save_file_name TYPE string VALUE 'TechEd01.xlsx'. INCLUDE zdemo_excel_outputopt_incl. diff --git a/src/demos/zdemo_teched2.prog.abap b/src/demos/zdemo_teched2.prog.abap index ce475e8e9..0ead99e48 100644 --- a/src/demos/zdemo_teched2.prog.abap +++ b/src/demos/zdemo_teched2.prog.abap @@ -12,16 +12,16 @@ REPORT zdemo_teched2. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lv_style_title_guid TYPE zexcel_cell_style. +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lv_style_title_guid TYPE zexcel_cell_style. -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched3.prog.abap b/src/demos/zdemo_teched3.prog.abap index d7d9d7bf9..77e0dd1b6 100644 --- a/src/demos/zdemo_teched3.prog.abap +++ b/src/demos/zdemo_teched3.prog.abap @@ -12,18 +12,18 @@ REPORT zdemo_teched3. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lo_drawing TYPE REF TO zcl_excel_drawing, - lv_style_title_guid TYPE zexcel_cell_style, - ls_key TYPE wwwdatatab. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched4.prog.abap b/src/demos/zdemo_teched4.prog.abap index 5d1d6866c..660c9f4cf 100644 --- a/src/demos/zdemo_teched4.prog.abap +++ b/src/demos/zdemo_teched4.prog.abap @@ -12,19 +12,19 @@ REPORT zdemo_teched4. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_range TYPE REF TO zcl_excel_range, - lv_style_title_guid TYPE zexcel_cell_style, - ls_key TYPE wwwdatatab. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched5.prog.abap b/src/demos/zdemo_teched5.prog.abap index 30d5040e0..989fc7e69 100644 --- a/src/demos/zdemo_teched5.prog.abap +++ b/src/demos/zdemo_teched5.prog.abap @@ -12,20 +12,20 @@ REPORT zdemo_teched5. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_range TYPE REF TO zcl_excel_range, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lv_style_title_guid TYPE zexcel_cell_style, - ls_key TYPE wwwdatatab. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched6.prog.abap b/src/demos/zdemo_teched6.prog.abap index 123b1b2c4..7e5f21e1b 100644 --- a/src/demos/zdemo_teched6.prog.abap +++ b/src/demos/zdemo_teched6.prog.abap @@ -12,21 +12,21 @@ REPORT zdemo_teched6. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_range TYPE REF TO zcl_excel_range, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lo_column TYPE REF TO zcl_excel_column, - lv_style_title_guid TYPE zexcel_cell_style, - ls_key TYPE wwwdatatab. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column TYPE REF TO zcl_excel_column, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched7.prog.abap b/src/demos/zdemo_teched7.prog.abap index 8b069800b..a6961f8f0 100644 --- a/src/demos/zdemo_teched7.prog.abap +++ b/src/demos/zdemo_teched7.prog.abap @@ -12,21 +12,21 @@ REPORT zdemo_teched7. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_range TYPE REF TO zcl_excel_range, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lo_column TYPE REF TO zcl_excel_column, - lv_style_title_guid TYPE zexcel_cell_style, - ls_key TYPE wwwdatatab. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column TYPE REF TO zcl_excel_column, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched8.prog.abap b/src/demos/zdemo_teched8.prog.abap index ea86e1473..b77227212 100644 --- a/src/demos/zdemo_teched8.prog.abap +++ b/src/demos/zdemo_teched8.prog.abap @@ -12,29 +12,29 @@ REPORT zdemo_teched8. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lo_style_green TYPE REF TO zcl_excel_style, - lo_style_yellow TYPE REF TO zcl_excel_style, - lo_style_red TYPE REF TO zcl_excel_style, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_range TYPE REF TO zcl_excel_range, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lo_column TYPE REF TO zcl_excel_column, - lo_style_conditional TYPE REF TO zcl_excel_style_cond, - lv_style_title_guid TYPE zexcel_cell_style, - lv_style_green_guid TYPE zexcel_cell_style, - lv_style_yellow_guid TYPE zexcel_cell_style, - lv_style_red_guid TYPE zexcel_cell_style, - ls_cellis TYPE zexcel_conditional_cellis, - ls_key TYPE wwwdatatab. - -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lt_file_tab TYPE solix_tab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_style_green TYPE REF TO zcl_excel_style, + lo_style_yellow TYPE REF TO zcl_excel_style, + lo_style_red TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column TYPE REF TO zcl_excel_column, + lo_style_conditional TYPE REF TO zcl_excel_style_cond, + lv_style_title_guid TYPE zexcel_cell_style, + lv_style_green_guid TYPE zexcel_cell_style, + lv_style_yellow_guid TYPE zexcel_cell_style, + lv_style_red_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. DATA: lv_full_path TYPE string, lv_workdir TYPE string, diff --git a/src/demos/zdemo_teched9.prog.abap b/src/demos/zdemo_teched9.prog.abap index 9123f6536..094ba6288 100644 --- a/src/demos/zdemo_teched9.prog.abap +++ b/src/demos/zdemo_teched9.prog.abap @@ -12,200 +12,200 @@ REPORT zdemo_teched9. * Data Object declaration * ******************************* -DATA: lo_excel TYPE REF TO zcl_excel, - lo_excel_writer TYPE REF TO zif_excel_writer, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - -DATA: lo_style_title TYPE REF TO zcl_excel_style, - lo_style_green TYPE REF TO zcl_excel_style, - lo_style_yellow TYPE REF TO zcl_excel_style, - lo_style_red TYPE REF TO zcl_excel_style, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_range TYPE REF TO zcl_excel_range, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lo_column TYPE REF TO zcl_excel_column, - lo_style_conditional TYPE REF TO zcl_excel_style_cond, - lv_style_title_guid TYPE zexcel_cell_style, - lv_style_green_guid TYPE zexcel_cell_style, - lv_style_yellow_guid TYPE zexcel_cell_style, - lv_style_red_guid TYPE zexcel_cell_style, - ls_cellis TYPE zexcel_conditional_cellis, - ls_key TYPE wwwdatatab. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_style_green TYPE REF TO zcl_excel_style, + lo_style_yellow TYPE REF TO zcl_excel_style, + lo_style_red TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column TYPE REF TO zcl_excel_column, + lo_style_conditional TYPE REF TO zcl_excel_style_cond, + lv_style_title_guid TYPE zexcel_cell_style, + lv_style_green_guid TYPE zexcel_cell_style, + lv_style_yellow_guid TYPE zexcel_cell_style, + lv_style_red_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis, + ls_key TYPE wwwdatatab. DATA: lo_send_request TYPE REF TO cl_bcs, lo_document TYPE REF TO cl_document_bcs, lo_sender TYPE REF TO cl_sapuser_bcs, lo_recipient TYPE REF TO cl_sapuser_bcs. -DATA: lv_file TYPE xstring, - lv_bytecount TYPE i, - lv_bytecount_c TYPE sood-objlen, - lt_file_tab TYPE solix_tab. +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lv_bytecount_c TYPE sood-objlen, + lt_file_tab TYPE solix_tab. ******************************* * abap2xlsx create XLSX * ******************************* - " Create excel instance - CREATE OBJECT lo_excel. - - " Styles - lo_style_title = lo_excel->add_new_style( ). - lo_style_title->font->bold = abap_true. - lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. - lv_style_title_guid = lo_style_title->get_guid( ). - - " Get active sheet - lo_worksheet = lo_excel->get_active_worksheet( ). - lo_worksheet->set_title( ip_title = 'Demo TechEd' ). - lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). - lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). - lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). - - lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). - lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). - - " add logo from SMWO - lo_drawing = lo_excel->add_new_drawing( ). - lo_drawing->set_position( ip_from_row = 2 - ip_from_col = 'B' ). - - ls_key-relid = 'MI'. - ls_key-objid = 'SIWB_KW_LOGO'. - lo_drawing->set_media_www( ip_key = ls_key - ip_width = 140 - ip_height = 64 ). - - " assign drawing to the worksheet - lo_worksheet->add_drawing( lo_drawing ). - - " Add new sheet - lo_worksheet = lo_excel->add_new_worksheet( ). - lo_worksheet->set_title( ip_title = 'Values' ). - - " Set values for range - lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). - lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). - lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). - lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). - lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). - - lo_range = lo_excel->add_new_range( ). - lo_range->name = 'Values'. - lo_range->set_value( ip_sheet_name = 'Values' - ip_start_column = 'A' - ip_start_row = 4 - ip_stop_column = 'A' - ip_stop_row = 8 ). - - lo_excel->set_active_sheet_index( 1 ). - - " add data validation - lo_worksheet = lo_excel->get_active_worksheet( ). - - lo_data_validation = lo_worksheet->add_new_data_validation( ). - lo_data_validation->type = zcl_excel_data_validation=>c_type_list. - lo_data_validation->formula1 = 'Values'. - lo_data_validation->cell_row = 7. - lo_data_validation->cell_column = 'C'. - lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). - - - lo_data_validation = lo_worksheet->add_new_data_validation( ). - lo_data_validation->type = zcl_excel_data_validation=>c_type_list. - lo_data_validation->formula1 = 'Values'. - lo_data_validation->cell_row = 8. - lo_data_validation->cell_column = 'C'. - lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). - - " add autosize (column width) - lo_column = lo_worksheet->get_column( ip_column = 'B' ). - lo_column->set_auto_size( ip_auto_size = abap_true ). - lo_column = lo_worksheet->get_column( ip_column = 'C' ). - lo_column->set_auto_size( ip_auto_size = abap_true ). - - " defne conditional styles - lo_style_green = lo_excel->add_new_style( ). - lo_style_green->fill->filltype = zcl_excel_style_fill=>c_fill_solid. - lo_style_green->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. - lv_style_green_guid = lo_style_green->get_guid( ). - - lo_style_yellow = lo_excel->add_new_style( ). - lo_style_yellow->fill->filltype = zcl_excel_style_fill=>c_fill_solid. - lo_style_yellow->fill->bgcolor-rgb = zcl_excel_style_color=>c_yellow. - lv_style_yellow_guid = lo_style_yellow->get_guid( ). - - lo_style_red = lo_excel->add_new_style( ). - lo_style_red->fill->filltype = zcl_excel_style_fill=>c_fill_solid. - lo_style_red->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. - lv_style_red_guid = lo_style_red->get_guid( ). - - " add conditional formatting - lo_style_conditional = lo_worksheet->add_new_style_cond( ). - lo_style_conditional->rule = zcl_excel_style_cond=>c_rule_cellis. - ls_cellis-formula = '5'. - ls_cellis-operator = zcl_excel_style_cond=>c_operator_greaterthan. - ls_cellis-cell_style = lv_style_green_guid. - lo_style_conditional->mode_cellis = ls_cellis. - lo_style_conditional->priority = 1. - lo_style_conditional->set_range( ip_start_column = 'C' - ip_start_row = 10 - ip_stop_column = 'C' - ip_stop_row = 10 ). - - lo_style_conditional = lo_worksheet->add_new_style_cond( ). - lo_style_conditional->rule = zcl_excel_style_cond=>c_rule_cellis. - ls_cellis-formula = '5'. - ls_cellis-operator = zcl_excel_style_cond=>c_operator_equal. - ls_cellis-cell_style = lv_style_yellow_guid. - lo_style_conditional->mode_cellis = ls_cellis. - lo_style_conditional->priority = 2. - lo_style_conditional->set_range( ip_start_column = 'C' - ip_start_row = 10 - ip_stop_column = 'C' - ip_stop_row = 10 ). - - lo_style_conditional = lo_worksheet->add_new_style_cond( ). - lo_style_conditional->rule = zcl_excel_style_cond=>c_rule_cellis. - ls_cellis-formula = '0'. - ls_cellis-operator = zcl_excel_style_cond=>c_operator_greaterthan. - ls_cellis-cell_style = lv_style_red_guid. - lo_style_conditional->mode_cellis = ls_cellis. - lo_style_conditional->priority = 3. - lo_style_conditional->set_range( ip_start_column = 'C' - ip_start_row = 10 - ip_stop_column = 'C' - ip_stop_row = 10 ). - - - " Create xlsx stream - CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. - lv_file = lo_excel_writer->write_file( lo_excel ). +" Create excel instance +CREATE OBJECT lo_excel. + +" Styles +lo_style_title = lo_excel->add_new_style( ). +lo_style_title->font->bold = abap_true. +lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. +lv_style_title_guid = lo_style_title->get_guid( ). + +" Get active sheet +lo_worksheet = lo_excel->get_active_worksheet( ). +lo_worksheet->set_title( ip_title = 'Demo TechEd' ). +lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). +lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). +lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + +lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). +lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). + +" add logo from SMWO +lo_drawing = lo_excel->add_new_drawing( ). +lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + +ls_key-relid = 'MI'. +ls_key-objid = 'SIWB_KW_LOGO'. +lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + +" assign drawing to the worksheet +lo_worksheet->add_drawing( lo_drawing ). + +" Add new sheet +lo_worksheet = lo_excel->add_new_worksheet( ). +lo_worksheet->set_title( ip_title = 'Values' ). + +" Set values for range +lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). +lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). +lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). +lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). +lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + +lo_range = lo_excel->add_new_range( ). +lo_range->name = 'Values'. +lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + +lo_excel->set_active_sheet_index( 1 ). + +" add data validation +lo_worksheet = lo_excel->get_active_worksheet( ). + +lo_data_validation = lo_worksheet->add_new_data_validation( ). +lo_data_validation->type = zcl_excel_data_validation=>c_type_list. +lo_data_validation->formula1 = 'Values'. +lo_data_validation->cell_row = 7. +lo_data_validation->cell_column = 'C'. +lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + +lo_data_validation = lo_worksheet->add_new_data_validation( ). +lo_data_validation->type = zcl_excel_data_validation=>c_type_list. +lo_data_validation->formula1 = 'Values'. +lo_data_validation->cell_row = 8. +lo_data_validation->cell_column = 'C'. +lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + +" add autosize (column width) +lo_column = lo_worksheet->get_column( ip_column = 'B' ). +lo_column->set_auto_size( ip_auto_size = abap_true ). +lo_column = lo_worksheet->get_column( ip_column = 'C' ). +lo_column->set_auto_size( ip_auto_size = abap_true ). + +" defne conditional styles +lo_style_green = lo_excel->add_new_style( ). +lo_style_green->fill->filltype = zcl_excel_style_fill=>c_fill_solid. +lo_style_green->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. +lv_style_green_guid = lo_style_green->get_guid( ). + +lo_style_yellow = lo_excel->add_new_style( ). +lo_style_yellow->fill->filltype = zcl_excel_style_fill=>c_fill_solid. +lo_style_yellow->fill->bgcolor-rgb = zcl_excel_style_color=>c_yellow. +lv_style_yellow_guid = lo_style_yellow->get_guid( ). + +lo_style_red = lo_excel->add_new_style( ). +lo_style_red->fill->filltype = zcl_excel_style_fill=>c_fill_solid. +lo_style_red->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. +lv_style_red_guid = lo_style_red->get_guid( ). + +" add conditional formatting +lo_style_conditional = lo_worksheet->add_new_style_cond( ). +lo_style_conditional->rule = zcl_excel_style_cond=>c_rule_cellis. +ls_cellis-formula = '5'. +ls_cellis-operator = zcl_excel_style_cond=>c_operator_greaterthan. +ls_cellis-cell_style = lv_style_green_guid. +lo_style_conditional->mode_cellis = ls_cellis. +lo_style_conditional->priority = 1. +lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + +lo_style_conditional = lo_worksheet->add_new_style_cond( ). +lo_style_conditional->rule = zcl_excel_style_cond=>c_rule_cellis. +ls_cellis-formula = '5'. +ls_cellis-operator = zcl_excel_style_cond=>c_operator_equal. +ls_cellis-cell_style = lv_style_yellow_guid. +lo_style_conditional->mode_cellis = ls_cellis. +lo_style_conditional->priority = 2. +lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + +lo_style_conditional = lo_worksheet->add_new_style_cond( ). +lo_style_conditional->rule = zcl_excel_style_cond=>c_rule_cellis. +ls_cellis-formula = '0'. +ls_cellis-operator = zcl_excel_style_cond=>c_operator_greaterthan. +ls_cellis-cell_style = lv_style_red_guid. +lo_style_conditional->mode_cellis = ls_cellis. +lo_style_conditional->priority = 3. +lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + +" Create xlsx stream +CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. +lv_file = lo_excel_writer->write_file( lo_excel ). ******************************* * Output * ******************************* - " Convert to binary - lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). - lv_bytecount = xstrlen( lv_file ). - lv_bytecount_c = lv_bytecount. - - " Send via email - lo_document = cl_document_bcs=>create_document( i_type = 'RAW' - i_subject = 'Demo TechEd' ). - - lo_document->add_attachment( i_attachment_type = 'EXT' - i_attachment_subject = 'abap2xlsx.xlsx' - i_attachment_size = lv_bytecount_c - i_att_content_hex = lt_file_tab ). - - lo_sender = cl_sapuser_bcs=>create( sy-uname ). - lo_recipient = cl_sapuser_bcs=>create( sy-uname ). - - lo_send_request = cl_bcs=>create_persistent( ). - lo_send_request->set_document( lo_document ). - lo_send_request->set_sender( lo_sender ). - lo_send_request->add_recipient( lo_recipient ). - lo_send_request->set_send_immediately( abap_true ). - lo_send_request->send( ). +" Convert to binary +lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +lv_bytecount = xstrlen( lv_file ). +lv_bytecount_c = lv_bytecount. + +" Send via email +lo_document = cl_document_bcs=>create_document( i_type = 'RAW' + i_subject = 'Demo TechEd' ). + +lo_document->add_attachment( i_attachment_type = 'EXT' + i_attachment_subject = 'abap2xlsx.xlsx' + i_attachment_size = lv_bytecount_c + i_att_content_hex = lt_file_tab ). + +lo_sender = cl_sapuser_bcs=>create( sy-uname ). +lo_recipient = cl_sapuser_bcs=>create( sy-uname ). + +lo_send_request = cl_bcs=>create_persistent( ). +lo_send_request->set_document( lo_document ). +lo_send_request->set_sender( lo_sender ). +lo_send_request->add_recipient( lo_recipient ). +lo_send_request->set_send_immediately( abap_true ). +lo_send_request->send( ). diff --git a/src/demos/ztest_excel_image_header.prog.abap b/src/demos/ztest_excel_image_header.prog.abap index f26c9aa7a..ec86bb2f2 100644 --- a/src/demos/ztest_excel_image_header.prog.abap +++ b/src/demos/ztest_excel_image_header.prog.abap @@ -8,13 +8,13 @@ REPORT ztest_excel_image_header. -DATA: lo_excel TYPE REF TO zcl_excel, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_drawing TYPE REF TO zcl_excel_drawing, - ls_key TYPE wwwdatatab, - ls_header TYPE zexcel_s_worksheet_head_foot, - ls_footer TYPE zexcel_s_worksheet_head_foot, - lv_content TYPE xstring. +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_drawing TYPE REF TO zcl_excel_drawing, + ls_key TYPE wwwdatatab, + ls_header TYPE zexcel_s_worksheet_head_foot, + ls_footer TYPE zexcel_s_worksheet_head_foot, + lv_content TYPE xstring. DATA: ls_io TYPE skwf_io. diff --git a/src/zcl_excel.clas.abap b/src/zcl_excel.clas.abap index 8c56788f0..361eb6ec7 100644 --- a/src/zcl_excel.clas.abap +++ b/src/zcl_excel.clas.abap @@ -1,673 +1,673 @@ -class ZCL_EXCEL definition - public - create public . +CLASS zcl_excel DEFINITION + PUBLIC + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL *"* do not include other source files here!!! - interfaces ZIF_EXCEL_BOOK_PROPERTIES . - interfaces ZIF_EXCEL_BOOK_PROTECTION . - interfaces ZIF_EXCEL_BOOK_VBA_PROJECT . - - data LEGACY_PALETTE type ref to ZCL_EXCEL_LEGACY_PALETTE read-only . - data SECURITY type ref to ZCL_EXCEL_SECURITY . - data USE_TEMPLATE type ABAP_BOOL . - - methods ADD_NEW_AUTOFILTER - importing - !IO_SHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(RO_AUTOFILTER) type ref to ZCL_EXCEL_AUTOFILTER - raising - ZCX_EXCEL . - methods ADD_NEW_COMMENT - returning - value(EO_COMMENT) type ref to ZCL_EXCEL_COMMENT . - methods ADD_NEW_DRAWING - importing - !IP_TYPE type ZEXCEL_DRAWING_TYPE default ZCL_EXCEL_DRAWING=>TYPE_IMAGE - !IP_TITLE type CLIKE optional - returning - value(EO_DRAWING) type ref to ZCL_EXCEL_DRAWING . - methods ADD_NEW_RANGE - returning - value(EO_RANGE) type ref to ZCL_EXCEL_RANGE . - methods ADD_NEW_STYLE - importing - !IP_GUID type ZEXCEL_CELL_STYLE optional - returning - value(EO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods ADD_NEW_WORKSHEET - importing - !IP_TITLE type ZEXCEL_SHEET_TITLE optional - returning - value(EO_WORKSHEET) type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods ADD_STATIC_STYLES . - methods CONSTRUCTOR . - methods DELETE_WORKSHEET - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods DELETE_WORKSHEET_BY_INDEX - importing - !IV_INDEX type NUMERIC - raising - ZCX_EXCEL . - methods DELETE_WORKSHEET_BY_NAME - importing - !IV_TITLE type CLIKE - raising - ZCX_EXCEL . - methods GET_ACTIVE_SHEET_INDEX - returning - value(R_ACTIVE_WORKSHEET) type ZEXCEL_ACTIVE_WORKSHEET . - methods GET_ACTIVE_WORKSHEET - returning - value(EO_WORKSHEET) type ref to ZCL_EXCEL_WORKSHEET . - methods GET_AUTOFILTERS_REFERENCE - returning - value(RO_AUTOFILTERS) type ref to ZCL_EXCEL_AUTOFILTERS . - methods GET_DEFAULT_STYLE - returning - value(EP_STYLE) type ZEXCEL_CELL_STYLE . - methods GET_DRAWINGS_ITERATOR - importing - !IP_TYPE type ZEXCEL_DRAWING_TYPE - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods GET_NEXT_TABLE_ID - returning - value(EP_ID) type I . - methods GET_RANGES_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods GET_STATIC_CELLSTYLE_GUID - importing - !IP_CSTYLE_COMPLETE type ZEXCEL_S_CSTYLE_COMPLETE - !IP_CSTYLEX_COMPLETE type ZEXCEL_S_CSTYLEX_COMPLETE - returning - value(EP_GUID) type ZEXCEL_CELL_STYLE . - methods GET_STYLES_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods GET_STYLE_INDEX_IN_STYLES - importing - !IP_GUID type ZEXCEL_CELL_STYLE - returning - value(EP_INDEX) type SYTABIX - raising - ZCX_EXCEL . - methods GET_STYLE_TO_GUID - importing - !IP_GUID type ZEXCEL_CELL_STYLE - returning - value(EP_STYLEMAPPING) type ZEXCEL_S_STYLEMAPPING - raising - ZCX_EXCEL . - methods GET_THEME - exporting - !EO_THEME type ref to ZCL_EXCEL_THEME . - methods GET_WORKSHEETS_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods GET_WORKSHEETS_NAME - returning - value(EP_NAME) type ZEXCEL_WORKSHEETS_NAME . - methods GET_WORKSHEETS_SIZE - returning - value(EP_SIZE) type I . - methods GET_WORKSHEET_BY_INDEX - importing - !IV_INDEX type NUMERIC - returning - value(EO_WORKSHEET) type ref to ZCL_EXCEL_WORKSHEET . - methods GET_WORKSHEET_BY_NAME - importing - !IP_SHEET_NAME type ZEXCEL_SHEET_TITLE - returning - value(EO_WORKSHEET) type ref to ZCL_EXCEL_WORKSHEET . - methods SET_ACTIVE_SHEET_INDEX - importing - !I_ACTIVE_WORKSHEET type ZEXCEL_ACTIVE_WORKSHEET - raising - ZCX_EXCEL . - methods SET_ACTIVE_SHEET_INDEX_BY_NAME - importing - !I_WORKSHEET_NAME type ZEXCEL_WORKSHEETS_NAME . - methods SET_DEFAULT_STYLE - importing - !IP_STYLE type ZEXCEL_CELL_STYLE - raising - ZCX_EXCEL . - methods SET_THEME - importing - !IO_THEME type ref to ZCL_EXCEL_THEME . -protected section. - - data WORKSHEETS type ref to ZCL_EXCEL_WORKSHEETS . -private section. - - constants VERSION type C length 10 value '7.2.0'. "#EC NOTEXT - data AUTOFILTERS type ref to ZCL_EXCEL_AUTOFILTERS . - data CHARTS type ref to ZCL_EXCEL_DRAWINGS . - data DEFAULT_STYLE type ZEXCEL_CELL_STYLE . + INTERFACES zif_excel_book_properties . + INTERFACES zif_excel_book_protection . + INTERFACES zif_excel_book_vba_project . + + DATA legacy_palette TYPE REF TO zcl_excel_legacy_palette READ-ONLY . + DATA security TYPE REF TO zcl_excel_security . + DATA use_template TYPE abap_bool . + + METHODS add_new_autofilter + IMPORTING + !io_sheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ro_autofilter) TYPE REF TO zcl_excel_autofilter + RAISING + zcx_excel . + METHODS add_new_comment + RETURNING + VALUE(eo_comment) TYPE REF TO zcl_excel_comment . + METHODS add_new_drawing + IMPORTING + !ip_type TYPE zexcel_drawing_type DEFAULT zcl_excel_drawing=>type_image + !ip_title TYPE clike OPTIONAL + RETURNING + VALUE(eo_drawing) TYPE REF TO zcl_excel_drawing . + METHODS add_new_range + RETURNING + VALUE(eo_range) TYPE REF TO zcl_excel_range . + METHODS add_new_style + IMPORTING + !ip_guid TYPE zexcel_cell_style OPTIONAL + RETURNING + VALUE(eo_style) TYPE REF TO zcl_excel_style . + METHODS add_new_worksheet + IMPORTING + !ip_title TYPE zexcel_sheet_title OPTIONAL + RETURNING + VALUE(eo_worksheet) TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS add_static_styles . + METHODS constructor . + METHODS delete_worksheet + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS delete_worksheet_by_index + IMPORTING + !iv_index TYPE numeric + RAISING + zcx_excel . + METHODS delete_worksheet_by_name + IMPORTING + !iv_title TYPE clike + RAISING + zcx_excel . + METHODS get_active_sheet_index + RETURNING + VALUE(r_active_worksheet) TYPE zexcel_active_worksheet . + METHODS get_active_worksheet + RETURNING + VALUE(eo_worksheet) TYPE REF TO zcl_excel_worksheet . + METHODS get_autofilters_reference + RETURNING + VALUE(ro_autofilters) TYPE REF TO zcl_excel_autofilters . + METHODS get_default_style + RETURNING + VALUE(ep_style) TYPE zexcel_cell_style . + METHODS get_drawings_iterator + IMPORTING + !ip_type TYPE zexcel_drawing_type + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS get_next_table_id + RETURNING + VALUE(ep_id) TYPE i . + METHODS get_ranges_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS get_static_cellstyle_guid + IMPORTING + !ip_cstyle_complete TYPE zexcel_s_cstyle_complete + !ip_cstylex_complete TYPE zexcel_s_cstylex_complete + RETURNING + VALUE(ep_guid) TYPE zexcel_cell_style . + METHODS get_styles_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS get_style_index_in_styles + IMPORTING + !ip_guid TYPE zexcel_cell_style + RETURNING + VALUE(ep_index) TYPE sytabix + RAISING + zcx_excel . + METHODS get_style_to_guid + IMPORTING + !ip_guid TYPE zexcel_cell_style + RETURNING + VALUE(ep_stylemapping) TYPE zexcel_s_stylemapping + RAISING + zcx_excel . + METHODS get_theme + EXPORTING + !eo_theme TYPE REF TO zcl_excel_theme . + METHODS get_worksheets_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS get_worksheets_name + RETURNING + VALUE(ep_name) TYPE zexcel_worksheets_name . + METHODS get_worksheets_size + RETURNING + VALUE(ep_size) TYPE i . + METHODS get_worksheet_by_index + IMPORTING + !iv_index TYPE numeric + RETURNING + VALUE(eo_worksheet) TYPE REF TO zcl_excel_worksheet . + METHODS get_worksheet_by_name + IMPORTING + !ip_sheet_name TYPE zexcel_sheet_title + RETURNING + VALUE(eo_worksheet) TYPE REF TO zcl_excel_worksheet . + METHODS set_active_sheet_index + IMPORTING + !i_active_worksheet TYPE zexcel_active_worksheet + RAISING + zcx_excel . + METHODS set_active_sheet_index_by_name + IMPORTING + !i_worksheet_name TYPE zexcel_worksheets_name . + METHODS set_default_style + IMPORTING + !ip_style TYPE zexcel_cell_style + RAISING + zcx_excel . + METHODS set_theme + IMPORTING + !io_theme TYPE REF TO zcl_excel_theme . + PROTECTED SECTION. + + DATA worksheets TYPE REF TO zcl_excel_worksheets . + PRIVATE SECTION. + + CONSTANTS version TYPE c LENGTH 10 VALUE '7.2.0'. "#EC NOTEXT + DATA autofilters TYPE REF TO zcl_excel_autofilters . + DATA charts TYPE REF TO zcl_excel_drawings . + DATA default_style TYPE zexcel_cell_style . *"* private components of class ZCL_EXCEL *"* do not include other source files here!!! - data DRAWINGS type ref to ZCL_EXCEL_DRAWINGS . - data RANGES type ref to ZCL_EXCEL_RANGES . - data STYLES type ref to ZCL_EXCEL_STYLES . - data T_STYLEMAPPING1 type ZEXCEL_T_STYLEMAPPING1 . - data T_STYLEMAPPING2 type ZEXCEL_T_STYLEMAPPING2 . - data THEME type ref to ZCL_EXCEL_THEME . - data COMMENTS type ref to ZCL_EXCEL_COMMENTS . - - methods GET_STYLE_FROM_GUID - importing - !IP_GUID type ZEXCEL_CELL_STYLE - returning - value(EO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods STYLEMAPPING_DYNAMIC_STYLE - importing - !IP_STYLE type ref to ZCL_EXCEL_STYLE - returning - value(EO_STYLE2) type ZEXCEL_S_STYLEMAPPING . + DATA drawings TYPE REF TO zcl_excel_drawings . + DATA ranges TYPE REF TO zcl_excel_ranges . + DATA styles TYPE REF TO zcl_excel_styles . + DATA t_stylemapping1 TYPE zexcel_t_stylemapping1 . + DATA t_stylemapping2 TYPE zexcel_t_stylemapping2 . + DATA theme TYPE REF TO zcl_excel_theme . + DATA comments TYPE REF TO zcl_excel_comments . + + METHODS get_style_from_guid + IMPORTING + !ip_guid TYPE zexcel_cell_style + RETURNING + VALUE(eo_style) TYPE REF TO zcl_excel_style . + METHODS stylemapping_dynamic_style + IMPORTING + !ip_style TYPE REF TO zcl_excel_style + RETURNING + VALUE(eo_style2) TYPE zexcel_s_stylemapping . ENDCLASS. -CLASS ZCL_EXCEL IMPLEMENTATION. +CLASS zcl_excel IMPLEMENTATION. -METHOD add_new_autofilter. + METHOD add_new_autofilter. * Check for autofilter reference: new or overwrite; only one per sheet - ro_autofilter = autofilters->add( io_sheet ) . -ENDMETHOD. + ro_autofilter = autofilters->add( io_sheet ) . + ENDMETHOD. -METHOD add_new_comment. - CREATE OBJECT eo_comment. + METHOD add_new_comment. + CREATE OBJECT eo_comment. - comments->add( eo_comment ). -ENDMETHOD. + comments->add( eo_comment ). + ENDMETHOD. -method ADD_NEW_DRAWING. + METHOD add_new_drawing. * Create default blank worksheet - CREATE OBJECT eo_drawing - EXPORTING - ip_type = ip_type - ip_title = ip_title. - - CASE ip_type. - WHEN 'image'. - drawings->add( eo_drawing ). - WHEN 'hd_ft'. - drawings->add( eo_drawing ). - WHEN 'chart'. - charts->add( eo_drawing ). - ENDCASE. - endmethod. - - -method ADD_NEW_RANGE. + CREATE OBJECT eo_drawing + EXPORTING + ip_type = ip_type + ip_title = ip_title. + + CASE ip_type. + WHEN 'image'. + drawings->add( eo_drawing ). + WHEN 'hd_ft'. + drawings->add( eo_drawing ). + WHEN 'chart'. + charts->add( eo_drawing ). + ENDCASE. + ENDMETHOD. + + + METHOD add_new_range. * Create default blank range - CREATE OBJECT eo_range. - ranges->add( eo_range ). - endmethod. + CREATE OBJECT eo_range. + ranges->add( eo_range ). + ENDMETHOD. -method ADD_NEW_STYLE. + METHOD add_new_style. * Start of deletion # issue 139 - Dateretention of cellstyles * CREATE OBJECT eo_style. * styles->add( eo_style ). * End of deletion # issue 139 - Dateretention of cellstyles * Start of insertion # issue 139 - Dateretention of cellstyles * Create default style - CREATE OBJECT eo_style - EXPORTING - ip_guid = ip_guid. - styles->add( eo_style ). + CREATE OBJECT eo_style + EXPORTING + ip_guid = ip_guid. + styles->add( eo_style ). - DATA: style2 TYPE zexcel_s_stylemapping. + DATA: style2 TYPE zexcel_s_stylemapping. * Copy to new representations - style2 = stylemapping_dynamic_style( eo_style ). - INSERT style2 INTO TABLE t_stylemapping1. - INSERT style2 INTO TABLE t_stylemapping2. + style2 = stylemapping_dynamic_style( eo_style ). + INSERT style2 INTO TABLE t_stylemapping1. + INSERT style2 INTO TABLE t_stylemapping2. * End of insertion # issue 139 - Dateretention of cellstyles - endmethod. + ENDMETHOD. -method ADD_NEW_WORKSHEET. + METHOD add_new_worksheet. * Create default blank worksheet - CREATE OBJECT eo_worksheet - EXPORTING - ip_excel = me - ip_title = ip_title. + CREATE OBJECT eo_worksheet + EXPORTING + ip_excel = me + ip_title = ip_title. - worksheets->add( eo_worksheet ). - worksheets->active_worksheet = worksheets->size( ). - endmethod. + worksheets->add( eo_worksheet ). + worksheets->active_worksheet = worksheets->size( ). + ENDMETHOD. -METHOD add_static_styles. - " # issue 139 - FIELD-SYMBOLS: LIKE LINE OF t_stylemapping1, - LIKE LINE OF t_stylemapping2. - DATA: style TYPE REF TO zcl_excel_style. + METHOD add_static_styles. + " # issue 139 + FIELD-SYMBOLS: LIKE LINE OF t_stylemapping1, + LIKE LINE OF t_stylemapping2. + DATA: style TYPE REF TO zcl_excel_style. - LOOP AT me->t_stylemapping1 ASSIGNING WHERE added_to_iterator IS INITIAL. - READ TABLE me->t_stylemapping2 ASSIGNING WITH TABLE KEY guid = -guid. - CHECK sy-subrc = 0. " Should always be true since these tables are being filled parallel + LOOP AT me->t_stylemapping1 ASSIGNING WHERE added_to_iterator IS INITIAL. + READ TABLE me->t_stylemapping2 ASSIGNING WITH TABLE KEY guid = -guid. + CHECK sy-subrc = 0. " Should always be true since these tables are being filled parallel - style = me->add_new_style( -guid ). + style = me->add_new_style( -guid ). - zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = -complete_style - i_sourcex = -complete_stylex - CHANGING e_target = style ). + zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = -complete_style + i_sourcex = -complete_stylex + CHANGING e_target = style ). - ENDLOOP. -ENDMETHOD. + ENDLOOP. + ENDMETHOD. -method CONSTRUCTOR. - DATA: lo_style TYPE REF TO zcl_excel_style. + METHOD constructor. + DATA: lo_style TYPE REF TO zcl_excel_style. * Inizialize instance objects - CREATE OBJECT security. - CREATE OBJECT worksheets. - CREATE OBJECT ranges. - CREATE OBJECT styles. - CREATE OBJECT drawings - EXPORTING - ip_type = zcl_excel_drawing=>type_image. - CREATE OBJECT charts - EXPORTING - ip_type = zcl_excel_drawing=>type_chart. - CREATE OBJECT comments. - CREATE OBJECT legacy_palette. - CREATE OBJECT autofilters. - - me->zif_excel_book_protection~initialize( ). - me->zif_excel_book_properties~initialize( ). - - try. - me->add_new_worksheet( ). - catch zcx_excel. " suppress syntax check error - assert 1 = 2. " some error processing anyway - endtry. - - me->add_new_style( ). " Standard style - lo_style = me->add_new_style( ). " Standard style with fill gray125 - lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_pattern_gray125. - - endmethod. - - -METHOD delete_worksheet. - - DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, - l_size TYPE i, - lv_errormessage TYPE string. - - l_size = get_worksheets_size( ). - IF l_size = 1. " Only 1 worksheet left --> check whether this is the worksheet to be deleted - lo_worksheet = me->get_worksheet_by_index( 1 ). - IF lo_worksheet = io_worksheet. - lv_errormessage = 'Deleting last remaining worksheet is not allowed'(002). - zcx_excel=>raise_text( lv_errormessage ). + CREATE OBJECT security. + CREATE OBJECT worksheets. + CREATE OBJECT ranges. + CREATE OBJECT styles. + CREATE OBJECT drawings + EXPORTING + ip_type = zcl_excel_drawing=>type_image. + CREATE OBJECT charts + EXPORTING + ip_type = zcl_excel_drawing=>type_chart. + CREATE OBJECT comments. + CREATE OBJECT legacy_palette. + CREATE OBJECT autofilters. + + me->zif_excel_book_protection~initialize( ). + me->zif_excel_book_properties~initialize( ). + + TRY. + me->add_new_worksheet( ). + CATCH zcx_excel. " suppress syntax check error + ASSERT 1 = 2. " some error processing anyway + ENDTRY. + + me->add_new_style( ). " Standard style + lo_style = me->add_new_style( ). " Standard style with fill gray125 + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_pattern_gray125. + + ENDMETHOD. + + + METHOD delete_worksheet. + + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + l_size TYPE i, + lv_errormessage TYPE string. + + l_size = get_worksheets_size( ). + IF l_size = 1. " Only 1 worksheet left --> check whether this is the worksheet to be deleted + lo_worksheet = me->get_worksheet_by_index( 1 ). + IF lo_worksheet = io_worksheet. + lv_errormessage = 'Deleting last remaining worksheet is not allowed'(002). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. ENDIF. - ENDIF. - me->worksheets->remove( io_worksheet ). + me->worksheets->remove( io_worksheet ). -ENDMETHOD. + ENDMETHOD. -METHOD delete_worksheet_by_index. + METHOD delete_worksheet_by_index. - DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, - lv_errormessage TYPE string. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_errormessage TYPE string. - lo_worksheet = me->get_worksheet_by_index( iv_index ). - IF lo_worksheet IS NOT BOUND. - lv_errormessage = 'Worksheet not existing'(001). - zcx_excel=>raise_text( lv_errormessage ). - ENDIF. - me->delete_worksheet( lo_worksheet ). + lo_worksheet = me->get_worksheet_by_index( iv_index ). + IF lo_worksheet IS NOT BOUND. + lv_errormessage = 'Worksheet not existing'(001). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. + me->delete_worksheet( lo_worksheet ). -ENDMETHOD. + ENDMETHOD. -METHOD delete_worksheet_by_name. + METHOD delete_worksheet_by_name. - DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, - lv_errormessage TYPE string. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_errormessage TYPE string. - lo_worksheet = me->get_worksheet_by_name( iv_title ). - IF lo_worksheet IS NOT BOUND. - lv_errormessage = 'Worksheet not existing'(001). - zcx_excel=>raise_text( lv_errormessage ). - ENDIF. - me->delete_worksheet( lo_worksheet ). + lo_worksheet = me->get_worksheet_by_name( iv_title ). + IF lo_worksheet IS NOT BOUND. + lv_errormessage = 'Worksheet not existing'(001). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. + me->delete_worksheet( lo_worksheet ). -ENDMETHOD. + ENDMETHOD. -method GET_ACTIVE_SHEET_INDEX. - r_active_worksheet = me->worksheets->active_worksheet. - endmethod. + METHOD get_active_sheet_index. + r_active_worksheet = me->worksheets->active_worksheet. + ENDMETHOD. -method GET_ACTIVE_WORKSHEET. + METHOD get_active_worksheet. - eo_worksheet = me->worksheets->get( me->worksheets->active_worksheet ). + eo_worksheet = me->worksheets->get( me->worksheets->active_worksheet ). - endmethod. + ENDMETHOD. -method GET_AUTOFILTERS_REFERENCE. + METHOD get_autofilters_reference. - ro_autofilters = autofilters. + ro_autofilters = autofilters. - endmethod. + ENDMETHOD. -method GET_DEFAULT_STYLE. - ep_style = me->default_style. - endmethod. + METHOD get_default_style. + ep_style = me->default_style. + ENDMETHOD. -method GET_DRAWINGS_ITERATOR. + METHOD get_drawings_iterator. - CASE ip_type. - WHEN zcl_excel_drawing=>type_image. - eo_iterator = me->drawings->get_iterator( ). - WHEN zcl_excel_drawing=>type_chart. - eo_iterator = me->charts->get_iterator( ). - WHEN OTHERS. - ENDCASE. + CASE ip_type. + WHEN zcl_excel_drawing=>type_image. + eo_iterator = me->drawings->get_iterator( ). + WHEN zcl_excel_drawing=>type_chart. + eo_iterator = me->charts->get_iterator( ). + WHEN OTHERS. + ENDCASE. - endmethod. + ENDMETHOD. -method GET_NEXT_TABLE_ID. - DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lv_tables_count TYPE i. + METHOD get_next_table_id. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lv_tables_count TYPE i. - lo_iterator = me->get_worksheets_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->get_next( ). + lo_iterator = me->get_worksheets_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->get_next( ). - lv_tables_count = lo_worksheet->get_tables_size( ). - ADD lv_tables_count TO ep_id. + lv_tables_count = lo_worksheet->get_tables_size( ). + ADD lv_tables_count TO ep_id. - ENDWHILE. + ENDWHILE. - ADD 1 TO ep_id. + ADD 1 TO ep_id. - endmethod. + ENDMETHOD. -method GET_RANGES_ITERATOR. + METHOD get_ranges_iterator. - eo_iterator = me->ranges->get_iterator( ). + eo_iterator = me->ranges->get_iterator( ). - endmethod. + ENDMETHOD. -METHOD get_static_cellstyle_guid. - " # issue 139 - DATA: style LIKE LINE OF me->t_stylemapping1. + METHOD get_static_cellstyle_guid. + " # issue 139 + DATA: style LIKE LINE OF me->t_stylemapping1. - READ TABLE me->t_stylemapping1 INTO style - WITH TABLE KEY dynamic_style_guid = style-guid " no dynamic style --> look for initial guid here - complete_style = ip_cstyle_complete - complete_stylex = ip_cstylex_complete. - IF sy-subrc <> 0. - style-complete_style = ip_cstyle_complete. - style-complete_stylex = ip_cstylex_complete. + READ TABLE me->t_stylemapping1 INTO style + WITH TABLE KEY dynamic_style_guid = style-guid " no dynamic style --> look for initial guid here + complete_style = ip_cstyle_complete + complete_stylex = ip_cstylex_complete. + IF sy-subrc <> 0. + style-complete_style = ip_cstyle_complete. + style-complete_stylex = ip_cstylex_complete. * CALL FUNCTION 'GUID_CREATE' " del issue #379 - function is outdated in newer releases * IMPORTING * ev_guid_16 = style-guid. - style-guid = zcl_excel_obsolete_func_wrap=>guid_create( ). " ins issue #379 - replacement for outdated function call - INSERT style INTO TABLE me->t_stylemapping1. - INSERT style INTO TABLE me->t_stylemapping2. + style-guid = zcl_excel_obsolete_func_wrap=>guid_create( ). " ins issue #379 - replacement for outdated function call + INSERT style INTO TABLE me->t_stylemapping1. + INSERT style INTO TABLE me->t_stylemapping2. - ENDIF. + ENDIF. - ep_guid = style-guid. -ENDMETHOD. + ep_guid = style-guid. + ENDMETHOD. -method GET_STYLES_ITERATOR. + METHOD get_styles_iterator. - eo_iterator = me->styles->get_iterator( ). + eo_iterator = me->styles->get_iterator( ). - endmethod. + ENDMETHOD. -METHOD get_style_from_guid. + METHOD get_style_from_guid. - DATA: lo_style TYPE REF TO zcl_excel_style, - lo_iterator TYPE REF TO cl_object_collection_iterator. + DATA: lo_style TYPE REF TO zcl_excel_style, + lo_iterator TYPE REF TO cl_object_collection_iterator. - lo_iterator = styles->get_iterator( ). - WHILE lo_iterator->has_next( ) = abap_true. - lo_style ?= lo_iterator->get_next( ). - IF lo_style->get_guid( ) = ip_guid. - eo_style = lo_style. - RETURN. - ENDIF. - ENDWHILE. + lo_iterator = styles->get_iterator( ). + WHILE lo_iterator->has_next( ) = abap_true. + lo_style ?= lo_iterator->get_next( ). + IF lo_style->get_guid( ) = ip_guid. + eo_style = lo_style. + RETURN. + ENDIF. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -method GET_STYLE_INDEX_IN_STYLES. - DATA: index TYPE syindex. - DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_style TYPE REF TO zcl_excel_style. + METHOD get_style_index_in_styles. + DATA: index TYPE syindex. + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_style TYPE REF TO zcl_excel_style. - CHECK ip_guid IS NOT INITIAL. + CHECK ip_guid IS NOT INITIAL. - lo_iterator = me->get_styles_iterator( ). - WHILE lo_iterator->has_next( ) = 'X'. - ADD 1 TO index. - lo_style ?= lo_iterator->get_next( ). - IF lo_style->get_guid( ) = ip_guid. - ep_index = index. - EXIT. - ENDIF. - ENDWHILE. + lo_iterator = me->get_styles_iterator( ). + WHILE lo_iterator->has_next( ) = 'X'. + ADD 1 TO index. + lo_style ?= lo_iterator->get_next( ). + IF lo_style->get_guid( ) = ip_guid. + ep_index = index. + EXIT. + ENDIF. + ENDWHILE. - IF ep_index IS INITIAL. - zcx_excel=>raise_text( 'Index not found' ). - else. - SUBTRACT 1 from ep_index. " In excel list starts with "0" - ENDIF. - endmethod. + IF ep_index IS INITIAL. + zcx_excel=>raise_text( 'Index not found' ). + ELSE. + SUBTRACT 1 FROM ep_index. " In excel list starts with "0" + ENDIF. + ENDMETHOD. -METHOD get_style_to_guid. - DATA: lo_style TYPE REF TO zcl_excel_style. - " # issue 139 - READ TABLE me->t_stylemapping2 INTO ep_stylemapping WITH TABLE KEY guid = ip_guid. - IF sy-subrc <> 0. - zcx_excel=>raise_text( 'GUID not found' ). - ENDIF. + METHOD get_style_to_guid. + DATA: lo_style TYPE REF TO zcl_excel_style. + " # issue 139 + READ TABLE me->t_stylemapping2 INTO ep_stylemapping WITH TABLE KEY guid = ip_guid. + IF sy-subrc <> 0. + zcx_excel=>raise_text( 'GUID not found' ). + ENDIF. - IF ep_stylemapping-dynamic_style_guid IS NOT INITIAL. - lo_style = me->get_style_from_guid( ip_guid ). - zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = lo_style - CHANGING e_target = ep_stylemapping-complete_style - e_targetx = ep_stylemapping-complete_stylex ). - ENDIF. -ENDMETHOD. + IF ep_stylemapping-dynamic_style_guid IS NOT INITIAL. + lo_style = me->get_style_from_guid( ip_guid ). + zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = lo_style + CHANGING e_target = ep_stylemapping-complete_style + e_targetx = ep_stylemapping-complete_stylex ). + ENDIF. + ENDMETHOD. -method GET_THEME. - eo_theme = theme. -endmethod. + METHOD get_theme. + eo_theme = theme. + ENDMETHOD. -method GET_WORKSHEETS_ITERATOR. + METHOD get_worksheets_iterator. - eo_iterator = me->worksheets->get_iterator( ). + eo_iterator = me->worksheets->get_iterator( ). - endmethod. + ENDMETHOD. -method GET_WORKSHEETS_NAME. + METHOD get_worksheets_name. - ep_name = me->worksheets->name. + ep_name = me->worksheets->name. - endmethod. + ENDMETHOD. -METHOD get_worksheets_size. + METHOD get_worksheets_size. - ep_size = me->worksheets->size( ). + ep_size = me->worksheets->size( ). -ENDMETHOD. + ENDMETHOD. -METHOD get_worksheet_by_index. + METHOD get_worksheet_by_index. - DATA: lv_index TYPE zexcel_active_worksheet. + DATA: lv_index TYPE zexcel_active_worksheet. - lv_index = iv_index. - eo_worksheet = me->worksheets->get( lv_index ). + lv_index = iv_index. + eo_worksheet = me->worksheets->get( lv_index ). -ENDMETHOD. + ENDMETHOD. -METHOD get_worksheet_by_name. + METHOD get_worksheet_by_name. - DATA: lv_index TYPE zexcel_active_worksheet, - l_size TYPE i. + DATA: lv_index TYPE zexcel_active_worksheet, + l_size TYPE i. - l_size = get_worksheets_size( ). + l_size = get_worksheets_size( ). - DO l_size TIMES. - lv_index = sy-index. - eo_worksheet = me->worksheets->get( lv_index ). - IF eo_worksheet->get_title( ) = ip_sheet_name. - RETURN. - ENDIF. - ENDDO. + DO l_size TIMES. + lv_index = sy-index. + eo_worksheet = me->worksheets->get( lv_index ). + IF eo_worksheet->get_title( ) = ip_sheet_name. + RETURN. + ENDIF. + ENDDO. - CLEAR eo_worksheet. + CLEAR eo_worksheet. -ENDMETHOD. + ENDMETHOD. -METHOD set_active_sheet_index. - DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, - lv_errormessage TYPE string. + METHOD set_active_sheet_index. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_errormessage TYPE string. *--------------------------------------------------------------------* * Check whether worksheet exists *--------------------------------------------------------------------* - lo_worksheet = me->get_worksheet_by_index( i_active_worksheet ). - IF lo_worksheet IS NOT BOUND. - lv_errormessage = 'Worksheet not existing'(001). - zcx_excel=>raise_text( lv_errormessage ). - ENDIF. + lo_worksheet = me->get_worksheet_by_index( i_active_worksheet ). + IF lo_worksheet IS NOT BOUND. + lv_errormessage = 'Worksheet not existing'(001). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. - me->worksheets->active_worksheet = i_active_worksheet. + me->worksheets->active_worksheet = i_active_worksheet. -ENDMETHOD. + ENDMETHOD. -METHOD set_active_sheet_index_by_name. + METHOD set_active_sheet_index_by_name. - DATA: ws_it TYPE REF TO cl_object_collection_iterator, - ws TYPE REF TO zcl_excel_worksheet, - lv_title TYPE zexcel_sheet_title, - count TYPE i VALUE 1. + DATA: ws_it TYPE REF TO cl_object_collection_iterator, + ws TYPE REF TO zcl_excel_worksheet, + lv_title TYPE zexcel_sheet_title, + count TYPE i VALUE 1. - ws_it = me->worksheets->get_iterator( ). + ws_it = me->worksheets->get_iterator( ). - WHILE ws_it->has_next( ) = abap_true. - ws ?= ws_it->get_next( ). - lv_title = ws->get_title( ). - IF lv_title = i_worksheet_name. - me->worksheets->active_worksheet = count. - EXIT. - ENDIF. - count = count + 1. - ENDWHILE. + WHILE ws_it->has_next( ) = abap_true. + ws ?= ws_it->get_next( ). + lv_title = ws->get_title( ). + IF lv_title = i_worksheet_name. + me->worksheets->active_worksheet = count. + EXIT. + ENDIF. + count = count + 1. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -method SET_DEFAULT_STYLE. - me->default_style = ip_style. - endmethod. + METHOD set_default_style. + me->default_style = ip_style. + ENDMETHOD. -method SET_THEME. - theme = io_theme. -endmethod. + METHOD set_theme. + theme = io_theme. + ENDMETHOD. -method STYLEMAPPING_DYNAMIC_STYLE. -" # issue 139 - eo_style2-dynamic_style_guid = ip_style->get_guid( ). - eo_style2-guid = eo_style2-dynamic_style_guid. - eo_style2-added_to_iterator = abap_true. + METHOD stylemapping_dynamic_style. + " # issue 139 + eo_style2-dynamic_style_guid = ip_style->get_guid( ). + eo_style2-guid = eo_style2-dynamic_style_guid. + eo_style2-added_to_iterator = abap_true. * don't care about attributes here, since this data may change * dynamically - endmethod. + ENDMETHOD. -METHOD zif_excel_book_properties~initialize. - DATA: lv_timestamp TYPE timestampl. + METHOD zif_excel_book_properties~initialize. + DATA: lv_timestamp TYPE timestampl. - me->zif_excel_book_properties~application = 'Microsoft Excel'. - me->zif_excel_book_properties~appversion = '12.0000'. + me->zif_excel_book_properties~application = 'Microsoft Excel'. + me->zif_excel_book_properties~appversion = '12.0000'. - GET TIME STAMP FIELD lv_timestamp. - me->zif_excel_book_properties~created = lv_timestamp. - me->zif_excel_book_properties~creator = sy-uname. - me->zif_excel_book_properties~description = zcl_excel=>version. - me->zif_excel_book_properties~modified = lv_timestamp. - me->zif_excel_book_properties~lastmodifiedby = sy-uname. -ENDMETHOD. + GET TIME STAMP FIELD lv_timestamp. + me->zif_excel_book_properties~created = lv_timestamp. + me->zif_excel_book_properties~creator = sy-uname. + me->zif_excel_book_properties~description = zcl_excel=>version. + me->zif_excel_book_properties~modified = lv_timestamp. + me->zif_excel_book_properties~lastmodifiedby = sy-uname. + ENDMETHOD. -method ZIF_EXCEL_BOOK_PROTECTION~INITIALIZE. - me->zif_excel_book_protection~protected = zif_excel_book_protection=>c_unprotected. - me->zif_excel_book_protection~lockrevision = zif_excel_book_protection=>c_unlocked. - me->zif_excel_book_protection~lockstructure = zif_excel_book_protection=>c_unlocked. - me->zif_excel_book_protection~lockwindows = zif_excel_book_protection=>c_unlocked. - CLEAR me->zif_excel_book_protection~workbookpassword. - CLEAR me->zif_excel_book_protection~revisionspassword. - endmethod. + METHOD zif_excel_book_protection~initialize. + me->zif_excel_book_protection~protected = zif_excel_book_protection=>c_unprotected. + me->zif_excel_book_protection~lockrevision = zif_excel_book_protection=>c_unlocked. + me->zif_excel_book_protection~lockstructure = zif_excel_book_protection=>c_unlocked. + me->zif_excel_book_protection~lockwindows = zif_excel_book_protection=>c_unlocked. + CLEAR me->zif_excel_book_protection~workbookpassword. + CLEAR me->zif_excel_book_protection~revisionspassword. + ENDMETHOD. -method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_CODENAME. - me->zif_excel_book_vba_project~codename = ip_codename. - endmethod. + METHOD zif_excel_book_vba_project~set_codename. + me->zif_excel_book_vba_project~codename = ip_codename. + ENDMETHOD. -method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_CODENAME_PR. - me->zif_excel_book_vba_project~codename_pr = ip_codename_pr. - endmethod. + METHOD zif_excel_book_vba_project~set_codename_pr. + me->zif_excel_book_vba_project~codename_pr = ip_codename_pr. + ENDMETHOD. -method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_VBAPROJECT. - me->zif_excel_book_vba_project~vbaproject = ip_vbaproject. - endmethod. + METHOD zif_excel_book_vba_project~set_vbaproject. + me->zif_excel_book_vba_project~vbaproject = ip_vbaproject. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_aunit.clas.abap b/src/zcl_excel_aunit.clas.abap index d407775c5..008160a0d 100644 --- a/src/zcl_excel_aunit.clas.abap +++ b/src/zcl_excel_aunit.clas.abap @@ -1,100 +1,100 @@ -class zcl_excel_aunit definition - public - final - create private. - - public section. - - class-methods class_constructor. - - class-methods assert_differs - importing - !exp type simple - !act type simple - !msg type csequence optional - !level type aunit_level default if_aunit_constants=>critical - !tol type f optional - !quit type aunit_flowctrl default if_aunit_constants=>method - returning - value(assertion_failed) type abap_bool. - - class-methods assert_equals - importing - !exp type any - !act type any - !msg type csequence optional - !level type aunit_level default if_aunit_constants=>critical - !tol type f optional - !quit type aunit_flowctrl default if_aunit_constants=>method - !ignore_hash_sequence type abap_bool default abap_false - returning - value(assertion_failed) type abap_bool. - - class-methods fail - importing - msg type csequence optional - level type aunit_level default if_aunit_constants=>critical - quit type aunit_flowctrl default if_aunit_constants=>method - detail type csequence optional. - - protected section. - private section. - types tv_clsname type seoclass-clsname. - - constants: - begin of en_clsname, - new type tv_clsname value 'CL_ABAP_UNIT_ASSERT', - old type tv_clsname value 'CL_AUNIT_ASSERT', - none type tv_clsname value '', - end of en_clsname. - - class-data clsname type tv_clsname. -endclass. - - - -class zcl_excel_aunit implementation. - - method class_constructor. +CLASS zcl_excel_aunit DEFINITION + PUBLIC + FINAL + CREATE PRIVATE. + + PUBLIC SECTION. + + CLASS-METHODS class_constructor. + + CLASS-METHODS assert_differs + IMPORTING + !exp TYPE simple + !act TYPE simple + !msg TYPE csequence OPTIONAL + !level TYPE aunit_level DEFAULT if_aunit_constants=>critical + !tol TYPE f OPTIONAL + !quit TYPE aunit_flowctrl DEFAULT if_aunit_constants=>method + RETURNING + VALUE(assertion_failed) TYPE abap_bool. + + CLASS-METHODS assert_equals + IMPORTING + !exp TYPE any + !act TYPE any + !msg TYPE csequence OPTIONAL + !level TYPE aunit_level DEFAULT if_aunit_constants=>critical + !tol TYPE f OPTIONAL + !quit TYPE aunit_flowctrl DEFAULT if_aunit_constants=>method + !ignore_hash_sequence TYPE abap_bool DEFAULT abap_false + RETURNING + VALUE(assertion_failed) TYPE abap_bool. + + CLASS-METHODS fail + IMPORTING + msg TYPE csequence OPTIONAL + level TYPE aunit_level DEFAULT if_aunit_constants=>critical + quit TYPE aunit_flowctrl DEFAULT if_aunit_constants=>method + detail TYPE csequence OPTIONAL. + + PROTECTED SECTION. + PRIVATE SECTION. + TYPES tv_clsname TYPE seoclass-clsname. + + CONSTANTS: + BEGIN OF en_clsname, + new TYPE tv_clsname VALUE 'CL_ABAP_UNIT_ASSERT', + old TYPE tv_clsname VALUE 'CL_AUNIT_ASSERT', + none TYPE tv_clsname VALUE '', + END OF en_clsname. + + CLASS-DATA clsname TYPE tv_clsname. +ENDCLASS. + + + +CLASS zcl_excel_aunit IMPLEMENTATION. + + METHOD class_constructor. " Let see >=7.02 - select single clsname into clsname - from seoclass - where clsname = en_clsname-new. + SELECT SINGLE clsname INTO clsname + FROM seoclass + WHERE clsname = en_clsname-new. - check sy-subrc <> 0. + CHECK sy-subrc <> 0. " Let see >=7.00 or even lower - select single clsname into clsname - from seoclass - where clsname = en_clsname-old. + SELECT SINGLE clsname INTO clsname + FROM seoclass + WHERE clsname = en_clsname-old. - check sy-subrc <> 0. + CHECK sy-subrc <> 0. " We do nothing for now not supported - endmethod. + ENDMETHOD. - method assert_differs. - check clsname = en_clsname-new or clsname = en_clsname-old. + METHOD assert_differs. + CHECK clsname = en_clsname-new OR clsname = en_clsname-old. - call method (clsname)=>assert_differs - exporting + CALL METHOD (clsname)=>assert_differs + EXPORTING exp = exp act = act msg = msg level = level tol = tol quit = quit - receiving + RECEIVING assertion_failed = assertion_failed. - endmethod. + ENDMETHOD. - method assert_equals. - check clsname = en_clsname-new or clsname = en_clsname-old. + METHOD assert_equals. + CHECK clsname = en_clsname-new OR clsname = en_clsname-old. - call method (clsname)=>assert_equals - exporting + CALL METHOD (clsname)=>assert_equals + EXPORTING exp = exp act = act msg = msg @@ -102,19 +102,19 @@ class zcl_excel_aunit implementation. tol = tol quit = quit ignore_hash_sequence = ignore_hash_sequence - receiving + RECEIVING assertion_failed = assertion_failed. - endmethod. + ENDMETHOD. - method fail. - check clsname = en_clsname-new or clsname = en_clsname-old. + METHOD fail. + CHECK clsname = en_clsname-new OR clsname = en_clsname-old. - call method (clsname)=>fail - exporting + CALL METHOD (clsname)=>fail + EXPORTING msg = msg level = level quit = quit detail = detail. - endmethod. -endclass. + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_excel_autofilter.clas.abap b/src/zcl_excel_autofilter.clas.abap index 8ab7f0e79..0d693a5b2 100644 --- a/src/zcl_excel_autofilter.clas.abap +++ b/src/zcl_excel_autofilter.clas.abap @@ -1,440 +1,440 @@ -class ZCL_EXCEL_AUTOFILTER definition - public - final - create public . +CLASS zcl_excel_autofilter DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_AUTOFILTER *"* do not include other source files here!!! -public section. - - types TV_FILTER_RULE type STRING . - types TV_LOGICAL_OPERATOR type CHAR3 . - types: - BEGIN OF ts_filter, - column TYPE zexcel_cell_column, - rule TYPE tv_filter_rule, - t_values TYPE HASHED TABLE OF zexcel_cell_value WITH UNIQUE KEY table_line, - tr_textfilter1 TYPE range of string, - logical_operator TYPE tv_logical_operator, - tr_textfilter2 TYPE range of string, + PUBLIC SECTION. + + TYPES tv_filter_rule TYPE string . + TYPES tv_logical_operator TYPE char3 . + TYPES: + BEGIN OF ts_filter, + column TYPE zexcel_cell_column, + rule TYPE tv_filter_rule, + t_values TYPE HASHED TABLE OF zexcel_cell_value WITH UNIQUE KEY table_line, + tr_textfilter1 TYPE RANGE OF string, + logical_operator TYPE tv_logical_operator, + tr_textfilter2 TYPE RANGE OF string, END OF ts_filter . - types: - tt_filters TYPE HASHED TABLE OF ts_filter WITH UNIQUE KEY column . - - data FILTER_AREA type ZEXCEL_S_AUTOFILTER_AREA . - constants MC_FILTER_RULE_SINGLE_VALUES type TV_FILTER_RULE value 'single_values'. "#EC NOTEXT - constants MC_FILTER_RULE_TEXT_PATTERN type TV_FILTER_RULE value 'text_pattern'. "#EC NOTEXT - constants MC_LOGICAL_OPERATOR_AND type TV_LOGICAL_OPERATOR value 'and'. "#EC NOTEXT - constants MC_LOGICAL_OPERATOR_NONE type TV_LOGICAL_OPERATOR value SPACE. "#EC NOTEXT - constants MC_LOGICAL_OPERATOR_OR type TV_LOGICAL_OPERATOR value 'or'. "#EC NOTEXT - - methods CONSTRUCTOR - importing - !IO_SHEET type ref to ZCL_EXCEL_WORKSHEET . - methods GET_FILTER_AREA - returning - value(RS_AREA) type ZEXCEL_S_AUTOFILTER_AREA . - methods GET_FILTER_RANGE - returning - value(R_RANGE) type ZEXCEL_CELL_VALUE - raising - ZCX_EXCEL. - methods GET_FILTER_REFERENCE - returning - value(R_REF) type ZEXCEL_RANGE_VALUE - raising - ZCX_EXCEL . - methods GET_VALUES - returning - value(RT_FILTER) type ZEXCEL_T_AUTOFILTER_VALUES . - type-pools ABAP . - methods IS_ROW_HIDDEN - importing - !IV_ROW type ZEXCEL_CELL_ROW - returning - value(RV_IS_HIDDEN) type ABAP_BOOL . - methods SET_FILTER_AREA - importing - !IS_AREA type ZEXCEL_S_AUTOFILTER_AREA . - methods SET_TEXT_FILTER - importing - !I_COLUMN type ZEXCEL_CELL_COLUMN - !IV_TEXTFILTER1 type CLIKE - !IV_LOGICAL_OPERATOR type TV_LOGICAL_OPERATOR default MC_LOGICAL_OPERATOR_NONE - !IV_TEXTFILTER2 type CLIKE optional . - methods SET_VALUE - importing - !I_COLUMN type ZEXCEL_CELL_COLUMN - !I_VALUE type ZEXCEL_CELL_VALUE . - methods SET_VALUES - importing - !IT_VALUES type ZEXCEL_T_AUTOFILTER_VALUES . + TYPES: + tt_filters TYPE HASHED TABLE OF ts_filter WITH UNIQUE KEY column . + + DATA filter_area TYPE zexcel_s_autofilter_area . + CONSTANTS mc_filter_rule_single_values TYPE tv_filter_rule VALUE 'single_values'. "#EC NOTEXT + CONSTANTS mc_filter_rule_text_pattern TYPE tv_filter_rule VALUE 'text_pattern'. "#EC NOTEXT + CONSTANTS mc_logical_operator_and TYPE tv_logical_operator VALUE 'and'. "#EC NOTEXT + CONSTANTS mc_logical_operator_none TYPE tv_logical_operator VALUE space. "#EC NOTEXT + CONSTANTS mc_logical_operator_or TYPE tv_logical_operator VALUE 'or'. "#EC NOTEXT + + METHODS constructor + IMPORTING + !io_sheet TYPE REF TO zcl_excel_worksheet . + METHODS get_filter_area + RETURNING + VALUE(rs_area) TYPE zexcel_s_autofilter_area . + METHODS get_filter_range + RETURNING + VALUE(r_range) TYPE zexcel_cell_value + RAISING + zcx_excel. + METHODS get_filter_reference + RETURNING + VALUE(r_ref) TYPE zexcel_range_value + RAISING + zcx_excel . + METHODS get_values + RETURNING + VALUE(rt_filter) TYPE zexcel_t_autofilter_values . + TYPE-POOLS abap . + METHODS is_row_hidden + IMPORTING + !iv_row TYPE zexcel_cell_row + RETURNING + VALUE(rv_is_hidden) TYPE abap_bool . + METHODS set_filter_area + IMPORTING + !is_area TYPE zexcel_s_autofilter_area . + METHODS set_text_filter + IMPORTING + !i_column TYPE zexcel_cell_column + !iv_textfilter1 TYPE clike + !iv_logical_operator TYPE tv_logical_operator DEFAULT mc_logical_operator_none + !iv_textfilter2 TYPE clike OPTIONAL . + METHODS set_value + IMPORTING + !i_column TYPE zexcel_cell_column + !i_value TYPE zexcel_cell_value . + METHODS set_values + IMPORTING + !it_values TYPE zexcel_t_autofilter_values . *"* protected components of class ZABAP_EXCEL_WORKSHEET *"* do not include other source files here!!! -protected section. - - methods GET_COLUMN_FILTER - importing - !I_COLUMN type ZEXCEL_CELL_COLUMN - returning - value(RR_FILTER) type ref to TS_FILTER . - methods IS_ROW_HIDDEN_SINGLE_VALUES - importing - !IV_ROW type ZEXCEL_CELL_ROW - !IV_COL type ZEXCEL_CELL_COLUMN - !IS_FILTER type TS_FILTER - returning - value(RV_IS_HIDDEN) type ABAP_BOOL . - methods IS_ROW_HIDDEN_TEXT_PATTERN - importing - !IV_ROW type ZEXCEL_CELL_ROW - !IV_COL type ZEXCEL_CELL_COLUMN - !IS_FILTER type TS_FILTER - returning - value(RV_IS_HIDDEN) type ABAP_BOOL . + PROTECTED SECTION. + + METHODS get_column_filter + IMPORTING + !i_column TYPE zexcel_cell_column + RETURNING + VALUE(rr_filter) TYPE REF TO ts_filter . + METHODS is_row_hidden_single_values + IMPORTING + !iv_row TYPE zexcel_cell_row + !iv_col TYPE zexcel_cell_column + !is_filter TYPE ts_filter + RETURNING + VALUE(rv_is_hidden) TYPE abap_bool . + METHODS is_row_hidden_text_pattern + IMPORTING + !iv_row TYPE zexcel_cell_row + !iv_col TYPE zexcel_cell_column + !is_filter TYPE ts_filter + RETURNING + VALUE(rv_is_hidden) TYPE abap_bool . *"* private components of class ZCL_EXCEL_AUTOFILTER *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - data WORKSHEET type ref to ZCL_EXCEL_WORKSHEET . - data MT_FILTERS type TT_FILTERS . + DATA worksheet TYPE REF TO zcl_excel_worksheet . + DATA mt_filters TYPE tt_filters . - methods VALIDATE_AREA - raising - ZCX_EXCEL . + METHODS validate_area + RAISING + zcx_excel . ENDCLASS. -CLASS ZCL_EXCEL_AUTOFILTER IMPLEMENTATION. +CLASS zcl_excel_autofilter IMPLEMENTATION. -METHOD constructor. - worksheet = io_sheet. -ENDMETHOD. + METHOD constructor. + worksheet = io_sheet. + ENDMETHOD. -METHOD get_column_filter. + METHOD get_column_filter. - DATA: ls_filter LIKE LINE OF me->mt_filters. + DATA: ls_filter LIKE LINE OF me->mt_filters. - READ TABLE me->mt_filters REFERENCE INTO rr_filter WITH TABLE KEY column = i_column. - IF sy-subrc <> 0. - ls_filter-column = i_column. - INSERT ls_filter INTO TABLE me->mt_filters REFERENCE INTO rr_filter. - ENDIF. + READ TABLE me->mt_filters REFERENCE INTO rr_filter WITH TABLE KEY column = i_column. + IF sy-subrc <> 0. + ls_filter-column = i_column. + INSERT ls_filter INTO TABLE me->mt_filters REFERENCE INTO rr_filter. + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD get_filter_area. + METHOD get_filter_area. - validate_area( ). + validate_area( ). - rs_area = filter_area. + rs_area = filter_area. -ENDMETHOD. + ENDMETHOD. -METHOD get_filter_range. - DATA: l_row_start_c TYPE string, - l_row_end_c TYPE string, - l_col_start_c TYPE string, - l_col_end_c TYPE string. + METHOD get_filter_range. + DATA: l_row_start_c TYPE string, + l_row_end_c TYPE string, + l_col_start_c TYPE string, + l_col_end_c TYPE string. - validate_area( ). + validate_area( ). - l_row_end_c = filter_area-row_end. - CONDENSE l_row_end_c NO-GAPS. + l_row_end_c = filter_area-row_end. + CONDENSE l_row_end_c NO-GAPS. - l_row_start_c = filter_area-row_start. - CONDENSE l_row_start_c NO-GAPS. + l_row_start_c = filter_area-row_start. + CONDENSE l_row_start_c NO-GAPS. - l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . - l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . + l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . + l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . - CONCATENATE l_col_start_c l_row_start_c ':' l_col_end_c l_row_end_c INTO r_range. + CONCATENATE l_col_start_c l_row_start_c ':' l_col_end_c l_row_end_c INTO r_range. -ENDMETHOD. + ENDMETHOD. -METHOD get_filter_reference. - DATA: l_row_start_c TYPE string, - l_row_end_c TYPE string, - l_col_start_c TYPE string, - l_col_end_c TYPE string, - l_value TYPE string. + METHOD get_filter_reference. + DATA: l_row_start_c TYPE string, + l_row_end_c TYPE string, + l_col_start_c TYPE string, + l_col_end_c TYPE string, + l_value TYPE string. - validate_area( ). + validate_area( ). - l_row_end_c = filter_area-row_end. - CONDENSE l_row_end_c NO-GAPS. + l_row_end_c = filter_area-row_end. + CONDENSE l_row_end_c NO-GAPS. - l_row_start_c = filter_area-row_start. - CONDENSE l_row_start_c NO-GAPS. + l_row_start_c = filter_area-row_start. + CONDENSE l_row_start_c NO-GAPS. - l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . - l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . - l_value = worksheet->get_title( ) . + l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . + l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . + l_value = worksheet->get_title( ) . - r_ref = zcl_excel_common=>escape_string( ip_value = l_value ). + r_ref = zcl_excel_common=>escape_string( ip_value = l_value ). - CONCATENATE r_ref '!$' l_col_start_c '$' l_row_start_c ':$' l_col_end_c '$' l_row_end_c INTO r_ref. + CONCATENATE r_ref '!$' l_col_start_c '$' l_row_start_c ':$' l_col_end_c '$' l_row_end_c INTO r_ref. -ENDMETHOD. + ENDMETHOD. -METHOD get_values. + METHOD get_values. - FIELD-SYMBOLS: LIKE LINE OF me->mt_filters, - LIKE LINE OF -t_values. + FIELD-SYMBOLS: LIKE LINE OF me->mt_filters, + LIKE LINE OF -t_values. - DATA: ls_filter LIKE LINE OF rt_filter. + DATA: ls_filter LIKE LINE OF rt_filter. - LOOP AT me->mt_filters ASSIGNING WHERE rule = mc_filter_rule_single_values. + LOOP AT me->mt_filters ASSIGNING WHERE rule = mc_filter_rule_single_values. - ls_filter-column = -column. - LOOP AT -t_values ASSIGNING . - ls_filter-value = . - APPEND ls_filter TO rt_filter. - ENDLOOP. + ls_filter-column = -column. + LOOP AT -t_values ASSIGNING . + ls_filter-value = . + APPEND ls_filter TO rt_filter. + ENDLOOP. - ENDLOOP. + ENDLOOP. -ENDMETHOD. + ENDMETHOD. -METHOD is_row_hidden. + METHOD is_row_hidden. - DATA: lr_filter TYPE REF TO ts_filter, - lv_col TYPE i. + DATA: lr_filter TYPE REF TO ts_filter, + lv_col TYPE i. - FIELD-SYMBOLS: TYPE ts_filter. + FIELD-SYMBOLS: TYPE ts_filter. - rv_is_hidden = abap_false. + rv_is_hidden = abap_false. *--------------------------------------------------------------------* * 1st row of filter area is never hidden, because here the filter * symbol is being shown *--------------------------------------------------------------------* - IF iv_row = me->filter_area-row_start. - RETURN. - ENDIF. + IF iv_row = me->filter_area-row_start. + RETURN. + ENDIF. - lv_col = me->filter_area-col_start. + lv_col = me->filter_area-col_start. - WHILE lv_col <= me->filter_area-col_end. + WHILE lv_col <= me->filter_area-col_end. - lr_filter = me->get_column_filter( lv_col ). - ASSIGN lr_filter->* TO . + lr_filter = me->get_column_filter( lv_col ). + ASSIGN lr_filter->* TO . - CASE -rule. + CASE -rule. - WHEN mc_filter_rule_single_values. - rv_is_hidden = me->is_row_hidden_single_values( iv_row = iv_row - iv_col = lv_col - is_filter = ). + WHEN mc_filter_rule_single_values. + rv_is_hidden = me->is_row_hidden_single_values( iv_row = iv_row + iv_col = lv_col + is_filter = ). - WHEN mc_filter_rule_text_pattern. - rv_is_hidden = me->is_row_hidden_text_pattern( iv_row = iv_row - iv_col = lv_col - is_filter = ). + WHEN mc_filter_rule_text_pattern. + rv_is_hidden = me->is_row_hidden_text_pattern( iv_row = iv_row + iv_col = lv_col + is_filter = ). - ENDCASE. + ENDCASE. - IF rv_is_hidden = abap_true. - RETURN. - ENDIF. + IF rv_is_hidden = abap_true. + RETURN. + ENDIF. - ADD 1 TO lv_col. + ADD 1 TO lv_col. - ENDWHILE. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -METHOD is_row_hidden_single_values. + METHOD is_row_hidden_single_values. - DATA: lv_value TYPE string. + DATA: lv_value TYPE string. - FIELD-SYMBOLS: LIKE LINE OF me->worksheet->sheet_content. + FIELD-SYMBOLS: LIKE LINE OF me->worksheet->sheet_content. - rv_is_hidden = abap_false. " Default setting is NOT HIDDEN = is in filter range + rv_is_hidden = abap_false. " Default setting is NOT HIDDEN = is in filter range *--------------------------------------------------------------------* * No filter values --> only symbol should be shown but nothing is being hidden *--------------------------------------------------------------------* - IF is_filter-t_values IS INITIAL. - RETURN. - ENDIF. + IF is_filter-t_values IS INITIAL. + RETURN. + ENDIF. *--------------------------------------------------------------------* * Get value of cell *--------------------------------------------------------------------* - READ TABLE me->worksheet->sheet_content ASSIGNING WITH TABLE KEY cell_row = iv_row - cell_column = iv_col. - IF sy-subrc = 0. - lv_value = -cell_value. - ELSE. - CLEAR lv_value. - ENDIF. + READ TABLE me->worksheet->sheet_content ASSIGNING WITH TABLE KEY cell_row = iv_row + cell_column = iv_col. + IF sy-subrc = 0. + lv_value = -cell_value. + ELSE. + CLEAR lv_value. + ENDIF. *--------------------------------------------------------------------* * Check whether it is affected by filter * this needs to be extended if we support other filtertypes * other than single values *--------------------------------------------------------------------* - READ TABLE is_filter-t_values TRANSPORTING NO FIELDS WITH TABLE KEY table_line = lv_value. - IF sy-subrc <> 0. - rv_is_hidden = abap_true. - ENDIF. + READ TABLE is_filter-t_values TRANSPORTING NO FIELDS WITH TABLE KEY table_line = lv_value. + IF sy-subrc <> 0. + rv_is_hidden = abap_true. + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD is_row_hidden_text_pattern. + METHOD is_row_hidden_text_pattern. - DATA: lv_value TYPE string. + DATA: lv_value TYPE string. - FIELD-SYMBOLS: LIKE LINE OF me->worksheet->sheet_content. + FIELD-SYMBOLS: LIKE LINE OF me->worksheet->sheet_content. - rv_is_hidden = abap_false. " Default setting is NOT HIDDEN = is in filter range + rv_is_hidden = abap_false. " Default setting is NOT HIDDEN = is in filter range *--------------------------------------------------------------------* * Get value of cell *--------------------------------------------------------------------* - READ TABLE me->worksheet->sheet_content ASSIGNING WITH TABLE KEY cell_row = iv_row - cell_column = iv_col. - IF sy-subrc = 0. - lv_value = -cell_value. - ELSE. - CLEAR lv_value. - ENDIF. + READ TABLE me->worksheet->sheet_content ASSIGNING WITH TABLE KEY cell_row = iv_row + cell_column = iv_col. + IF sy-subrc = 0. + lv_value = -cell_value. + ELSE. + CLEAR lv_value. + ENDIF. *--------------------------------------------------------------------* * Check whether it is affected by filter * this needs to be extended if we support other filtertypes * other than single values *--------------------------------------------------------------------* - IF lv_value NOT IN is_filter-tr_textfilter1. - rv_is_hidden = abap_true. - ENDIF. + IF lv_value NOT IN is_filter-tr_textfilter1. + rv_is_hidden = abap_true. + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD set_filter_area. + METHOD set_filter_area. - filter_area = is_area. + filter_area = is_area. -ENDMETHOD. + ENDMETHOD. -METHOD set_text_filter. + METHOD set_text_filter. * see method documentation how to use this - DATA: lr_filter TYPE REF TO ts_filter, - ls_value1 TYPE LINE OF ts_filter-tr_textfilter1. - - FIELD-SYMBOLS: TYPE ts_filter. + DATA: lr_filter TYPE REF TO ts_filter, + ls_value1 TYPE LINE OF ts_filter-tr_textfilter1. + FIELD-SYMBOLS: TYPE ts_filter. - lr_filter = me->get_column_filter( i_column ). - ASSIGN lr_filter->* TO . - -rule = mc_filter_rule_text_pattern. - CLEAR -tr_textfilter1. + lr_filter = me->get_column_filter( i_column ). + ASSIGN lr_filter->* TO . - IF iv_textfilter1 CA '*+'. " Pattern - ls_value1-sign = 'I'. - ls_value1-option = 'CP'. - ls_value1-low = iv_textfilter1. - ELSE. - ls_value1-sign = 'I'. - ls_value1-option = 'EQ'. - ls_value1-low = iv_textfilter1. - ENDIF. - APPEND ls_value1 TO -tr_textfilter1. + -rule = mc_filter_rule_text_pattern. + CLEAR -tr_textfilter1. + + IF iv_textfilter1 CA '*+'. " Pattern + ls_value1-sign = 'I'. + ls_value1-option = 'CP'. + ls_value1-low = iv_textfilter1. + ELSE. + ls_value1-sign = 'I'. + ls_value1-option = 'EQ'. + ls_value1-low = iv_textfilter1. + ENDIF. + APPEND ls_value1 TO -tr_textfilter1. -ENDMETHOD. + ENDMETHOD. -METHOD set_value. + METHOD set_value. - DATA: lr_filter TYPE REF TO ts_filter. + DATA: lr_filter TYPE REF TO ts_filter. - FIELD-SYMBOLS: TYPE ts_filter. + FIELD-SYMBOLS: TYPE ts_filter. - lr_filter = me->get_column_filter( i_column ). - ASSIGN lr_filter->* TO . + lr_filter = me->get_column_filter( i_column ). + ASSIGN lr_filter->* TO . - -rule = mc_filter_rule_single_values. + -rule = mc_filter_rule_single_values. - INSERT i_value INTO TABLE -t_values. + INSERT i_value INTO TABLE -t_values. -ENDMETHOD. + ENDMETHOD. -METHOD set_values. + METHOD set_values. - FIELD-SYMBOLS: LIKE LINE OF it_values. + FIELD-SYMBOLS: LIKE LINE OF it_values. - LOOP AT it_values ASSIGNING . + LOOP AT it_values ASSIGNING . - me->set_value( i_column = -column - i_value = -value ). + me->set_value( i_column = -column + i_value = -value ). - ENDLOOP. + ENDLOOP. -ENDMETHOD. + ENDMETHOD. -METHOD validate_area. - DATA: l_col TYPE zexcel_cell_column, - l_row TYPE zexcel_cell_row. + METHOD validate_area. + DATA: l_col TYPE zexcel_cell_column, + l_row TYPE zexcel_cell_row. - l_row = worksheet->get_highest_row( ) . - l_col = worksheet->get_highest_column( ) . + l_row = worksheet->get_highest_row( ) . + l_col = worksheet->get_highest_column( ) . - IF filter_area IS INITIAL. - filter_area-row_start = 1. - filter_area-col_start = 1. - filter_area-row_end = l_row . - filter_area-col_end = l_col . - ENDIF. + IF filter_area IS INITIAL. + filter_area-row_start = 1. + filter_area-col_start = 1. + filter_area-row_end = l_row . + filter_area-col_end = l_col . + ENDIF. - IF filter_area-row_start < 1. - filter_area-row_start = 1. - ENDIF. - IF filter_area-col_start < 1. - filter_area-col_start = 1. - ENDIF. - IF filter_area-row_end > l_row OR - filter_area-row_end < 1. - filter_area-row_end = l_row. - ENDIF. - IF filter_area-col_end > l_col OR - filter_area-col_end < 1. - filter_area-col_end = l_col. - ENDIF. - IF filter_area-row_start >= filter_area-row_end. - filter_area-row_start = filter_area-row_end - 1. IF filter_area-row_start < 1. filter_area-row_start = 1. - filter_area-row_end = 2. ENDIF. - ENDIF. - IF filter_area-col_start > filter_area-col_end. - filter_area-col_start = filter_area-col_end. - ENDIF. -ENDMETHOD. + IF filter_area-col_start < 1. + filter_area-col_start = 1. + ENDIF. + IF filter_area-row_end > l_row OR + filter_area-row_end < 1. + filter_area-row_end = l_row. + ENDIF. + IF filter_area-col_end > l_col OR + filter_area-col_end < 1. + filter_area-col_end = l_col. + ENDIF. + IF filter_area-row_start >= filter_area-row_end. + filter_area-row_start = filter_area-row_end - 1. + IF filter_area-row_start < 1. + filter_area-row_start = 1. + filter_area-row_end = 2. + ENDIF. + ENDIF. + IF filter_area-col_start > filter_area-col_end. + filter_area-col_start = filter_area-col_end. + ENDIF. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_autofilters.clas.abap b/src/zcl_excel_autofilters.clas.abap index c91aba530..17e2ee3cb 100644 --- a/src/zcl_excel_autofilters.clas.abap +++ b/src/zcl_excel_autofilters.clas.abap @@ -1,122 +1,122 @@ -class ZCL_EXCEL_AUTOFILTERS definition - public - final - create public . +CLASS zcl_excel_autofilters DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_AUTOFILTERS *"* do not include other source files here!!! - type-pools ABAP . - - constants C_AUTOFILTER type STRING value '_xlnm._FilterDatabase'. "#EC NOTEXT - - methods ADD - importing - !IO_SHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(RO_AUTOFILTER) type ref to ZCL_EXCEL_AUTOFILTER - raising - ZCX_EXCEL . - methods CLEAR . - methods GET - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional - !I_SHEET_GUID type sysuuid_x16 optional - returning - value(RO_AUTOFILTER) type ref to ZCL_EXCEL_AUTOFILTER . - methods IS_EMPTY - returning - value(R_EMPTY) type FLAG . - methods REMOVE - importing - !IO_SHEET type ANY . - methods SIZE - returning - value(R_SIZE) type I . + TYPE-POOLS abap . + + CONSTANTS c_autofilter TYPE string VALUE '_xlnm._FilterDatabase'. "#EC NOTEXT + + METHODS add + IMPORTING + !io_sheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ro_autofilter) TYPE REF TO zcl_excel_autofilter + RAISING + zcx_excel . + METHODS clear . + METHODS get + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet OPTIONAL + !i_sheet_guid TYPE sysuuid_x16 OPTIONAL + RETURNING + VALUE(ro_autofilter) TYPE REF TO zcl_excel_autofilter . + METHODS is_empty + RETURNING + VALUE(r_empty) TYPE flag . + METHODS remove + IMPORTING + !io_sheet TYPE any . + METHODS size + RETURNING + VALUE(r_size) TYPE i . *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! -protected section. -private section. - - types: - BEGIN OF ts_autofilter, - worksheet TYPE REF TO zcl_excel_worksheet, - autofilter TYPE REF TO zcl_excel_autofilter, - END OF ts_autofilter . - types: - tt_autofilters TYPE HASHED TABLE OF ts_autofilter WITH UNIQUE KEY worksheet . - - data MT_AUTOFILTERS type TT_AUTOFILTERS . + PROTECTED SECTION. + PRIVATE SECTION. + + TYPES: + BEGIN OF ts_autofilter, + worksheet TYPE REF TO zcl_excel_worksheet, + autofilter TYPE REF TO zcl_excel_autofilter, + END OF ts_autofilter . + TYPES: + tt_autofilters TYPE HASHED TABLE OF ts_autofilter WITH UNIQUE KEY worksheet . + + DATA mt_autofilters TYPE tt_autofilters . ENDCLASS. -CLASS ZCL_EXCEL_AUTOFILTERS IMPLEMENTATION. +CLASS zcl_excel_autofilters IMPLEMENTATION. -METHOD add. + METHOD add. - DATA: ls_autofilter LIKE LINE OF me->mt_autofilters. + DATA: ls_autofilter LIKE LINE OF me->mt_autofilters. - FIELD-SYMBOLS: LIKE LINE OF me->mt_autofilters. + FIELD-SYMBOLS: LIKE LINE OF me->mt_autofilters. - READ TABLE me->mt_autofilters ASSIGNING WITH TABLE KEY worksheet = io_sheet. - IF sy-subrc = 0. - RAISE EXCEPTION TYPE zcx_excel. " adding another autofilter to sheet is not allowed - ENDIF. + READ TABLE me->mt_autofilters ASSIGNING WITH TABLE KEY worksheet = io_sheet. + IF sy-subrc = 0. + RAISE EXCEPTION TYPE zcx_excel. " adding another autofilter to sheet is not allowed + ENDIF. - CREATE OBJECT ro_autofilter - EXPORTING - io_sheet = io_sheet. + CREATE OBJECT ro_autofilter + EXPORTING + io_sheet = io_sheet. - ls_autofilter-worksheet = io_sheet. - ls_autofilter-autofilter = ro_autofilter. - INSERT ls_autofilter INTO TABLE me->mt_autofilters. + ls_autofilter-worksheet = io_sheet. + ls_autofilter-autofilter = ro_autofilter. + INSERT ls_autofilter INTO TABLE me->mt_autofilters. -ENDMETHOD. + ENDMETHOD. -METHOD clear. + METHOD clear. - CLEAR me->mt_autofilters. + CLEAR me->mt_autofilters. -ENDMETHOD. + ENDMETHOD. -METHOD get. + METHOD get. - FIELD-SYMBOLS: LIKE LINE OF me->mt_autofilters. + FIELD-SYMBOLS: LIKE LINE OF me->mt_autofilters. - READ TABLE me->mt_autofilters ASSIGNING WITH TABLE KEY worksheet = io_worksheet. - IF sy-subrc = 0. - ro_autofilter = -autofilter. - ELSE. - CLEAR ro_autofilter. - ENDIF. + READ TABLE me->mt_autofilters ASSIGNING WITH TABLE KEY worksheet = io_worksheet. + IF sy-subrc = 0. + ro_autofilter = -autofilter. + ELSE. + CLEAR ro_autofilter. + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD is_empty. - IF me->mt_autofilters IS INITIAL. - r_empty = abap_true. - ENDIF. -ENDMETHOD. + METHOD is_empty. + IF me->mt_autofilters IS INITIAL. + r_empty = abap_true. + ENDIF. + ENDMETHOD. -METHOD remove. + METHOD remove. - DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet. - DELETE TABLE me->mt_autofilters WITH TABLE KEY worksheet = lo_worksheet. + DELETE TABLE me->mt_autofilters WITH TABLE KEY worksheet = lo_worksheet. -ENDMETHOD. + ENDMETHOD. -METHOD size. - DESCRIBE TABLE me->mt_autofilters LINES r_size. -ENDMETHOD. + METHOD size. + DESCRIBE TABLE me->mt_autofilters LINES r_size. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_column.clas.abap b/src/zcl_excel_column.clas.abap index 4e454185a..7faa02762 100644 --- a/src/zcl_excel_column.clas.abap +++ b/src/zcl_excel_column.clas.abap @@ -1,226 +1,226 @@ -class ZCL_EXCEL_COLUMN definition - public - final - create public . +CLASS zcl_excel_column DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_COLUMN *"* do not include other source files here!!! -public section. - type-pools ABAP . - - methods CONSTRUCTOR - importing - !IP_INDEX type ZEXCEL_CELL_COLUMN_ALPHA - !IP_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - !IP_EXCEL type ref to ZCL_EXCEL . - methods GET_AUTO_SIZE - returning - value(R_AUTO_SIZE) type ABAP_BOOL . - methods GET_COLLAPSED - returning - value(R_COLLAPSED) type ABAP_BOOL . - methods GET_COLUMN_INDEX - returning - value(R_COLUMN_INDEX) type INT4 . - methods GET_OUTLINE_LEVEL - returning - value(R_OUTLINE_LEVEL) type INT4 . - methods GET_VISIBLE - returning - value(R_VISIBLE) type ABAP_BOOL . - methods GET_WIDTH - returning - value(R_WIDTH) type FLOAT . - methods GET_XF_INDEX - returning - value(R_XF_INDEX) type INT4 . - methods SET_AUTO_SIZE - importing - !IP_AUTO_SIZE type ABAP_BOOL - returning - value(IO_COLUMN) type ref to ZCL_EXCEL_COLUMN . - methods SET_COLLAPSED - importing - !IP_COLLAPSED type ABAP_BOOL - returning - value(IO_COLUMN) type ref to ZCL_EXCEL_COLUMN . - methods SET_COLUMN_INDEX - importing - !IP_INDEX type ZEXCEL_CELL_COLUMN_ALPHA - returning - value(IO_COLUMN) type ref to ZCL_EXCEL_COLUMN . - methods SET_OUTLINE_LEVEL - importing - !IP_OUTLINE_LEVEL type INT4 . - methods SET_VISIBLE - importing - !IP_VISIBLE type ABAP_BOOL - returning - value(IO_COLUMN) type ref to ZCL_EXCEL_COLUMN . - methods SET_WIDTH - importing - !IP_WIDTH type SIMPLE - returning - value(IO_COLUMN) type ref to ZCL_EXCEL_COLUMN - raising - ZCX_EXCEL . - methods SET_XF_INDEX - importing - !IP_XF_INDEX type INT4 - returning - value(IO_COLUMN) type ref to ZCL_EXCEL_COLUMN . - methods SET_COLUMN_STYLE_BY_GUID - importing - !IP_STYLE_GUID type ZEXCEL_CELL_STYLE - raising - ZCX_EXCEL . - methods GET_COLUMN_STYLE_GUID - returning - value(EP_STYLE_GUID) type ZEXCEL_CELL_STYLE - raising - ZCX_EXCEL . + PUBLIC SECTION. + TYPE-POOLS abap . + + METHODS constructor + IMPORTING + !ip_index TYPE zexcel_cell_column_alpha + !ip_worksheet TYPE REF TO zcl_excel_worksheet + !ip_excel TYPE REF TO zcl_excel . + METHODS get_auto_size + RETURNING + VALUE(r_auto_size) TYPE abap_bool . + METHODS get_collapsed + RETURNING + VALUE(r_collapsed) TYPE abap_bool . + METHODS get_column_index + RETURNING + VALUE(r_column_index) TYPE int4 . + METHODS get_outline_level + RETURNING + VALUE(r_outline_level) TYPE int4 . + METHODS get_visible + RETURNING + VALUE(r_visible) TYPE abap_bool . + METHODS get_width + RETURNING + VALUE(r_width) TYPE float . + METHODS get_xf_index + RETURNING + VALUE(r_xf_index) TYPE int4 . + METHODS set_auto_size + IMPORTING + !ip_auto_size TYPE abap_bool + RETURNING + VALUE(io_column) TYPE REF TO zcl_excel_column . + METHODS set_collapsed + IMPORTING + !ip_collapsed TYPE abap_bool + RETURNING + VALUE(io_column) TYPE REF TO zcl_excel_column . + METHODS set_column_index + IMPORTING + !ip_index TYPE zexcel_cell_column_alpha + RETURNING + VALUE(io_column) TYPE REF TO zcl_excel_column . + METHODS set_outline_level + IMPORTING + !ip_outline_level TYPE int4 . + METHODS set_visible + IMPORTING + !ip_visible TYPE abap_bool + RETURNING + VALUE(io_column) TYPE REF TO zcl_excel_column . + METHODS set_width + IMPORTING + !ip_width TYPE simple + RETURNING + VALUE(io_column) TYPE REF TO zcl_excel_column + RAISING + zcx_excel . + METHODS set_xf_index + IMPORTING + !ip_xf_index TYPE int4 + RETURNING + VALUE(io_column) TYPE REF TO zcl_excel_column . + METHODS set_column_style_by_guid + IMPORTING + !ip_style_guid TYPE zexcel_cell_style + RAISING + zcx_excel . + METHODS get_column_style_guid + RETURNING + VALUE(ep_style_guid) TYPE zexcel_cell_style + RAISING + zcx_excel . *"* protected components of class ZCL_EXCEL_COLUMN *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_COLUMN *"* do not include other source files here!!! -private section. - - data COLUMN_INDEX type INT4 . - data WIDTH type FLOAT . - data AUTO_SIZE type ABAP_BOOL . - data VISIBLE type ABAP_BOOL . - data OUTLINE_LEVEL type INT4 . - data COLLAPSED type ABAP_BOOL . - data XF_INDEX type INT4 . - data STYLE_GUID type ZEXCEL_CELL_STYLE . - data EXCEL type ref to ZCL_EXCEL . - data WORKSHEET type ref to ZCL_EXCEL_WORKSHEET . + PRIVATE SECTION. + + DATA column_index TYPE int4 . + DATA width TYPE float . + DATA auto_size TYPE abap_bool . + DATA visible TYPE abap_bool . + DATA outline_level TYPE int4 . + DATA collapsed TYPE abap_bool . + DATA xf_index TYPE int4 . + DATA style_guid TYPE zexcel_cell_style . + DATA excel TYPE REF TO zcl_excel . + DATA worksheet TYPE REF TO zcl_excel_worksheet . ENDCLASS. -CLASS ZCL_EXCEL_COLUMN IMPLEMENTATION. +CLASS zcl_excel_column IMPLEMENTATION. -method CONSTRUCTOR. - me->column_index = zcl_excel_common=>convert_column2int( ip_index ). - me->width = -1. - me->auto_size = abap_false. - me->visible = abap_true. - me->outline_level = 0. - me->collapsed = abap_false. - me->excel = ip_excel. "ins issue #157 - Allow Style for columns - me->worksheet = ip_worksheet. "ins issue #157 - Allow Style for columns + METHOD constructor. + me->column_index = zcl_excel_common=>convert_column2int( ip_index ). + me->width = -1. + me->auto_size = abap_false. + me->visible = abap_true. + me->outline_level = 0. + me->collapsed = abap_false. + me->excel = ip_excel. "ins issue #157 - Allow Style for columns + me->worksheet = ip_worksheet. "ins issue #157 - Allow Style for columns - " set default index to cellXf - me->xf_index = 0. + " set default index to cellXf + me->xf_index = 0. - endmethod. + ENDMETHOD. -method GET_AUTO_SIZE. - r_auto_size = me->auto_size. - endmethod. + METHOD get_auto_size. + r_auto_size = me->auto_size. + ENDMETHOD. -method GET_COLLAPSED. - r_Collapsed = me->Collapsed. - endmethod. + METHOD get_collapsed. + r_collapsed = me->collapsed. + ENDMETHOD. -method GET_COLUMN_INDEX. - r_column_index = me->column_index. - endmethod. + METHOD get_column_index. + r_column_index = me->column_index. + ENDMETHOD. -method GET_COLUMN_STYLE_GUID. - IF me->style_guid IS NOT INITIAL. - ep_style_guid = me->style_guid. - ELSE. - ep_style_guid = me->worksheet->zif_excel_sheet_properties~get_style( ). - ENDIF. - endmethod. + METHOD get_column_style_guid. + IF me->style_guid IS NOT INITIAL. + ep_style_guid = me->style_guid. + ELSE. + ep_style_guid = me->worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. + ENDMETHOD. -method GET_OUTLINE_LEVEL. - r_outline_level = me->outline_level. - endmethod. + METHOD get_outline_level. + r_outline_level = me->outline_level. + ENDMETHOD. -method GET_VISIBLE. - r_Visible = me->Visible. - endmethod. + METHOD get_visible. + r_visible = me->visible. + ENDMETHOD. -method GET_WIDTH. - r_WIDTH = me->WIDTH. - endmethod. + METHOD get_width. + r_width = me->width. + ENDMETHOD. -method GET_XF_INDEX. - r_xf_index = me->xf_index. - endmethod. + METHOD get_xf_index. + r_xf_index = me->xf_index. + ENDMETHOD. -METHOD set_auto_size. - me->auto_size = ip_auto_size. - io_column = me. -ENDMETHOD. + METHOD set_auto_size. + me->auto_size = ip_auto_size. + io_column = me. + ENDMETHOD. -METHOD set_collapsed. - me->collapsed = ip_collapsed. - io_column = me. -ENDMETHOD. + METHOD set_collapsed. + me->collapsed = ip_collapsed. + io_column = me. + ENDMETHOD. -METHOD set_column_index. - me->column_index = zcl_excel_common=>convert_column2int( ip_index ). - io_column = me. -ENDMETHOD. + METHOD set_column_index. + me->column_index = zcl_excel_common=>convert_column2int( ip_index ). + io_column = me. + ENDMETHOD. -method SET_COLUMN_STYLE_BY_GUID. - DATA: stylemapping TYPE zexcel_s_stylemapping. + METHOD set_column_style_by_guid. + DATA: stylemapping TYPE zexcel_s_stylemapping. - IF me->excel IS NOT BOUND. - zcx_excel=>raise_text( 'Internal error - reference to ZCL_EXCEL not bound' ). - ENDIF. - TRY. - stylemapping = me->excel->get_style_to_guid( ip_style_guid ). - me->style_guid = stylemapping-guid. + IF me->excel IS NOT BOUND. + zcx_excel=>raise_text( 'Internal error - reference to ZCL_EXCEL not bound' ). + ENDIF. + TRY. + stylemapping = me->excel->get_style_to_guid( ip_style_guid ). + me->style_guid = stylemapping-guid. - CATCH zcx_excel . - EXIT. " leave as is in case of error - ENDTRY. + CATCH zcx_excel . + EXIT. " leave as is in case of error + ENDTRY. - endmethod. + ENDMETHOD. -method SET_OUTLINE_LEVEL. - me->outline_level = ip_outline_level. - endmethod. + METHOD set_outline_level. + me->outline_level = ip_outline_level. + ENDMETHOD. -METHOD set_visible. - me->visible = ip_visible. - io_column = me. -ENDMETHOD. + METHOD set_visible. + me->visible = ip_visible. + io_column = me. + ENDMETHOD. -METHOD set_width. - TRY. - me->width = ip_width. - io_column = me. - CATCH cx_sy_conversion_no_number. - zcx_excel=>raise_text( 'Unable to interpret width as number' ). - ENDTRY. -ENDMETHOD. + METHOD set_width. + TRY. + me->width = ip_width. + io_column = me. + CATCH cx_sy_conversion_no_number. + zcx_excel=>raise_text( 'Unable to interpret width as number' ). + ENDTRY. + ENDMETHOD. -METHOD set_xf_index. - me->xf_index = ip_xf_index. - io_column = me. -ENDMETHOD. + METHOD set_xf_index. + me->xf_index = ip_xf_index. + io_column = me. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_columns.clas.abap b/src/zcl_excel_columns.clas.abap index 6b68c8161..3ada97c84 100644 --- a/src/zcl_excel_columns.clas.abap +++ b/src/zcl_excel_columns.clas.abap @@ -1,108 +1,108 @@ -class ZCL_EXCEL_COLUMNS definition - public - final - create public . +CLASS zcl_excel_columns DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_COLUMNS *"* do not include other source files here!!! - public section. - types: - begin of MTY_S_HASHED_COLUMN, - COLUMN_INDEX type INT4, - COLUMN type ref to ZCL_EXCEL_COLUMN, - end of MTY_S_HASHED_COLUMN , - MTY_TS_HASEHD_COLUMN type hashed table of MTY_S_HASHED_COLUMN with unique key COLUMN_INDEX. - - methods ADD - importing - !IO_COLUMN type ref to ZCL_EXCEL_COLUMN . - methods CLEAR . - methods CONSTRUCTOR . - methods GET - importing - !IP_INDEX type I - returning - value(EO_COLUMN) type ref to ZCL_EXCEL_COLUMN . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IO_COLUMN type ref to ZCL_EXCEL_COLUMN . - methods SIZE - returning - value(EP_SIZE) type I . + PUBLIC SECTION. + TYPES: + BEGIN OF mty_s_hashed_column, + column_index TYPE int4, + column TYPE REF TO zcl_excel_column, + END OF mty_s_hashed_column , + mty_ts_hasehd_column TYPE HASHED TABLE OF mty_s_hashed_column WITH UNIQUE KEY column_index. + + METHODS add + IMPORTING + !io_column TYPE REF TO zcl_excel_column . + METHODS clear . + METHODS constructor . + METHODS get + IMPORTING + !ip_index TYPE i + RETURNING + VALUE(eo_column) TYPE REF TO zcl_excel_column . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !io_column TYPE REF TO zcl_excel_column . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! - protected section. + PROTECTED SECTION. *"* private components of class ZABAP_EXCEL_RANGES *"* do not include other source files here!!! - private section. + PRIVATE SECTION. - data COLUMNS type ref to CL_OBJECT_COLLECTION . - data COLUMNS_HASEHD type MTY_TS_HASEHD_COLUMN . + DATA columns TYPE REF TO cl_object_collection . + DATA columns_hasehd TYPE mty_ts_hasehd_column . ENDCLASS. -CLASS ZCL_EXCEL_COLUMNS IMPLEMENTATION. +CLASS zcl_excel_columns IMPLEMENTATION. - method ADD. - data: LS_HASHED_COLUMN type MTY_S_HASHED_COLUMN. + METHOD add. + DATA: ls_hashed_column TYPE mty_s_hashed_column. - LS_HASHED_COLUMN-COLUMN_INDEX = IO_COLUMN->GET_COLUMN_INDEX( ). - LS_HASHED_COLUMN-COLUMN = IO_COLUMN. + ls_hashed_column-column_index = io_column->get_column_index( ). + ls_hashed_column-column = io_column. - insert LS_HASHED_COLUMN into table COLUMNS_HASEHD . + INSERT ls_hashed_column INTO TABLE columns_hasehd . - COLUMNS->ADD( IO_COLUMN ). - endmethod. + columns->add( io_column ). + ENDMETHOD. - method CLEAR. - clear COLUMNS_HASEHD. - COLUMNS->CLEAR( ). - endmethod. + METHOD clear. + CLEAR columns_hasehd. + columns->clear( ). + ENDMETHOD. - method CONSTRUCTOR. + METHOD constructor. - create object COLUMNS. + CREATE OBJECT columns. - endmethod. + ENDMETHOD. - method GET. - field-symbols: type MTY_S_HASHED_COLUMN. + METHOD get. + FIELD-SYMBOLS: TYPE mty_s_hashed_column. - read table COLUMNS_HASEHD with key COLUMN_INDEX = IP_INDEX assigning . - if SY-SUBRC = 0. - EO_COLUMN = -COLUMN. - endif. - endmethod. + READ TABLE columns_hasehd WITH KEY column_index = ip_index ASSIGNING . + IF sy-subrc = 0. + eo_column = -column. + ENDIF. + ENDMETHOD. - method GET_ITERATOR. - EO_ITERATOR ?= COLUMNS->GET_ITERATOR( ). - endmethod. + METHOD get_iterator. + eo_iterator ?= columns->get_iterator( ). + ENDMETHOD. - method IS_EMPTY. - IS_EMPTY = COLUMNS->IS_EMPTY( ). - endmethod. + METHOD is_empty. + is_empty = columns->is_empty( ). + ENDMETHOD. - method REMOVE. - delete table COLUMNS_HASEHD with table key COLUMN_INDEX = IO_COLUMN->GET_COLUMN_INDEX( ) . - COLUMNS->REMOVE( IO_COLUMN ). - endmethod. + METHOD remove. + DELETE TABLE columns_hasehd WITH TABLE KEY column_index = io_column->get_column_index( ) . + columns->remove( io_column ). + ENDMETHOD. - method SIZE. - EP_SIZE = COLUMNS->SIZE( ). - endmethod. + METHOD size. + ep_size = columns->size( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_comment.clas.abap b/src/zcl_excel_comment.clas.abap index c2a2ffcc0..d698bec57 100644 --- a/src/zcl_excel_comment.clas.abap +++ b/src/zcl_excel_comment.clas.abap @@ -1,67 +1,67 @@ -class ZCL_EXCEL_COMMENT definition - public - final - create public . - -public section. - type-pools ABAP . - - methods CONSTRUCTOR . - methods GET_NAME - returning - value(R_NAME) type STRING . - methods GET_INDEX - returning - value(RP_INDEX) type STRING . - methods GET_REF - returning - value(RP_REF) type STRING . - methods GET_TEXT - returning - value(RP_TEXT) type STRING . - methods SET_TEXT - importing - !IP_TEXT type STRING - !IP_REF type STRING optional . -protected section. -private section. - - data INDEX type STRING . - data REF type STRING . - data TEXT type STRING . +CLASS zcl_excel_comment DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + TYPE-POOLS abap . + + METHODS constructor . + METHODS get_name + RETURNING + VALUE(r_name) TYPE string . + METHODS get_index + RETURNING + VALUE(rp_index) TYPE string . + METHODS get_ref + RETURNING + VALUE(rp_ref) TYPE string . + METHODS get_text + RETURNING + VALUE(rp_text) TYPE string . + METHODS set_text + IMPORTING + !ip_text TYPE string + !ip_ref TYPE string OPTIONAL . + PROTECTED SECTION. + PRIVATE SECTION. + + DATA index TYPE string . + DATA ref TYPE string . + DATA text TYPE string . ENDCLASS. -CLASS ZCL_EXCEL_COMMENT IMPLEMENTATION. +CLASS zcl_excel_comment IMPLEMENTATION. -METHOD constructor. + METHOD constructor. ENDMETHOD. -METHOD get_index. + METHOD get_index. rp_index = me->index. ENDMETHOD. -METHOD get_name. + METHOD get_name. ENDMETHOD. -METHOD get_ref. - rp_ref = me->ref. -ENDMETHOD. + METHOD get_ref. + rp_ref = me->ref. + ENDMETHOD. -method GET_TEXT. - rp_text = me->text. -endmethod. + METHOD get_text. + rp_text = me->text. + ENDMETHOD. -METHOD set_text. + METHOD set_text. me->text = ip_text. IF ip_ref IS SUPPLIED. diff --git a/src/zcl_excel_comments.clas.abap b/src/zcl_excel_comments.clas.abap index 614872b75..a29c1b29a 100644 --- a/src/zcl_excel_comments.clas.abap +++ b/src/zcl_excel_comments.clas.abap @@ -1,100 +1,100 @@ -class ZCL_EXCEL_COMMENTS definition - public - final - create public . - -public section. - - methods ADD - importing - !IP_COMMENT type ref to ZCL_EXCEL_COMMENT . - methods INCLUDE - importing - !IP_COMMENT type ref to ZCL_EXCEL_COMMENT . - methods CLEAR . - methods CONSTRUCTOR . - methods GET - importing - !IP_INDEX type ZEXCEL_ACTIVE_WORKSHEET - returning - value(EO_COMMENT) type ref to ZCL_EXCEL_COMMENT . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IP_COMMENT type ref to ZCL_EXCEL_COMMENT . - methods SIZE - returning - value(EP_SIZE) type I . -protected section. -private section. - - data COMMENTS type ref to CL_OBJECT_COLLECTION . +CLASS zcl_excel_comments DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS add + IMPORTING + !ip_comment TYPE REF TO zcl_excel_comment . + METHODS include + IMPORTING + !ip_comment TYPE REF TO zcl_excel_comment . + METHODS clear . + METHODS constructor . + METHODS get + IMPORTING + !ip_index TYPE zexcel_active_worksheet + RETURNING + VALUE(eo_comment) TYPE REF TO zcl_excel_comment . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !ip_comment TYPE REF TO zcl_excel_comment . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . + PROTECTED SECTION. + PRIVATE SECTION. + + DATA comments TYPE REF TO cl_object_collection . ENDCLASS. -CLASS ZCL_EXCEL_COMMENTS IMPLEMENTATION. +CLASS zcl_excel_comments IMPLEMENTATION. -METHOD add. - DATA: lv_index TYPE i. + METHOD add. + DATA: lv_index TYPE i. - comments->add( ip_comment ). - lv_index = comments->size( ). + comments->add( ip_comment ). + lv_index = comments->size( ). -ENDMETHOD. + ENDMETHOD. -METHOD clear. - comments->clear( ). + METHOD clear. + comments->clear( ). -ENDMETHOD. + ENDMETHOD. -METHOD constructor. - CREATE OBJECT comments. + METHOD constructor. + CREATE OBJECT comments. -ENDMETHOD. + ENDMETHOD. -method GET. - DATA lv_index TYPE i. - lv_index = ip_index. - eo_comment ?= comments->get( lv_index ). + METHOD get. + DATA lv_index TYPE i. + lv_index = ip_index. + eo_comment ?= comments->get( lv_index ). -endmethod. + ENDMETHOD. -method GET_ITERATOR. + METHOD get_iterator. - eo_iterator ?= comments->get_iterator( ). - endmethod. + eo_iterator ?= comments->get_iterator( ). + ENDMETHOD. -METHOD include. - comments->add( ip_comment ). -ENDMETHOD. + METHOD include. + comments->add( ip_comment ). + ENDMETHOD. -method IS_EMPTY. + METHOD is_empty. - is_empty = comments->is_empty( ). - endmethod. + is_empty = comments->is_empty( ). + ENDMETHOD. -method REMOVE. + METHOD remove. - comments->remove( ip_comment ). - endmethod. + comments->remove( ip_comment ). + ENDMETHOD. -method SIZE. + METHOD size. - ep_size = comments->size( ). - endmethod. + ep_size = comments->size( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_common.clas.abap b/src/zcl_excel_common.clas.abap index fb4a6efb0..5a241918f 100644 --- a/src/zcl_excel_common.clas.abap +++ b/src/zcl_excel_common.clas.abap @@ -1,244 +1,244 @@ -class ZCL_EXCEL_COMMON definition - public - final - create public . +CLASS zcl_excel_common DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_COMMON *"* do not include other source files here!!! -public section. - - constants C_EXCEL_BASELINE_DATE type D value '19000101'. "#EC NOTEXT - class-data C_EXCEL_NUMFMT_OFFSET type INT1 value 164. "#EC NOTEXT . . . . . . . . . . . . . . . . " . - constants C_EXCEL_SHEET_MAX_COL type INT4 value 16384. "#EC NOTEXT - constants C_EXCEL_SHEET_MIN_COL type INT4 value 1. "#EC NOTEXT - constants C_EXCEL_SHEET_MAX_ROW type INT4 value 1048576. "#EC NOTEXT - constants C_EXCEL_SHEET_MIN_ROW type INT4 value 1. "#EC NOTEXT - class-data C_SPRAS_EN type SPRAS value 'E'. "#EC NOTEXT . . . . . . . . . . . . . . . . " . - class-data O_CONV type ref to CL_ABAP_CONV_OUT_CE . - constants C_EXCEL_1900_LEAP_YEAR type D value '19000228'. "#EC NOTEXT - class-data C_XLSX_FILE_FILTER type STRING value 'Excel Workbook (*.xlsx)|*.xlsx|'. "#EC NOTEXT . . . . . . . " . - - class-methods CLASS_CONSTRUCTOR . - class-methods DESCRIBE_STRUCTURE - importing - !IO_STRUCT type ref to CL_ABAP_STRUCTDESCR - returning - value(RT_DFIES) type DDFIELDS . - class-methods CONVERT_COLUMN2ALPHA - importing - !IP_COLUMN type SIMPLE - returning - value(EP_COLUMN) type ZEXCEL_CELL_COLUMN_ALPHA - raising - ZCX_EXCEL . - class-methods CONVERT_COLUMN2INT - importing - !IP_COLUMN type SIMPLE - returning - value(EP_COLUMN) type ZEXCEL_CELL_COLUMN - raising - ZCX_EXCEL . - class-methods CONVERT_COLUMNROW2COLUMN_A_ROW - importing - !I_COLUMNROW type CLIKE - exporting - !E_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - !E_ROW type ZEXCEL_CELL_ROW . - class-methods CONVERT_RANGE2COLUMN_A_ROW - importing - !I_RANGE type CLIKE - exporting - !E_COLUMN_START type ZEXCEL_CELL_COLUMN_ALPHA - !E_COLUMN_END type ZEXCEL_CELL_COLUMN_ALPHA - !E_ROW_START type ZEXCEL_CELL_ROW - !E_ROW_END type ZEXCEL_CELL_ROW - !E_SHEET type CLIKE - raising - ZCX_EXCEL . - class-methods DATE_TO_EXCEL_STRING - importing - !IP_VALUE type D - returning - value(EP_VALUE) type ZEXCEL_CELL_VALUE . - class-methods ENCRYPT_PASSWORD - importing - !I_PWD type ZEXCEL_AES_PASSWORD - returning - value(R_ENCRYPTED_PWD) type ZEXCEL_AES_PASSWORD . - class-methods ESCAPE_STRING - importing - !IP_VALUE type CLIKE - returning - value(EP_ESCAPED_VALUE) type STRING . - class-methods UNESCAPE_STRING - importing - !IV_ESCAPED type CLIKE - returning - value(EV_UNESCAPED_STRING) type STRING - raising - ZCX_EXCEL . - class-methods EXCEL_STRING_TO_DATE - importing - !IP_VALUE type ZEXCEL_CELL_VALUE - returning - value(EP_VALUE) type D - raising - ZCX_EXCEL . - class-methods EXCEL_STRING_TO_TIME - importing - !IP_VALUE type ZEXCEL_CELL_VALUE - returning - value(EP_VALUE) type T - raising - ZCX_EXCEL . - class-methods EXCEL_STRING_TO_NUMBER - importing - !IP_VALUE type ZEXCEL_CELL_VALUE - returning - value(EP_VALUE) type F - raising - ZCX_EXCEL . - class-methods GET_FIELDCATALOG - importing - !IP_TABLE type STANDARD TABLE - !IV_HIDE_MANDT type ABAP_BOOL default ABAP_TRUE - returning - value(EP_FIELDCATALOG) type ZEXCEL_T_FIELDCATALOG . - class-methods NUMBER_TO_EXCEL_STRING - importing - value(IP_VALUE) type NUMERIC - returning - value(EP_VALUE) type ZEXCEL_CELL_VALUE . - class-methods RECURSIVE_CLASS_TO_STRUCT - importing - !I_SOURCE type ANY - changing - !E_TARGET type DATA - !E_TARGETX type DATA . - class-methods RECURSIVE_STRUCT_TO_CLASS - importing - !I_SOURCE type DATA - !I_SOURCEX type DATA - changing - !E_TARGET type ANY . - class-methods TIME_TO_EXCEL_STRING - importing - !IP_VALUE type T - returning - value(EP_VALUE) type ZEXCEL_CELL_VALUE . - type-pools ABAP . - types: t_char10 type c length 10. - class-methods SPLIT_FILE - importing - !IP_FILE type TEXT255 - exporting - !EP_FILE type TEXT255 - !EP_EXTENSION type t_char10 - !EP_DOTEXTENSION type t_char10 . - class-methods CALCULATE_CELL_DISTANCE - importing - !IV_REFERENCE_CELL type CLIKE - !IV_CURRENT_CELL type CLIKE - exporting - !EV_ROW_DIFFERENCE type I - !EV_COL_DIFFERENCE type I - raising - ZCX_EXCEL . - class-methods DETERMINE_RESULTING_FORMULA - importing - !IV_REFERENCE_CELL type CLIKE - !IV_REFERENCE_FORMULA type CLIKE - !IV_CURRENT_CELL type CLIKE - returning - value(EV_RESULTING_FORMULA) type STRING - raising - ZCX_EXCEL . - class-methods SHIFT_FORMULA - importing - !IV_REFERENCE_FORMULA type CLIKE - value(IV_SHIFT_COLS) type I - value(IV_SHIFT_ROWS) type I - returning - value(EV_RESULTING_FORMULA) type STRING - raising - ZCX_EXCEL . - class-methods IS_CELL_IN_RANGE - importing - !IP_COLUMN type SIMPLE - !IP_ROW type ZEXCEL_CELL_ROW - !IP_RANGE type CLIKE - returning - value(RP_IN_RANGE) type ABAP_BOOL - raising - ZCX_EXCEL . + PUBLIC SECTION. + + CONSTANTS c_excel_baseline_date TYPE d VALUE '19000101'. "#EC NOTEXT + CLASS-DATA c_excel_numfmt_offset TYPE int1 VALUE 164. "#EC NOTEXT . . . . . . . . . . . . . . . . " . + CONSTANTS c_excel_sheet_max_col TYPE int4 VALUE 16384. "#EC NOTEXT + CONSTANTS c_excel_sheet_min_col TYPE int4 VALUE 1. "#EC NOTEXT + CONSTANTS c_excel_sheet_max_row TYPE int4 VALUE 1048576. "#EC NOTEXT + CONSTANTS c_excel_sheet_min_row TYPE int4 VALUE 1. "#EC NOTEXT + CLASS-DATA c_spras_en TYPE spras VALUE 'E'. "#EC NOTEXT . . . . . . . . . . . . . . . . " . + CLASS-DATA o_conv TYPE REF TO cl_abap_conv_out_ce . + CONSTANTS c_excel_1900_leap_year TYPE d VALUE '19000228'. "#EC NOTEXT + CLASS-DATA c_xlsx_file_filter TYPE string VALUE 'Excel Workbook (*.xlsx)|*.xlsx|'. "#EC NOTEXT . . . . . . . " . + + CLASS-METHODS class_constructor . + CLASS-METHODS describe_structure + IMPORTING + !io_struct TYPE REF TO cl_abap_structdescr + RETURNING + VALUE(rt_dfies) TYPE ddfields . + CLASS-METHODS convert_column2alpha + IMPORTING + !ip_column TYPE simple + RETURNING + VALUE(ep_column) TYPE zexcel_cell_column_alpha + RAISING + zcx_excel . + CLASS-METHODS convert_column2int + IMPORTING + !ip_column TYPE simple + RETURNING + VALUE(ep_column) TYPE zexcel_cell_column + RAISING + zcx_excel . + CLASS-METHODS convert_columnrow2column_a_row + IMPORTING + !i_columnrow TYPE clike + EXPORTING + !e_column TYPE zexcel_cell_column_alpha + !e_row TYPE zexcel_cell_row . + CLASS-METHODS convert_range2column_a_row + IMPORTING + !i_range TYPE clike + EXPORTING + !e_column_start TYPE zexcel_cell_column_alpha + !e_column_end TYPE zexcel_cell_column_alpha + !e_row_start TYPE zexcel_cell_row + !e_row_end TYPE zexcel_cell_row + !e_sheet TYPE clike + RAISING + zcx_excel . + CLASS-METHODS date_to_excel_string + IMPORTING + !ip_value TYPE d + RETURNING + VALUE(ep_value) TYPE zexcel_cell_value . + CLASS-METHODS encrypt_password + IMPORTING + !i_pwd TYPE zexcel_aes_password + RETURNING + VALUE(r_encrypted_pwd) TYPE zexcel_aes_password . + CLASS-METHODS escape_string + IMPORTING + !ip_value TYPE clike + RETURNING + VALUE(ep_escaped_value) TYPE string . + CLASS-METHODS unescape_string + IMPORTING + !iv_escaped TYPE clike + RETURNING + VALUE(ev_unescaped_string) TYPE string + RAISING + zcx_excel . + CLASS-METHODS excel_string_to_date + IMPORTING + !ip_value TYPE zexcel_cell_value + RETURNING + VALUE(ep_value) TYPE d + RAISING + zcx_excel . + CLASS-METHODS excel_string_to_time + IMPORTING + !ip_value TYPE zexcel_cell_value + RETURNING + VALUE(ep_value) TYPE t + RAISING + zcx_excel . + CLASS-METHODS excel_string_to_number + IMPORTING + !ip_value TYPE zexcel_cell_value + RETURNING + VALUE(ep_value) TYPE f + RAISING + zcx_excel . + CLASS-METHODS get_fieldcatalog + IMPORTING + !ip_table TYPE STANDARD TABLE + !iv_hide_mandt TYPE abap_bool DEFAULT abap_true + RETURNING + VALUE(ep_fieldcatalog) TYPE zexcel_t_fieldcatalog . + CLASS-METHODS number_to_excel_string + IMPORTING + VALUE(ip_value) TYPE numeric + RETURNING + VALUE(ep_value) TYPE zexcel_cell_value . + CLASS-METHODS recursive_class_to_struct + IMPORTING + !i_source TYPE any + CHANGING + !e_target TYPE data + !e_targetx TYPE data . + CLASS-METHODS recursive_struct_to_class + IMPORTING + !i_source TYPE data + !i_sourcex TYPE data + CHANGING + !e_target TYPE any . + CLASS-METHODS time_to_excel_string + IMPORTING + !ip_value TYPE t + RETURNING + VALUE(ep_value) TYPE zexcel_cell_value . + TYPE-POOLS abap . + TYPES: t_char10 TYPE c LENGTH 10. + CLASS-METHODS split_file + IMPORTING + !ip_file TYPE text255 + EXPORTING + !ep_file TYPE text255 + !ep_extension TYPE t_char10 + !ep_dotextension TYPE t_char10 . + CLASS-METHODS calculate_cell_distance + IMPORTING + !iv_reference_cell TYPE clike + !iv_current_cell TYPE clike + EXPORTING + !ev_row_difference TYPE i + !ev_col_difference TYPE i + RAISING + zcx_excel . + CLASS-METHODS determine_resulting_formula + IMPORTING + !iv_reference_cell TYPE clike + !iv_reference_formula TYPE clike + !iv_current_cell TYPE clike + RETURNING + VALUE(ev_resulting_formula) TYPE string + RAISING + zcx_excel . + CLASS-METHODS shift_formula + IMPORTING + !iv_reference_formula TYPE clike + VALUE(iv_shift_cols) TYPE i + VALUE(iv_shift_rows) TYPE i + RETURNING + VALUE(ev_resulting_formula) TYPE string + RAISING + zcx_excel . + CLASS-METHODS is_cell_in_range + IMPORTING + !ip_column TYPE simple + !ip_row TYPE zexcel_cell_row + !ip_range TYPE clike + RETURNING + VALUE(rp_in_range) TYPE abap_bool + RAISING + zcx_excel . *"* protected components of class ZCL_EXCEL_COMMON *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_COMMON *"* do not include other source files here!!! -protected section. -private section. - - class-data C_EXCEL_COL_MODULE type INT2 value 64. "#EC NOTEXT . . . . . . . . . . . . . . . " . - - class-methods STRUCTURE_CASE - importing - !IS_COMPONENT type ABAP_COMPONENTDESCR - changing - !XT_COMPONENTS type ABAP_COMPONENT_TAB . - class-methods STRUCTURE_RECURSIVE - importing - !IS_COMPONENT type ABAP_COMPONENTDESCR - returning - value(RT_COMPONENTS) type ABAP_COMPONENT_TAB . - class-methods CHAR2HEX - importing - !I_CHAR type CHAR1 - returning - value(R_HEX) type ZEXCEL_PWD_HASH . - class-methods SHL01 - importing - !I_PWD_HASH type ZEXCEL_PWD_HASH - returning - value(R_PWD_HASH) type ZEXCEL_PWD_HASH . - class-methods SHR14 - importing - !I_PWD_HASH type ZEXCEL_PWD_HASH - returning - value(R_PWD_HASH) type ZEXCEL_PWD_HASH . + PROTECTED SECTION. + PRIVATE SECTION. + + CLASS-DATA c_excel_col_module TYPE int2 VALUE 64. "#EC NOTEXT . . . . . . . . . . . . . . . " . + + CLASS-METHODS structure_case + IMPORTING + !is_component TYPE abap_componentdescr + CHANGING + !xt_components TYPE abap_component_tab . + CLASS-METHODS structure_recursive + IMPORTING + !is_component TYPE abap_componentdescr + RETURNING + VALUE(rt_components) TYPE abap_component_tab . + CLASS-METHODS char2hex + IMPORTING + !i_char TYPE char1 + RETURNING + VALUE(r_hex) TYPE zexcel_pwd_hash . + CLASS-METHODS shl01 + IMPORTING + !i_pwd_hash TYPE zexcel_pwd_hash + RETURNING + VALUE(r_pwd_hash) TYPE zexcel_pwd_hash . + CLASS-METHODS shr14 + IMPORTING + !i_pwd_hash TYPE zexcel_pwd_hash + RETURNING + VALUE(r_pwd_hash) TYPE zexcel_pwd_hash . ENDCLASS. -CLASS ZCL_EXCEL_COMMON IMPLEMENTATION. +CLASS zcl_excel_common IMPLEMENTATION. -METHOD calculate_cell_distance. + METHOD calculate_cell_distance. - DATA: lv_reference_row TYPE i, - lv_reference_col_alpha TYPE zexcel_cell_column_alpha, - lv_reference_col TYPE i, - lv_current_row TYPE i, - lv_current_col_alpha TYPE zexcel_cell_column_alpha, - lv_current_col TYPE i. + DATA: lv_reference_row TYPE i, + lv_reference_col_alpha TYPE zexcel_cell_column_alpha, + lv_reference_col TYPE i, + lv_current_row TYPE i, + lv_current_col_alpha TYPE zexcel_cell_column_alpha, + lv_current_col TYPE i. *--------------------------------------------------------------------* * Split reference cell into numerical row/column representation *--------------------------------------------------------------------* - convert_columnrow2column_a_row( EXPORTING - i_columnrow = iv_reference_cell - IMPORTING - e_column = lv_reference_col_alpha - e_row = lv_reference_row ). - lv_reference_col = convert_column2int( lv_reference_col_alpha ). + convert_columnrow2column_a_row( EXPORTING + i_columnrow = iv_reference_cell + IMPORTING + e_column = lv_reference_col_alpha + e_row = lv_reference_row ). + lv_reference_col = convert_column2int( lv_reference_col_alpha ). *--------------------------------------------------------------------* * Split current cell into numerical row/column representation *--------------------------------------------------------------------* - convert_columnrow2column_a_row( EXPORTING - i_columnrow = iv_current_cell - IMPORTING - e_column = lv_current_col_alpha - e_row = lv_current_row ). - lv_current_col = convert_column2int( lv_current_col_alpha ). + convert_columnrow2column_a_row( EXPORTING + i_columnrow = iv_current_cell + IMPORTING + e_column = lv_current_col_alpha + e_row = lv_current_row ). + lv_current_col = convert_column2int( lv_current_col_alpha ). *--------------------------------------------------------------------* * Calculate row and column difference @@ -247,88 +247,88 @@ METHOD calculate_cell_distance. * Negative: Current cell above reference cell * or Current cell left of reference cell *--------------------------------------------------------------------* - ev_row_difference = lv_current_row - lv_reference_row. - ev_col_difference = lv_current_col - lv_reference_col. + ev_row_difference = lv_current_row - lv_reference_row. + ev_col_difference = lv_current_col - lv_reference_col. -ENDMETHOD. + ENDMETHOD. -method CHAR2HEX. + METHOD char2hex. - IF o_conv IS NOT BOUND. - o_conv = cl_abap_conv_out_ce=>create( endian = 'L' - ignore_cerr = abap_true - replacement = '#' ). - ENDIF. + IF o_conv IS NOT BOUND. + o_conv = cl_abap_conv_out_ce=>create( endian = 'L' + ignore_cerr = abap_true + replacement = '#' ). + ENDIF. - CALL METHOD o_conv->reset( ). - CALL METHOD o_conv->write( data = i_char ). - r_hex+1 = o_conv->get_buffer( ). " x'65' must be x'0065' + CALL METHOD o_conv->reset( ). + CALL METHOD o_conv->write( data = i_char ). + r_hex+1 = o_conv->get_buffer( ). " x'65' must be x'0065' -endmethod. + ENDMETHOD. -METHOD class_constructor. - c_xlsx_file_filter = 'Excel Workbook (*.xlsx)|*.xlsx|'(005). -ENDMETHOD. + METHOD class_constructor. + c_xlsx_file_filter = 'Excel Workbook (*.xlsx)|*.xlsx|'(005). + ENDMETHOD. -METHOD convert_column2alpha. + METHOD convert_column2alpha. - DATA: lv_uccpi TYPE i, - lv_text TYPE sychar02, - lv_module TYPE int4, - lv_column TYPE zexcel_cell_column. + DATA: lv_uccpi TYPE i, + lv_text TYPE sychar02, + lv_module TYPE int4, + lv_column TYPE zexcel_cell_column. - STATICS: sv_prev_in LIKE lv_column, - sv_prev_out LIKE ep_column. + STATICS: sv_prev_in LIKE lv_column, + sv_prev_out LIKE ep_column. * Propagate zcx_excel if error occurs " issue #155 - less restrictive typing for ip_column - lv_column = convert_column2int( ip_column ). " issue #155 - less restrictive typing for ip_column + lv_column = convert_column2int( ip_column ). " issue #155 - less restrictive typing for ip_column *--------------------------------------------------------------------* * Check whether column is in allowed range for EXCEL to handle ( 1-16384 ) *--------------------------------------------------------------------* - IF lv_column > 16384 - OR lv_column < 1. - zcx_excel=>raise_text( 'Index out of bounds' ). - ENDIF. + IF lv_column > 16384 + OR lv_column < 1. + zcx_excel=>raise_text( 'Index out of bounds' ). + ENDIF. *--------------------------------------------------------------------* * Look up for previous succesfull cached result *--------------------------------------------------------------------* - IF lv_column = sv_prev_in AND sv_prev_out IS NOT INITIAL. - ep_column = sv_prev_out. - RETURN. - ELSE. - CLEAR sv_prev_out. - sv_prev_in = lv_column. - ENDIF. + IF lv_column = sv_prev_in AND sv_prev_out IS NOT INITIAL. + ep_column = sv_prev_out. + RETURN. + ELSE. + CLEAR sv_prev_out. + sv_prev_in = lv_column. + ENDIF. *--------------------------------------------------------------------* * Build alpha representation of column *--------------------------------------------------------------------* - WHILE lv_column GT 0. + WHILE lv_column GT 0. - lv_module = ( lv_column - 1 ) MOD 26. - lv_uccpi = 65 + lv_module. + lv_module = ( lv_column - 1 ) MOD 26. + lv_uccpi = 65 + lv_module. - lv_column = ( lv_column - lv_module ) / 26. + lv_column = ( lv_column - lv_module ) / 26. - lv_text = cl_abap_conv_in_ce=>uccpi( lv_uccpi ). - CONCATENATE lv_text ep_column INTO ep_column. + lv_text = cl_abap_conv_in_ce=>uccpi( lv_uccpi ). + CONCATENATE lv_text ep_column INTO ep_column. - ENDWHILE. + ENDWHILE. *--------------------------------------------------------------------* * Save succesfull output into cache *--------------------------------------------------------------------* - sv_prev_out = ep_column. + sv_prev_out = ep_column. -ENDMETHOD. + ENDMETHOD. -METHOD convert_column2int. + METHOD convert_column2int. *--------------------------------------------------------------------* * issue #230 - Pimp my Code @@ -349,14 +349,14 @@ METHOD convert_column2int. * illegal characters like german umlauts *--------------------------------------------------------------------* - DATA: lv_column TYPE zexcel_cell_column_alpha, - lv_column_c TYPE char10, - lv_column_s TYPE string, - lv_errormessage TYPE string, " Can't pass '...'(abc) to exception-class - lv_modulo TYPE i. + DATA: lv_column TYPE zexcel_cell_column_alpha, + lv_column_c TYPE char10, + lv_column_s TYPE string, + lv_errormessage TYPE string, " Can't pass '...'(abc) to exception-class + lv_modulo TYPE i. - STATICS: sv_prev_in LIKE lv_column_c, - sv_prev_out LIKE ep_column. + STATICS: sv_prev_in LIKE lv_column_c, + sv_prev_out LIKE ep_column. *--------------------------------------------------------------------* * This module tries to identify which column a user wants to access * Numbers as input are just passed back, anything else will be converted @@ -366,135 +366,135 @@ METHOD convert_column2int. *--------------------------------------------------------------------* * Normalize input ( upper case , no gaps ) *--------------------------------------------------------------------* - lv_column_c = ip_column. + lv_column_c = ip_column. * TRANSLATE lv_column TO UPPER CASE. " Fix #246 - TRANSLATE lv_column_c TO UPPER CASE. " Fix #246 - CONDENSE lv_column_c NO-GAPS. - IF lv_column_c EQ ''. + TRANSLATE lv_column_c TO UPPER CASE. " Fix #246 + CONDENSE lv_column_c NO-GAPS. + IF lv_column_c EQ ''. * lv_errormessage = 'Unable to interpret input as column'(003). - MESSAGE e800(zabap2xlsx) INTO lv_errormessage. - zcx_excel=>raise_symsg( ). - ENDIF. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + zcx_excel=>raise_symsg( ). + ENDIF. *--------------------------------------------------------------------* * Look up for previous succesfull cached result *--------------------------------------------------------------------* - IF lv_column_c = sv_prev_in AND sv_prev_out IS NOT INITIAL. - ep_column = sv_prev_out. - RETURN. - ELSE. - CLEAR sv_prev_out. - sv_prev_in = lv_column_c. - ENDIF. + IF lv_column_c = sv_prev_in AND sv_prev_out IS NOT INITIAL. + ep_column = sv_prev_out. + RETURN. + ELSE. + CLEAR sv_prev_out. + sv_prev_in = lv_column_c. + ENDIF. *--------------------------------------------------------------------* * If a number gets passed, just convert it to an integer and return * the converted value *--------------------------------------------------------------------* - TRY. - IF lv_column_c CO '1234567890 '. " Fix #164 - ep_column = lv_column_c. " Fix #164 + TRY. + IF lv_column_c CO '1234567890 '. " Fix #164 + ep_column = lv_column_c. " Fix #164 *--------------------------------------------------------------------* * Maximum column for EXCEL: XFD = 16384 " if anyone has a reference for this information - please add here instead of this comment *--------------------------------------------------------------------* - IF ep_column > 16384 OR ep_column < 1. - lv_errormessage = 'Index out of bounds'(004). - zcx_excel=>raise_text( lv_errormessage ). + IF ep_column > 16384 OR ep_column < 1. + lv_errormessage = 'Index out of bounds'(004). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. + EXIT. ENDIF. - EXIT. - ENDIF. - CATCH cx_sy_conversion_no_number. "#EC NO_HANDLER - " Try the character-approach if approach via number has failed - ENDTRY. + CATCH cx_sy_conversion_no_number. "#EC NO_HANDLER + " Try the character-approach if approach via number has failed + ENDTRY. *--------------------------------------------------------------------* * Raise error if unexpected characters turns up *--------------------------------------------------------------------* - lv_column_s = lv_column_c. - IF lv_column_s CN sy-abcde. + lv_column_s = lv_column_c. + IF lv_column_s CN sy-abcde. * lv_errormessage = 'Unable to interpret input as column'(003). - MESSAGE e800(zabap2xlsx) INTO lv_errormessage. - zcx_excel=>raise_symsg( ). - ENDIF. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + zcx_excel=>raise_symsg( ). + ENDIF. - DO 1 TIMES. "Because of using CHECK + DO 1 TIMES. "Because of using CHECK *--------------------------------------------------------------------* * Interpret input as number to base 26 with A=1, ... Z=26 * Raise error if unexpected character turns up *--------------------------------------------------------------------* * 1st character *--------------------------------------------------------------------* - lv_column = lv_column_c. - lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+0(1) ) MOD zcl_excel_common=>c_excel_col_module. - IF lv_modulo < 1 OR lv_modulo > 26. + lv_column = lv_column_c. + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+0(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. * lv_errormessage = 'Unable to interpret input as column'(003). - MESSAGE e800(zabap2xlsx) INTO lv_errormessage. - zcx_excel=>raise_symsg( ). - ENDIF. - ep_column = lv_modulo. " Leftmost digit + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + zcx_excel=>raise_symsg( ). + ENDIF. + ep_column = lv_modulo. " Leftmost digit *--------------------------------------------------------------------* * 2nd character if present *--------------------------------------------------------------------* - CHECK lv_column+1(1) IS NOT INITIAL. " No need to continue if string ended - lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+1(1) ) MOD zcl_excel_common=>c_excel_col_module. - IF lv_modulo < 1 OR lv_modulo > 26. + CHECK lv_column+1(1) IS NOT INITIAL. " No need to continue if string ended + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+1(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. * lv_errormessage = 'Unable to interpret input as column'(003). - MESSAGE e800(zabap2xlsx) INTO lv_errormessage. - zcx_excel=>raise_symsg( ). - ENDIF. - ep_column = 26 * ep_column + lv_modulo. " if second digit is present first digit is for 26^1 + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + zcx_excel=>raise_symsg( ). + ENDIF. + ep_column = 26 * ep_column + lv_modulo. " if second digit is present first digit is for 26^1 *--------------------------------------------------------------------* * 3rd character if present *--------------------------------------------------------------------* - CHECK lv_column+2(1) IS NOT INITIAL. " No need to continue if string ended - lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+2(1) ) MOD zcl_excel_common=>c_excel_col_module. - IF lv_modulo < 1 OR lv_modulo > 26. + CHECK lv_column+2(1) IS NOT INITIAL. " No need to continue if string ended + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+2(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. * lv_errormessage = 'Unable to interpret input as column'(003). - MESSAGE e800(zabap2xlsx) INTO lv_errormessage. - zcx_excel=>raise_symsg( ). - ENDIF. - ep_column = 26 * ep_column + lv_modulo. " if third digit is present first digit is for 26^2 and second digit for 26^1 - ENDDO. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + zcx_excel=>raise_symsg( ). + ENDIF. + ep_column = 26 * ep_column + lv_modulo. " if third digit is present first digit is for 26^2 and second digit for 26^1 + ENDDO. *--------------------------------------------------------------------* * Maximum column for EXCEL: XFD = 16384 " if anyone has a reference for this information - please add here instead of this comment *--------------------------------------------------------------------* - IF ep_column > 16384 OR ep_column < 1. - lv_errormessage = 'Index out of bounds'(004). - zcx_excel=>raise_text( lv_errormessage ). - ENDIF. + IF ep_column > 16384 OR ep_column < 1. + lv_errormessage = 'Index out of bounds'(004). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. *--------------------------------------------------------------------* * Save succesfull output into cache *--------------------------------------------------------------------* - sv_prev_out = ep_column. + sv_prev_out = ep_column. -ENDMETHOD. + ENDMETHOD. -method CONVERT_COLUMNROW2COLUMN_A_ROW. + METHOD convert_columnrow2column_a_row. *--------------------------------------------------------------------* - "issue #256 - replacing char processing with regex + "issue #256 - replacing char processing with regex *--------------------------------------------------------------------* * Stefan Schmoecker, 2013-08-11 * Allow input to be CLIKE instead of STRING *--------------------------------------------------------------------* - DATA: pane_cell_row_a TYPE string, - lv_columnrow type string. + DATA: pane_cell_row_a TYPE string, + lv_columnrow TYPE string. - lv_columnrow = i_columnrow. " Get rid of trailing blanks + lv_columnrow = i_columnrow. " Get rid of trailing blanks - FIND REGEX '^(\D+)(\d+)$' IN lv_columnrow SUBMATCHES e_column - pane_cell_row_a. - e_row = pane_cell_row_a. + FIND REGEX '^(\D+)(\d+)$' IN lv_columnrow SUBMATCHES e_column + pane_cell_row_a. + e_row = pane_cell_row_a. -endmethod. + ENDMETHOD. -method CONVERT_RANGE2COLUMN_A_ROW. + METHOD convert_range2column_a_row. *--------------------------------------------------------------------* * issue #230 - Pimp my Code * - Stefan Schmoecker, (done) 2012-12-07 @@ -517,11 +517,11 @@ method CONVERT_RANGE2COLUMN_A_ROW. * e_sheet changed to clike *--------------------------------------------------------------------* - DATA: lv_sheet TYPE string, - lv_range TYPE string, - lv_columnrow_start TYPE string, - lv_columnrow_end TYPE string, - lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + DATA: lv_sheet TYPE string, + lv_range TYPE string, + lv_columnrow_start TYPE string, + lv_columnrow_end TYPE string, + lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class *--------------------------------------------------------------------* @@ -532,188 +532,188 @@ method CONVERT_RANGE2COLUMN_A_ROW. * - d) no sheetname - just area example $B$6:$D$13 *--------------------------------------------------------------------* * Initialize output parameters - CLEAR: e_column_start, - e_column_end, - e_row_start, - e_row_end, - e_sheet. - - IF i_range IS INITIAL. " a) input empty --> nothing to do - EXIT. - - ELSEIF i_range(1) = `'`. " b) sheetname existing - starts with ' - FIND REGEX '\![^\!]*$' IN i_range MATCH OFFSET sy-fdpos. " Find last ! - IF sy-subrc = 0. - lv_sheet = i_range(sy-fdpos). - ADD 1 TO sy-fdpos. - lv_range = i_range. - SHIFT lv_range LEFT BY sy-fdpos PLACES. - ELSE. - lv_errormessage = 'Invalid range'(001). - zcx_excel=>raise_text( lv_errormessage ). - ENDIF. + CLEAR: e_column_start, + e_column_end, + e_row_start, + e_row_end, + e_sheet. + + IF i_range IS INITIAL. " a) input empty --> nothing to do + EXIT. + + ELSEIF i_range(1) = `'`. " b) sheetname existing - starts with ' + FIND REGEX '\![^\!]*$' IN i_range MATCH OFFSET sy-fdpos. " Find last ! + IF sy-subrc = 0. + lv_sheet = i_range(sy-fdpos). + ADD 1 TO sy-fdpos. + lv_range = i_range. + SHIFT lv_range LEFT BY sy-fdpos PLACES. + ELSE. + lv_errormessage = 'Invalid range'(001). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. - ELSEIF i_range CS '!'. " c) sheetname existing - does not start with ' - SPLIT i_range AT '!' INTO lv_sheet lv_range. + ELSEIF i_range CS '!'. " c) sheetname existing - does not start with ' + SPLIT i_range AT '!' INTO lv_sheet lv_range. " begin Dennis Schaaf IF lv_range CP '*#REF*'. lv_errormessage = 'Invalid range'(001). zcx_excel=>raise_text( lv_errormessage ). ENDIF. " end Dennis Schaaf - ELSE. " d) no sheetname - just area - lv_range = i_range. - ENDIF. - - REPLACE ALL OCCURRENCES OF '$' IN lv_range WITH ''. - SPLIT lv_range AT ':' INTO lv_columnrow_start lv_columnrow_end. - - convert_columnrow2column_a_row( EXPORTING - i_columnrow = lv_columnrow_start - IMPORTING - e_column = e_column_start - e_row = e_row_start ). - convert_columnrow2column_a_row( EXPORTING - i_columnrow = lv_columnrow_end - IMPORTING - e_column = e_column_end - e_row = e_row_end ). - - e_sheet = unescape_string( lv_sheet ). " Return in unescaped form -endmethod. - - -method DATE_TO_EXCEL_STRING. - DATA: lv_date_diff TYPE i. - - CHECK ip_value IS NOT INITIAL - AND ip_value <> space. - " Needed hack caused by the problem that: - " Excel 2000 incorrectly assumes that the year 1900 is a leap year - " http://support.microsoft.com/kb/214326/en-us - IF ip_value > c_excel_1900_leap_year. - lv_date_diff = ip_value - c_excel_baseline_date + 2. - ELSE. - lv_date_diff = ip_value - c_excel_baseline_date + 1. - ENDIF. - ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_date_diff ). -endmethod. - - -method DESCRIBE_STRUCTURE. - DATA: lt_components TYPE abap_component_tab, - lt_comps TYPE abap_component_tab, - ls_component TYPE abap_componentdescr, - lo_elemdescr TYPE REF TO cl_abap_elemdescr, - ls_dfies TYPE dfies, - l_position TYPE tabfdpos. - - "for DDIC structure get the info directly - IF io_struct->is_ddic_type( ) = abap_true. - rt_dfies = io_struct->get_ddic_field_list( ). - ELSE. - lt_components = io_struct->get_components( ). - - LOOP AT lt_components INTO ls_component. - structure_case( EXPORTING is_component = ls_component - CHANGING xt_components = lt_comps ) . - ENDLOOP. - LOOP AT lt_comps INTO ls_component. - CLEAR ls_dfies. - IF ls_component-type->kind = cl_abap_typedescr=>kind_elem. "E Elementary Type - ADD 1 TO l_position. - lo_elemdescr ?= ls_component-type. - IF lo_elemdescr->is_ddic_type( ) = abap_true. - ls_dfies = lo_elemdescr->get_ddic_field( ). - ls_dfies-fieldname = ls_component-name. - ls_dfies-position = l_position. - ELSE. - ls_dfies-fieldname = ls_component-name. - ls_dfies-position = l_position. - ls_dfies-inttype = lo_elemdescr->type_kind. - ls_dfies-leng = lo_elemdescr->length. - ls_dfies-outputlen = lo_elemdescr->length. - ls_dfies-decimals = lo_elemdescr->decimals. - ls_dfies-fieldtext = ls_component-name. - ls_dfies-reptext = ls_component-name. - ls_dfies-scrtext_s = ls_component-name. - ls_dfies-scrtext_m = ls_component-name. - ls_dfies-scrtext_l = ls_component-name. - ls_dfies-dynpfld = abap_true. + ELSE. " d) no sheetname - just area + lv_range = i_range. + ENDIF. + + REPLACE ALL OCCURRENCES OF '$' IN lv_range WITH ''. + SPLIT lv_range AT ':' INTO lv_columnrow_start lv_columnrow_end. + + convert_columnrow2column_a_row( EXPORTING + i_columnrow = lv_columnrow_start + IMPORTING + e_column = e_column_start + e_row = e_row_start ). + convert_columnrow2column_a_row( EXPORTING + i_columnrow = lv_columnrow_end + IMPORTING + e_column = e_column_end + e_row = e_row_end ). + + e_sheet = unescape_string( lv_sheet ). " Return in unescaped form + ENDMETHOD. + + + METHOD date_to_excel_string. + DATA: lv_date_diff TYPE i. + + CHECK ip_value IS NOT INITIAL + AND ip_value <> space. + " Needed hack caused by the problem that: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year + " http://support.microsoft.com/kb/214326/en-us + IF ip_value > c_excel_1900_leap_year. + lv_date_diff = ip_value - c_excel_baseline_date + 2. + ELSE. + lv_date_diff = ip_value - c_excel_baseline_date + 1. + ENDIF. + ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_date_diff ). + ENDMETHOD. + + + METHOD describe_structure. + DATA: lt_components TYPE abap_component_tab, + lt_comps TYPE abap_component_tab, + ls_component TYPE abap_componentdescr, + lo_elemdescr TYPE REF TO cl_abap_elemdescr, + ls_dfies TYPE dfies, + l_position TYPE tabfdpos. + + "for DDIC structure get the info directly + IF io_struct->is_ddic_type( ) = abap_true. + rt_dfies = io_struct->get_ddic_field_list( ). + ELSE. + lt_components = io_struct->get_components( ). + + LOOP AT lt_components INTO ls_component. + structure_case( EXPORTING is_component = ls_component + CHANGING xt_components = lt_comps ) . + ENDLOOP. + LOOP AT lt_comps INTO ls_component. + CLEAR ls_dfies. + IF ls_component-type->kind = cl_abap_typedescr=>kind_elem. "E Elementary Type + ADD 1 TO l_position. + lo_elemdescr ?= ls_component-type. + IF lo_elemdescr->is_ddic_type( ) = abap_true. + ls_dfies = lo_elemdescr->get_ddic_field( ). + ls_dfies-fieldname = ls_component-name. + ls_dfies-position = l_position. + ELSE. + ls_dfies-fieldname = ls_component-name. + ls_dfies-position = l_position. + ls_dfies-inttype = lo_elemdescr->type_kind. + ls_dfies-leng = lo_elemdescr->length. + ls_dfies-outputlen = lo_elemdescr->length. + ls_dfies-decimals = lo_elemdescr->decimals. + ls_dfies-fieldtext = ls_component-name. + ls_dfies-reptext = ls_component-name. + ls_dfies-scrtext_s = ls_component-name. + ls_dfies-scrtext_m = ls_component-name. + ls_dfies-scrtext_l = ls_component-name. + ls_dfies-dynpfld = abap_true. + ENDIF. + INSERT ls_dfies INTO TABLE rt_dfies. ENDIF. - INSERT ls_dfies INTO TABLE rt_dfies. - ENDIF. - ENDLOOP. - ENDIF. -endmethod. + ENDLOOP. + ENDIF. + ENDMETHOD. -METHOD determine_resulting_formula. + METHOD determine_resulting_formula. - DATA: lv_row_difference TYPE i, - lv_col_difference TYPE i. + DATA: lv_row_difference TYPE i, + lv_col_difference TYPE i. *--------------------------------------------------------------------* * Calculate distance of reference and current cell *--------------------------------------------------------------------* - calculate_cell_distance( EXPORTING - iv_reference_cell = iv_reference_cell - iv_current_cell = iv_current_cell - IMPORTING - ev_row_difference = lv_row_difference - ev_col_difference = lv_col_difference ). + calculate_cell_distance( EXPORTING + iv_reference_cell = iv_reference_cell + iv_current_cell = iv_current_cell + IMPORTING + ev_row_difference = lv_row_difference + ev_col_difference = lv_col_difference ). *--------------------------------------------------------------------* * and shift formula by using the row- and columndistance *--------------------------------------------------------------------* - ev_resulting_formula = shift_formula( iv_reference_formula = iv_reference_formula - iv_shift_rows = lv_row_difference - iv_shift_cols = lv_col_difference ). + ev_resulting_formula = shift_formula( iv_reference_formula = iv_reference_formula + iv_shift_rows = lv_row_difference + iv_shift_cols = lv_col_difference ). -ENDMETHOD. "determine_resulting_formula + ENDMETHOD. "determine_resulting_formula -method ENCRYPT_PASSWORD. + METHOD encrypt_password. - DATA lv_curr_offset TYPE i. - DATA lv_curr_char TYPE c LENGTH 1. - DATA lv_curr_hex TYPE zexcel_pwd_hash. - DATA lv_pwd_len TYPE zexcel_pwd_hash. - DATA lv_pwd_hash TYPE zexcel_pwd_hash. + DATA lv_curr_offset TYPE i. + DATA lv_curr_char TYPE c LENGTH 1. + DATA lv_curr_hex TYPE zexcel_pwd_hash. + DATA lv_pwd_len TYPE zexcel_pwd_hash. + DATA lv_pwd_hash TYPE zexcel_pwd_hash. - CONSTANTS: - lv_0x7fff TYPE zexcel_pwd_hash VALUE '7FFF', - lv_0x0001 TYPE zexcel_pwd_hash VALUE '0001', - lv_0xce4b TYPE zexcel_pwd_hash VALUE 'CE4B'. + CONSTANTS: + lv_0x7fff TYPE zexcel_pwd_hash VALUE '7FFF', + lv_0x0001 TYPE zexcel_pwd_hash VALUE '0001', + lv_0xce4b TYPE zexcel_pwd_hash VALUE 'CE4B'. - DATA lv_pwd TYPE zexcel_aes_password. + DATA lv_pwd TYPE zexcel_aes_password. - lv_pwd = i_pwd. + lv_pwd = i_pwd. - lv_pwd_len = STRLEN( lv_pwd ). - lv_curr_offset = lv_pwd_len - 1. + lv_pwd_len = strlen( lv_pwd ). + lv_curr_offset = lv_pwd_len - 1. - WHILE lv_curr_offset GE 0. + WHILE lv_curr_offset GE 0. - lv_curr_char = lv_pwd+lv_curr_offset(1). - lv_curr_hex = char2hex( lv_curr_char ). + lv_curr_char = lv_pwd+lv_curr_offset(1). + lv_curr_hex = char2hex( lv_curr_char ). - lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). - lv_pwd_hash = lv_pwd_hash BIT-XOR lv_curr_hex. - SUBTRACT 1 FROM lv_curr_offset. - ENDWHILE. + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_curr_hex. + SUBTRACT 1 FROM lv_curr_offset. + ENDWHILE. - lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). - lv_pwd_hash = lv_pwd_hash BIT-XOR lv_0xce4b. - lv_pwd_hash = lv_pwd_hash BIT-XOR lv_pwd_len. + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_0xce4b. + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_pwd_len. - WRITE lv_pwd_hash TO r_encrypted_pwd. + WRITE lv_pwd_hash TO r_encrypted_pwd. -endmethod. + ENDMETHOD. -method ESCAPE_STRING. + METHOD escape_string. *--------------------------------------------------------------------* * issue #230 - Pimp my Code * - Stefan Schmoecker, (done) 2012-12-08 @@ -731,7 +731,7 @@ method ESCAPE_STRING. * - Stefan Schmoecker, 2012-12-08 * changes: ip_value changed to clike *--------------------------------------------------------------------* - DATA: lv_value TYPE string. + DATA: lv_value TYPE string. *--------------------------------------------------------------------* * There exist various situations when a space will be used to separate @@ -748,325 +748,325 @@ method ESCAPE_STRING. * Now any remaining spaces ( white-spaces or normal spaces ) should * trigger the escaping as well as any ' *--------------------------------------------------------------------* - lv_value = ip_value. + lv_value = ip_value. - FIND REGEX `\s|'` IN lv_value. " \s finds regular and white spaces - IF sy-subrc = 0. - REPLACE ALL OCCURRENCES OF `'` IN lv_value WITH `''`. - CONCATENATE `'` lv_value `'` INTO lv_value . - ENDIF. + FIND REGEX `\s|'` IN lv_value. " \s finds regular and white spaces + IF sy-subrc = 0. + REPLACE ALL OCCURRENCES OF `'` IN lv_value WITH `''`. + CONCATENATE `'` lv_value `'` INTO lv_value . + ENDIF. - ep_escaped_value = lv_value. + ep_escaped_value = lv_value. -endmethod. + ENDMETHOD. -method EXCEL_STRING_TO_DATE. - DATA: lv_date_int TYPE i. + METHOD excel_string_to_date. + DATA: lv_date_int TYPE i. - TRY. - lv_date_int = ip_value. - ep_value = lv_date_int + c_excel_baseline_date - 2. - " Needed hack caused by the problem that: - " Excel 2000 incorrectly assumes that the year 1900 is a leap year - " http://support.microsoft.com/kb/214326/en-us - IF ep_value < c_excel_1900_leap_year. - ep_value = ep_value + 1. - ENDIF. - CATCH cx_sy_conversion_error. - zcx_excel=>raise_text( 'Index out of bounds' ). - ENDTRY. -endmethod. + TRY. + lv_date_int = ip_value. + ep_value = lv_date_int + c_excel_baseline_date - 2. + " Needed hack caused by the problem that: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year + " http://support.microsoft.com/kb/214326/en-us + IF ep_value < c_excel_1900_leap_year. + ep_value = ep_value + 1. + ENDIF. + CATCH cx_sy_conversion_error. + zcx_excel=>raise_text( 'Index out of bounds' ). + ENDTRY. + ENDMETHOD. -method EXCEL_STRING_TO_NUMBER. + METHOD excel_string_to_number. * If we encounter anything more complicated in EXCEL we might have to extend this * But currently this works fine - even for numbers in scientific notation - ep_value = ip_value. + ep_value = ip_value. -endmethod. + ENDMETHOD. -method EXCEL_STRING_TO_TIME. - DATA: lv_seconds_in_day TYPE i, - lv_day_fraction TYPE f, - lc_seconds_in_day TYPE i VALUE 86400. + METHOD excel_string_to_time. + DATA: lv_seconds_in_day TYPE i, + lv_day_fraction TYPE f, + lc_seconds_in_day TYPE i VALUE 86400. - TRY. + TRY. - lv_day_fraction = ip_value. - lv_seconds_in_day = lv_day_fraction * lc_seconds_in_day. + lv_day_fraction = ip_value. + lv_seconds_in_day = lv_day_fraction * lc_seconds_in_day. - ep_value = lv_seconds_in_day. + ep_value = lv_seconds_in_day. - CATCH cx_sy_conversion_error. - zcx_excel=>raise_text( 'Unable to interpret time' ). - ENDTRY. -endmethod. + CATCH cx_sy_conversion_error. + zcx_excel=>raise_text( 'Unable to interpret time' ). + ENDTRY. + ENDMETHOD. -METHOD get_fieldcatalog. - DATA: lr_dref_tab TYPE REF TO data, - lo_salv_table TYPE REF TO cl_salv_table, - lo_salv_columns_table TYPE REF TO cl_salv_columns_table, - lt_salv_t_column_ref TYPE salv_t_column_ref, - ls_salv_t_column_ref LIKE LINE OF lt_salv_t_column_ref, - lo_salv_column_table TYPE REF TO cl_salv_column_table. + METHOD get_fieldcatalog. + DATA: lr_dref_tab TYPE REF TO data, + lo_salv_table TYPE REF TO cl_salv_table, + lo_salv_columns_table TYPE REF TO cl_salv_columns_table, + lt_salv_t_column_ref TYPE salv_t_column_ref, + ls_salv_t_column_ref LIKE LINE OF lt_salv_t_column_ref, + lo_salv_column_table TYPE REF TO cl_salv_column_table. - FIELD-SYMBOLS: TYPE STANDARD TABLE. - FIELD-SYMBOLS: LIKE LINE OF ep_fieldcatalog. + FIELD-SYMBOLS: TYPE STANDARD TABLE. + FIELD-SYMBOLS: LIKE LINE OF ep_fieldcatalog. * Get copy of IP_TABLE-structure <-- must be changeable to create salv - CREATE DATA lr_dref_tab LIKE ip_table. - ASSIGN lr_dref_tab->* TO . + CREATE DATA lr_dref_tab LIKE ip_table. + ASSIGN lr_dref_tab->* TO . * Create salv --> implicitly create fieldcat - TRY. - cl_salv_table=>factory( IMPORTING - r_salv_table = lo_salv_table - CHANGING - t_table = ). - lo_salv_columns_table = lo_salv_table->get_columns( ). - lt_salv_t_column_ref = lo_salv_columns_table->get( ). - CATCH cx_root. + TRY. + cl_salv_table=>factory( IMPORTING + r_salv_table = lo_salv_table + CHANGING + t_table = ). + lo_salv_columns_table = lo_salv_table->get_columns( ). + lt_salv_t_column_ref = lo_salv_columns_table->get( ). + CATCH cx_root. * maybe some errorhandling here - just haven't made up my mind yet - ENDTRY. + ENDTRY. * Loop through columns and set relevant fields ( fieldname, texts ) - LOOP AT lt_salv_t_column_ref INTO ls_salv_t_column_ref. - - lo_salv_column_table ?= ls_salv_t_column_ref-r_column. - APPEND INITIAL LINE TO ep_fieldcatalog ASSIGNING . - -position = sy-tabix. - -fieldname = ls_salv_t_column_ref-columnname. - -scrtext_s = ls_salv_t_column_ref-r_column->get_short_text( ). - -scrtext_m = ls_salv_t_column_ref-r_column->get_medium_text( ). - -scrtext_l = ls_salv_t_column_ref-r_column->get_long_text( ). - -abap_type = lo_salv_column_table->get_ddic_inttype( ). - - -dynpfld = 'X'. " What in the world would we exclude here? - " except for the MANDT-field of most tables ( 1st column that is ) - IF -position = 1 AND lo_salv_column_table->get_ddic_datatype( ) = 'CLNT' AND iv_hide_mandt = abap_true. - CLEAR -dynpfld. - ENDIF. + LOOP AT lt_salv_t_column_ref INTO ls_salv_t_column_ref. + + lo_salv_column_table ?= ls_salv_t_column_ref-r_column. + APPEND INITIAL LINE TO ep_fieldcatalog ASSIGNING . + -position = sy-tabix. + -fieldname = ls_salv_t_column_ref-columnname. + -scrtext_s = ls_salv_t_column_ref-r_column->get_short_text( ). + -scrtext_m = ls_salv_t_column_ref-r_column->get_medium_text( ). + -scrtext_l = ls_salv_t_column_ref-r_column->get_long_text( ). + -abap_type = lo_salv_column_table->get_ddic_inttype( ). + + -dynpfld = 'X'. " What in the world would we exclude here? + " except for the MANDT-field of most tables ( 1st column that is ) + IF -position = 1 AND lo_salv_column_table->get_ddic_datatype( ) = 'CLNT' AND iv_hide_mandt = abap_true. + CLEAR -dynpfld. + ENDIF. * For fields that don't a description ( i.e. defined by "field type i," ) * just use the fieldname as description - that is better than nothing - IF -scrtext_s IS INITIAL - AND -scrtext_m IS INITIAL - AND -scrtext_l IS INITIAL. - CONCATENATE 'Col:' -fieldname INTO -scrtext_l SEPARATED BY space. - -scrtext_m = -scrtext_l. - -scrtext_s = -scrtext_l. - ENDIF. + IF -scrtext_s IS INITIAL + AND -scrtext_m IS INITIAL + AND -scrtext_l IS INITIAL. + CONCATENATE 'Col:' -fieldname INTO -scrtext_l SEPARATED BY space. + -scrtext_m = -scrtext_l. + -scrtext_s = -scrtext_l. + ENDIF. - ENDLOOP. + ENDLOOP. -ENDMETHOD. + ENDMETHOD. -method IS_CELL_IN_RANGE. - DATA lv_column_start TYPE zexcel_cell_column_alpha. - DATA lv_column_end TYPE zexcel_cell_column_alpha. - DATA lv_row_start TYPE zexcel_cell_row. - DATA lv_row_end TYPE zexcel_cell_row. - DATA lv_column_start_i TYPE zexcel_cell_column. - DATA lv_column_end_i TYPE zexcel_cell_column. - DATA lv_column_i TYPE zexcel_cell_column. + METHOD is_cell_in_range. + DATA lv_column_start TYPE zexcel_cell_column_alpha. + DATA lv_column_end TYPE zexcel_cell_column_alpha. + DATA lv_row_start TYPE zexcel_cell_row. + DATA lv_row_end TYPE zexcel_cell_row. + DATA lv_column_start_i TYPE zexcel_cell_column. + DATA lv_column_end_i TYPE zexcel_cell_column. + DATA lv_column_i TYPE zexcel_cell_column. * Split range and convert columns - convert_range2column_a_row( - exporting - i_range = ip_range - IMPORTING - e_column_start = lv_column_start - e_column_end = lv_column_end - e_row_start = lv_row_start - e_row_end = lv_row_end ). + convert_range2column_a_row( + EXPORTING + i_range = ip_range + IMPORTING + e_column_start = lv_column_start + e_column_end = lv_column_end + e_row_start = lv_row_start + e_row_end = lv_row_end ). - lv_column_start_i = convert_column2int( ip_column = lv_column_start ). - lv_column_end_i = convert_column2int( ip_column = lv_column_end ). + lv_column_start_i = convert_column2int( ip_column = lv_column_start ). + lv_column_end_i = convert_column2int( ip_column = lv_column_end ). - lv_column_i = convert_column2int( ip_column = ip_column ). + lv_column_i = convert_column2int( ip_column = ip_column ). * Check if cell is in range - IF lv_column_i >= lv_column_start_i AND - lv_column_i <= lv_column_end_i AND - ip_row >= lv_row_start AND - ip_row <= lv_row_end. - rp_in_range = abap_true. - ENDIF. -endmethod. + IF lv_column_i >= lv_column_start_i AND + lv_column_i <= lv_column_end_i AND + ip_row >= lv_row_start AND + ip_row <= lv_row_end. + rp_in_range = abap_true. + ENDIF. + ENDMETHOD. -method NUMBER_TO_EXCEL_STRING. - DATA: lv_value_c TYPE c LENGTH 100. + METHOD number_to_excel_string. + DATA: lv_value_c TYPE c LENGTH 100. - WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN. - REPLACE ALL OCCURRENCES OF ',' IN lv_value_c WITH '.'. + WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN. + REPLACE ALL OCCURRENCES OF ',' IN lv_value_c WITH '.'. - ep_value = lv_value_c. - CONDENSE ep_value. + ep_value = lv_value_c. + CONDENSE ep_value. - IF ip_value < 0. - CONCATENATE '-' ep_value INTO ep_value. - ELSEIF ip_value EQ 0. - ep_value = '0'. - ENDIF. -endmethod. + IF ip_value < 0. + CONCATENATE '-' ep_value INTO ep_value. + ELSEIF ip_value EQ 0. + ep_value = '0'. + ENDIF. + ENDMETHOD. -method RECURSIVE_CLASS_TO_STRUCT. - " # issue 139 + METHOD recursive_class_to_struct. + " # issue 139 * is working for me - but after looking through this coding I guess * I'll rewrite this to a version w/o recursion * This is private an no one using it so far except me, so no need to hurry - DATA: descr TYPE REF TO cl_abap_structdescr, - wa_component LIKE LINE OF descr->components, - attribute_name TYPE fieldname, - flag_class TYPE flag. + DATA: descr TYPE REF TO cl_abap_structdescr, + wa_component LIKE LINE OF descr->components, + attribute_name TYPE fieldname, + flag_class TYPE flag. - FIELD-SYMBOLS: TYPE any, - TYPE any, - TYPE any. + FIELD-SYMBOLS: TYPE any, + TYPE any, + TYPE any. - descr ?= cl_abap_structdescr=>describe_by_data( e_target ). + descr ?= cl_abap_structdescr=>describe_by_data( e_target ). - LOOP AT descr->components INTO wa_component. + LOOP AT descr->components INTO wa_component. * Assign structure and X-structure - ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO . - ASSIGN COMPONENT wa_component-name OF STRUCTURE e_targetx TO . + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO . + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_targetx TO . * At least one field in the structure should be marked - otherwise continue with next field - CLEAR flag_class. + CLEAR flag_class. * maybe source is just a structure - try assign component... - ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO . - IF sy-subrc <> 0. -* not - then it is an attribute of the class - use different assign then - CONCATENATE 'i_source->' wa_component-name INTO attribute_name. - ASSIGN (attribute_name) TO . + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO . IF sy-subrc <> 0. - EXIT. - ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps - flag_class = abap_true. - ENDIF. +* not - then it is an attribute of the class - use different assign then + CONCATENATE 'i_source->' wa_component-name INTO attribute_name. + ASSIGN (attribute_name) TO . + IF sy-subrc <> 0. + EXIT. + ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps + flag_class = abap_true. + ENDIF. - CASE wa_component-type_kind. - WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursio + CASE wa_component-type_kind. + WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursio * IF flag_class = abap_true. ** Only borders will be passed as unbound references. But since we want to set a value we have to create an instance * ENDIF. - zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = - CHANGING e_target = - e_targetx = ). - WHEN OTHERS. - = . - = abap_true. - - ENDCASE. - ENDLOOP. + zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = + CHANGING e_target = + e_targetx = ). + WHEN OTHERS. + = . + = abap_true. + + ENDCASE. + ENDLOOP. -endmethod. + ENDMETHOD. -METHOD recursive_struct_to_class. - " # issue 139 + METHOD recursive_struct_to_class. + " # issue 139 * is working for me - but after looking through this coding I guess * I'll rewrite this to a version w/o recursion * This is private an no one using it so far except me, so no need to hurry - DATA: descr TYPE REF TO cl_abap_structdescr, - wa_component LIKE LINE OF descr->components, - attribute_name TYPE fieldname, - flag_class TYPE flag, - o_border TYPE REF TO zcl_excel_style_border. + DATA: descr TYPE REF TO cl_abap_structdescr, + wa_component LIKE LINE OF descr->components, + attribute_name TYPE fieldname, + flag_class TYPE flag, + o_border TYPE REF TO zcl_excel_style_border. - FIELD-SYMBOLS: TYPE any, - TYPE any, - TYPE any. + FIELD-SYMBOLS: TYPE any, + TYPE any, + TYPE any. - descr ?= cl_abap_structdescr=>describe_by_data( i_source ). + descr ?= cl_abap_structdescr=>describe_by_data( i_source ). - LOOP AT descr->components INTO wa_component. + LOOP AT descr->components INTO wa_component. * Assign structure and X-structure - ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO . - ASSIGN COMPONENT wa_component-name OF STRUCTURE i_sourcex TO . + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO . + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_sourcex TO . * At least one field in the structure should be marked - otherwise continue with next field - CHECK CA abap_true. - CLEAR flag_class. + CHECK CA abap_true. + CLEAR flag_class. * maybe target is just a structure - try assign component... - ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO . - IF sy-subrc <> 0. + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO . + IF sy-subrc <> 0. * not - then it is an attribute of the class - use different assign then - CONCATENATE 'E_TARGET->' wa_component-name INTO attribute_name. - ASSIGN (attribute_name) TO . - IF sy-subrc <> 0.EXIT.ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps - flag_class = abap_true. - ENDIF. + CONCATENATE 'E_TARGET->' wa_component-name INTO attribute_name. + ASSIGN (attribute_name) TO . + IF sy-subrc <> 0.EXIT.ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps + flag_class = abap_true. + ENDIF. - CASE wa_component-type_kind. - WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursion - " To avoid dump with attribute GRADTYPE of class ZCL_EXCEL_STYLE_FILL - " quick and really dirty fix -> check the attribute name - " Border has to be initialized somewhere else - IF wa_component-name EQ 'GRADTYPE'. - flag_class = abap_false. - ENDIF. + CASE wa_component-type_kind. + WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursion + " To avoid dump with attribute GRADTYPE of class ZCL_EXCEL_STYLE_FILL + " quick and really dirty fix -> check the attribute name + " Border has to be initialized somewhere else + IF wa_component-name EQ 'GRADTYPE'. + flag_class = abap_false. + ENDIF. - IF flag_class = abap_true AND IS INITIAL. + IF flag_class = abap_true AND IS INITIAL. * Only borders will be passed as unbound references. But since we want to set a value we have to create an instance - CREATE OBJECT o_border. - = o_border. - ENDIF. - zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = - i_sourcex = - CHANGING e_target = ). + CREATE OBJECT o_border. + = o_border. + ENDIF. + zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = + i_sourcex = + CHANGING e_target = ). * WHEN cl_abap_structdescr=>typekind_struct2. " String * CHECK = abap_true. " Marked for change * = . - WHEN OTHERS. - CHECK = abap_true. " Marked for change - = . + WHEN OTHERS. + CHECK = abap_true. " Marked for change + = . - ENDCASE. - ENDLOOP. - -ENDMETHOD. - - -METHOD shift_formula. - - CONSTANTS: lcv_operators TYPE string VALUE '+-/*^%=<>&, !', - lcv_letters TYPE string VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ$', - lcv_digits TYPE string VALUE '0123456789', - lcv_cell_reference_error TYPE string VALUE '#REF!'. - - DATA: lv_tcnt TYPE i, " Counter variable - lv_tlen TYPE i, " Temp variable length - lv_cnt TYPE i, " Counter variable - lv_cnt2 TYPE i, " Counter variable - lv_offset1 TYPE i, " Character offset - lv_numchars TYPE i, " Number of characters counter - lv_tchar(1) TYPE c, " Temp character - lv_tchar2(1) TYPE c, " Temp character - lv_cur_form(2000) TYPE c, " Formula for current cell - lv_ref_cell_addr TYPE string, " Reference cell address - lv_tcol1 TYPE string, " Temp column letter - lv_tcol2 TYPE string, " Temp column letter - lv_tcoln TYPE i, " Temp column number - lv_trow1 TYPE string, " Temp row number - lv_trow2 TYPE string, " Temp row number - lv_flen TYPE i, " Length of reference formula - lv_tlen2 TYPE i, " Temp variable length - lv_substr1 TYPE string, " Substring variable - lv_abscol TYPE string, " Absolute column symbol - lv_absrow TYPE string, " Absolute row symbol - - lv_errormessage TYPE string. + ENDCASE. + ENDLOOP. + + ENDMETHOD. + + + METHOD shift_formula. + + CONSTANTS: lcv_operators TYPE string VALUE '+-/*^%=<>&, !', + lcv_letters TYPE string VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ$', + lcv_digits TYPE string VALUE '0123456789', + lcv_cell_reference_error TYPE string VALUE '#REF!'. + + DATA: lv_tcnt TYPE i, " Counter variable + lv_tlen TYPE i, " Temp variable length + lv_cnt TYPE i, " Counter variable + lv_cnt2 TYPE i, " Counter variable + lv_offset1 TYPE i, " Character offset + lv_numchars TYPE i, " Number of characters counter + lv_tchar(1) TYPE c, " Temp character + lv_tchar2(1) TYPE c, " Temp character + lv_cur_form(2000) TYPE c, " Formula for current cell + lv_ref_cell_addr TYPE string, " Reference cell address + lv_tcol1 TYPE string, " Temp column letter + lv_tcol2 TYPE string, " Temp column letter + lv_tcoln TYPE i, " Temp column number + lv_trow1 TYPE string, " Temp row number + lv_trow2 TYPE string, " Temp row number + lv_flen TYPE i, " Length of reference formula + lv_tlen2 TYPE i, " Temp variable length + lv_substr1 TYPE string, " Substring variable + lv_abscol TYPE string, " Absolute column symbol + lv_absrow TYPE string, " Absolute row symbol + + lv_errormessage TYPE string. *--------------------------------------------------------------------* * When copying a cell in EXCEL to another cell any inherent formulas @@ -1082,230 +1082,230 @@ METHOD shift_formula. *--------------------------------------------------------------------* * No distance --> Reference = resulting cell/formula *--------------------------------------------------------------------* - IF iv_shift_cols = 0 - AND iv_shift_rows = 0. - ev_resulting_formula = iv_reference_formula. - EXIT. " done - ENDIF. + IF iv_shift_cols = 0 + AND iv_shift_rows = 0. + ev_resulting_formula = iv_reference_formula. + EXIT. " done + ENDIF. - lv_flen = STRLEN( iv_reference_formula ). - lv_numchars = 1. + lv_flen = strlen( iv_reference_formula ). + lv_numchars = 1. *--------------------------------------------------------------------* * §1 Parse reference formula character by character *--------------------------------------------------------------------* - DO lv_flen TIMES. + DO lv_flen TIMES. - CLEAR: lv_tchar, - lv_substr1, - lv_ref_cell_addr. - lv_cnt2 = lv_cnt + 1. - IF lv_cnt2 > lv_flen. - EXIT. " Done - ENDIF. + CLEAR: lv_tchar, + lv_substr1, + lv_ref_cell_addr. + lv_cnt2 = lv_cnt + 1. + IF lv_cnt2 > lv_flen. + EXIT. " Done + ENDIF. *--------------------------------------------------------------------* * Here we have the current character in the formula *--------------------------------------------------------------------* - lv_tchar = iv_reference_formula+lv_cnt(1). + lv_tchar = iv_reference_formula+lv_cnt(1). *--------------------------------------------------------------------* * Operators or opening parenthesis will separate possible cellreferences *--------------------------------------------------------------------* - IF ( lv_tchar CA lcv_operators - OR lv_tchar CA '(' ) - AND lv_cnt2 = 1. - lv_substr1 = iv_reference_formula+lv_offset1(1). - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_numchars = 1. - CONTINUE. " --> next character in formula can be analyzed - ENDIF. + IF ( lv_tchar CA lcv_operators + OR lv_tchar CA '(' ) + AND lv_cnt2 = 1. + lv_substr1 = iv_reference_formula+lv_offset1(1). + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. *--------------------------------------------------------------------* * Quoted literal text holds no cell reference --> advance to end of text *--------------------------------------------------------------------* - IF lv_tchar EQ '"'. - lv_cnt = lv_cnt + 1. - lv_numchars = lv_numchars + 1. - lv_tchar = iv_reference_formula+lv_cnt(1). - WHILE lv_tchar NE '"'. - + IF lv_tchar EQ '"'. lv_cnt = lv_cnt + 1. lv_numchars = lv_numchars + 1. - lv_tchar = iv_reference_formula+lv_cnt(1). + lv_tchar = iv_reference_formula+lv_cnt(1). + WHILE lv_tchar NE '"'. + + lv_cnt = lv_cnt + 1. + lv_numchars = lv_numchars + 1. + lv_tchar = iv_reference_formula+lv_cnt(1). - ENDWHILE. - lv_cnt2 = lv_cnt + 1. - lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - IF lv_cnt = lv_flen. - EXIT. + ENDWHILE. + lv_cnt2 = lv_cnt + 1. + lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + IF lv_cnt = lv_flen. + EXIT. + ENDIF. + lv_offset1 = lv_cnt. + lv_numchars = 1. + lv_tchar = iv_reference_formula+lv_cnt(1). + lv_cnt2 = lv_cnt + 1. + CONTINUE. " --> next character in formula can be analyzed ENDIF. - lv_offset1 = lv_cnt. - lv_numchars = 1. - lv_tchar = iv_reference_formula+lv_cnt(1). - lv_cnt2 = lv_cnt + 1. - CONTINUE. " --> next character in formula can be analyzed - ENDIF. *--------------------------------------------------------------------* * Operators or parenthesis or last character in formula will separate possible cellreferences *--------------------------------------------------------------------* - IF lv_tchar CA lcv_operators - OR lv_tchar CA '():' - OR lv_cnt2 = lv_flen. - IF lv_cnt > 0. - lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). + IF lv_tchar CA lcv_operators + OR lv_tchar CA '():' + OR lv_cnt2 = lv_flen. + IF lv_cnt > 0. + lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). *--------------------------------------------------------------------* * Check for text concatenation and functions *--------------------------------------------------------------------* - IF ( lv_tchar CA lcv_operators AND lv_tchar EQ lv_substr1 ) OR lv_tchar EQ '('. - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_cnt2 = lv_cnt + 1. - lv_numchars = 1. - CONTINUE. " --> next character in formula can be analyzed - ENDIF. + IF ( lv_tchar CA lcv_operators AND lv_tchar EQ lv_substr1 ) OR lv_tchar EQ '('. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. - lv_tlen = lv_cnt2 - lv_offset1. + lv_tlen = lv_cnt2 - lv_offset1. *--------------------------------------------------------------------* * Exclude mathematical operators and closing parentheses *--------------------------------------------------------------------* - IF lv_tchar CA lcv_operators - OR lv_tchar CA ':)'. - IF lv_cnt2 = lv_flen - AND lv_numchars = 1. - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_cnt2 = lv_cnt + 1. - lv_numchars = 1. - CONTINUE. " --> next character in formula can be analyzed - ELSE. - lv_tlen = lv_tlen - 1. + IF lv_tchar CA lcv_operators + OR lv_tchar CA ':)'. + IF lv_cnt2 = lv_flen + AND lv_numchars = 1. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ELSE. + lv_tlen = lv_tlen - 1. + ENDIF. ENDIF. - ENDIF. *--------------------------------------------------------------------* * Capture reference cell address *--------------------------------------------------------------------* - TRY. - MOVE: iv_reference_formula+lv_offset1(lv_tlen) TO lv_ref_cell_addr. "Ref cell address - CATCH cx_root. - lv_errormessage = 'Internal error in Class ZCL_EXCEL_COMMON Method SHIFT_FORMULA Spot 1 '. " Change to messageclass if possible - zcx_excel=>raise_text( lv_errormessage ). - ENDTRY. + TRY. + MOVE: iv_reference_formula+lv_offset1(lv_tlen) TO lv_ref_cell_addr. "Ref cell address + CATCH cx_root. + lv_errormessage = 'Internal error in Class ZCL_EXCEL_COMMON Method SHIFT_FORMULA Spot 1 '. " Change to messageclass if possible + zcx_excel=>raise_text( lv_errormessage ). + ENDTRY. *--------------------------------------------------------------------* * Split cell address into characters and numbers *--------------------------------------------------------------------* - CLEAR: lv_tlen, - lv_tcnt, - lv_tcol1, - lv_trow1. - lv_tlen = STRLEN( lv_ref_cell_addr ). - IF lv_tlen <> 0. - CLEAR: lv_tcnt. - DO lv_tlen TIMES. - CLEAR: lv_tchar2. - lv_tchar2 = lv_ref_cell_addr+lv_tcnt(1). - IF lv_tchar2 CA lcv_letters. - CONCATENATE lv_tcol1 lv_tchar2 INTO lv_tcol1. - ELSEIF lv_tchar2 CA lcv_digits. - CONCATENATE lv_trow1 lv_tchar2 INTO lv_trow1. - ENDIF. - lv_tcnt = lv_tcnt + 1. - ENDDO. - ENDIF. + CLEAR: lv_tlen, + lv_tcnt, + lv_tcol1, + lv_trow1. + lv_tlen = strlen( lv_ref_cell_addr ). + IF lv_tlen <> 0. + CLEAR: lv_tcnt. + DO lv_tlen TIMES. + CLEAR: lv_tchar2. + lv_tchar2 = lv_ref_cell_addr+lv_tcnt(1). + IF lv_tchar2 CA lcv_letters. + CONCATENATE lv_tcol1 lv_tchar2 INTO lv_tcol1. + ELSEIF lv_tchar2 CA lcv_digits. + CONCATENATE lv_trow1 lv_tchar2 INTO lv_trow1. + ENDIF. + lv_tcnt = lv_tcnt + 1. + ENDDO. + ENDIF. *--------------------------------------------------------------------* * Check for invalid cell address *--------------------------------------------------------------------* - IF lv_tcol1 IS INITIAL OR lv_trow1 IS INITIAL. - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_cnt2 = lv_cnt + 1. - lv_numchars = 1. - CONTINUE. - ENDIF. + IF lv_tcol1 IS INITIAL OR lv_trow1 IS INITIAL. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. *--------------------------------------------------------------------* * Check for range names *--------------------------------------------------------------------* - CLEAR: lv_tlen. - lv_tlen = STRLEN( lv_tcol1 ). - IF lv_tlen GT 3. - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_cnt2 = lv_cnt + 1. - lv_numchars = 1. - CONTINUE. - ENDIF. + CLEAR: lv_tlen. + lv_tlen = strlen( lv_tcol1 ). + IF lv_tlen GT 3. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. *--------------------------------------------------------------------* * Check for valid row *--------------------------------------------------------------------* - IF lv_trow1 GT 1048576. - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_cnt2 = lv_cnt + 1. - lv_numchars = 1. - CONTINUE. - ENDIF. + IF lv_trow1 GT 1048576. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. *--------------------------------------------------------------------* * Check for absolute column or row reference *--------------------------------------------------------------------* - CLEAR: lv_tcol2, - lv_trow2, - lv_abscol, - lv_absrow. - lv_tlen2 = STRLEN( lv_tcol1 ) - 1. - IF lv_tcol1 IS NOT INITIAL. - lv_abscol = lv_tcol1(1). - ENDIF. - IF lv_tlen2 GE 0. - lv_absrow = lv_tcol1+lv_tlen2(1). - ENDIF. - IF lv_abscol EQ '$' AND lv_absrow EQ '$'. - lv_tlen2 = lv_tlen2 - 1. - IF lv_tlen2 > 0. + CLEAR: lv_tcol2, + lv_trow2, + lv_abscol, + lv_absrow. + lv_tlen2 = strlen( lv_tcol1 ) - 1. + IF lv_tcol1 IS NOT INITIAL. + lv_abscol = lv_tcol1(1). + ENDIF. + IF lv_tlen2 GE 0. + lv_absrow = lv_tcol1+lv_tlen2(1). + ENDIF. + IF lv_abscol EQ '$' AND lv_absrow EQ '$'. + lv_tlen2 = lv_tlen2 - 1. + IF lv_tlen2 > 0. + lv_tcol1 = lv_tcol1+1(lv_tlen2). + ENDIF. + lv_tlen2 = lv_tlen2 + 1. + ELSEIF lv_abscol EQ '$'. lv_tcol1 = lv_tcol1+1(lv_tlen2). + ELSEIF lv_absrow EQ '$'. + lv_tcol1 = lv_tcol1(lv_tlen2). ENDIF. - lv_tlen2 = lv_tlen2 + 1. - ELSEIF lv_abscol EQ '$'. - lv_tcol1 = lv_tcol1+1(lv_tlen2). - ELSEIF lv_absrow EQ '$'. - lv_tcol1 = lv_tcol1(lv_tlen2). - ENDIF. *--------------------------------------------------------------------* * Check for valid column *--------------------------------------------------------------------* - TRY. - lv_tcoln = zcl_excel_common=>convert_column2int( lv_tcol1 ) + iv_shift_cols. - CATCH zcx_excel. - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_cnt2 = lv_cnt + 1. - lv_numchars = 1. - CONTINUE. - ENDTRY. + TRY. + lv_tcoln = zcl_excel_common=>convert_column2int( lv_tcol1 ) + iv_shift_cols. + CATCH zcx_excel. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDTRY. *--------------------------------------------------------------------* * Check whether there is a referencing problem *--------------------------------------------------------------------* - lv_trow2 = lv_trow1 + iv_shift_rows. - IF ( lv_tcoln < 1 AND lv_abscol <> '$' ) " Maybe we should add here max-column and max row-tests as well. - OR ( lv_trow2 < 1 AND lv_absrow <> '$' ). " Check how EXCEL behaves in this case + lv_trow2 = lv_trow1 + iv_shift_rows. + IF ( lv_tcoln < 1 AND lv_abscol <> '$' ) " Maybe we should add here max-column and max row-tests as well. + OR ( lv_trow2 < 1 AND lv_absrow <> '$' ). " Check how EXCEL behaves in this case *--------------------------------------------------------------------* * Referencing problem encountered --> set error *--------------------------------------------------------------------* - CONCATENATE lv_cur_form lcv_cell_reference_error INTO lv_cur_form. - ELSE. + CONCATENATE lv_cur_form lcv_cell_reference_error INTO lv_cur_form. + ELSE. *--------------------------------------------------------------------* * No referencing problems --> adjust row and column *--------------------------------------------------------------------* @@ -1313,204 +1313,204 @@ METHOD shift_formula. *--------------------------------------------------------------------* * Adjust column *--------------------------------------------------------------------* - IF lv_abscol EQ '$'. - CONCATENATE lv_cur_form lv_abscol lv_tcol1 INTO lv_cur_form. - ELSEIF iv_shift_cols EQ 0. - CONCATENATE lv_cur_form lv_tcol1 INTO lv_cur_form. - ELSE. - TRY. - lv_tcol2 = zcl_excel_common=>convert_column2alpha( lv_tcoln ). - CONCATENATE lv_cur_form lv_tcol2 INTO lv_cur_form. - CATCH zcx_excel. - CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. - lv_cnt = lv_cnt + 1. - lv_offset1 = lv_cnt. - lv_cnt2 = lv_cnt + 1. - lv_numchars = 1. - CONTINUE. - ENDTRY. - ENDIF. + IF lv_abscol EQ '$'. + CONCATENATE lv_cur_form lv_abscol lv_tcol1 INTO lv_cur_form. + ELSEIF iv_shift_cols EQ 0. + CONCATENATE lv_cur_form lv_tcol1 INTO lv_cur_form. + ELSE. + TRY. + lv_tcol2 = zcl_excel_common=>convert_column2alpha( lv_tcoln ). + CONCATENATE lv_cur_form lv_tcol2 INTO lv_cur_form. + CATCH zcx_excel. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDTRY. + ENDIF. *--------------------------------------------------------------------* * Adjust row *--------------------------------------------------------------------* - IF lv_absrow EQ '$'. - CONCATENATE lv_cur_form lv_absrow lv_trow1 INTO lv_cur_form. - ELSEIF iv_shift_rows = 0. - CONCATENATE lv_cur_form lv_trow1 INTO lv_cur_form. + IF lv_absrow EQ '$'. + CONCATENATE lv_cur_form lv_absrow lv_trow1 INTO lv_cur_form. + ELSEIF iv_shift_rows = 0. + CONCATENATE lv_cur_form lv_trow1 INTO lv_cur_form. * elseif lv_trow2 < 1. * CONCATENATE lv_cur_form lc_cell_reference_error INTO lv_cur_form. - ELSE. - CONCATENATE lv_cur_form lv_trow2 INTO lv_cur_form. + ELSE. + CONCATENATE lv_cur_form lv_trow2 INTO lv_cur_form. + ENDIF. ENDIF. - ENDIF. - lv_numchars = 0. - IF lv_tchar CA lcv_operators - OR lv_tchar CA ':)'. - CONCATENATE lv_cur_form lv_tchar INTO lv_cur_form. + lv_numchars = 0. + IF lv_tchar CA lcv_operators + OR lv_tchar CA ':)'. + CONCATENATE lv_cur_form lv_tchar INTO lv_cur_form. + ENDIF. + lv_offset1 = lv_cnt2. ENDIF. - lv_offset1 = lv_cnt2. ENDIF. - ENDIF. - lv_numchars = lv_numchars + 1. - lv_cnt = lv_cnt + 1. - lv_cnt2 = lv_cnt + 1. + lv_numchars = lv_numchars + 1. + lv_cnt = lv_cnt + 1. + lv_cnt2 = lv_cnt + 1. - ENDDO. + ENDDO. *--------------------------------------------------------------------* * Return resulting formula *--------------------------------------------------------------------* - IF lv_cur_form IS NOT INITIAL. - MOVE lv_cur_form TO ev_resulting_formula. - ENDIF. + IF lv_cur_form IS NOT INITIAL. + MOVE lv_cur_form TO ev_resulting_formula. + ENDIF. -ENDMETHOD. + ENDMETHOD. -method SHL01. + METHOD shl01. - DATA: - lv_bit TYPE i, - lv_curr_pos TYPE i VALUE 2, - lv_prev_pos TYPE i VALUE 1. + DATA: + lv_bit TYPE i, + lv_curr_pos TYPE i VALUE 2, + lv_prev_pos TYPE i VALUE 1. - DO 15 TIMES. - GET BIT lv_curr_pos OF i_pwd_hash INTO lv_bit. - SET BIT lv_prev_pos OF r_pwd_hash TO lv_bit. - ADD 1 TO lv_curr_pos. - ADD 1 TO lv_prev_pos. - ENDDO. - SET BIT 16 OF r_pwd_hash TO 0. + DO 15 TIMES. + GET BIT lv_curr_pos OF i_pwd_hash INTO lv_bit. + SET BIT lv_prev_pos OF r_pwd_hash TO lv_bit. + ADD 1 TO lv_curr_pos. + ADD 1 TO lv_prev_pos. + ENDDO. + SET BIT 16 OF r_pwd_hash TO 0. -endmethod. + ENDMETHOD. -method SHR14. + METHOD shr14. - DATA: - lv_bit TYPE i, - lv_curr_pos TYPE i, - lv_next_pos TYPE i. + DATA: + lv_bit TYPE i, + lv_curr_pos TYPE i, + lv_next_pos TYPE i. - r_pwd_hash = i_pwd_hash. + r_pwd_hash = i_pwd_hash. - DO 14 TIMES. - lv_curr_pos = 15. - lv_next_pos = 16. + DO 14 TIMES. + lv_curr_pos = 15. + lv_next_pos = 16. - DO 15 TIMES. - GET BIT lv_curr_pos OF r_pwd_hash INTO lv_bit. - SET BIT lv_next_pos OF r_pwd_hash TO lv_bit. - SUBTRACT 1 FROM lv_curr_pos. - SUBTRACT 1 FROM lv_next_pos. + DO 15 TIMES. + GET BIT lv_curr_pos OF r_pwd_hash INTO lv_bit. + SET BIT lv_next_pos OF r_pwd_hash TO lv_bit. + SUBTRACT 1 FROM lv_curr_pos. + SUBTRACT 1 FROM lv_next_pos. + ENDDO. + SET BIT 1 OF r_pwd_hash TO 0. ENDDO. - SET BIT 1 OF r_pwd_hash TO 0. - ENDDO. -endmethod. + ENDMETHOD. -method SPLIT_FILE. + METHOD split_file. - DATA: lt_hlp TYPE TABLE OF text255, - ls_hlp TYPE text255. + DATA: lt_hlp TYPE TABLE OF text255, + ls_hlp TYPE text255. - DATA: lf_ext(10) TYPE c, - lf_dot_ext(10) TYPE c. - DATA: lf_anz TYPE i, - lf_len TYPE i. + DATA: lf_ext(10) TYPE c, + lf_dot_ext(10) TYPE c. + DATA: lf_anz TYPE i, + lf_len TYPE i. ** --------------------------------------------------------------------- - CLEAR: lt_hlp, - ep_file, - ep_extension, - ep_dotextension. + CLEAR: lt_hlp, + ep_file, + ep_extension, + ep_dotextension. ** Split the whole file at '.' - SPLIT ip_file AT '.' INTO TABLE lt_hlp. + SPLIT ip_file AT '.' INTO TABLE lt_hlp. ** get the extenstion from the last line of table - DESCRIBE TABLE lt_hlp LINES lf_anz. - IF lf_anz <= 1. - ep_file = ip_file. - EXIT. - ENDIF. - - READ TABLE lt_hlp INTO ls_hlp INDEX lf_anz. - ep_extension = ls_hlp. - lf_ext = ls_hlp. - IF NOT lf_ext IS INITIAL. - CONCATENATE '.' lf_ext INTO lf_dot_ext. - ENDIF. - ep_dotextension = lf_dot_ext. + DESCRIBE TABLE lt_hlp LINES lf_anz. + IF lf_anz <= 1. + ep_file = ip_file. + EXIT. + ENDIF. + + READ TABLE lt_hlp INTO ls_hlp INDEX lf_anz. + ep_extension = ls_hlp. + lf_ext = ls_hlp. + IF NOT lf_ext IS INITIAL. + CONCATENATE '.' lf_ext INTO lf_dot_ext. + ENDIF. + ep_dotextension = lf_dot_ext. ** get only the filename - lf_len = strlen( ip_file ) - strlen( lf_dot_ext ). - IF lf_len > 0. - ep_file = ip_file(lf_len). - ENDIF. - -endmethod. - - -method STRUCTURE_CASE. - DATA: lt_comp_str TYPE abap_component_tab. - - CASE is_component-type->kind. - WHEN cl_abap_typedescr=>kind_elem. "E Elementary Type - INSERT is_component INTO TABLE xt_components. - WHEN cl_abap_typedescr=>kind_table. "T Table - INSERT is_component INTO TABLE xt_components. - WHEN cl_abap_typedescr=>kind_struct. "S Structure - lt_comp_str = structure_recursive( is_component = is_component ). - INSERT LINES OF lt_comp_str INTO TABLE xt_components. - WHEN OTHERS. "cl_abap_typedescr=>kind_ref or cl_abap_typedescr=>kind_class or cl_abap_typedescr=>kind_intf. + lf_len = strlen( ip_file ) - strlen( lf_dot_ext ). + IF lf_len > 0. + ep_file = ip_file(lf_len). + ENDIF. + + ENDMETHOD. + + + METHOD structure_case. + DATA: lt_comp_str TYPE abap_component_tab. + + CASE is_component-type->kind. + WHEN cl_abap_typedescr=>kind_elem. "E Elementary Type + INSERT is_component INTO TABLE xt_components. + WHEN cl_abap_typedescr=>kind_table. "T Table + INSERT is_component INTO TABLE xt_components. + WHEN cl_abap_typedescr=>kind_struct. "S Structure + lt_comp_str = structure_recursive( is_component = is_component ). + INSERT LINES OF lt_comp_str INTO TABLE xt_components. + WHEN OTHERS. "cl_abap_typedescr=>kind_ref or cl_abap_typedescr=>kind_class or cl_abap_typedescr=>kind_intf. * We skip it. for now. - ENDCASE. -endmethod. + ENDCASE. + ENDMETHOD. -method STRUCTURE_RECURSIVE. - DATA: lo_struct TYPE REF TO cl_abap_structdescr, - lt_components TYPE abap_component_tab, - ls_components TYPE abap_componentdescr. + METHOD structure_recursive. + DATA: lo_struct TYPE REF TO cl_abap_structdescr, + lt_components TYPE abap_component_tab, + ls_components TYPE abap_componentdescr. - REFRESH rt_components. + REFRESH rt_components. - lo_struct ?= is_component-type. - lt_components = lo_struct->get_components( ). + lo_struct ?= is_component-type. + lt_components = lo_struct->get_components( ). - LOOP AT lt_components INTO ls_components. - structure_case( EXPORTING is_component = ls_components - CHANGING xt_components = rt_components ) . - ENDLOOP. + LOOP AT lt_components INTO ls_components. + structure_case( EXPORTING is_component = ls_components + CHANGING xt_components = rt_components ) . + ENDLOOP. -endmethod. + ENDMETHOD. -method TIME_TO_EXCEL_STRING. - DATA: lv_seconds_in_day TYPE i, - lv_day_fraction TYPE f, - lc_time_baseline TYPE t VALUE '000000', - lc_seconds_in_day TYPE i VALUE 86400. + METHOD time_to_excel_string. + DATA: lv_seconds_in_day TYPE i, + lv_day_fraction TYPE f, + lc_time_baseline TYPE t VALUE '000000', + lc_seconds_in_day TYPE i VALUE 86400. - lv_seconds_in_day = ip_value - lc_time_baseline. - lv_day_fraction = lv_seconds_in_day / lc_seconds_in_day. - ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_day_fraction ). -endmethod. + lv_seconds_in_day = ip_value - lc_time_baseline. + lv_day_fraction = lv_seconds_in_day / lc_seconds_in_day. + ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_day_fraction ). + ENDMETHOD. -method UNESCAPE_STRING. + METHOD unescape_string. - CONSTANTS lcv_regex TYPE string VALUE `^'[^']` & `|` & " Beginning single ' OR - `[^']'$` & `|` & " Trailing single ' OR - `[^']'[^']`. " Single ' somewhere in between + CONSTANTS lcv_regex TYPE string VALUE `^'[^']` & `|` & " Beginning single ' OR + `[^']'$` & `|` & " Trailing single ' OR + `[^']'[^']`. " Single ' somewhere in between - DATA: lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + DATA: lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class *--------------------------------------------------------------------* * This method is used to extract the "real" string from an escaped string. @@ -1524,34 +1524,34 @@ method UNESCAPE_STRING. * "real" blanks . These are automatically eliminated when moving * the input parameter to a string. *--------------------------------------------------------------------* - ev_unescaped_string = iv_escaped. " Pass through if not escaped + ev_unescaped_string = iv_escaped. " Pass through if not escaped - CHECK ev_unescaped_string IS NOT INITIAL. " Nothing to do if empty - CHECK ev_unescaped_string(1) = `'`. " Nothing to do if not escaped + CHECK ev_unescaped_string IS NOT INITIAL. " Nothing to do if empty + CHECK ev_unescaped_string(1) = `'`. " Nothing to do if not escaped *--------------------------------------------------------------------* * Remove leading and trailing ' *--------------------------------------------------------------------* - REPLACE REGEX `^'(.*)'$` IN ev_unescaped_string WITH '$1'. - IF sy-subrc <> 0. - lv_errormessage = 'Input not properly escaped - &'(002). - zcx_excel=>raise_text( lv_errormessage ). - ENDIF. + REPLACE REGEX `^'(.*)'$` IN ev_unescaped_string WITH '$1'. + IF sy-subrc <> 0. + lv_errormessage = 'Input not properly escaped - &'(002). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. *--------------------------------------------------------------------* * Any remaining single ' should not be here *--------------------------------------------------------------------* - FIND REGEX lcv_regex IN ev_unescaped_string. - IF sy-subrc = 0. - lv_errormessage = 'Input not properly escaped - &'(002). - zcx_excel=>raise_text( lv_errormessage ). - ENDIF. + FIND REGEX lcv_regex IN ev_unescaped_string. + IF sy-subrc = 0. + lv_errormessage = 'Input not properly escaped - &'(002). + zcx_excel=>raise_text( lv_errormessage ). + ENDIF. *--------------------------------------------------------------------* * Replace '' with ' *--------------------------------------------------------------------* - REPLACE ALL OCCURRENCES OF `''` IN ev_unescaped_string WITH `'`. + REPLACE ALL OCCURRENCES OF `''` IN ev_unescaped_string WITH `'`. -endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_converter.clas.abap b/src/zcl_excel_converter.clas.abap index 78e686b0c..0add4a665 100644 --- a/src/zcl_excel_converter.clas.abap +++ b/src/zcl_excel_converter.clas.abap @@ -1,933 +1,933 @@ -class ZCL_EXCEL_CONVERTER definition - public - create public . +CLASS zcl_excel_converter DEFINITION + PUBLIC + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_CONVERTER *"* do not include other source files here!!! -public section. - type-pools ABAP . - - class-methods CLASS_CONSTRUCTOR . - methods ASK_OPTION - returning - value(RS_OPTION) type ZEXCEL_S_CONVERTER_OPTION - raising - ZCX_EXCEL . - methods CONVERT - importing - !IS_OPTION type ZEXCEL_S_CONVERTER_OPTION optional - !IO_ALV type ref to OBJECT optional - !IT_TABLE type STANDARD TABLE optional - !I_ROW_INT type I default 1 - !I_COLUMN_INT type I default 1 - !I_TABLE type FLAG optional - !I_STYLE_TABLE type ZEXCEL_TABLE_STYLE optional - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional - changing - !CO_EXCEL type ref to ZCL_EXCEL optional - raising - ZCX_EXCEL . - methods CREATE_PATH - returning - value(R_PATH) type STRING . - methods GET_FILE - exporting - !E_BYTECOUNT type I - !ET_FILE type SOLIX_TAB - !E_FILE type XSTRING . - methods GET_OPTION - returning - value(RS_OPTION) type ZEXCEL_S_CONVERTER_OPTION . - methods OPEN_FILE . - methods SET_OPTION - importing - !IS_OPTION type ZEXCEL_S_CONVERTER_OPTION . - methods WRITE_FILE - importing - !I_PATH type STRING optional . + PUBLIC SECTION. + TYPE-POOLS abap . + + CLASS-METHODS class_constructor . + METHODS ask_option + RETURNING + VALUE(rs_option) TYPE zexcel_s_converter_option + RAISING + zcx_excel . + METHODS convert + IMPORTING + !is_option TYPE zexcel_s_converter_option OPTIONAL + !io_alv TYPE REF TO object OPTIONAL + !it_table TYPE STANDARD TABLE OPTIONAL + !i_row_int TYPE i DEFAULT 1 + !i_column_int TYPE i DEFAULT 1 + !i_table TYPE flag OPTIONAL + !i_style_table TYPE zexcel_table_style OPTIONAL + !io_worksheet TYPE REF TO zcl_excel_worksheet OPTIONAL + CHANGING + !co_excel TYPE REF TO zcl_excel OPTIONAL + RAISING + zcx_excel . + METHODS create_path + RETURNING + VALUE(r_path) TYPE string . + METHODS get_file + EXPORTING + !e_bytecount TYPE i + !et_file TYPE solix_tab + !e_file TYPE xstring . + METHODS get_option + RETURNING + VALUE(rs_option) TYPE zexcel_s_converter_option . + METHODS open_file . + METHODS set_option + IMPORTING + !is_option TYPE zexcel_s_converter_option . + METHODS write_file + IMPORTING + !i_path TYPE string OPTIONAL . *"* protected components of class ZCL_EXCEL_CONVERTER *"* do not include other source files here!!! -protected section. - - types: - BEGIN OF t_relationship, - id TYPE string, - type TYPE string, - target TYPE string, - END OF t_relationship . - types: - BEGIN OF t_fileversion, - appname TYPE string, - lastedited TYPE string, - lowestedited TYPE string, - rupbuild TYPE string, - codename TYPE string, - END OF t_fileversion . - types: - BEGIN OF t_sheet, - name TYPE string, - sheetid TYPE string, - id TYPE string, - END OF t_sheet . - types: - BEGIN OF t_workbookpr, - codename TYPE string, - defaultthemeversion TYPE string, - END OF t_workbookpr . - types: - BEGIN OF t_sheetpr, - codename TYPE string, - END OF t_sheetpr . - - data W_ROW_INT type ZEXCEL_CELL_ROW value 1. "#EC NOTEXT . . . . . . . . . . " . - data W_COL_INT type ZEXCEL_CELL_COLUMN value 1. "#EC NOTEXT . . . . . . . . . . " . + PROTECTED SECTION. + + TYPES: + BEGIN OF t_relationship, + id TYPE string, + type TYPE string, + target TYPE string, + END OF t_relationship . + TYPES: + BEGIN OF t_fileversion, + appname TYPE string, + lastedited TYPE string, + lowestedited TYPE string, + rupbuild TYPE string, + codename TYPE string, + END OF t_fileversion . + TYPES: + BEGIN OF t_sheet, + name TYPE string, + sheetid TYPE string, + id TYPE string, + END OF t_sheet . + TYPES: + BEGIN OF t_workbookpr, + codename TYPE string, + defaultthemeversion TYPE string, + END OF t_workbookpr . + TYPES: + BEGIN OF t_sheetpr, + codename TYPE string, + END OF t_sheetpr . + + DATA w_row_int TYPE zexcel_cell_row VALUE 1. "#EC NOTEXT . . . . . . . . . . " . + DATA w_col_int TYPE zexcel_cell_column VALUE 1. "#EC NOTEXT . . . . . . . . . . " . *"* private components of class ZCL_EXCEL_CONVERTER *"* do not include other source files here!!! -private section. - CLASS-METHODS get_subclasses - IMPORTING - is_clskey TYPE seoclskey - CHANGING - ct_classes TYPE seor_implementing_keys. - - data WO_EXCEL type ref to ZCL_EXCEL . - data WO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET . - data WO_AUTOFILTER type ref to ZCL_EXCEL_AUTOFILTER . - data WO_TABLE type ref to DATA . - data WO_DATA type ref to DATA . - data WT_FIELDCATALOG type ZEXCEL_T_CONVERTER_FCAT . - data WS_LAYOUT type ZEXCEL_S_CONVERTER_LAYO . - data WT_COLORS type ZEXCEL_T_CONVERTER_COL . - data WT_FILTER type ZEXCEL_T_CONVERTER_FIL . - class-data WT_OBJECTS type TT_ALV_TYPES . - class-data W_FCOUNT type NUMC3 . - data WT_SORT_VALUES type TT_SORT_VALUES . - data WT_SUBTOTAL_ROWS type TT_SUBTOTAL_ROWS . - data WT_STYLES type TT_STYLES . - constants C_TYPE_HDR type CHAR1 value 'H'. "#EC NOTEXT - constants C_TYPE_STR type CHAR1 value 'P'. "#EC NOTEXT - constants C_TYPE_NOR type CHAR1 value 'N'. "#EC NOTEXT - constants C_TYPE_SUB type CHAR1 value 'S'. "#EC NOTEXT - constants C_TYPE_TOT type CHAR1 value 'T'. "#EC NOTEXT - data WT_COLOR_STYLES type TT_COLOR_STYLES . - class-data WS_OPTION type ZEXCEL_S_CONVERTER_OPTION . - class-data WS_INDX type INDX . - - class-methods INIT_OPTION . - class-methods GET_ALV_CONVERTERS. - methods BIND_TABLE - importing - !I_STYLE_TABLE type ZEXCEL_TABLE_STYLE - returning - value(R_FREEZE_COL) type INT1 - raising - ZCX_EXCEL . - methods BIND_CELLS - returning - value(R_FREEZE_COL) type INT1 - raising - ZCX_EXCEL . - methods CLEAN_FIELDCATALOG . - methods CREATE_COLOR_STYLE - importing - !I_STYLE type ZEXCEL_CELL_STYLE - !IS_COLORS type ZEXCEL_S_CONVERTER_COL - returning - value(RO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods CREATE_FORMULAR_SUBTOTAL - importing - !I_ROW_INT_START type ZEXCEL_CELL_ROW - !I_ROW_INT_END type ZEXCEL_CELL_ROW - !I_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - !I_TOTALS_FUNCTION type ZEXCEL_TABLE_TOTALS_FUNCTION - returning - value(R_FORMULA) type STRING . - methods CREATE_FORMULAR_TOTAL - importing - !I_ROW_INT type ZEXCEL_CELL_ROW - !I_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - !I_TOTALS_FUNCTION type ZEXCEL_TABLE_TOTALS_FUNCTION - returning - value(R_FORMULA) type STRING . - methods CREATE_STYLE_HDR - importing - !I_ALIGNMENT type ZEXCEL_ALIGNMENT optional - returning - value(RO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods CREATE_STYLE_NORMAL - importing - !I_ALIGNMENT type ZEXCEL_ALIGNMENT optional - !I_INTTYPE type INTTYPE optional - !I_DECIMALS type INT1 optional - returning - value(RO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods CREATE_STYLE_STRIPPED - importing - !I_ALIGNMENT type ZEXCEL_ALIGNMENT optional - !I_INTTYPE type INTTYPE optional - !I_DECIMALS type INT1 optional - returning - value(RO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods CREATE_STYLE_SUBTOTAL - importing - !I_ALIGNMENT type ZEXCEL_ALIGNMENT optional - !I_INTTYPE type INTTYPE optional - !I_DECIMALS type INT1 optional - returning - value(RO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods CREATE_STYLE_TOTAL - importing - !I_ALIGNMENT type ZEXCEL_ALIGNMENT optional - !I_INTTYPE type INTTYPE optional - !I_DECIMALS type INT1 optional - returning - value(RO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods CREATE_TABLE . - methods CREATE_TEXT_SUBTOTAL - importing - !I_VALUE type ANY - !I_TOTALS_FUNCTION type ZEXCEL_TABLE_TOTALS_FUNCTION - returning - value(R_TEXT) type STRING . - methods CREATE_WORKSHEET - importing - !I_TABLE type FLAG default 'X' - !I_STYLE_TABLE type ZEXCEL_TABLE_STYLE - raising - ZCX_EXCEL . - methods EXECUTE_CONVERTER - importing - !IO_OBJECT type ref to OBJECT - !IT_TABLE type STANDARD TABLE - raising - ZCX_EXCEL . - methods GET_COLOR_STYLE - importing - !I_ROW type ZEXCEL_CELL_ROW - !I_FIELDNAME type FIELDNAME - !I_STYLE type ZEXCEL_CELL_STYLE - returning - value(R_STYLE) type ZEXCEL_CELL_STYLE . - methods GET_FUNCTION_NUMBER - importing - !I_TOTALS_FUNCTION type ZEXCEL_TABLE_TOTALS_FUNCTION - returning - value(R_FUNCTION_NUMBER) type INT1 . - methods GET_STYLE - importing - !I_TYPE type CHAR1 - !I_ALIGNMENT type ZEXCEL_ALIGNMENT default SPACE - !I_INTTYPE type INTTYPE default SPACE - !I_DECIMALS type INT1 default 0 - returning - value(R_STYLE) type ZEXCEL_CELL_STYLE . - methods LOOP_NORMAL - importing - !I_ROW_INT type ZEXCEL_CELL_ROW - !I_COL_INT type ZEXCEL_CELL_COLUMN - returning - value(R_FREEZE_COL) type INT1 - raising - ZCX_EXCEL . - methods LOOP_SUBTOTAL - importing - !I_ROW_INT type ZEXCEL_CELL_ROW - !I_COL_INT type ZEXCEL_CELL_COLUMN - returning - value(R_FREEZE_COL) type INT1 - raising - ZCX_EXCEL . - methods SET_AUTOFILTER_AREA . - methods SET_CELL_FORMAT - importing - !I_INTTYPE type INTTYPE - !I_DECIMALS type INT1 - returning - value(R_FORMAT) type ZEXCEL_NUMBER_FORMAT . - methods SET_FIELDCATALOG . + PRIVATE SECTION. + CLASS-METHODS get_subclasses + IMPORTING + is_clskey TYPE seoclskey + CHANGING + ct_classes TYPE seor_implementing_keys. + + DATA wo_excel TYPE REF TO zcl_excel . + DATA wo_worksheet TYPE REF TO zcl_excel_worksheet . + DATA wo_autofilter TYPE REF TO zcl_excel_autofilter . + DATA wo_table TYPE REF TO data . + DATA wo_data TYPE REF TO data . + DATA wt_fieldcatalog TYPE zexcel_t_converter_fcat . + DATA ws_layout TYPE zexcel_s_converter_layo . + DATA wt_colors TYPE zexcel_t_converter_col . + DATA wt_filter TYPE zexcel_t_converter_fil . + CLASS-DATA wt_objects TYPE tt_alv_types . + CLASS-DATA w_fcount TYPE numc3 . + DATA wt_sort_values TYPE tt_sort_values . + DATA wt_subtotal_rows TYPE tt_subtotal_rows . + DATA wt_styles TYPE tt_styles . + CONSTANTS c_type_hdr TYPE char1 VALUE 'H'. "#EC NOTEXT + CONSTANTS c_type_str TYPE char1 VALUE 'P'. "#EC NOTEXT + CONSTANTS c_type_nor TYPE char1 VALUE 'N'. "#EC NOTEXT + CONSTANTS c_type_sub TYPE char1 VALUE 'S'. "#EC NOTEXT + CONSTANTS c_type_tot TYPE char1 VALUE 'T'. "#EC NOTEXT + DATA wt_color_styles TYPE tt_color_styles . + CLASS-DATA ws_option TYPE zexcel_s_converter_option . + CLASS-DATA ws_indx TYPE indx . + + CLASS-METHODS init_option . + CLASS-METHODS get_alv_converters. + METHODS bind_table + IMPORTING + !i_style_table TYPE zexcel_table_style + RETURNING + VALUE(r_freeze_col) TYPE int1 + RAISING + zcx_excel . + METHODS bind_cells + RETURNING + VALUE(r_freeze_col) TYPE int1 + RAISING + zcx_excel . + METHODS clean_fieldcatalog . + METHODS create_color_style + IMPORTING + !i_style TYPE zexcel_cell_style + !is_colors TYPE zexcel_s_converter_col + RETURNING + VALUE(ro_style) TYPE REF TO zcl_excel_style . + METHODS create_formular_subtotal + IMPORTING + !i_row_int_start TYPE zexcel_cell_row + !i_row_int_end TYPE zexcel_cell_row + !i_column TYPE zexcel_cell_column_alpha + !i_totals_function TYPE zexcel_table_totals_function + RETURNING + VALUE(r_formula) TYPE string . + METHODS create_formular_total + IMPORTING + !i_row_int TYPE zexcel_cell_row + !i_column TYPE zexcel_cell_column_alpha + !i_totals_function TYPE zexcel_table_totals_function + RETURNING + VALUE(r_formula) TYPE string . + METHODS create_style_hdr + IMPORTING + !i_alignment TYPE zexcel_alignment OPTIONAL + RETURNING + VALUE(ro_style) TYPE REF TO zcl_excel_style . + METHODS create_style_normal + IMPORTING + !i_alignment TYPE zexcel_alignment OPTIONAL + !i_inttype TYPE inttype OPTIONAL + !i_decimals TYPE int1 OPTIONAL + RETURNING + VALUE(ro_style) TYPE REF TO zcl_excel_style . + METHODS create_style_stripped + IMPORTING + !i_alignment TYPE zexcel_alignment OPTIONAL + !i_inttype TYPE inttype OPTIONAL + !i_decimals TYPE int1 OPTIONAL + RETURNING + VALUE(ro_style) TYPE REF TO zcl_excel_style . + METHODS create_style_subtotal + IMPORTING + !i_alignment TYPE zexcel_alignment OPTIONAL + !i_inttype TYPE inttype OPTIONAL + !i_decimals TYPE int1 OPTIONAL + RETURNING + VALUE(ro_style) TYPE REF TO zcl_excel_style . + METHODS create_style_total + IMPORTING + !i_alignment TYPE zexcel_alignment OPTIONAL + !i_inttype TYPE inttype OPTIONAL + !i_decimals TYPE int1 OPTIONAL + RETURNING + VALUE(ro_style) TYPE REF TO zcl_excel_style . + METHODS create_table . + METHODS create_text_subtotal + IMPORTING + !i_value TYPE any + !i_totals_function TYPE zexcel_table_totals_function + RETURNING + VALUE(r_text) TYPE string . + METHODS create_worksheet + IMPORTING + !i_table TYPE flag DEFAULT 'X' + !i_style_table TYPE zexcel_table_style + RAISING + zcx_excel . + METHODS execute_converter + IMPORTING + !io_object TYPE REF TO object + !it_table TYPE STANDARD TABLE + RAISING + zcx_excel . + METHODS get_color_style + IMPORTING + !i_row TYPE zexcel_cell_row + !i_fieldname TYPE fieldname + !i_style TYPE zexcel_cell_style + RETURNING + VALUE(r_style) TYPE zexcel_cell_style . + METHODS get_function_number + IMPORTING + !i_totals_function TYPE zexcel_table_totals_function + RETURNING + VALUE(r_function_number) TYPE int1 . + METHODS get_style + IMPORTING + !i_type TYPE char1 + !i_alignment TYPE zexcel_alignment DEFAULT space + !i_inttype TYPE inttype DEFAULT space + !i_decimals TYPE int1 DEFAULT 0 + RETURNING + VALUE(r_style) TYPE zexcel_cell_style . + METHODS loop_normal + IMPORTING + !i_row_int TYPE zexcel_cell_row + !i_col_int TYPE zexcel_cell_column + RETURNING + VALUE(r_freeze_col) TYPE int1 + RAISING + zcx_excel . + METHODS loop_subtotal + IMPORTING + !i_row_int TYPE zexcel_cell_row + !i_col_int TYPE zexcel_cell_column + RETURNING + VALUE(r_freeze_col) TYPE int1 + RAISING + zcx_excel . + METHODS set_autofilter_area . + METHODS set_cell_format + IMPORTING + !i_inttype TYPE inttype + !i_decimals TYPE int1 + RETURNING + VALUE(r_format) TYPE zexcel_number_format . + METHODS set_fieldcatalog . ENDCLASS. -CLASS ZCL_EXCEL_CONVERTER IMPLEMENTATION. +CLASS zcl_excel_converter IMPLEMENTATION. -METHOD ask_option. - DATA: ls_sval TYPE sval, - lt_sval TYPE STANDARD TABLE OF sval, - l_returncode TYPE string, - lt_fields TYPE ddfields, - ls_fields TYPE dfies. + METHOD ask_option. + DATA: ls_sval TYPE sval, + lt_sval TYPE STANDARD TABLE OF sval, + l_returncode TYPE string, + lt_fields TYPE ddfields, + ls_fields TYPE dfies. - FIELD-SYMBOLS: TYPE any. + FIELD-SYMBOLS: TYPE any. - rs_option = ws_option. - - CALL FUNCTION 'DDIF_FIELDINFO_GET' - EXPORTING - tabname = 'ZEXCEL_S_CONVERTER_OPTION' - TABLES - dfies_tab = lt_fields - EXCEPTIONS - not_found = 1 - internal_error = 2 - OTHERS = 3. - IF sy-subrc <> 0. - MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno - WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. - ENDIF. + rs_option = ws_option. - LOOP AT lt_fields INTO ls_fields. - ASSIGN COMPONENT ls_fields-fieldname OF STRUCTURE ws_option TO . - IF sy-subrc = 0. - CLEAR ls_sval. - ls_sval-tabname = ls_fields-tabname. - ls_sval-fieldname = ls_fields-fieldname. - ls_sval-value = . - ls_sval-field_attr = space. - ls_sval-field_obl = space. - ls_sval-comp_code = space. - ls_sval-fieldtext = ls_fields-scrtext_m. - ls_sval-comp_tab = space. - ls_sval-comp_field = space. - ls_sval-novaluehlp = space. - INSERT ls_sval INTO TABLE lt_sval. + CALL FUNCTION 'DDIF_FIELDINFO_GET' + EXPORTING + tabname = 'ZEXCEL_S_CONVERTER_OPTION' + TABLES + dfies_tab = lt_fields + EXCEPTIONS + not_found = 1 + internal_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. - ENDLOOP. - - CALL FUNCTION 'POPUP_GET_VALUES' - EXPORTING - popup_title = 'Excel creation options'(008) - IMPORTING - returncode = l_returncode - TABLES - fields = lt_sval - EXCEPTIONS - error_in_fields = 1 - OTHERS = 2. - IF sy-subrc <> 0. - MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno - WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. - ELSEIF l_returncode = 'A'. - RAISE EXCEPTION TYPE zcx_excel. - ELSE. - LOOP AT lt_sval INTO ls_sval. - ASSIGN COMPONENT ls_sval-fieldname OF STRUCTURE ws_option TO . + + LOOP AT lt_fields INTO ls_fields. + ASSIGN COMPONENT ls_fields-fieldname OF STRUCTURE ws_option TO . IF sy-subrc = 0. - = ls_sval-value. + CLEAR ls_sval. + ls_sval-tabname = ls_fields-tabname. + ls_sval-fieldname = ls_fields-fieldname. + ls_sval-value = . + ls_sval-field_attr = space. + ls_sval-field_obl = space. + ls_sval-comp_code = space. + ls_sval-fieldtext = ls_fields-scrtext_m. + ls_sval-comp_tab = space. + ls_sval-comp_field = space. + ls_sval-novaluehlp = space. + INSERT ls_sval INTO TABLE lt_sval. ENDIF. ENDLOOP. - set_option( is_option = ws_option ) . - rs_option = ws_option. - ENDIF. -ENDMETHOD. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING + popup_title = 'Excel creation options'(008) + IMPORTING + returncode = l_returncode + TABLES + fields = lt_sval + EXCEPTIONS + error_in_fields = 1 + OTHERS = 2. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ELSEIF l_returncode = 'A'. + RAISE EXCEPTION TYPE zcx_excel. + ELSE. + LOOP AT lt_sval INTO ls_sval. + ASSIGN COMPONENT ls_sval-fieldname OF STRUCTURE ws_option TO . + IF sy-subrc = 0. + = ls_sval-value. + ENDIF. + ENDLOOP. + set_option( is_option = ws_option ) . + rs_option = ws_option. + ENDIF. + ENDMETHOD. -method BIND_CELLS. + METHOD bind_cells. * Do we need subtotals with grouping - READ TABLE wt_fieldcatalog TRANSPORTING NO FIELDS WITH KEY is_subtotalled = abap_true. - IF sy-subrc = 0 . - r_freeze_col = loop_subtotal( i_row_int = w_row_int - i_col_int = w_col_int ) . - ELSE. - r_freeze_col = loop_normal( i_row_int = w_row_int - i_col_int = w_col_int ) . - ENDIF. - - endmethod. - - -METHOD bind_table. - DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, - ls_field_catalog TYPE zexcel_s_fieldcatalog, - ls_fcat TYPE zexcel_s_converter_fcat, - lo_column TYPE REF TO zcl_excel_column, - lv_col_int TYPE zexcel_cell_column, - lv_col_alpha TYPE zexcel_cell_column_alpha, - ls_settings TYPE zexcel_s_table_settings, - lv_line TYPE i. - - FIELD-SYMBOLS: TYPE ANY TABLE. - - ASSIGN wo_data->* TO . - - ls_settings-table_style = i_style_table. - ls_settings-top_left_column = zcl_excel_common=>convert_column2alpha( ip_column = w_col_int ). - ls_settings-top_left_row = w_row_int. - ls_settings-show_row_stripes = ws_layout-is_stripped. - - DESCRIBE TABLE wt_fieldcatalog LINES lv_line. - lv_line = lv_line + 1 + w_col_int. - ls_settings-bottom_right_column = zcl_excel_common=>convert_column2alpha( ip_column = lv_line ). - - DESCRIBE TABLE LINES lv_line. - ls_settings-bottom_right_row = lv_line + 1 + w_row_int. - SORT wt_fieldcatalog BY position. - LOOP AT wt_fieldcatalog INTO ls_fcat. - MOVE-CORRESPONDING ls_fcat TO ls_field_catalog. - ls_field_catalog-dynpfld = abap_true. - INSERT ls_field_catalog INTO TABLE lt_field_catalog. - ENDLOOP. - - wo_worksheet->bind_table( - EXPORTING - ip_table = - it_field_catalog = lt_field_catalog - is_table_settings = ls_settings - IMPORTING - es_table_settings = ls_settings - ). - LOOP AT wt_fieldcatalog INTO ls_fcat. - lv_col_int = w_col_int + ls_fcat-position - 1. - lv_col_alpha = zcl_excel_common=>convert_column2alpha( lv_col_int ). -* Freeze panes - IF ls_fcat-fix_column = abap_true. - ADD 1 TO r_freeze_col. + READ TABLE wt_fieldcatalog TRANSPORTING NO FIELDS WITH KEY is_subtotalled = abap_true. + IF sy-subrc = 0 . + r_freeze_col = loop_subtotal( i_row_int = w_row_int + i_col_int = w_col_int ) . + ELSE. + r_freeze_col = loop_normal( i_row_int = w_row_int + i_col_int = w_col_int ) . ENDIF. + + ENDMETHOD. + + + METHOD bind_table. + DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_field_catalog TYPE zexcel_s_fieldcatalog, + ls_fcat TYPE zexcel_s_converter_fcat, + lo_column TYPE REF TO zcl_excel_column, + lv_col_int TYPE zexcel_cell_column, + lv_col_alpha TYPE zexcel_cell_column_alpha, + ls_settings TYPE zexcel_s_table_settings, + lv_line TYPE i. + + FIELD-SYMBOLS: TYPE ANY TABLE. + + ASSIGN wo_data->* TO . + + ls_settings-table_style = i_style_table. + ls_settings-top_left_column = zcl_excel_common=>convert_column2alpha( ip_column = w_col_int ). + ls_settings-top_left_row = w_row_int. + ls_settings-show_row_stripes = ws_layout-is_stripped. + + DESCRIBE TABLE wt_fieldcatalog LINES lv_line. + lv_line = lv_line + 1 + w_col_int. + ls_settings-bottom_right_column = zcl_excel_common=>convert_column2alpha( ip_column = lv_line ). + + DESCRIBE TABLE LINES lv_line. + ls_settings-bottom_right_row = lv_line + 1 + w_row_int. + SORT wt_fieldcatalog BY position. + LOOP AT wt_fieldcatalog INTO ls_fcat. + MOVE-CORRESPONDING ls_fcat TO ls_field_catalog. + ls_field_catalog-dynpfld = abap_true. + INSERT ls_field_catalog INTO TABLE lt_field_catalog. + ENDLOOP. + + wo_worksheet->bind_table( + EXPORTING + ip_table = + it_field_catalog = lt_field_catalog + is_table_settings = ls_settings + IMPORTING + es_table_settings = ls_settings + ). + LOOP AT wt_fieldcatalog INTO ls_fcat. + lv_col_int = w_col_int + ls_fcat-position - 1. + lv_col_alpha = zcl_excel_common=>convert_column2alpha( lv_col_int ). +* Freeze panes + IF ls_fcat-fix_column = abap_true. + ADD 1 TO r_freeze_col. + ENDIF. * Now let's check for optimized - IF ls_fcat-is_optimized = abap_true. - lo_column = wo_worksheet->get_column( ip_column = lv_col_alpha ). - lo_column->set_auto_size( ip_auto_size = abap_true ) . - ENDIF. + IF ls_fcat-is_optimized = abap_true. + lo_column = wo_worksheet->get_column( ip_column = lv_col_alpha ). + lo_column->set_auto_size( ip_auto_size = abap_true ) . + ENDIF. * Now let's check for visible - IF ls_fcat-is_hidden = abap_true. - lo_column = wo_worksheet->get_column( ip_column = lv_col_alpha ). - lo_column->set_visible( ip_visible = abap_false ) . - ENDIF. - ENDLOOP. + IF ls_fcat-is_hidden = abap_true. + lo_column = wo_worksheet->get_column( ip_column = lv_col_alpha ). + lo_column->set_visible( ip_visible = abap_false ) . + ENDIF. + ENDLOOP. -ENDMETHOD. + ENDMETHOD. -method CLASS_CONSTRUCTOR. - DATA: ls_objects TYPE ts_alv_types. - DATA: ls_option TYPE zexcel_s_converter_option, - l_uname TYPE sy-uname. + METHOD class_constructor. + DATA: ls_objects TYPE ts_alv_types. + DATA: ls_option TYPE zexcel_s_converter_option, + l_uname TYPE sy-uname. - GET PARAMETER ID 'ZUS' FIELD l_uname. - IF l_uname IS INITIAL OR l_uname = space. - l_uname = sy-uname. - ENDIF. + GET PARAMETER ID 'ZUS' FIELD l_uname. + IF l_uname IS INITIAL OR l_uname = space. + l_uname = sy-uname. + ENDIF. - get_alv_converters( ). + get_alv_converters( ). - CONCATENATE 'EXCEL_' sy-uname INTO ws_indx-srtfd. + CONCATENATE 'EXCEL_' sy-uname INTO ws_indx-srtfd. - IMPORT p1 = ls_option FROM DATABASE indx(xl) TO ws_indx ID ws_indx-srtfd. + IMPORT p1 = ls_option FROM DATABASE indx(xl) TO ws_indx ID ws_indx-srtfd. - IF sy-subrc = 0. - ws_option = ls_option. - ELSE. - init_option( ) . - ENDIF. + IF sy-subrc = 0. + ws_option = ls_option. + ELSE. + init_option( ) . + ENDIF. - endmethod. + ENDMETHOD. -method CLEAN_FIELDCATALOG. - DATA: l_position TYPE tabfdpos. + METHOD clean_fieldcatalog. + DATA: l_position TYPE tabfdpos. - FIELD-SYMBOLS: TYPE zexcel_s_converter_fcat. + FIELD-SYMBOLS: TYPE zexcel_s_converter_fcat. - SORT wt_fieldcatalog BY position col_id. + SORT wt_fieldcatalog BY position col_id. - CLEAR l_position. - LOOP AT wt_fieldcatalog ASSIGNING . - ADD 1 TO l_position. - -position = l_position. + CLEAR l_position. + LOOP AT wt_fieldcatalog ASSIGNING . + ADD 1 TO l_position. + -position = l_position. * Default stype with alignment and format - -style_hdr = get_style( i_type = c_type_hdr - i_alignment = -alignment ). - IF ws_layout-is_stripped = abap_true. - -style_stripped = get_style( i_type = c_type_str + -style_hdr = get_style( i_type = c_type_hdr + i_alignment = -alignment ). + IF ws_layout-is_stripped = abap_true. + -style_stripped = get_style( i_type = c_type_str + i_alignment = -alignment + i_inttype = -inttype + i_decimals = -decimals ). + ENDIF. + -style_normal = get_style( i_type = c_type_nor + i_alignment = -alignment + i_inttype = -inttype + i_decimals = -decimals ). + -style_subtotal = get_style( i_type = c_type_sub + i_alignment = -alignment + i_inttype = -inttype + i_decimals = -decimals ). + -style_total = get_style( i_type = c_type_tot i_alignment = -alignment i_inttype = -inttype i_decimals = -decimals ). + ENDLOOP. + + ENDMETHOD. + + + METHOD convert. + + IF is_option IS SUPPLIED. + ws_option = is_option. ENDIF. - -style_normal = get_style( i_type = c_type_nor - i_alignment = -alignment - i_inttype = -inttype - i_decimals = -decimals ). - -style_subtotal = get_style( i_type = c_type_sub - i_alignment = -alignment - i_inttype = -inttype - i_decimals = -decimals ). - -style_total = get_style( i_type = c_type_tot - i_alignment = -alignment - i_inttype = -inttype - i_decimals = -decimals ). - ENDLOOP. - - endmethod. - - -method CONVERT. - - IF is_option IS SUPPLIED. - ws_option = is_option. - ENDIF. - - execute_converter( EXPORTING io_object = io_alv - it_table = it_table ) . - - IF io_worksheet IS SUPPLIED AND io_worksheet IS BOUND. - wo_worksheet = io_worksheet. - ENDIF. - IF co_excel IS SUPPLIED. - IF co_excel IS NOT BOUND. - CREATE OBJECT co_excel. - co_excel->zif_excel_book_properties~creator = sy-uname. + + execute_converter( EXPORTING io_object = io_alv + it_table = it_table ) . + + IF io_worksheet IS SUPPLIED AND io_worksheet IS BOUND. + wo_worksheet = io_worksheet. + ENDIF. + IF co_excel IS SUPPLIED. + IF co_excel IS NOT BOUND. + CREATE OBJECT co_excel. + co_excel->zif_excel_book_properties~creator = sy-uname. + ENDIF. + wo_excel = co_excel. ENDIF. - wo_excel = co_excel. - ENDIF. * Move table to data object and clean it up - IF wt_fieldcatalog IS NOT INITIAL. - create_table( ). - ELSE. - wo_data = wo_table . - ENDIF. - - IF wo_excel IS NOT BOUND. - CREATE OBJECT wo_excel. - wo_excel->zif_excel_book_properties~creator = sy-uname. - ENDIF. - IF wo_worksheet IS NOT BOUND. - " Get active sheet - wo_worksheet = wo_excel->get_active_worksheet( ). - wo_worksheet->set_title( ip_title = 'Sheet1'(001) ). - ENDIF. - - IF i_row_int <= 0. - w_row_int = 1. - ELSE. - w_row_int = i_row_int. - ENDIF. - IF i_column_int <= 0. - w_col_int = 1. - ELSE. - w_col_int = i_column_int. - ENDIF. - - create_worksheet( i_table = i_table - i_style_table = i_style_table ) . - - endmethod. - - -method CREATE_COLOR_STYLE. - DATA: ls_styles TYPE ts_styles. - DATA: lo_style TYPE REF TO zcl_excel_style. - - READ TABLE wt_styles INTO ls_styles WITH KEY guid = i_style. - IF sy-subrc = 0. - lo_style = wo_excel->add_new_style( ). + IF wt_fieldcatalog IS NOT INITIAL. + create_table( ). + ELSE. + wo_data = wo_table . + ENDIF. + + IF wo_excel IS NOT BOUND. + CREATE OBJECT wo_excel. + wo_excel->zif_excel_book_properties~creator = sy-uname. + ENDIF. + IF wo_worksheet IS NOT BOUND. + " Get active sheet + wo_worksheet = wo_excel->get_active_worksheet( ). + wo_worksheet->set_title( ip_title = 'Sheet1'(001) ). + ENDIF. + + IF i_row_int <= 0. + w_row_int = 1. + ELSE. + w_row_int = i_row_int. + ENDIF. + IF i_column_int <= 0. + w_col_int = 1. + ELSE. + w_col_int = i_column_int. + ENDIF. + + create_worksheet( i_table = i_table + i_style_table = i_style_table ) . + + ENDMETHOD. + + + METHOD create_color_style. + DATA: ls_styles TYPE ts_styles. + DATA: lo_style TYPE REF TO zcl_excel_style. + + READ TABLE wt_styles INTO ls_styles WITH KEY guid = i_style. + IF sy-subrc = 0. + lo_style = wo_excel->add_new_style( ). * lo_style->borders = ls_styles-style->borders. * lo_style->protection = ls_styles-style->protection. - lo_style->font->bold = ls_styles-style->font->bold. - lo_style->alignment->horizontal = ls_styles-style->alignment->horizontal. - lo_style->number_format->format_code = ls_styles-style->number_format->format_code. + lo_style->font->bold = ls_styles-style->font->bold. + lo_style->alignment->horizontal = ls_styles-style->alignment->horizontal. + lo_style->number_format->format_code = ls_styles-style->number_format->format_code. - lo_style->font->color-rgb = is_colors-fontcolor. - lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. - lo_style->fill->fgcolor-rgb = is_colors-fillcolor. + lo_style->font->color-rgb = is_colors-fontcolor. + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = is_colors-fillcolor. - ro_style = lo_style. - ENDIF. - endmethod. + ro_style = lo_style. + ENDIF. + ENDMETHOD. -method CREATE_FORMULAR_SUBTOTAL. - data: l_row_alpha_start type string, - l_row_alpha_end type string, - l_func_num type string. + METHOD create_formular_subtotal. + DATA: l_row_alpha_start TYPE string, + l_row_alpha_end TYPE string, + l_func_num TYPE string. - l_row_alpha_start = i_row_int_start. - l_row_alpha_end = i_row_int_end. + l_row_alpha_start = i_row_int_start. + l_row_alpha_end = i_row_int_end. - l_func_num = get_function_number( i_totals_function = i_totals_function ). - concatenate 'SUBTOTAL(' l_func_num ',' i_column l_row_alpha_start ':' i_column l_row_alpha_end ')' into r_formula. - endmethod. + l_func_num = get_function_number( i_totals_function = i_totals_function ). + CONCATENATE 'SUBTOTAL(' l_func_num ',' i_column l_row_alpha_start ':' i_column l_row_alpha_end ')' INTO r_formula. + ENDMETHOD. -method CREATE_FORMULAR_TOTAL. - data: l_row_alpha type string, - l_row_e_alpha type string. + METHOD create_formular_total. + DATA: l_row_alpha TYPE string, + l_row_e_alpha TYPE string. - l_row_alpha = w_row_int + 1. - l_row_e_alpha = i_row_int. + l_row_alpha = w_row_int + 1. + l_row_e_alpha = i_row_int. - concatenate i_totals_function '(' i_column l_row_alpha ':' i_column l_row_e_alpha ')' into r_formula. - endmethod. + CONCATENATE i_totals_function '(' i_column l_row_alpha ':' i_column l_row_e_alpha ')' INTO r_formula. + ENDMETHOD. -method CREATE_PATH. - DATA: l_sep TYPE c , - l_path TYPE string, - l_return TYPE i . + METHOD create_path. + DATA: l_sep TYPE c, + l_path TYPE string, + l_return TYPE i. - CLEAR r_path. + CLEAR r_path. - " Save the file - cl_gui_frontend_services=>get_sapgui_workdir( - CHANGING - sapworkdir = l_path - EXCEPTIONS - get_sapworkdir_failed = 1 - cntl_error = 2 - error_no_gui = 3 - not_supported_by_gui = 4 - ). - IF sy-subrc <> 0. + " Save the file + cl_gui_frontend_services=>get_sapgui_workdir( + CHANGING + sapworkdir = l_path + EXCEPTIONS + get_sapworkdir_failed = 1 + cntl_error = 2 + error_no_gui = 3 + not_supported_by_gui = 4 + ). + IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. - CONCATENATE 'Excel_' w_fcount '.xlsx' INTO r_path. - ELSE. - DO. - ADD 1 TO w_fcount. + CONCATENATE 'Excel_' w_fcount '.xlsx' INTO r_path. + ELSE. + DO. + ADD 1 TO w_fcount. *-obtain file separator character--------------------------------------- - CALL METHOD cl_gui_frontend_services=>get_file_separator - CHANGING - file_separator = l_sep - EXCEPTIONS - cntl_error = 1 - error_no_gui = 2 - not_supported_by_gui = 3 - OTHERS = 4. - - IF sy-subrc <> 0. - l_sep = ''. - ENDIF. + CALL METHOD cl_gui_frontend_services=>get_file_separator + CHANGING + file_separator = l_sep + EXCEPTIONS + cntl_error = 1 + error_no_gui = 2 + not_supported_by_gui = 3 + OTHERS = 4. + + IF sy-subrc <> 0. + l_sep = ''. + ENDIF. - CONCATENATE l_path l_sep 'Excel_' w_fcount '.xlsx' INTO r_path. + CONCATENATE l_path l_sep 'Excel_' w_fcount '.xlsx' INTO r_path. - IF cl_gui_frontend_services=>file_exist( file = r_path ) = abap_true. - cl_gui_frontend_services=>file_delete( EXPORTING filename = r_path - CHANGING rc = l_return - EXCEPTIONS OTHERS = 1 ). - IF sy-subrc = 0 . + IF cl_gui_frontend_services=>file_exist( file = r_path ) = abap_true. + cl_gui_frontend_services=>file_delete( EXPORTING filename = r_path + CHANGING rc = l_return + EXCEPTIONS OTHERS = 1 ). + IF sy-subrc = 0 . + RETURN. + ENDIF. + ELSE. RETURN. ENDIF. - ELSE. - RETURN. + ENDDO. + ENDIF. + + ENDMETHOD. + + + METHOD create_style_hdr. + DATA: lo_style TYPE REF TO zcl_excel_style. + + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. + lo_style->font->color-rgb = zcl_excel_style_color=>c_white. + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FF4F81BD'. + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. + ENDIF. + ro_style = lo_style . + ENDMETHOD. + + + METHOD create_style_normal. + DATA: lo_style TYPE REF TO zcl_excel_style, + l_format TYPE zexcel_number_format. + + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + ENDIF. + IF l_format IS NOT INITIAL OR + ( i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL ) . + + lo_style = wo_excel->add_new_style( ). + + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. ENDIF. - ENDDO. - ENDIF. - endmethod. + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. + ENDIF. + + ro_style = lo_style . + ENDIF. + ENDMETHOD. -method CREATE_STYLE_HDR. - data: lo_style type ref to zcl_excel_style. - lo_style = wo_excel->add_new_style( ). - lo_style->font->bold = abap_true. - lo_style->font->color-rgb = zcl_excel_style_color=>c_white. - lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. - lo_style->fill->fgcolor-rgb = 'FF4F81BD'. - if i_alignment is supplied and i_alignment is not initial. - lo_style->alignment->horizontal = i_alignment. - endif. - ro_style = lo_style . - endmethod. + METHOD create_style_stripped. + DATA: lo_style TYPE REF TO zcl_excel_style. + DATA: l_format TYPE zexcel_number_format. + + lo_style = wo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FFDBE5F1'. + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. + ENDIF. + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. + ENDIF. + ENDIF. + ro_style = lo_style. + ENDMETHOD. -method CREATE_STYLE_NORMAL. - DATA: lo_style TYPE REF TO zcl_excel_style, - l_format TYPE zexcel_number_format. - IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. - l_format = set_cell_format( i_inttype = i_inttype - i_decimals = i_decimals ) . - ENDIF. - IF l_format IS NOT INITIAL OR - ( i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL ) . + METHOD create_style_subtotal. + DATA: lo_style TYPE REF TO zcl_excel_style. + DATA: l_format TYPE zexcel_number_format. lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. lo_style->alignment->horizontal = i_alignment. ENDIF. - - IF l_format IS NOT INITIAL. - lo_style->number_format->format_code = l_format. + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. + ENDIF. ENDIF. ro_style = lo_style . - ENDIF. - endmethod. - - -method CREATE_STYLE_STRIPPED. - data: lo_style type ref to zcl_excel_style. - data: l_format type zexcel_number_format. - - lo_style = wo_excel->add_new_style( ). - lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. - lo_style->fill->fgcolor-rgb = 'FFDBE5F1'. - if i_alignment is supplied and i_alignment is not initial. - lo_style->alignment->horizontal = i_alignment. - endif. - if i_inttype is supplied and i_inttype is not initial. - l_format = set_cell_format( i_inttype = i_inttype - i_decimals = i_decimals ) . - if l_format is not initial. - lo_style->number_format->format_code = l_format. - endif. - endif. - ro_style = lo_style. - - endmethod. - - -method CREATE_STYLE_SUBTOTAL. - data: lo_style type ref to zcl_excel_style. - data: l_format type zexcel_number_format. - - lo_style = wo_excel->add_new_style( ). - lo_style->font->bold = abap_true. - - if i_alignment is supplied and i_alignment is not initial. - lo_style->alignment->horizontal = i_alignment. - endif. - if i_inttype is supplied and i_inttype is not initial. - l_format = set_cell_format( i_inttype = i_inttype - i_decimals = i_decimals ) . - if l_format is not initial. - lo_style->number_format->format_code = l_format. - endif. - endif. - - ro_style = lo_style . - - endmethod. - - -method CREATE_STYLE_TOTAL. - DATA: lo_style TYPE REF TO zcl_excel_style. - DATA: l_format TYPE zexcel_number_format. - - lo_style = wo_excel->add_new_style( ). - lo_style->font->bold = abap_true. - - CREATE OBJECT lo_style->borders->top. - lo_style->borders->top->border_style = zcl_excel_style_border=>c_border_thin. - lo_style->borders->top->border_color-rgb = zcl_excel_style_color=>c_black. - - CREATE OBJECT lo_style->borders->right. - lo_style->borders->right->border_style = zcl_excel_style_border=>c_border_none. - lo_style->borders->right->border_color-rgb = zcl_excel_style_color=>c_black. - - CREATE OBJECT lo_style->borders->down. - lo_style->borders->down->border_style = zcl_excel_style_border=>c_border_double. - lo_style->borders->down->border_color-rgb = zcl_excel_style_color=>c_black. - - CREATE OBJECT lo_style->borders->left. - lo_style->borders->left->border_style = zcl_excel_style_border=>c_border_none. - lo_style->borders->left->border_color-rgb = zcl_excel_style_color=>c_black. - - IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. - lo_style->alignment->horizontal = i_alignment. - ENDIF. - IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. - l_format = set_cell_format( i_inttype = i_inttype - i_decimals = i_decimals ) . - IF l_format IS NOT INITIAL. - lo_style->number_format->format_code = l_format. - ENDIF. - ENDIF. + ENDMETHOD. - ro_style = lo_style . - endmethod. + METHOD create_style_total. + DATA: lo_style TYPE REF TO zcl_excel_style. + DATA: l_format TYPE zexcel_number_format. + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. -method CREATE_TABLE. - TYPES: BEGIN OF ts_output, - fieldname TYPE fieldname, - function TYPE funcname, - END OF ts_output. + CREATE OBJECT lo_style->borders->top. + lo_style->borders->top->border_style = zcl_excel_style_border=>c_border_thin. + lo_style->borders->top->border_color-rgb = zcl_excel_style_color=>c_black. - DATA: lo_data TYPE REF TO data. - DATA: lo_addit TYPE REF TO cl_abap_elemdescr, - lt_components_tab TYPE cl_abap_structdescr=>component_table, - ls_components TYPE abap_componentdescr, - lo_table TYPE REF TO cl_abap_tabledescr, - lo_struc TYPE REF TO cl_abap_structdescr. + CREATE OBJECT lo_style->borders->right. + lo_style->borders->right->border_style = zcl_excel_style_border=>c_border_none. + lo_style->borders->right->border_color-rgb = zcl_excel_style_color=>c_black. - FIELD-SYMBOLS: TYPE zexcel_s_converter_fcat, - TYPE ANY, - TYPE STANDARD TABLE, - TYPE ANY, - TYPE STANDARD TABLE. + CREATE OBJECT lo_style->borders->down. + lo_style->borders->down->border_style = zcl_excel_style_border=>c_border_double. + lo_style->borders->down->border_color-rgb = zcl_excel_style_color=>c_black. - SORT wt_fieldcatalog BY position. - ASSIGN wo_table->* TO . + CREATE OBJECT lo_style->borders->left. + lo_style->borders->left->border_style = zcl_excel_style_border=>c_border_none. + lo_style->borders->left->border_color-rgb = zcl_excel_style_color=>c_black. - READ TABLE ASSIGNING INDEX 1. - IF sy-subrc EQ 0 . - LOOP AT wt_fieldcatalog ASSIGNING . - ASSIGN COMPONENT -columnname OF STRUCTURE TO . - IF sy-subrc = 0. - ls_components-name = -columnname. - TRY. - lo_addit ?= cl_abap_typedescr=>describe_by_data( ). - CATCH cx_sy_move_cast_error. - CLEAR lo_addit. - DELETE TABLE wt_fieldcatalog FROM . - ENDTRY. - IF lo_addit IS BOUND. - ls_components-type = lo_addit . - INSERT ls_components INTO TABLE lt_components_tab. - ENDIF. + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. + ENDIF. + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. ENDIF. - ENDLOOP. - IF lt_components_tab IS NOT INITIAL. - "create new line type - TRY. - lo_struc = cl_abap_structdescr=>create( P_COMPONENTS = lt_components_tab - P_STRICT = abap_false ). - CATCH cx_sy_struct_creation. - RETURN. " We can not do anything in this case. - ENDTRY. + ENDIF. - lo_table = cl_abap_tabledescr=>create( lo_struc ). + ro_style = lo_style . - CREATE DATA wo_data TYPE HANDLE lo_table. - CREATE DATA lo_data TYPE HANDLE lo_struc. + ENDMETHOD. - ASSIGN wo_data->* TO . - ASSIGN lo_data->* TO . - LOOP AT ASSIGNING . - CLEAR . - MOVE-CORRESPONDING TO . - APPEND TO . + + METHOD create_table. + TYPES: BEGIN OF ts_output, + fieldname TYPE fieldname, + function TYPE funcname, + END OF ts_output. + + DATA: lo_data TYPE REF TO data. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + lt_components_tab TYPE cl_abap_structdescr=>component_table, + ls_components TYPE abap_componentdescr, + lo_table TYPE REF TO cl_abap_tabledescr, + lo_struc TYPE REF TO cl_abap_structdescr. + + FIELD-SYMBOLS: TYPE zexcel_s_converter_fcat, + TYPE any, + TYPE STANDARD TABLE, + TYPE any, + TYPE STANDARD TABLE. + + SORT wt_fieldcatalog BY position. + ASSIGN wo_table->* TO . + + READ TABLE ASSIGNING INDEX 1. + IF sy-subrc EQ 0 . + LOOP AT wt_fieldcatalog ASSIGNING . + ASSIGN COMPONENT -columnname OF STRUCTURE TO . + IF sy-subrc = 0. + ls_components-name = -columnname. + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ). + CATCH cx_sy_move_cast_error. + CLEAR lo_addit. + DELETE TABLE wt_fieldcatalog FROM . + ENDTRY. + IF lo_addit IS BOUND. + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ENDIF. + ENDIF. ENDLOOP. - ENDIF. - ENDIF. + IF lt_components_tab IS NOT INITIAL. + "create new line type + TRY. + lo_struc = cl_abap_structdescr=>create( p_components = lt_components_tab + p_strict = abap_false ). + CATCH cx_sy_struct_creation. + RETURN. " We can not do anything in this case. + ENDTRY. - endmethod. + lo_table = cl_abap_tabledescr=>create( lo_struc ). + + CREATE DATA wo_data TYPE HANDLE lo_table. + CREATE DATA lo_data TYPE HANDLE lo_struc. + + ASSIGN wo_data->* TO . + ASSIGN lo_data->* TO . + LOOP AT ASSIGNING . + CLEAR . + MOVE-CORRESPONDING TO . + APPEND TO . + ENDLOOP. + ENDIF. + ENDIF. + ENDMETHOD. -METHOD create_text_subtotal. - DATA: l_string(256) TYPE c, - l_func TYPE string. - CASE i_totals_function. - WHEN zcl_excel_table=>totals_function_sum. " Total - l_func = 'Total'(003). - WHEN zcl_excel_table=>totals_function_min. " Minimum - l_func = 'Minimum'(004). - WHEN zcl_excel_table=>totals_function_max. " Maximum - l_func = 'Maximum'(005). - WHEN zcl_excel_table=>totals_function_average. " Mean Value - l_func = 'Average'(006). - WHEN zcl_excel_table=>totals_function_count. " Count - l_func = 'Count'(007). - WHEN OTHERS. - CLEAR l_func. - ENDCASE. + METHOD create_text_subtotal. + DATA: l_string(256) TYPE c, + l_func TYPE string. + + CASE i_totals_function. + WHEN zcl_excel_table=>totals_function_sum. " Total + l_func = 'Total'(003). + WHEN zcl_excel_table=>totals_function_min. " Minimum + l_func = 'Minimum'(004). + WHEN zcl_excel_table=>totals_function_max. " Maximum + l_func = 'Maximum'(005). + WHEN zcl_excel_table=>totals_function_average. " Mean Value + l_func = 'Average'(006). + WHEN zcl_excel_table=>totals_function_count. " Count + l_func = 'Count'(007). + WHEN OTHERS. + CLEAR l_func. + ENDCASE. - MOVE i_value TO l_string. + MOVE i_value TO l_string. - CONCATENATE l_string l_func INTO r_text SEPARATED BY space. + CONCATENATE l_string l_func INTO r_text SEPARATED BY space. -ENDMETHOD. + ENDMETHOD. -method CREATE_WORKSHEET. - DATA: l_freeze_col TYPE i. + METHOD create_worksheet. + DATA: l_freeze_col TYPE i. - IF wo_data IS BOUND AND wo_worksheet IS BOUND. + IF wo_data IS BOUND AND wo_worksheet IS BOUND. - wo_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_on. " By default is on + wo_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_on. " By default is on - IF wt_fieldcatalog IS INITIAL. - set_fieldcatalog( ) . - ELSE. - clean_fieldcatalog( ) . - ENDIF. + IF wt_fieldcatalog IS INITIAL. + set_fieldcatalog( ) . + ELSE. + clean_fieldcatalog( ) . + ENDIF. - IF i_table = abap_true. - l_freeze_col = bind_table( i_style_table = i_style_table ) . - ELSEIF wt_filter IS NOT INITIAL. + IF i_table = abap_true. + l_freeze_col = bind_table( i_style_table = i_style_table ) . + ELSEIF wt_filter IS NOT INITIAL. * Let's check for filter. - wo_autofilter = wo_excel->add_new_autofilter( io_sheet = wo_worksheet ). - l_freeze_col = bind_cells( ) . - set_autofilter_area( ) . - ELSE. - l_freeze_col = bind_cells( ) . - ENDIF. + wo_autofilter = wo_excel->add_new_autofilter( io_sheet = wo_worksheet ). + l_freeze_col = bind_cells( ) . + set_autofilter_area( ) . + ELSE. + l_freeze_col = bind_cells( ) . + ENDIF. * Check for freeze panes - IF ws_layout-is_fixed = abap_true. - IF l_freeze_col = 0. - l_freeze_col = w_col_int. + IF ws_layout-is_fixed = abap_true. + IF l_freeze_col = 0. + l_freeze_col = w_col_int. + ENDIF. + wo_worksheet->freeze_panes( EXPORTING ip_num_columns = l_freeze_col + ip_num_rows = w_row_int ) . ENDIF. - wo_worksheet->freeze_panes( EXPORTING ip_num_columns = l_freeze_col - ip_num_rows = w_row_int ) . ENDIF. - ENDIF. - endmethod. + ENDMETHOD. -method EXECUTE_CONVERTER. - DATA: lo_if TYPE REF TO zif_excel_converter, - ls_types TYPE ts_alv_types, - lo_addit TYPE REF TO cl_abap_classdescr, - lo_addit_superclass type ref to cl_abap_classdescr. + METHOD execute_converter. + DATA: lo_if TYPE REF TO zif_excel_converter, + ls_types TYPE ts_alv_types, + lo_addit TYPE REF TO cl_abap_classdescr, + lo_addit_superclass TYPE REF TO cl_abap_classdescr. - IF io_object IS BOUND. - TRY. - lo_addit ?= cl_abap_typedescr=>describe_by_object_ref( io_object ). - CATCH cx_sy_move_cast_error. - RAISE EXCEPTION TYPE zcx_excel. - ENDTRY. - ls_types-seoclass = lo_addit->get_relative_name( ). - READ TABLE wt_objects INTO ls_types WITH TABLE KEY seoclass = ls_types-seoclass. - if sy-subrc ne 0. - do. - free lo_addit_superclass. - lo_addit_superclass = lo_addit->get_super_class_type( ). - if lo_addit_superclass is initial. - sy-subrc = '4'. - exit. - endif. - lo_addit = lo_addit_superclass. - ls_types-seoclass = lo_addit->get_relative_name( ). - read table wt_objects into ls_types with table key seoclass = ls_types-seoclass. - if sy-subrc eq 0. - exit. - endif. - enddo. - endif. - if sy-subrc = 0. - CREATE OBJECT lo_if type (ls_types-clsname). - lo_if->create_fieldcatalog( - exporting - is_option = ws_option - io_object = io_object - it_table = it_table - importing - es_layout = ws_layout - et_fieldcatalog = wt_fieldcatalog - eo_table = wo_table - et_colors = wt_colors - et_filter = wt_filter - ). + IF io_object IS BOUND. + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_object_ref( io_object ). + CATCH cx_sy_move_cast_error. + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + ls_types-seoclass = lo_addit->get_relative_name( ). + READ TABLE wt_objects INTO ls_types WITH TABLE KEY seoclass = ls_types-seoclass. + IF sy-subrc NE 0. + DO. + FREE lo_addit_superclass. + lo_addit_superclass = lo_addit->get_super_class_type( ). + IF lo_addit_superclass IS INITIAL. + sy-subrc = '4'. + EXIT. + ENDIF. + lo_addit = lo_addit_superclass. + ls_types-seoclass = lo_addit->get_relative_name( ). + READ TABLE wt_objects INTO ls_types WITH TABLE KEY seoclass = ls_types-seoclass. + IF sy-subrc EQ 0. + EXIT. + ENDIF. + ENDDO. + ENDIF. + IF sy-subrc = 0. + CREATE OBJECT lo_if TYPE (ls_types-clsname). + lo_if->create_fieldcatalog( + EXPORTING + is_option = ws_option + io_object = io_object + it_table = it_table + IMPORTING + es_layout = ws_layout + et_fieldcatalog = wt_fieldcatalog + eo_table = wo_table + et_colors = wt_colors + et_filter = wt_filter + ). * data lines of highest level. - if ws_layout-max_subtotal_level > 0. add 1 to ws_layout-max_subtotal_level. endif. - else. - RAISE EXCEPTION type zcx_excel. - endif. - else. - refresh wt_fieldcatalog. - get reference of it_table into wo_table. - endif. -endmethod. + IF ws_layout-max_subtotal_level > 0. ADD 1 TO ws_layout-max_subtotal_level. ENDIF. + ELSE. + RAISE EXCEPTION TYPE zcx_excel. + ENDIF. + ELSE. + REFRESH wt_fieldcatalog. + GET REFERENCE OF it_table INTO wo_table. + ENDIF. + ENDMETHOD. METHOD get_alv_converters. @@ -965,7 +965,7 @@ endmethod. SORT lt_all_implementations BY clsname. DELETE ADJACENT DUPLICATES FROM lt_all_implementations COMPARING clsname. - LOOP AT lt_all_implementations into ls_impkey. + LOOP AT lt_all_implementations INTO ls_impkey. CLEAR ls_object. CREATE OBJECT lr_implementation TYPE (ls_impkey-clsname). ls_object-seoclass = lr_implementation->get_supported_class( ). @@ -978,37 +978,17 @@ endmethod. ENDMETHOD. -method GET_COLOR_STYLE. - DATA: ls_colors TYPE zexcel_s_converter_col, - ls_color_styles TYPE ts_color_styles, - lo_style TYPE REF TO zcl_excel_style. + METHOD get_color_style. + DATA: ls_colors TYPE zexcel_s_converter_col, + ls_color_styles TYPE ts_color_styles, + lo_style TYPE REF TO zcl_excel_style. - r_style = i_style. " Default we change nothing + r_style = i_style. " Default we change nothing - IF wt_colors IS NOT INITIAL. + IF wt_colors IS NOT INITIAL. * Full line has color - READ TABLE wt_colors INTO ls_colors WITH KEY rownumber = i_row - columnname = space. - IF sy-subrc = 0. - READ TABLE wt_color_styles INTO ls_color_styles WITH KEY guid_old = i_style - fontcolor = ls_colors-fontcolor - fillcolor = ls_colors-fillcolor. - IF sy-subrc = 0. - r_style = ls_color_styles-style_new->get_guid( ). - ELSE. - lo_style = create_color_style( i_style = i_style - is_colors = ls_colors ) . - r_style = lo_style->get_guid( ) . - ls_color_styles-guid_old = i_style. - ls_color_styles-fontcolor = ls_colors-fontcolor. - ls_color_styles-fillcolor = ls_colors-fillcolor. - ls_color_styles-style_new = lo_style. - INSERT ls_color_styles INTO TABLE wt_color_styles. - ENDIF. - ELSE. -* Only field has color READ TABLE wt_colors INTO ls_colors WITH KEY rownumber = i_row - columnname = i_fieldname. + columnname = space. IF sy-subrc = 0. READ TABLE wt_color_styles INTO ls_color_styles WITH KEY guid_old = i_style fontcolor = ls_colors-fontcolor @@ -1018,61 +998,81 @@ method GET_COLOR_STYLE. ELSE. lo_style = create_color_style( i_style = i_style is_colors = ls_colors ) . + r_style = lo_style->get_guid( ) . ls_color_styles-guid_old = i_style. ls_color_styles-fontcolor = ls_colors-fontcolor. ls_color_styles-fillcolor = ls_colors-fillcolor. ls_color_styles-style_new = lo_style. INSERT ls_color_styles INTO TABLE wt_color_styles. - r_style = ls_color_styles-style_new->get_guid( ). ENDIF. ELSE. - r_style = i_style. +* Only field has color + READ TABLE wt_colors INTO ls_colors WITH KEY rownumber = i_row + columnname = i_fieldname. + IF sy-subrc = 0. + READ TABLE wt_color_styles INTO ls_color_styles WITH KEY guid_old = i_style + fontcolor = ls_colors-fontcolor + fillcolor = ls_colors-fillcolor. + IF sy-subrc = 0. + r_style = ls_color_styles-style_new->get_guid( ). + ELSE. + lo_style = create_color_style( i_style = i_style + is_colors = ls_colors ) . + ls_color_styles-guid_old = i_style. + ls_color_styles-fontcolor = ls_colors-fontcolor. + ls_color_styles-fillcolor = ls_colors-fillcolor. + ls_color_styles-style_new = lo_style. + INSERT ls_color_styles INTO TABLE wt_color_styles. + r_style = ls_color_styles-style_new->get_guid( ). + ENDIF. + ELSE. + r_style = i_style. + ENDIF. ENDIF. + ELSE. + r_style = i_style. ENDIF. - ELSE. - r_style = i_style. - ENDIF. - endmethod. + ENDMETHOD. -method GET_FILE. - data: lo_excel_writer type ref to zif_excel_writer. + METHOD get_file. + DATA: lo_excel_writer TYPE REF TO zif_excel_writer. - data: ls_seoclass type seoclass. + DATA: ls_seoclass TYPE seoclass. - if wo_excel is bound. - create object lo_excel_writer type zcl_excel_writer_2007. - e_file = lo_excel_writer->write_file( wo_excel ). + IF wo_excel IS BOUND. + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + e_file = lo_excel_writer->write_file( wo_excel ). - select single * into ls_seoclass - from seoclass - where clsname = 'CL_BCS_CONVERT'. + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_BCS_CONVERT'. - if sy-subrc = 0. - call method (ls_seoclass-clsname)=>xstring_to_solix - exporting - iv_xstring = e_file - receiving - et_solix = et_file. - e_bytecount = xstrlen( e_file ). - else. - " Convert to binary - call function 'SCMS_XSTRING_TO_BINARY' - exporting - buffer = e_file - importing - output_length = e_bytecount - tables - binary_tab = et_file. - endif. - endif. + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>xstring_to_solix + EXPORTING + iv_xstring = e_file + RECEIVING + et_solix = et_file. + e_bytecount = xstrlen( e_file ). + ELSE. + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = e_file + IMPORTING + output_length = e_bytecount + TABLES + binary_tab = et_file. + ENDIF. + ENDIF. - endmethod. + ENDMETHOD. -method GET_FUNCTION_NUMBER. + METHOD get_function_number. *Number Function *1 AVERAGE *2 COUNT @@ -1086,75 +1086,75 @@ method GET_FUNCTION_NUMBER. *10 VAR *11 VARP - case i_totals_function. - when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_SUM. " Total - r_function_number = 9. - when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_MIN. " Minimum - r_function_number = 5. - when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_MAX. " Maximum - r_function_number = 4. - when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_AVERAGE. " Mean Value - r_function_number = 1. - when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_count. " Count - r_function_number = 2. - when others. - clear r_function_number. - endcase. - endmethod. + CASE i_totals_function. + WHEN zcl_excel_table=>totals_function_sum. " Total + r_function_number = 9. + WHEN zcl_excel_table=>totals_function_min. " Minimum + r_function_number = 5. + WHEN zcl_excel_table=>totals_function_max. " Maximum + r_function_number = 4. + WHEN zcl_excel_table=>totals_function_average. " Mean Value + r_function_number = 1. + WHEN zcl_excel_table=>totals_function_count. " Count + r_function_number = 2. + WHEN OTHERS. + CLEAR r_function_number. + ENDCASE. + ENDMETHOD. -method GET_OPTION. + METHOD get_option. - rs_option = ws_option. + rs_option = ws_option. - endmethod. + ENDMETHOD. -method GET_STYLE. - DATA: ls_styles TYPE ts_styles, + METHOD get_style. + DATA: ls_styles TYPE ts_styles, lo_style TYPE REF TO zcl_excel_style. - CLEAR r_style. - - READ TABLE wt_styles INTO ls_styles WITH TABLE KEY type = i_type - alignment = i_alignment - inttype = i_inttype - decimals = i_decimals. - IF sy-subrc = 0. - r_style = ls_styles-guid. - ELSE. - CASE i_type. - WHEN c_type_hdr. " Header - lo_style = create_style_hdr( i_alignment = i_alignment ). - WHEN c_type_str. "Stripped - lo_style = create_style_stripped( i_alignment = i_alignment - i_inttype = i_inttype - i_decimals = i_decimals ). - WHEN c_type_nor. "Normal - lo_style = create_style_normal( i_alignment = i_alignment - i_inttype = i_inttype - i_decimals = i_decimals ). - WHEN c_type_sub. "Subtotals - lo_style = create_style_subtotal( i_alignment = i_alignment + CLEAR r_style. + + READ TABLE wt_styles INTO ls_styles WITH TABLE KEY type = i_type + alignment = i_alignment + inttype = i_inttype + decimals = i_decimals. + IF sy-subrc = 0. + r_style = ls_styles-guid. + ELSE. + CASE i_type. + WHEN c_type_hdr. " Header + lo_style = create_style_hdr( i_alignment = i_alignment ). + WHEN c_type_str. "Stripped + lo_style = create_style_stripped( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_nor. "Normal + lo_style = create_style_normal( i_alignment = i_alignment i_inttype = i_inttype i_decimals = i_decimals ). - WHEN c_type_tot. "Totals - lo_style = create_style_total( i_alignment = i_alignment - i_inttype = i_inttype - i_decimals = i_decimals ). - ENDCASE. - IF lo_style IS NOT INITIAL. - r_style = lo_style->get_guid( ). - ls_styles-type = i_type. - ls_styles-alignment = i_alignment. - ls_styles-inttype = i_inttype. - ls_styles-decimals = i_decimals. - ls_styles-guid = r_style. - ls_styles-style = lo_style. - INSERT ls_styles INTO TABLE wt_styles. + WHEN c_type_sub. "Subtotals + lo_style = create_style_subtotal( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_tot. "Totals + lo_style = create_style_total( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + ENDCASE. + IF lo_style IS NOT INITIAL. + r_style = lo_style->get_guid( ). + ls_styles-type = i_type. + ls_styles-alignment = i_alignment. + ls_styles-inttype = i_inttype. + ls_styles-decimals = i_decimals. + ls_styles-guid = r_style. + ls_styles-style = lo_style. + INSERT ls_styles INTO TABLE wt_styles. + ENDIF. ENDIF. - ENDIF. - endmethod. + ENDMETHOD. METHOD get_subclasses. @@ -1183,319 +1183,398 @@ method GET_STYLE. ENDMETHOD. -method INIT_OPTION. + METHOD init_option. - ws_option-filter = abap_true. - ws_option-hidenc = abap_true. - ws_option-subtot = abap_true. + ws_option-filter = abap_true. + ws_option-hidenc = abap_true. + ws_option-subtot = abap_true. - endmethod. + ENDMETHOD. -method LOOP_NORMAL. - DATA: l_row_int_end TYPE zexcel_cell_row, - l_row_int TYPE zexcel_cell_row, - l_col_int TYPE zexcel_cell_column, - l_col_alpha TYPE zexcel_cell_column_alpha, - l_cell_value TYPE zexcel_cell_value, - l_s_color TYPE abap_bool, - lo_column TYPE REF TO zcl_excel_column, - l_formula TYPE zexcel_cell_formula, - l_style TYPE zexcel_cell_style, - l_cells TYPE i, - l_count TYPE i, - l_table_row TYPE i. + METHOD loop_normal. + DATA: l_row_int_end TYPE zexcel_cell_row, + l_row_int TYPE zexcel_cell_row, + l_col_int TYPE zexcel_cell_column, + l_col_alpha TYPE zexcel_cell_column_alpha, + l_cell_value TYPE zexcel_cell_value, + l_s_color TYPE abap_bool, + lo_column TYPE REF TO zcl_excel_column, + l_formula TYPE zexcel_cell_formula, + l_style TYPE zexcel_cell_style, + l_cells TYPE i, + l_count TYPE i, + l_table_row TYPE i. - FIELD-SYMBOLS: TYPE ANY, - TYPE STANDARD TABLE, - TYPE zexcel_s_converter_fcat, - TYPE ANY. + FIELD-SYMBOLS: TYPE any, + TYPE STANDARD TABLE, + TYPE zexcel_s_converter_fcat, + TYPE any. - ASSIGN wo_data->* TO . + ASSIGN wo_data->* TO . - DESCRIBE TABLE wt_fieldcatalog LINES l_cells. - DESCRIBE TABLE LINES l_count. - l_cells = l_cells * l_count. + DESCRIBE TABLE wt_fieldcatalog LINES l_cells. + DESCRIBE TABLE LINES l_count. + l_cells = l_cells * l_count. * It is better to loop column by column - LOOP AT wt_fieldcatalog ASSIGNING . - l_row_int = i_row_int. - l_col_int = i_col_int + -position - 1. + LOOP AT wt_fieldcatalog ASSIGNING . + l_row_int = i_row_int. + l_col_int = i_col_int + -position - 1. * Freeze panes - IF -fix_column = abap_true. - ADD 1 TO r_freeze_col. - ENDIF. - l_s_color = abap_true. + IF -fix_column = abap_true. + ADD 1 TO r_freeze_col. + ENDIF. + l_s_color = abap_true. - l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). * Only if the Header is required create it. - IF ws_option-hidehd IS INITIAL. - " First of all write column header - l_cell_value = -scrtext_m. - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_value = l_cell_value - ip_style = -style_hdr ). - ADD 1 TO l_row_int. - ENDIF. - LOOP AT ASSIGNING . - l_table_row = sy-tabix. -* Now the cell values - ASSIGN COMPONENT -columnname OF STRUCTURE TO . -* Now let's write the cell values - IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. - l_style = get_color_style( i_row = l_table_row - i_fieldname = -columnname - i_style = -style_stripped ). + IF ws_option-hidehd IS INITIAL. + " First of all write column header + l_cell_value = -scrtext_m. wo_worksheet->set_cell( ip_column = l_col_alpha ip_row = l_row_int - ip_value = - ip_style = l_style ). - CLEAR l_s_color. - ELSE. - l_style = get_color_style( i_row = l_table_row - i_fieldname = -columnname - i_style = -style_normal ). - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_value = - ip_style = l_style ). - l_s_color = abap_true. + ip_value = l_cell_value + ip_style = -style_hdr ). + ADD 1 TO l_row_int. ENDIF. - READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row - columnname = -columnname. - IF sy-subrc = 0. - wo_worksheet->get_cell( EXPORTING - ip_column = l_col_alpha - ip_row = l_row_int - IMPORTING - ep_value = l_cell_value ). - wo_autofilter->set_value( i_column = l_col_int - i_value = l_cell_value ). - ENDIF. - ADD 1 TO l_row_int. - ENDLOOP. + LOOP AT ASSIGNING . + l_table_row = sy-tabix. +* Now the cell values + ASSIGN COMPONENT -columnname OF STRUCTURE TO . +* Now let's write the cell values + IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. + l_style = get_color_style( i_row = l_table_row + i_fieldname = -columnname + i_style = -style_stripped ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = + ip_style = l_style ). + CLEAR l_s_color. + ELSE. + l_style = get_color_style( i_row = l_table_row + i_fieldname = -columnname + i_style = -style_normal ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = + ip_style = l_style ). + l_s_color = abap_true. + ENDIF. + READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row + columnname = -columnname. + IF sy-subrc = 0. + wo_worksheet->get_cell( EXPORTING + ip_column = l_col_alpha + ip_row = l_row_int + IMPORTING + ep_value = l_cell_value ). + wo_autofilter->set_value( i_column = l_col_int + i_value = l_cell_value ). + ENDIF. + ADD 1 TO l_row_int. + ENDLOOP. * Now let's check for optimized - IF -is_optimized = abap_true . - lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). - lo_column->set_auto_size( ip_auto_size = abap_true ) . - ENDIF. + IF -is_optimized = abap_true . + lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). + lo_column->set_auto_size( ip_auto_size = abap_true ) . + ENDIF. * Now let's check for visible - IF -is_hidden = abap_true. - lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). - lo_column->set_visible( ip_visible = abap_false ) . - ENDIF. + IF -is_hidden = abap_true. + lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). + lo_column->set_visible( ip_visible = abap_false ) . + ENDIF. * Now let's check for total versus subtotal. - IF -totals_function IS NOT INITIAL. - l_row_int_end = l_row_int - 1. + IF -totals_function IS NOT INITIAL. + l_row_int_end = l_row_int - 1. - l_formula = create_formular_total( i_row_int = l_row_int_end - i_column = l_col_alpha - i_totals_function = -totals_function ). - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_formula = l_formula - ip_style = -style_total ). - ENDIF. - ENDLOOP. - endmethod. - - -method LOOP_SUBTOTAL. - - DATA: l_row_int_start TYPE zexcel_cell_row, - l_row_int_end TYPE zexcel_cell_row, - l_row_int TYPE zexcel_cell_row, - l_col_int TYPE zexcel_cell_column, - l_col_alpha TYPE zexcel_cell_column_alpha, - l_col_alpha_start TYPE zexcel_cell_column_alpha, - l_cell_value TYPE zexcel_cell_value, - l_s_color TYPE abap_bool, - lo_column TYPE REF TO zcl_excel_column, - lo_row TYPE REF TO zcl_excel_row, - l_formula TYPE zexcel_cell_formula, - l_style TYPE zexcel_cell_style, - l_text TYPE string, - ls_sort_values TYPE ts_sort_values, - ls_subtotal_rows TYPE ts_subtotal_rows, - l_sort_level TYPE int4, - l_hidden TYPE int4, - l_line TYPE i, - l_cells TYPE i, - l_count TYPE i, - l_table_row TYPE i, - lt_fcat TYPE zexcel_t_converter_fcat. - - FIELD-SYMBOLS: TYPE ANY, - TYPE STANDARD TABLE, - TYPE zexcel_s_converter_fcat, - TYPE ANY, - TYPE ANY, - TYPE ts_sort_values. - - ASSIGN wo_data->* TO . - - REFRESH: wt_sort_values, - wt_subtotal_rows. - - DESCRIBE TABLE wt_fieldcatalog LINES l_cells. - DESCRIBE TABLE LINES l_count. - l_cells = l_cells * l_count. - - READ TABLE ASSIGNING INDEX 1. - IF sy-subrc = 0. - l_row_int = i_row_int + 1. - lt_fcat = wt_fieldcatalog. - SORT lt_fcat BY sort_level DESCENDING. - LOOP AT lt_fcat ASSIGNING WHERE is_subtotalled = abap_true. - ASSIGN COMPONENT -columnname OF STRUCTURE TO . - ls_sort_values-fieldname = -columnname. - ls_sort_values-row_int = l_row_int. - ls_sort_values-sort_level = -sort_level. - ls_sort_values-is_collapsed = -is_collapsed. - CREATE DATA ls_sort_values-value LIKE . - ASSIGN ls_sort_values-value->* TO . - = . - INSERT ls_sort_values INTO TABLE wt_sort_values. - ENDLOOP. - ENDIF. - l_row_int = i_row_int. -* Let's check if we need to hide a sort level. - DESCRIBE TABLE wt_sort_values LINES l_line. - IF l_line <= 1. - CLEAR l_hidden. - ELSE. - LOOP AT wt_sort_values INTO ls_sort_values WHERE is_collapsed = abap_false. - IF l_hidden < ls_sort_values-sort_level. - l_hidden = ls_sort_values-sort_level. + l_formula = create_formular_total( i_row_int = l_row_int_end + i_column = l_col_alpha + i_totals_function = -totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = -style_total ). ENDIF. ENDLOOP. - ENDIF. - ADD 1 TO l_hidden. " As this is the first level we show. + ENDMETHOD. + + + METHOD loop_subtotal. + + DATA: l_row_int_start TYPE zexcel_cell_row, + l_row_int_end TYPE zexcel_cell_row, + l_row_int TYPE zexcel_cell_row, + l_col_int TYPE zexcel_cell_column, + l_col_alpha TYPE zexcel_cell_column_alpha, + l_col_alpha_start TYPE zexcel_cell_column_alpha, + l_cell_value TYPE zexcel_cell_value, + l_s_color TYPE abap_bool, + lo_column TYPE REF TO zcl_excel_column, + lo_row TYPE REF TO zcl_excel_row, + l_formula TYPE zexcel_cell_formula, + l_style TYPE zexcel_cell_style, + l_text TYPE string, + ls_sort_values TYPE ts_sort_values, + ls_subtotal_rows TYPE ts_subtotal_rows, + l_sort_level TYPE int4, + l_hidden TYPE int4, + l_line TYPE i, + l_cells TYPE i, + l_count TYPE i, + l_table_row TYPE i, + lt_fcat TYPE zexcel_t_converter_fcat. + + FIELD-SYMBOLS: TYPE any, + TYPE STANDARD TABLE, + TYPE zexcel_s_converter_fcat, + TYPE any, + TYPE any, + TYPE ts_sort_values. + + ASSIGN wo_data->* TO . + + REFRESH: wt_sort_values, + wt_subtotal_rows. + + DESCRIBE TABLE wt_fieldcatalog LINES l_cells. + DESCRIBE TABLE LINES l_count. + l_cells = l_cells * l_count. + + READ TABLE ASSIGNING INDEX 1. + IF sy-subrc = 0. + l_row_int = i_row_int + 1. + lt_fcat = wt_fieldcatalog. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING WHERE is_subtotalled = abap_true. + ASSIGN COMPONENT -columnname OF STRUCTURE TO . + ls_sort_values-fieldname = -columnname. + ls_sort_values-row_int = l_row_int. + ls_sort_values-sort_level = -sort_level. + ls_sort_values-is_collapsed = -is_collapsed. + CREATE DATA ls_sort_values-value LIKE . + ASSIGN ls_sort_values-value->* TO . + = . + INSERT ls_sort_values INTO TABLE wt_sort_values. + ENDLOOP. + ENDIF. + l_row_int = i_row_int. +* Let's check if we need to hide a sort level. + DESCRIBE TABLE wt_sort_values LINES l_line. + IF l_line <= 1. + CLEAR l_hidden. + ELSE. + LOOP AT wt_sort_values INTO ls_sort_values WHERE is_collapsed = abap_false. + IF l_hidden < ls_sort_values-sort_level. + l_hidden = ls_sort_values-sort_level. + ENDIF. + ENDLOOP. + ENDIF. + ADD 1 TO l_hidden. " As this is the first level we show. * First loop without formular only addtional rows with subtotal text. - LOOP AT ASSIGNING . - ADD 1 TO l_row_int. " 1 is for header row. - l_row_int_start = l_row_int. - SORT lt_fcat BY sort_level DESCENDING. - LOOP AT lt_fcat ASSIGNING WHERE is_subtotalled = abap_true. - l_col_int = i_col_int + -position - 1. - l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + LOOP AT ASSIGNING . + ADD 1 TO l_row_int. " 1 is for header row. + l_row_int_start = l_row_int. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING WHERE is_subtotalled = abap_true. + l_col_int = i_col_int + -position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). * Now the cell values - ASSIGN COMPONENT -columnname OF STRUCTURE TO . - IF sy-subrc = 0. - READ TABLE wt_sort_values ASSIGNING WITH TABLE KEY fieldname = -columnname. + ASSIGN COMPONENT -columnname OF STRUCTURE TO . IF sy-subrc = 0. - ASSIGN -value->* TO . - IF <> OR -new = abap_true. + READ TABLE wt_sort_values ASSIGNING WITH TABLE KEY fieldname = -columnname. + IF sy-subrc = 0. + ASSIGN -value->* TO . + IF <> OR -new = abap_true. * First let's remmember the subtotal values as it has to appear later. - ls_subtotal_rows-row_int = l_row_int. - ls_subtotal_rows-row_int_start = -row_int. - ls_subtotal_rows-columnname = -columnname. - INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. + ls_subtotal_rows-row_int = l_row_int. + ls_subtotal_rows-row_int_start = -row_int. + ls_subtotal_rows-columnname = -columnname. + INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. * Now let's write the subtotal line - l_cell_value = create_text_subtotal( i_value = - i_totals_function = -totals_function ). - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_value = l_cell_value - ip_abap_type = cl_abap_typedescr=>typekind_string - ip_style = -style_subtotal ). - lo_row = wo_worksheet->get_row( ip_row = l_row_int ). - lo_row->set_outline_level( ip_outline_level = -sort_level ) . - IF -is_collapsed = abap_true. - IF -sort_level > l_hidden. - lo_row->set_visible( ip_visible = abap_false ) . + l_cell_value = create_text_subtotal( i_value = + i_totals_function = -totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = -style_subtotal ). + lo_row = wo_worksheet->get_row( ip_row = l_row_int ). + lo_row->set_outline_level( ip_outline_level = -sort_level ) . + IF -is_collapsed = abap_true. + IF -sort_level > l_hidden. + lo_row->set_visible( ip_visible = abap_false ) . + ENDIF. + lo_row->set_collapsed( ip_collapsed = -is_collapsed ) . ENDIF. - lo_row->set_collapsed( ip_collapsed = -is_collapsed ) . - ENDIF. * Now let's change the key - ADD 1 TO l_row_int. - = . - -new = abap_false. - l_line = -sort_level. - LOOP AT wt_sort_values ASSIGNING WHERE sort_level >= l_line. - -row_int = l_row_int. - ENDLOOP. + ADD 1 TO l_row_int. + = . + -new = abap_false. + l_line = -sort_level. + LOOP AT wt_sort_values ASSIGNING WHERE sort_level >= l_line. + -row_int = l_row_int. + ENDLOOP. + ENDIF. ENDIF. ENDIF. - ENDIF. + ENDLOOP. ENDLOOP. - ENDLOOP. - ADD 1 TO l_row_int. - l_row_int_start = l_row_int. - SORT lt_fcat BY sort_level DESCENDING. - LOOP AT lt_fcat ASSIGNING WHERE is_subtotalled = abap_true. - l_col_int = i_col_int + -position - 1. - l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). - READ TABLE wt_sort_values ASSIGNING WITH TABLE KEY fieldname = -columnname. - IF sy-subrc = 0. - ASSIGN -value->* TO . - ls_subtotal_rows-row_int = l_row_int. - ls_subtotal_rows-row_int_start = -row_int. - ls_subtotal_rows-columnname = -columnname. - INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. + ADD 1 TO l_row_int. + l_row_int_start = l_row_int. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING WHERE is_subtotalled = abap_true. + l_col_int = i_col_int + -position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + READ TABLE wt_sort_values ASSIGNING WITH TABLE KEY fieldname = -columnname. + IF sy-subrc = 0. + ASSIGN -value->* TO . + ls_subtotal_rows-row_int = l_row_int. + ls_subtotal_rows-row_int_start = -row_int. + ls_subtotal_rows-columnname = -columnname. + INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. * First let's write the value as it has to appear. - l_cell_value = create_text_subtotal( i_value = - i_totals_function = -totals_function ). - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_value = l_cell_value - ip_abap_type = cl_abap_typedescr=>typekind_string - ip_style = -style_subtotal ). - - l_sort_level = -sort_level. - lo_row = wo_worksheet->get_row( ip_row = l_row_int ). - lo_row->set_outline_level( ip_outline_level = l_sort_level ) . - IF -is_collapsed = abap_true. - IF -sort_level > l_hidden. - lo_row->set_visible( ip_visible = abap_false ) . + l_cell_value = create_text_subtotal( i_value = + i_totals_function = -totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = -style_subtotal ). + + l_sort_level = -sort_level. + lo_row = wo_worksheet->get_row( ip_row = l_row_int ). + lo_row->set_outline_level( ip_outline_level = l_sort_level ) . + IF -is_collapsed = abap_true. + IF -sort_level > l_hidden. + lo_row->set_visible( ip_visible = abap_false ) . + ENDIF. + lo_row->set_collapsed( ip_collapsed = -is_collapsed ) . ENDIF. - lo_row->set_collapsed( ip_collapsed = -is_collapsed ) . + ADD 1 TO l_row_int. ENDIF. - ADD 1 TO l_row_int. - ENDIF. - ENDLOOP. + ENDLOOP. * Let's write the Grand total - l_sort_level = 0. - lo_row = wo_worksheet->get_row( ip_row = l_row_int ). - lo_row->set_outline_level( ip_outline_level = l_sort_level ) . + l_sort_level = 0. + lo_row = wo_worksheet->get_row( ip_row = l_row_int ). + lo_row->set_outline_level( ip_outline_level = l_sort_level ) . * lo_row_dim->set_collapsed( ip_collapsed = -is_collapsed ) . Not on grand total - l_text = create_text_subtotal( i_value = 'Grand'(002) - i_totals_function = -totals_function ). + l_text = create_text_subtotal( i_value = 'Grand'(002) + i_totals_function = -totals_function ). - l_col_alpha_start = zcl_excel_common=>convert_column2alpha( i_col_int ). - wo_worksheet->set_cell( ip_column = l_col_alpha_start - ip_row = l_row_int - ip_value = l_text - ip_abap_type = cl_abap_typedescr=>typekind_string - ip_style = -style_subtotal ). + l_col_alpha_start = zcl_excel_common=>convert_column2alpha( i_col_int ). + wo_worksheet->set_cell( ip_column = l_col_alpha_start + ip_row = l_row_int + ip_value = l_text + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = -style_subtotal ). * It is better to loop column by column second time around * Second loop with formular and data. - LOOP AT wt_fieldcatalog ASSIGNING . - l_row_int = i_row_int. - l_col_int = i_col_int + -position - 1. + LOOP AT wt_fieldcatalog ASSIGNING . + l_row_int = i_row_int. + l_col_int = i_col_int + -position - 1. * Freeze panes - IF -fix_column = abap_true. - ADD 1 TO r_freeze_col. - ENDIF. - l_s_color = abap_true. - l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). - " First of all write column header - l_cell_value = -scrtext_m. - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_value = l_cell_value - ip_abap_type = cl_abap_typedescr=>typekind_string - ip_style = -style_hdr ). - ADD 1 TO l_row_int. - LOOP AT ASSIGNING . - l_table_row = sy-tabix. + IF -fix_column = abap_true. + ADD 1 TO r_freeze_col. + ENDIF. + l_s_color = abap_true. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + " First of all write column header + l_cell_value = -scrtext_m. + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = -style_hdr ). + ADD 1 TO l_row_int. + LOOP AT ASSIGNING . + l_table_row = sy-tabix. * Now the cell values - ASSIGN COMPONENT -columnname OF STRUCTURE TO . + ASSIGN COMPONENT -columnname OF STRUCTURE TO . +* Let's check for subtotal lines + DO. + READ TABLE wt_subtotal_rows TRANSPORTING NO FIELDS WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + IF -is_subtotalled = abap_false AND + -totals_function IS NOT INITIAL. + DO. + READ TABLE wt_subtotal_rows INTO ls_subtotal_rows WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + l_row_int_start = ls_subtotal_rows-row_int_start. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = -totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = -style_subtotal ). + IF -is_collapsed = abap_true. + lo_row = wo_worksheet->get_row( ip_row = l_row_int ). + lo_row->set_collapsed( ip_collapsed = -is_collapsed ). + IF -sort_level > l_hidden. + lo_row->set_visible( ip_visible = abap_false ) . + ENDIF. + ENDIF. + ADD 1 TO l_row_int. + ELSE. + EXIT. + ENDIF. + ENDDO. + ELSE. + ADD 1 TO l_row_int. + ENDIF. + ELSE. + EXIT. + ENDIF. + ENDDO. +* Let's set the row dimension values + lo_row = wo_worksheet->get_row( ip_row = l_row_int ). + lo_row->set_outline_level( ip_outline_level = ws_layout-max_subtotal_level ) . + IF -is_collapsed = abap_true. + lo_row->set_visible( ip_visible = abap_false ) . + lo_row->set_collapsed( ip_collapsed = -is_collapsed ) . + ENDIF. +* Now let's write the cell values + IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. + l_style = get_color_style( i_row = l_table_row + i_fieldname = -columnname + i_style = -style_stripped ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = + ip_style = l_style ). + CLEAR l_s_color. + ELSE. + l_style = get_color_style( i_row = l_table_row + i_fieldname = -columnname + i_style = -style_normal ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = + ip_style = l_style ). + l_s_color = abap_true. + ENDIF. + READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row + columnname = -columnname. + IF sy-subrc = 0. + wo_worksheet->get_cell( EXPORTING + ip_column = l_col_alpha + ip_row = l_row_int + IMPORTING + ep_value = l_cell_value ). + wo_autofilter->set_value( i_column = l_col_int + i_value = l_cell_value ). + ENDIF. + ADD 1 TO l_row_int. + ENDLOOP. * Let's check for subtotal lines DO. READ TABLE wt_subtotal_rows TRANSPORTING NO FIELDS WITH TABLE KEY row_int = l_row_int. @@ -1519,9 +1598,6 @@ method LOOP_SUBTOTAL. IF -is_collapsed = abap_true. lo_row = wo_worksheet->get_row( ip_row = l_row_int ). lo_row->set_collapsed( ip_collapsed = -is_collapsed ). - IF -sort_level > l_hidden. - lo_row->set_visible( ip_visible = abap_false ) . - ENDIF. ENDIF. ADD 1 TO l_row_int. ELSE. @@ -1535,136 +1611,60 @@ method LOOP_SUBTOTAL. EXIT. ENDIF. ENDDO. -* Let's set the row dimension values - lo_row = wo_worksheet->get_row( ip_row = l_row_int ). - lo_row->set_outline_level( ip_outline_level = ws_layout-max_subtotal_level ) . - IF -is_collapsed = abap_true. - lo_row->set_visible( ip_visible = abap_false ) . - lo_row->set_collapsed( ip_collapsed = -is_collapsed ) . - ENDIF. -* Now let's write the cell values - IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. - l_style = get_color_style( i_row = l_table_row - i_fieldname = -columnname - i_style = -style_stripped ). - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_value = - ip_style = l_style ). - CLEAR l_s_color. - ELSE. - l_style = get_color_style( i_row = l_table_row - i_fieldname = -columnname - i_style = -style_normal ). +* Now let's check for Grand total + IF -is_subtotalled = abap_false AND + -totals_function IS NOT INITIAL. + l_row_int_start = i_row_int + 1. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = -totals_function ). wo_worksheet->set_cell( ip_column = l_col_alpha ip_row = l_row_int - ip_value = - ip_style = l_style ). - l_s_color = abap_true. - ENDIF. - READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row - columnname = -columnname. - IF sy-subrc = 0. - wo_worksheet->get_cell( EXPORTING - ip_column = l_col_alpha - ip_row = l_row_int - IMPORTING - ep_value = l_cell_value ). - wo_autofilter->set_value( i_column = l_col_int - i_value = l_cell_value ). - ENDIF. - ADD 1 TO l_row_int. - ENDLOOP. -* Let's check for subtotal lines - DO. - READ TABLE wt_subtotal_rows TRANSPORTING NO FIELDS WITH TABLE KEY row_int = l_row_int. - IF sy-subrc = 0. - IF -is_subtotalled = abap_false AND - -totals_function IS NOT INITIAL. - DO. - READ TABLE wt_subtotal_rows INTO ls_subtotal_rows WITH TABLE KEY row_int = l_row_int. - IF sy-subrc = 0. - l_row_int_start = ls_subtotal_rows-row_int_start. - l_row_int_end = l_row_int - 1. - - l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start - i_row_int_end = l_row_int_end - i_column = l_col_alpha - i_totals_function = -totals_function ). - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_formula = l_formula - ip_style = -style_subtotal ). - IF -is_collapsed = abap_true. - lo_row = wo_worksheet->get_row( ip_row = l_row_int ). - lo_row->set_collapsed( ip_collapsed = -is_collapsed ). - ENDIF. - ADD 1 TO l_row_int. - ELSE. - EXIT. - ENDIF. - ENDDO. - ELSE. - ADD 1 TO l_row_int. - ENDIF. - ELSE. - EXIT. + ip_formula = l_formula + ip_style = -style_subtotal ). ENDIF. - ENDDO. -* Now let's check for Grand total - IF -is_subtotalled = abap_false AND - -totals_function IS NOT INITIAL. - l_row_int_start = i_row_int + 1. - l_row_int_end = l_row_int - 1. - - l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start - i_row_int_end = l_row_int_end - i_column = l_col_alpha - i_totals_function = -totals_function ). - wo_worksheet->set_cell( ip_column = l_col_alpha - ip_row = l_row_int - ip_formula = l_formula - ip_style = -style_subtotal ). - ENDIF. * Now let's check for optimized - IF -is_optimized = abap_true. - lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). - lo_column->set_auto_size( ip_auto_size = abap_true ) . - ENDIF. + IF -is_optimized = abap_true. + lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). + lo_column->set_auto_size( ip_auto_size = abap_true ) . + ENDIF. * Now let's check for visible - IF -is_hidden = abap_true. - lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). - lo_column->set_visible( ip_visible = abap_false ) . - ENDIF. - ENDLOOP. + IF -is_hidden = abap_true. + lo_column = wo_worksheet->get_column( ip_column = l_col_alpha ). + lo_column->set_visible( ip_visible = abap_false ) . + ENDIF. + ENDLOOP. - endmethod. + ENDMETHOD. -method OPEN_FILE. - data: l_bytecount type i, - lt_file type solix_tab, - l_dir type string. + METHOD open_file. + DATA: l_bytecount TYPE i, + lt_file TYPE solix_tab, + l_dir TYPE string. - field-symbols: type any table. + FIELD-SYMBOLS: TYPE ANY TABLE. - assign wo_data->* to . + ASSIGN wo_data->* TO . * catch zcx_excel . *endtry. - if wo_excel is bound. - get_file( importing e_bytecount = l_bytecount - et_file = lt_file ) . - - l_dir = create_path( ) . - - cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount - filename = l_dir - filetype = 'BIN' - changing data_tab = lt_file ). - cl_gui_frontend_services=>execute( - exporting - document = l_dir + IF wo_excel IS BOUND. + get_file( IMPORTING e_bytecount = l_bytecount + et_file = lt_file ) . + + l_dir = create_path( ) . + + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount + filename = l_dir + filetype = 'BIN' + CHANGING data_tab = lt_file ). + cl_gui_frontend_services=>execute( + EXPORTING + document = l_dir * application = * parameter = * default_directory = @@ -1672,149 +1672,149 @@ method OPEN_FILE. * minimized = * synchronous = * operation = 'OPEN' - exceptions - cntl_error = 1 - error_no_gui = 2 - bad_parameter = 3 - file_not_found = 4 - path_not_found = 5 - file_extension_unknown = 6 - error_execute_failed = 7 - synchronous_failed = 8 - not_supported_by_gui = 9 - ). - if sy-subrc <> 0. - message id sy-msgid type sy-msgty number sy-msgno - with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. - endif. + EXCEPTIONS + cntl_error = 1 + error_no_gui = 2 + bad_parameter = 3 + file_not_found = 4 + path_not_found = 5 + file_extension_unknown = 6 + error_execute_failed = 7 + synchronous_failed = 8 + not_supported_by_gui = 9 + ). + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. - endif. + ENDIF. - endmethod. + ENDMETHOD. -method SET_AUTOFILTER_AREA. - DATA: ls_area TYPE zexcel_s_autofilter_area, - l_lines TYPE i, - lt_values TYPE zexcel_t_autofilter_values, - ls_values TYPE zexcel_s_autofilter_values. + METHOD set_autofilter_area. + DATA: ls_area TYPE zexcel_s_autofilter_area, + l_lines TYPE i, + lt_values TYPE zexcel_t_autofilter_values, + ls_values TYPE zexcel_s_autofilter_values. * Let's check for filter. - IF wo_autofilter IS BOUND. - ls_area-row_start = 1. - lt_values = wo_autofilter->get_values( ) . - SORT lt_values BY column ASCENDING. - DESCRIBE TABLE lt_values LINES l_lines. - READ TABLE lt_values INTO ls_values INDEX 1. - IF sy-subrc = 0. - ls_area-col_start = ls_values-column. - ENDIF. - READ TABLE lt_values INTO ls_values INDEX l_lines. - IF sy-subrc = 0. - ls_area-col_end = ls_values-column. - ENDIF. - wo_autofilter->set_filter_area( is_area = ls_area ) . - ENDIF. - - endmethod. - - -method SET_CELL_FORMAT. - DATA: l_format TYPE zexcel_number_format. - - CLEAR r_format. - CASE i_inttype. - WHEN cl_abap_typedescr=>typekind_date. - r_format = wo_worksheet->get_default_excel_date_format( ). - WHEN cl_abap_typedescr=>typekind_time. - r_format = wo_worksheet->get_default_excel_time_format( ). - WHEN cl_abap_typedescr=>typekind_float OR cl_abap_typedescr=>typekind_packed. - IF i_decimals > 0 . - l_format = '#,##0.'. - DO i_decimals TIMES. - CONCATENATE l_format '0' INTO l_format. - ENDDO. - r_format = l_format. + IF wo_autofilter IS BOUND. + ls_area-row_start = 1. + lt_values = wo_autofilter->get_values( ) . + SORT lt_values BY column ASCENDING. + DESCRIBE TABLE lt_values LINES l_lines. + READ TABLE lt_values INTO ls_values INDEX 1. + IF sy-subrc = 0. + ls_area-col_start = ls_values-column. + ENDIF. + READ TABLE lt_values INTO ls_values INDEX l_lines. + IF sy-subrc = 0. + ls_area-col_end = ls_values-column. ENDIF. - WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2. - r_format = '#,##0'. - ENDCASE. + wo_autofilter->set_filter_area( is_area = ls_area ) . + ENDIF. - endmethod. + ENDMETHOD. -method SET_FIELDCATALOG. + METHOD set_cell_format. + DATA: l_format TYPE zexcel_number_format. + + CLEAR r_format. + CASE i_inttype. + WHEN cl_abap_typedescr=>typekind_date. + r_format = wo_worksheet->get_default_excel_date_format( ). + WHEN cl_abap_typedescr=>typekind_time. + r_format = wo_worksheet->get_default_excel_time_format( ). + WHEN cl_abap_typedescr=>typekind_float OR cl_abap_typedescr=>typekind_packed. + IF i_decimals > 0 . + l_format = '#,##0.'. + DO i_decimals TIMES. + CONCATENATE l_format '0' INTO l_format. + ENDDO. + r_format = l_format. + ENDIF. + WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2. + r_format = '#,##0'. + ENDCASE. - DATA: lr_data TYPE REF TO data, - lo_structdescr TYPE REF TO cl_abap_structdescr, - lt_dfies TYPE ddfields, - ls_dfies TYPE dfies. - DATA: ls_fcat TYPE zexcel_s_converter_fcat. + ENDMETHOD. - FIELD-SYMBOLS: TYPE ANY TABLE. - ASSIGN wo_data->* TO . + METHOD set_fieldcatalog. - CREATE DATA lr_data LIKE LINE OF . + DATA: lr_data TYPE REF TO data, + lo_structdescr TYPE REF TO cl_abap_structdescr, + lt_dfies TYPE ddfields, + ls_dfies TYPE dfies. + DATA: ls_fcat TYPE zexcel_s_converter_fcat. - lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + FIELD-SYMBOLS: TYPE ANY TABLE. - lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + ASSIGN wo_data->* TO . - LOOP AT lt_dfies INTO ls_dfies. - MOVE-CORRESPONDING ls_dfies TO ls_fcat. - ls_fcat-columnname = ls_dfies-fieldname. - INSERT ls_fcat INTO TABLE wt_fieldcatalog. - ENDLOOP. + CREATE DATA lr_data LIKE LINE OF . - clean_fieldcatalog( ). + lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). - endmethod. + lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + LOOP AT lt_dfies INTO ls_dfies. + MOVE-CORRESPONDING ls_dfies TO ls_fcat. + ls_fcat-columnname = ls_dfies-fieldname. + INSERT ls_fcat INTO TABLE wt_fieldcatalog. + ENDLOOP. -method SET_OPTION. + clean_fieldcatalog( ). + + ENDMETHOD. - IF ws_indx-begdt IS INITIAL. - ws_indx-begdt = sy-datum. - ENDIF. - ws_indx-aedat = sy-datum. - ws_indx-usera = sy-uname. - ws_indx-pgmid = sy-cprog. + METHOD set_option. - EXPORT p1 = is_option TO DATABASE indx(xl) FROM ws_indx ID ws_indx-srtfd. + IF ws_indx-begdt IS INITIAL. + ws_indx-begdt = sy-datum. + ENDIF. - IF sy-subrc = 0. - ws_option = is_option. - ENDIF. + ws_indx-aedat = sy-datum. + ws_indx-usera = sy-uname. + ws_indx-pgmid = sy-cprog. - endmethod. + EXPORT p1 = is_option TO DATABASE indx(xl) FROM ws_indx ID ws_indx-srtfd. + IF sy-subrc = 0. + ws_option = is_option. + ENDIF. + + ENDMETHOD. -method WRITE_FILE. - data: l_bytecount type i, - lt_file type solix_tab, - l_dir type string. - field-symbols: type any table. + METHOD write_file. + DATA: l_bytecount TYPE i, + lt_file TYPE solix_tab, + l_dir TYPE string. - assign wo_data->* to . + FIELD-SYMBOLS: TYPE ANY TABLE. + + ASSIGN wo_data->* TO . * catch zcx_excel . *endtry. - if wo_excel is bound. - get_file( importing e_bytecount = l_bytecount - et_file = lt_file ) . - if i_path is initial. - l_dir = create_path( ) . - else. - l_dir = i_path. - endif. - cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount - filename = l_dir - filetype = 'BIN' - changing data_tab = lt_file ). - endif. - endmethod. + IF wo_excel IS BOUND. + get_file( IMPORTING e_bytecount = l_bytecount + et_file = lt_file ) . + IF i_path IS INITIAL. + l_dir = create_path( ) . + ELSE. + l_dir = i_path. + ENDIF. + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount + filename = l_dir + filetype = 'BIN' + CHANGING data_tab = lt_file ). + ENDIF. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_converter_alv.clas.abap b/src/zcl_excel_converter_alv.clas.abap index 8c5d3d058..ef4f446ce 100644 --- a/src/zcl_excel_converter_alv.clas.abap +++ b/src/zcl_excel_converter_alv.clas.abap @@ -1,312 +1,312 @@ -class ZCL_EXCEL_CONVERTER_ALV definition - public - abstract - create public . +CLASS zcl_excel_converter_alv DEFINITION + PUBLIC + ABSTRACT + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_CONVERTER_ALV *"* do not include other source files here!!! -public section. - type-pools ABAP . - type-pools KKBLO . + PUBLIC SECTION. + TYPE-POOLS abap . + TYPE-POOLS kkblo . - interfaces ZIF_EXCEL_CONVERTER - all methods abstract . + INTERFACES zif_excel_converter + ALL METHODS ABSTRACT . - class-methods CLASS_CONSTRUCTOR . + CLASS-METHODS class_constructor . *"* protected components of class ZCL_EXCEL_CONVERTER_ALV *"* do not include other source files here!!! -protected section. - - data WT_SORT type LVC_T_SORT . - data WT_FILT type LVC_T_FILT . - data WT_FCAT type LVC_T_FCAT . - data WS_LAYO type LVC_S_LAYO . - data WS_OPTION type ZEXCEL_S_CONVERTER_OPTION . - - methods UPDATE_CATALOG - changing - !CS_LAYOUT type ZEXCEL_S_CONVERTER_LAYO - !CT_FIELDCATALOG type ZEXCEL_T_CONVERTER_FCAT . - methods APPLY_SORT - importing - !IT_TABLE type STANDARD TABLE - exporting - !EO_TABLE type ref to DATA . - methods GET_COLOR - importing - !IO_TABLE type ref to DATA - exporting - !ET_COLORS type ZEXCEL_T_CONVERTER_COL . - methods GET_FILTER - exporting - !ET_FILTER type ZEXCEL_T_CONVERTER_FIL - changing - !XO_TABLE type ref to DATA . + PROTECTED SECTION. + + DATA wt_sort TYPE lvc_t_sort . + DATA wt_filt TYPE lvc_t_filt . + DATA wt_fcat TYPE lvc_t_fcat . + DATA ws_layo TYPE lvc_s_layo . + DATA ws_option TYPE zexcel_s_converter_option . + + METHODS update_catalog + CHANGING + !cs_layout TYPE zexcel_s_converter_layo + !ct_fieldcatalog TYPE zexcel_t_converter_fcat . + METHODS apply_sort + IMPORTING + !it_table TYPE STANDARD TABLE + EXPORTING + !eo_table TYPE REF TO data . + METHODS get_color + IMPORTING + !io_table TYPE REF TO data + EXPORTING + !et_colors TYPE zexcel_t_converter_col . + METHODS get_filter + EXPORTING + !et_filter TYPE zexcel_t_converter_fil + CHANGING + !xo_table TYPE REF TO data . *"* private components of class ZCL_EXCEL_CONVERTER_ALV *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - class-data WT_COLORS type TT_COL_CONVERTER . + CLASS-DATA wt_colors TYPE tt_col_converter . ENDCLASS. -CLASS ZCL_EXCEL_CONVERTER_ALV IMPLEMENTATION. +CLASS zcl_excel_converter_alv IMPLEMENTATION. -method APPLY_SORT. - DATA: lt_otab TYPE abap_sortorder_tab, - ls_otab TYPE abap_sortorder. + METHOD apply_sort. + DATA: lt_otab TYPE abap_sortorder_tab, + ls_otab TYPE abap_sortorder. - FIELD-SYMBOLS: TYPE STANDARD TABLE, - TYPE lvc_s_sort. + FIELD-SYMBOLS: TYPE STANDARD TABLE, + TYPE lvc_s_sort. - CREATE DATA eo_table LIKE it_table. - ASSIGN eo_table->* TO . + CREATE DATA eo_table LIKE it_table. + ASSIGN eo_table->* TO . - = it_table. + = it_table. - SORT wt_sort BY spos. - LOOP AT wt_sort ASSIGNING . - IF -up = abap_true. - ls_otab-name = -fieldname. - ls_otab-descending = abap_false. + SORT wt_sort BY spos. + LOOP AT wt_sort ASSIGNING . + IF -up = abap_true. + ls_otab-name = -fieldname. + ls_otab-descending = abap_false. * ls_otab-astext = abap_true. " not only text fields - INSERT ls_otab INTO TABLE lt_otab. - ENDIF. - IF -down = abap_true. - ls_otab-name = -fieldname. - ls_otab-descending = abap_true. + INSERT ls_otab INTO TABLE lt_otab. + ENDIF. + IF -down = abap_true. + ls_otab-name = -fieldname. + ls_otab-descending = abap_true. * ls_otab-astext = abap_true. " not only text fields - INSERT ls_otab INTO TABLE lt_otab. + INSERT ls_otab INTO TABLE lt_otab. + ENDIF. + ENDLOOP. + IF lt_otab IS NOT INITIAL. + SORT BY (lt_otab). ENDIF. - ENDLOOP. - IF lt_otab IS NOT INITIAL. - SORT BY (lt_otab). - ENDIF. - endmethod. + ENDMETHOD. -method CLASS_CONSTRUCTOR. + METHOD class_constructor. * let's fill the color conversion routines. - DATA: ls_color TYPE ts_col_converter. + DATA: ls_color TYPE ts_col_converter. * 0 all combination the same - ls_color-col = 0. - ls_color-int = 0. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 0. - ls_color-int = 0. - ls_color-inv = 1. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 0. - ls_color-int = 1. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 0. - ls_color-int = 1. - ls_color-inv = 1. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. + ls_color-col = 0. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. * Blue - ls_color-col = 1. - ls_color-int = 0. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFB0E4FC'. " 176 228 252 blue - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 1. - ls_color-int = 0. - ls_color-inv = 1. - ls_color-fontcolor = 'FFB0E4FC'. " 176 228 252 blue - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 1. - ls_color-int = 1. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FF5FCBFE'. " 095 203 254 Int blue - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 1. - ls_color-int = 1. - ls_color-inv = 1. - ls_color-fontcolor = 'FF5FCBFE'. " 095 203 254 - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 - INSERT ls_color INTO TABLE wt_colors. + ls_color-col = 1. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFB0E4FC'. " 176 228 252 blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFB0E4FC'. " 176 228 252 blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF5FCBFE'. " 095 203 254 Int blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF5FCBFE'. " 095 203 254 + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 + INSERT ls_color INTO TABLE wt_colors. * Gray - ls_color-col = 2. - ls_color-int = 0. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. - ls_color-fillcolor = 'FFE5EAF0'. " 229 234 240 gray - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 2. - ls_color-int = 0. - ls_color-inv = 1. - ls_color-fontcolor = 'FFE5EAF0'. " 229 234 240 gray - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 2. - ls_color-int = 1. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFD8E8F4'. " 216 234 244 int gray - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 2. - ls_color-int = 1. - ls_color-inv = 1. - ls_color-fontcolor = 'FFD8E8F4'. " 216 234 244 int gray - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. + ls_color-col = 2. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. + ls_color-fillcolor = 'FFE5EAF0'. " 229 234 240 gray + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFE5EAF0'. " 229 234 240 gray + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFD8E8F4'. " 216 234 244 int gray + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFD8E8F4'. " 216 234 244 int gray + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. *Yellow - ls_color-col = 3. - ls_color-int = 0. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFFEFEB8'. " 254 254 184 yellow - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 3. - ls_color-int = 0. - ls_color-inv = 1. - ls_color-fontcolor = 'FFFEFEB8'. " 254 254 184 yellow - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 3. - ls_color-int = 1. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFF9ED5D'. " 249 237 093 int yellow - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 3. - ls_color-int = 1. - ls_color-inv = 1. - ls_color-fontcolor = 'FFF9ED5D'. " 249 237 093 int yellow - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. + ls_color-col = 3. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFEFEB8'. " 254 254 184 yellow + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFEFEB8'. " 254 254 184 yellow + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFF9ED5D'. " 249 237 093 int yellow + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFF9ED5D'. " 249 237 093 int yellow + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. * light blue - ls_color-col = 4. - ls_color-int = 0. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFCEE7FB'. " 206 231 251 light blue - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 4. - ls_color-int = 0. - ls_color-inv = 1. - ls_color-fontcolor = 'FFCEE7FB'. " 206 231 251 light blue - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 4. - ls_color-int = 1. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FF9ACCEF'. " 154 204 239 int light blue - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 4. - ls_color-int = 1. - ls_color-inv = 1. - ls_color-fontcolor = 'FF9ACCEF'. " 154 204 239 int light blue - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. + ls_color-col = 4. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFCEE7FB'. " 206 231 251 light blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFCEE7FB'. " 206 231 251 light blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF9ACCEF'. " 154 204 239 int light blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF9ACCEF'. " 154 204 239 int light blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. * Green - ls_color-col = 5. - ls_color-int = 0. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFCEF8AE'. " 206 248 174 Green - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 5. - ls_color-int = 0. - ls_color-inv = 1. - ls_color-fontcolor = 'FFCEF8AE'. " 206 248 174 Green - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 5. - ls_color-int = 1. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FF7AC769'. " 122 199 105 int Green - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 5. - ls_color-int = 1. - ls_color-inv = 1. - ls_color-fontcolor = 'FF7AC769'. " 122 199 105 int Green - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. + ls_color-col = 5. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFCEF8AE'. " 206 248 174 Green + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFCEF8AE'. " 206 248 174 Green + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF7AC769'. " 122 199 105 int Green + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF7AC769'. " 122 199 105 int Green + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. * Red - ls_color-col = 6. - ls_color-int = 0. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFFDBBBC'. " 253 187 188 Red - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 6. - ls_color-int = 0. - ls_color-inv = 1. - ls_color-fontcolor = 'FFFDBBBC'. " 253 187 188 Red - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 6. - ls_color-int = 1. - ls_color-inv = 0. - ls_color-fontcolor = 'FF000000'. " 000 000 000 Black - ls_color-fillcolor = 'FFFB6B6B'. " 251 107 107 int Red - INSERT ls_color INTO TABLE wt_colors. - - ls_color-col = 6. - ls_color-int = 1. - ls_color-inv = 1. - ls_color-fontcolor = 'FFFB6B6B'. " 251 107 107 int Red - ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White - INSERT ls_color INTO TABLE wt_colors. - - endmethod. - - -method GET_COLOR. - DATA: ls_con_col TYPE zexcel_s_converter_col, - ls_color TYPE ts_col_converter, - l_line TYPE i, - l_color(4) TYPE c. - FIELD-SYMBOLS: TYPE STANDARD TABLE, - TYPE ANY, - TYPE ANY, - type standard table, - type any. + ls_color-col = 6. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFDBBBC'. " 253 187 188 Red + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFDBBBC'. " 253 187 188 Red + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFB6B6B'. " 251 107 107 int Red + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFB6B6B'. " 251 107 107 int Red + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ENDMETHOD. + + + METHOD get_color. + DATA: ls_con_col TYPE zexcel_s_converter_col, + ls_color TYPE ts_col_converter, + l_line TYPE i, + l_color(4) TYPE c. + FIELD-SYMBOLS: TYPE STANDARD TABLE, + TYPE any, + TYPE any, + TYPE STANDARD TABLE, + TYPE any. * Loop trough the table to set the color properties of each line. The color properties field is * Char 4 and the characters is set as follows: @@ -315,292 +315,292 @@ method GET_COLOR. * Char 3 = Intensified on/of = 1 = on * Char 4 = Inverse display = 0 = of - ASSIGN io_table->* TO . - - IF ws_layo-info_fname IS NOT INITIAL OR - ws_layo-ctab_fname IS NOT INITIAL. - LOOP AT ASSIGNING . - l_line = sy-tabix. - IF ws_layo-info_fname IS NOT INITIAL. - ASSIGN COMPONENT ws_layo-info_fname OF STRUCTURE TO . - IF sy-subrc = 0 AND IS NOT INITIAL. - l_color = . - IF l_color(1) = 'C'. - READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = l_color+1(1) - int = l_color+2(1) - inv = l_color+3(1). - IF sy-subrc = 0. - ls_con_col-rownumber = l_line. - ls_con_col-columnname = space. - ls_con_col-fontcolor = ls_color-fontcolor. - ls_con_col-fillcolor = ls_color-fillcolor. - INSERT ls_con_col INTO TABLE et_colors. + ASSIGN io_table->* TO . + + IF ws_layo-info_fname IS NOT INITIAL OR + ws_layo-ctab_fname IS NOT INITIAL. + LOOP AT ASSIGNING . + l_line = sy-tabix. + IF ws_layo-info_fname IS NOT INITIAL. + ASSIGN COMPONENT ws_layo-info_fname OF STRUCTURE TO . + IF sy-subrc = 0 AND IS NOT INITIAL. + l_color = . + IF l_color(1) = 'C'. + READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = l_color+1(1) + int = l_color+2(1) + inv = l_color+3(1). + IF sy-subrc = 0. + ls_con_col-rownumber = l_line. + ls_con_col-columnname = space. + ls_con_col-fontcolor = ls_color-fontcolor. + ls_con_col-fillcolor = ls_color-fillcolor. + INSERT ls_con_col INTO TABLE et_colors. + ENDIF. ENDIF. ENDIF. ENDIF. - ENDIF. - if ws_layo-ctab_fname is not initial. - - assign component ws_layo-ctab_fname of structure to . - if sy-subrc = 0. - loop at assigning . - assign component 'COLOR' of structure to . - if sy-subrc = 0. - if is not initial. - field-symbols: type any, - type any, - type any, - type any, - type any. - assign component 'COL' of structure to . - assign component 'INT' of structure to . - assign component 'INV' of structure to . - read table wt_colors into ls_color with table key col = - int = - inv = . - if sy-subrc = 0. - ls_con_col-rownumber = l_line. - assign component 'FNAME' of structure to . - if sy-subrc ne 0. - assign component 'FIELDNAME' of structure to . - if sy-subrc eq 0. + IF ws_layo-ctab_fname IS NOT INITIAL. + + ASSIGN COMPONENT ws_layo-ctab_fname OF STRUCTURE TO . + IF sy-subrc = 0. + LOOP AT ASSIGNING . + ASSIGN COMPONENT 'COLOR' OF STRUCTURE TO . + IF sy-subrc = 0. + IF IS NOT INITIAL. + FIELD-SYMBOLS: TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE any. + ASSIGN COMPONENT 'COL' OF STRUCTURE TO . + ASSIGN COMPONENT 'INT' OF STRUCTURE TO . + ASSIGN COMPONENT 'INV' OF STRUCTURE TO . + READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = + int = + inv = . + IF sy-subrc = 0. + ls_con_col-rownumber = l_line. + ASSIGN COMPONENT 'FNAME' OF STRUCTURE TO . + IF sy-subrc NE 0. + ASSIGN COMPONENT 'FIELDNAME' OF STRUCTURE TO . + IF sy-subrc EQ 0. + ls_con_col-columnname = . + ENDIF. + ELSE. ls_con_col-columnname = . - endif. - else. - ls_con_col-columnname = . - endif. - - ls_con_col-fontcolor = ls_color-fontcolor. - ls_con_col-fillcolor = ls_color-fillcolor. - assign component 'NOKEYCOL' of structure to . - if sy-subrc eq 0. - ls_con_col-nokeycol = . - endif. - insert ls_con_col into table et_colors. - endif. - endif. - endif. - endloop. - endif. - endif. - ENDLOOP. - ENDIF. - endmethod. - - -METHOD get_filter. - DATA: ls_filt TYPE lvc_s_filt, - l_line TYPE i, - ls_filter TYPE zexcel_s_converter_fil. - DATA: lo_addit TYPE REF TO cl_abap_elemdescr, - lt_components_tab TYPE cl_abap_structdescr=>component_table, - ls_components TYPE abap_componentdescr, - lo_table TYPE REF TO cl_abap_tabledescr, - lo_struc TYPE REF TO cl_abap_structdescr, - lo_trange TYPE REF TO data, - lo_srange TYPE REF TO data, - lo_ltabdata TYPE REF TO data. - - FIELD-SYMBOLS: TYPE STANDARD TABLE, - TYPE STANDARD TABLE, - TYPE any, - TYPE any, - TYPE any, - TYPE any, - TYPE STANDARD TABLE. - - IF ws_option-filter = abap_false. - REFRESH et_filter. - RETURN. - ENDIF. - - ASSIGN xo_table->* TO . - - CREATE DATA lo_ltabdata LIKE . - ASSIGN lo_ltabdata->* TO . - - LOOP AT wt_filt INTO ls_filt. - LOOP AT ASSIGNING . - l_line = sy-tabix. - ASSIGN COMPONENT ls_filt-fieldname OF STRUCTURE TO . - IF sy-subrc = 0. - IF l_line = 1. - REFRESH lt_components_tab. - ls_components-name = 'SIGN'. - lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-sign ). - ls_components-type = lo_addit . - INSERT ls_components INTO TABLE lt_components_tab. - ls_components-name = 'OPTION'. - lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-option ). - ls_components-type = lo_addit . - INSERT ls_components INTO TABLE lt_components_tab. - ls_components-name = 'LOW'. - lo_addit ?= cl_abap_typedescr=>describe_by_data( ). - ls_components-type = lo_addit . - INSERT ls_components INTO TABLE lt_components_tab. - ls_components-name = 'HIGH'. - lo_addit ?= cl_abap_typedescr=>describe_by_data( ). - ls_components-type = lo_addit . - INSERT ls_components INTO TABLE lt_components_tab. - "create new line type - TRY. - lo_struc = cl_abap_structdescr=>create( p_components = lt_components_tab - p_strict = abap_false ). - CATCH cx_sy_struct_creation. - CONTINUE. - ENDTRY. - lo_table = cl_abap_tabledescr=>create( lo_struc ). - - CREATE DATA lo_trange TYPE HANDLE lo_table. - CREATE DATA lo_srange TYPE HANDLE lo_struc. - - ASSIGN lo_trange->* TO . - ASSIGN lo_srange->* TO . + ENDIF. + + ls_con_col-fontcolor = ls_color-fontcolor. + ls_con_col-fillcolor = ls_color-fillcolor. + ASSIGN COMPONENT 'NOKEYCOL' OF STRUCTURE TO . + IF sy-subrc EQ 0. + ls_con_col-nokeycol = . + ENDIF. + INSERT ls_con_col INTO TABLE et_colors. + ENDIF. + ENDIF. + ENDIF. + ENDLOOP. + ENDIF. ENDIF. - REFRESH . - ASSIGN COMPONENT 'SIGN' OF STRUCTURE TO . - = ls_filt-sign. - ASSIGN COMPONENT 'OPTION' OF STRUCTURE TO . - = ls_filt-option. - ASSIGN COMPONENT 'LOW' OF STRUCTURE TO . - = ls_filt-low. - ASSIGN COMPONENT 'HIGH' OF STRUCTURE TO . - = ls_filt-high. - INSERT INTO TABLE . - IF IN . - IF ws_option-filter = abap_true. - ls_filter-rownumber = l_line. - ls_filter-columnname = ls_filt-fieldname. - INSERT ls_filter INTO TABLE et_filter. - ELSE. - INSERT INTO TABLE . + ENDLOOP. + ENDIF. + ENDMETHOD. + + + METHOD get_filter. + DATA: ls_filt TYPE lvc_s_filt, + l_line TYPE i, + ls_filter TYPE zexcel_s_converter_fil. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + lt_components_tab TYPE cl_abap_structdescr=>component_table, + ls_components TYPE abap_componentdescr, + lo_table TYPE REF TO cl_abap_tabledescr, + lo_struc TYPE REF TO cl_abap_structdescr, + lo_trange TYPE REF TO data, + lo_srange TYPE REF TO data, + lo_ltabdata TYPE REF TO data. + + FIELD-SYMBOLS: TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE STANDARD TABLE. + + IF ws_option-filter = abap_false. + REFRESH et_filter. + RETURN. + ENDIF. + + ASSIGN xo_table->* TO . + + CREATE DATA lo_ltabdata LIKE . + ASSIGN lo_ltabdata->* TO . + + LOOP AT wt_filt INTO ls_filt. + LOOP AT ASSIGNING . + l_line = sy-tabix. + ASSIGN COMPONENT ls_filt-fieldname OF STRUCTURE TO . + IF sy-subrc = 0. + IF l_line = 1. + REFRESH lt_components_tab. + ls_components-name = 'SIGN'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-sign ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'OPTION'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-option ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'LOW'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'HIGH'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + "create new line type + TRY. + lo_struc = cl_abap_structdescr=>create( p_components = lt_components_tab + p_strict = abap_false ). + CATCH cx_sy_struct_creation. + CONTINUE. + ENDTRY. + lo_table = cl_abap_tabledescr=>create( lo_struc ). + + CREATE DATA lo_trange TYPE HANDLE lo_table. + CREATE DATA lo_srange TYPE HANDLE lo_struc. + + ASSIGN lo_trange->* TO . + ASSIGN lo_srange->* TO . + ENDIF. + REFRESH . + ASSIGN COMPONENT 'SIGN' OF STRUCTURE TO . + = ls_filt-sign. + ASSIGN COMPONENT 'OPTION' OF STRUCTURE TO . + = ls_filt-option. + ASSIGN COMPONENT 'LOW' OF STRUCTURE TO . + = ls_filt-low. + ASSIGN COMPONENT 'HIGH' OF STRUCTURE TO . + = ls_filt-high. + INSERT INTO TABLE . + IF IN . + IF ws_option-filter = abap_true. + ls_filter-rownumber = l_line. + ls_filter-columnname = ls_filt-fieldname. + INSERT ls_filter INTO TABLE et_filter. + ELSE. + INSERT INTO TABLE . + ENDIF. ENDIF. ENDIF. + ENDLOOP. + IF ws_option-filter = abap_undefined. + = . + REFRESH . ENDIF. ENDLOOP. - IF ws_option-filter = abap_undefined. - = . - REFRESH . + + ENDMETHOD. + + + METHOD update_catalog. + DATA: ls_fieldcatalog TYPE zexcel_s_converter_fcat, + ls_fcat TYPE lvc_s_fcat, + ls_sort TYPE lvc_s_sort, + l_decimals TYPE lvc_decmls. + + FIELD-SYMBOLS: TYPE zexcel_s_converter_fcat. + + IF ws_layo-zebra IS NOT INITIAL. + cs_layout-is_stripped = abap_true. + ENDIF. + IF ws_layo-no_keyfix IS INITIAL OR + ws_layo-no_keyfix = '0'. + cs_layout-is_fixed = abap_true. ENDIF. - ENDLOOP. - -ENDMETHOD. - - -method UPDATE_CATALOG. - DATA: ls_fieldcatalog TYPE zexcel_s_converter_fcat, - ls_fcat TYPE lvc_s_fcat, - ls_sort TYPE lvc_s_sort, - l_decimals TYPE lvc_decmls. - - FIELD-SYMBOLS: TYPE zexcel_s_converter_fcat. - - IF ws_layo-zebra IS NOT INITIAL. - cs_layout-is_stripped = abap_true. - ENDIF. - IF ws_layo-no_keyfix IS INITIAL OR - ws_layo-no_keyfix = '0'. - cs_layout-is_fixed = abap_true. - ENDIF. - - LOOP AT wt_fcat INTO ls_fcat. - CLEAR: ls_fieldcatalog, - l_decimals. - CASE ws_option-hidenc. - WHEN abap_false. " We make hiden columns visible - CLEAR ls_fcat-no_out. - WHEN abap_true. + + LOOP AT wt_fcat INTO ls_fcat. + CLEAR: ls_fieldcatalog, + l_decimals. + CASE ws_option-hidenc. + WHEN abap_false. " We make hiden columns visible + CLEAR ls_fcat-no_out. + WHEN abap_true. * We convert column and hide it. - WHEN abap_undefined. "We don't convert hiden columns - IF ls_fcat-no_out = abap_true. - ls_fcat-tech = abap_true. + WHEN abap_undefined. "We don't convert hiden columns + IF ls_fcat-no_out = abap_true. + ls_fcat-tech = abap_true. + ENDIF. + ENDCASE. + IF ls_fcat-tech = abap_false. + ls_fieldcatalog-tabname = ls_fcat-tabname. + ls_fieldcatalog-fieldname = ls_fcat-fieldname . + ls_fieldcatalog-columnname = ls_fcat-fieldname . + ls_fieldcatalog-position = ls_fcat-col_pos. + ls_fieldcatalog-col_id = ls_fcat-col_id. + ls_fieldcatalog-convexit = ls_fcat-convexit. + ls_fieldcatalog-inttype = ls_fcat-inttype. + ls_fieldcatalog-scrtext_s = ls_fcat-scrtext_s . + ls_fieldcatalog-scrtext_m = ls_fcat-scrtext_m . + ls_fieldcatalog-scrtext_l = ls_fcat-scrtext_l. + l_decimals = ls_fcat-decimals_o. + IF l_decimals IS NOT INITIAL. + ls_fieldcatalog-decimals = l_decimals. + ELSE. + ls_fieldcatalog-decimals = ls_fcat-decimals . ENDIF. - ENDCASE. - IF ls_fcat-tech = abap_false. - ls_fieldcatalog-tabname = ls_fcat-tabname. - ls_fieldcatalog-fieldname = ls_fcat-fieldname . - ls_fieldcatalog-columnname = ls_fcat-fieldname . - ls_fieldcatalog-position = ls_fcat-col_pos. - ls_fieldcatalog-col_id = ls_fcat-col_id. - ls_fieldcatalog-convexit = ls_fcat-convexit. - ls_fieldcatalog-inttype = ls_fcat-inttype. - ls_fieldcatalog-scrtext_s = ls_fcat-scrtext_s . - ls_fieldcatalog-scrtext_m = ls_fcat-scrtext_m . - ls_fieldcatalog-scrtext_l = ls_fcat-scrtext_l. - l_decimals = ls_fcat-decimals_o. - IF l_decimals IS NOT INITIAL. - ls_fieldcatalog-decimals = l_decimals. - ELSE. - ls_fieldcatalog-decimals = ls_fcat-decimals . - ENDIF. - CASE ws_option-subtot. - WHEN abap_false. " We ignore subtotals - CLEAR ls_fcat-do_sum. - WHEN abap_true. " We convert subtotals and detail + CASE ws_option-subtot. + WHEN abap_false. " We ignore subtotals + CLEAR ls_fcat-do_sum. + WHEN abap_true. " We convert subtotals and detail - WHEN abap_undefined. " We should only take subtotals and displayed detail + WHEN abap_undefined. " We should only take subtotals and displayed detail * for now abap_true - ENDCASE. - CASE ls_fcat-do_sum. - WHEN abap_true. - ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. - WHEN 'A'. - ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_min. - WHEN 'B' . - ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_max. - WHEN 'C' . - ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_average. - WHEN OTHERS. - CLEAR ls_fieldcatalog-totals_function . - ENDCASE. - ls_fieldcatalog-fix_column = ls_fcat-fix_column. - IF ws_layo-cwidth_opt IS INITIAL. - IF ls_fcat-col_opt IS NOT INITIAL. + ENDCASE. + CASE ls_fcat-do_sum. + WHEN abap_true. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. + WHEN 'A'. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_min. + WHEN 'B' . + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_max. + WHEN 'C' . + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_average. + WHEN OTHERS. + CLEAR ls_fieldcatalog-totals_function . + ENDCASE. + ls_fieldcatalog-fix_column = ls_fcat-fix_column. + IF ws_layo-cwidth_opt IS INITIAL. + IF ls_fcat-col_opt IS NOT INITIAL. + ls_fieldcatalog-is_optimized = abap_true. + ENDIF. + ELSE. ls_fieldcatalog-is_optimized = abap_true. ENDIF. - ELSE. - ls_fieldcatalog-is_optimized = abap_true. - ENDIF. - IF ls_fcat-no_out IS NOT INITIAL. - ls_fieldcatalog-is_hidden = abap_true. - ls_fieldcatalog-position = ls_fieldcatalog-col_id. " We hide based on orginal data structure - ENDIF. + IF ls_fcat-no_out IS NOT INITIAL. + ls_fieldcatalog-is_hidden = abap_true. + ls_fieldcatalog-position = ls_fieldcatalog-col_id. " We hide based on orginal data structure + ENDIF. * Alignment in each cell - CASE ls_fcat-just. - WHEN 'R'. - ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_right. - WHEN 'L'. - ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_left. - WHEN 'C'. - ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_center. - WHEN OTHERS. - CLEAR ls_fieldcatalog-alignment. - ENDCASE. + CASE ls_fcat-just. + WHEN 'R'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_right. + WHEN 'L'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_left. + WHEN 'C'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_center. + WHEN OTHERS. + CLEAR ls_fieldcatalog-alignment. + ENDCASE. * Check for subtotals. - READ TABLE wt_sort INTO ls_sort WITH KEY fieldname = ls_fcat-fieldname. - IF sy-subrc = 0 AND ws_option-subtot <> abap_false. - ls_fieldcatalog-sort_level = 0 . + READ TABLE wt_sort INTO ls_sort WITH KEY fieldname = ls_fcat-fieldname. + IF sy-subrc = 0 AND ws_option-subtot <> abap_false. + ls_fieldcatalog-sort_level = 0 . * IF ls_fieldcatalog-totals_function IS INITIAL. " Not clear why not * CLEAR ls_fieldcatalog-is_subtotalled. * ELSE. - ls_fieldcatalog-is_subtotalled = ls_sort-subtot. + ls_fieldcatalog-is_subtotalled = ls_sort-subtot. * ENDIF. - ls_fieldcatalog-is_collapsed = ls_sort-expa. - IF ls_fieldcatalog-is_subtotalled = abap_true. - ls_fieldcatalog-sort_level = ls_sort-spos. - ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. " we need function for text + ls_fieldcatalog-is_collapsed = ls_sort-expa. + IF ls_fieldcatalog-is_subtotalled = abap_true. + ls_fieldcatalog-sort_level = ls_sort-spos. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. " we need function for text + ENDIF. ENDIF. + APPEND ls_fieldcatalog TO ct_fieldcatalog. ENDIF. - APPEND ls_fieldcatalog TO ct_fieldcatalog. - ENDIF. - ENDLOOP. + ENDLOOP. - SORT ct_fieldcatalog BY sort_level ASCENDING. - cs_layout-max_subtotal_level = 0. - LOOP AT ct_fieldcatalog ASSIGNING WHERE sort_level > 0. - cs_layout-max_subtotal_level = cs_layout-max_subtotal_level + 1. - -sort_level = cs_layout-max_subtotal_level. - ENDLOOP. + SORT ct_fieldcatalog BY sort_level ASCENDING. + cs_layout-max_subtotal_level = 0. + LOOP AT ct_fieldcatalog ASSIGNING WHERE sort_level > 0. + cs_layout-max_subtotal_level = cs_layout-max_subtotal_level + 1. + -sort_level = cs_layout-max_subtotal_level. + ENDLOOP. - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_converter_alv_grid.clas.abap b/src/zcl_excel_converter_alv_grid.clas.abap index bc789607e..78daf88ab 100644 --- a/src/zcl_excel_converter_alv_grid.clas.abap +++ b/src/zcl_excel_converter_alv_grid.clas.abap @@ -1,77 +1,77 @@ -class ZCL_EXCEL_CONVERTER_ALV_GRID definition - public - inheriting from ZCL_EXCEL_CONVERTER_ALV - final - create public . +CLASS zcl_excel_converter_alv_grid DEFINITION + PUBLIC + INHERITING FROM zcl_excel_converter_alv + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. - methods ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT - redefinition . + METHODS zif_excel_converter~can_convert_object + REDEFINITION . *"* public components of class ZCL_EXCEL_CONVERTER_ALV_GRID *"* do not include other source files here!!! - methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG - redefinition . - methods ZIF_EXCEL_CONVERTER~GET_SUPPORTED_CLASS - redefinition . -protected section. + METHODS zif_excel_converter~create_fieldcatalog + REDEFINITION . + METHODS zif_excel_converter~get_supported_class + REDEFINITION . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_CONVERTER_ALV_GRID *"* do not include other source files here!!! *"* private components of class ZCL_EXCEL_CONVERTER_ALV_GRID *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_CONVERTER_ALV_GRID IMPLEMENTATION. +CLASS zcl_excel_converter_alv_grid IMPLEMENTATION. -METHOD zif_excel_converter~get_supported_class. - rv_supported_class = 'CL_GUI_ALV_GRID'. -ENDMETHOD. + METHOD zif_excel_converter~get_supported_class. + rv_supported_class = 'CL_GUI_ALV_GRID'. + ENDMETHOD. -method ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. - data: lo_alv type REF TO cl_gui_alv_grid. + METHOD zif_excel_converter~can_convert_object. + DATA: lo_alv TYPE REF TO cl_gui_alv_grid. - try. - lo_alv ?= io_object. - catch cx_sy_move_cast_error . - raise exception type zcx_excel. - endtry. + TRY. + lo_alv ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. -endmethod. + ENDMETHOD. -METHOD zif_excel_converter~create_fieldcatalog. - DATA: lo_alv TYPE REF TO cl_gui_alv_grid. + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_alv TYPE REF TO cl_gui_alv_grid. - zif_excel_converter~can_convert_object( io_object = io_object ). + zif_excel_converter~can_convert_object( io_object = io_object ). - ws_option = is_option. + ws_option = is_option. - lo_alv ?= io_object. + lo_alv ?= io_object. - CLEAR: es_layout, - et_fieldcatalog. + CLEAR: es_layout, + et_fieldcatalog. - IF lo_alv IS BOUND. - lo_alv->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = wt_fcat ). - lo_alv->get_frontend_layout( IMPORTING es_layout = ws_layo ). - lo_alv->get_sort_criteria( IMPORTING et_sort = wt_sort ) . - lo_alv->get_filter_criteria( IMPORTING et_filter = wt_filt ) . + IF lo_alv IS BOUND. + lo_alv->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = wt_fcat ). + lo_alv->get_frontend_layout( IMPORTING es_layout = ws_layo ). + lo_alv->get_sort_criteria( IMPORTING et_sort = wt_sort ) . + lo_alv->get_filter_criteria( IMPORTING et_filter = wt_filt ) . - apply_sort( EXPORTING it_table = it_table - IMPORTING eo_table = eo_table ) . + apply_sort( EXPORTING it_table = it_table + IMPORTING eo_table = eo_table ) . - get_color( EXPORTING io_table = eo_table - IMPORTING et_colors = et_colors ) . + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . - get_filter( IMPORTING et_filter = et_filter - CHANGING xo_table = eo_table ) . + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . - update_catalog( CHANGING cs_layout = es_layout - ct_fieldcatalog = et_fieldcatalog ). - ENDIF. -ENDMETHOD. + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ENDIF. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_converter_result.clas.abap b/src/zcl_excel_converter_result.clas.abap index d90ec7660..4a27bb102 100644 --- a/src/zcl_excel_converter_result.clas.abap +++ b/src/zcl_excel_converter_result.clas.abap @@ -1,55 +1,55 @@ -class ZCL_EXCEL_CONVERTER_RESULT definition - public - inheriting from ZCL_EXCEL_CONVERTER_ALV - abstract - create public . +CLASS zcl_excel_converter_result DEFINITION + PUBLIC + INHERITING FROM zcl_excel_converter_alv + ABSTRACT + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_CONVERTER_RESULT *"* do not include other source files here!!! -public section. + PUBLIC SECTION. *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. - methods GET_TABLE - importing - !IO_OBJECT type ref to OBJECT - returning - value(RO_DATA) type ref to DATA . + METHODS get_table + IMPORTING + !io_object TYPE REF TO object + RETURNING + VALUE(ro_data) TYPE REF TO data . *"* private components of class ZCL_EXCEL_CONVERTER_RESULT *"* do not include other source files here!!! *"* private components of class ZCL_EXCEL_CONVERTER_RESULT *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_CONVERTER_RESULT IMPLEMENTATION. +CLASS zcl_excel_converter_result IMPLEMENTATION. -method GET_TABLE. - DATA: lo_object TYPE REF TO object, - ls_seoclass TYPE seoclass, - l_method TYPE string. + METHOD get_table. + DATA: lo_object TYPE REF TO object, + ls_seoclass TYPE seoclass, + l_method TYPE string. - SELECT SINGLE * INTO ls_seoclass - FROM seoclass - WHERE clsname = 'IF_SALV_BS_DATA_SOURCE'. + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'IF_SALV_BS_DATA_SOURCE'. - IF sy-subrc = 0. - l_method = 'GET_TABLE_REF'. - lo_object ?= io_object. - CALL METHOD lo_object->(l_method) - RECEIVING - value = ro_data. - ELSE. - l_method = 'GET_REF_TO_TABLE'. - lo_object ?= io_object. - CALL METHOD lo_object->(l_method) - RECEIVING - value = ro_data. - ENDIF. + IF sy-subrc = 0. + l_method = 'GET_TABLE_REF'. + lo_object ?= io_object. + CALL METHOD lo_object->(l_method) + RECEIVING + value = ro_data. + ELSE. + l_method = 'GET_REF_TO_TABLE'. + lo_object ?= io_object. + CALL METHOD lo_object->(l_method) + RECEIVING + value = ro_data. + ENDIF. - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_converter_result_ex.clas.abap b/src/zcl_excel_converter_result_ex.clas.abap index a85e90405..dc039a7bd 100644 --- a/src/zcl_excel_converter_result_ex.clas.abap +++ b/src/zcl_excel_converter_result_ex.clas.abap @@ -1,97 +1,97 @@ -class ZCL_EXCEL_CONVERTER_RESULT_EX definition - public - inheriting from ZCL_EXCEL_CONVERTER_RESULT - final - create public . +CLASS zcl_excel_converter_result_ex DEFINITION + PUBLIC + INHERITING FROM zcl_excel_converter_result + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_CONVERTER_RESULT_EX *"* do not include other source files here!!! -public section. - - methods ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT - redefinition . - methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG - redefinition . - methods zif_excel_converter~get_supported_class - REDEFINITION . + PUBLIC SECTION. + + METHODS zif_excel_converter~can_convert_object + REDEFINITION . + METHODS zif_excel_converter~create_fieldcatalog + REDEFINITION . + METHODS zif_excel_converter~get_supported_class + REDEFINITION . *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_EX *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_EX *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_EX *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_CONVERTER_EX_RESULT *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_CONVERTER_RESULT_EX IMPLEMENTATION. +CLASS zcl_excel_converter_result_ex IMPLEMENTATION. -METHOD ZIF_EXCEL_CONVERTER~GET_SUPPORTED_CLASS. - rv_supported_class = 'CL_SALV_EX_RESULT_DATA_TABLE'. -ENDMETHOD. + METHOD zif_excel_converter~get_supported_class. + rv_supported_class = 'CL_SALV_EX_RESULT_DATA_TABLE'. + ENDMETHOD. -METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + METHOD zif_excel_converter~can_convert_object. - DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table. + DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table. - TRY. - lo_result ?= io_object. - CATCH cx_sy_move_cast_error . - RAISE EXCEPTION TYPE zcx_excel. - ENDTRY. + TRY. + lo_result ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. -ENDMETHOD. + ENDMETHOD. -METHOD zif_excel_converter~create_fieldcatalog. - DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table, - lo_ex_cm TYPE REF TO cl_salv_ex_cm, - lo_data TYPE REF TO data. + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table, + lo_ex_cm TYPE REF TO cl_salv_ex_cm, + lo_data TYPE REF TO data. - FIELD-SYMBOLS: TYPE STANDARD TABLE. + FIELD-SYMBOLS: TYPE STANDARD TABLE. - zif_excel_converter~can_convert_object( io_object = io_object ). + zif_excel_converter~can_convert_object( io_object = io_object ). - ws_option = is_option. + ws_option = is_option. - lo_result ?= io_object. + lo_result ?= io_object. - CLEAR: es_layout, - et_fieldcatalog. + CLEAR: es_layout, + et_fieldcatalog. - IF lo_result IS BOUND. - lo_data = get_table( io_object = lo_result->r_model->r_data ). - IF lo_data IS BOUND. - ASSIGN lo_data->* TO . + IF lo_result IS BOUND. + lo_data = get_table( io_object = lo_result->r_model->r_data ). + IF lo_data IS BOUND. + ASSIGN lo_data->* TO . - lo_ex_cm ?= lo_result->r_model->r_model. - ws_layo = lo_ex_cm->s_layo. + lo_ex_cm ?= lo_result->r_model->r_model. + ws_layo = lo_ex_cm->s_layo. * T_DRDN Instance Attribute Public Type LVC_T_DROP - wt_fcat = lo_ex_cm->t_fcat. - wt_filt = lo_ex_cm->t_filt. + wt_fcat = lo_ex_cm->t_fcat. + wt_filt = lo_ex_cm->t_filt. * T_HYPE Instance Attribute Public Type LVC_T_HYPE * T_SELECTED_CELLS Instance Attribute Public Type LVC_T_CELL * T_SELECTED_COLUMNS Instance Attribute Public Type LVC_T_COL - wt_sort = lo_ex_cm->t_sort. + wt_sort = lo_ex_cm->t_sort. - apply_sort( EXPORTING it_table = - IMPORTING eo_table = eo_table ) . + apply_sort( EXPORTING it_table = + IMPORTING eo_table = eo_table ) . - get_color( EXPORTING io_table = eo_table - IMPORTING et_colors = et_colors ) . + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . - get_filter( IMPORTING et_filter = et_filter - CHANGING xo_table = eo_table ) . + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . - update_catalog( CHANGING cs_layout = es_layout - ct_fieldcatalog = et_fieldcatalog ). - else. + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ELSE. * We have a problem and should stop here. + ENDIF. ENDIF. - ENDIF. -ENDMETHOD. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_converter_result_wd.clas.abap b/src/zcl_excel_converter_result_wd.clas.abap index dea512079..f247f3e9e 100644 --- a/src/zcl_excel_converter_result_wd.clas.abap +++ b/src/zcl_excel_converter_result_wd.clas.abap @@ -1,68 +1,68 @@ -class ZCL_EXCEL_CONVERTER_RESULT_WD definition - public - inheriting from ZCL_EXCEL_CONVERTER_RESULT - final - create public . +CLASS zcl_excel_converter_result_wd DEFINITION + PUBLIC + INHERITING FROM zcl_excel_converter_result + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! -public section. - - methods ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT - redefinition . - methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG - redefinition . - methods ZIF_EXCEL_CONVERTER~GET_SUPPORTED_CLASS - REDEFINITION . + PUBLIC SECTION. + + METHODS zif_excel_converter~can_convert_object + REDEFINITION . + METHODS zif_excel_converter~create_fieldcatalog + REDEFINITION . + METHODS zif_excel_converter~get_supported_class + REDEFINITION . *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! -protected section. -private section. - - data WO_CONFIG type ref to CL_SALV_WD_CONFIG_TABLE . - data WT_FIELDS type SALV_WD_T_FIELD_REF . - data WT_COLUMNS type SALV_WD_T_COLUMN_REF . - - methods GET_COLUMNS_INFO - changing - !XS_FCAT type LVC_S_FCAT . - methods GET_FIELDS_INFO - changing - !XS_FCAT type LVC_S_FCAT . - methods CREATE_WT_SORT . - methods CREATE_WT_FILT . - methods CREATE_WT_FCAT - importing - !IO_TABLE type ref to DATA . + PROTECTED SECTION. + PRIVATE SECTION. + + DATA wo_config TYPE REF TO cl_salv_wd_config_table . + DATA wt_fields TYPE salv_wd_t_field_ref . + DATA wt_columns TYPE salv_wd_t_column_ref . + + METHODS get_columns_info + CHANGING + !xs_fcat TYPE lvc_s_fcat . + METHODS get_fields_info + CHANGING + !xs_fcat TYPE lvc_s_fcat . + METHODS create_wt_sort . + METHODS create_wt_filt . + METHODS create_wt_fcat + IMPORTING + !io_table TYPE REF TO data . ENDCLASS. -CLASS ZCL_EXCEL_CONVERTER_RESULT_WD IMPLEMENTATION. +CLASS zcl_excel_converter_result_wd IMPLEMENTATION. -method CREATE_WT_FCAT. - DATA: lr_data TYPE REF TO data, - lo_structdescr TYPE REF TO cl_abap_structdescr, - lt_dfies TYPE ddfields, - ls_dfies TYPE dfies. + METHOD create_wt_fcat. + DATA: lr_data TYPE REF TO data, + lo_structdescr TYPE REF TO cl_abap_structdescr, + lt_dfies TYPE ddfields, + ls_dfies TYPE dfies. - DATA: ls_fcat TYPE lvc_s_fcat. + DATA: ls_fcat TYPE lvc_s_fcat. - FIELD-SYMBOLS: TYPE ANY TABLE. + FIELD-SYMBOLS: TYPE ANY TABLE. - ASSIGN io_table->* TO . - CREATE DATA lr_data LIKE LINE OF . + ASSIGN io_table->* TO . + CREATE DATA lr_data LIKE LINE OF . - lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). - lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). - loop at lt_dfies into ls_dfies. + LOOP AT lt_dfies INTO ls_dfies. MOVE-CORRESPONDING ls_dfies TO ls_fcat. * ls_fcat-columnname = ls_dfies-fieldname. ls_fcat-col_pos = ls_dfies-position. @@ -74,188 +74,188 @@ method CREATE_WT_FCAT. get_columns_info( CHANGING xs_fcat = ls_fcat ) . INSERT ls_fcat INTO TABLE wt_fcat. - endloop. + ENDLOOP. - endmethod. + ENDMETHOD. -method CREATE_WT_FILT. + METHOD create_wt_filt. * No neeed for superclass. * Only for WD - DATA: lt_filters TYPE salv_wd_t_filter_rule_ref, - ls_filt TYPE lvc_s_filt. - - FIELD-SYMBOLS: TYPE salv_wd_s_field_ref, - TYPE salv_wd_s_filter_rule_ref. - - LOOP AT wt_fields ASSIGNING . - REFRESH lt_filters. - lt_filters = -r_field->if_salv_wd_filter~get_filter_rules( ) . - LOOP AT lt_filters ASSIGNING . - ls_filt-fieldname = -fieldname. - IF -r_filter_rule->get_included( ) = abap_true. - ls_filt-sign = 'I'. - ELSE. - ls_filt-sign = 'E'. - ENDIF. - ls_filt-option = -r_filter_rule->get_operator( ). - ls_filt-high = -r_filter_rule->get_high_value( ) . - ls_filt-low = -r_filter_rule->get_low_value( ) . - INSERT ls_filt INTO TABLE wt_filt. + DATA: lt_filters TYPE salv_wd_t_filter_rule_ref, + ls_filt TYPE lvc_s_filt. + + FIELD-SYMBOLS: TYPE salv_wd_s_field_ref, + TYPE salv_wd_s_filter_rule_ref. + + LOOP AT wt_fields ASSIGNING . + REFRESH lt_filters. + lt_filters = -r_field->if_salv_wd_filter~get_filter_rules( ) . + LOOP AT lt_filters ASSIGNING . + ls_filt-fieldname = -fieldname. + IF -r_filter_rule->get_included( ) = abap_true. + ls_filt-sign = 'I'. + ELSE. + ls_filt-sign = 'E'. + ENDIF. + ls_filt-option = -r_filter_rule->get_operator( ). + ls_filt-high = -r_filter_rule->get_high_value( ) . + ls_filt-low = -r_filter_rule->get_low_value( ) . + INSERT ls_filt INTO TABLE wt_filt. + ENDLOOP. ENDLOOP. - ENDLOOP. - endmethod. + ENDMETHOD. -method CREATE_WT_SORT. - DATA: lo_sort TYPE REF TO cl_salv_wd_sort_rule, - l_sort_order TYPE salv_wd_constant, - ls_sort TYPE lvc_s_sort. + METHOD create_wt_sort. + DATA: lo_sort TYPE REF TO cl_salv_wd_sort_rule, + l_sort_order TYPE salv_wd_constant, + ls_sort TYPE lvc_s_sort. - FIELD-SYMBOLS: TYPE salv_wd_s_field_ref. + FIELD-SYMBOLS: TYPE salv_wd_s_field_ref. - LOOP AT wt_fields ASSIGNING . - lo_sort = -r_field->if_salv_wd_sort~get_sort_rule( ) . - IF lo_sort IS BOUND. - l_sort_order = lo_sort->get_sort_order( ). - IF l_sort_order <> if_salv_wd_c_sort=>sort_order. - CLEAR ls_sort. - ls_sort-spos = lo_sort->get_sort_position( ). - ls_sort-fieldname = -fieldname. + LOOP AT wt_fields ASSIGNING . + lo_sort = -r_field->if_salv_wd_sort~get_sort_rule( ) . + IF lo_sort IS BOUND. + l_sort_order = lo_sort->get_sort_order( ). + IF l_sort_order <> if_salv_wd_c_sort=>sort_order. + CLEAR ls_sort. + ls_sort-spos = lo_sort->get_sort_position( ). + ls_sort-fieldname = -fieldname. * ls_sort-GROUP - ls_sort-subtot = lo_sort->get_group_aggregation( ). + ls_sort-subtot = lo_sort->get_group_aggregation( ). * ls_sort-COMP * ls_sort-EXPA * ls_sort-SELTEXT * ls_sort-OBLIGATORY * ls_sort-LEVEL * ls_sort-NO_OUT - IF l_sort_order = if_salv_wd_c_sort=>sort_order_ascending. - ls_sort-up = abap_true. - ELSE. - ls_sort-down = abap_true. + IF l_sort_order = if_salv_wd_c_sort=>sort_order_ascending. + ls_sort-up = abap_true. + ELSE. + ls_sort-down = abap_true. + ENDIF. + INSERT ls_sort INTO TABLE wt_sort. ENDIF. - INSERT ls_sort INTO TABLE wt_sort. ENDIF. - ENDIF. - ENDLOOP. + ENDLOOP. - endmethod. + ENDMETHOD. -method GET_COLUMNS_INFO. - DATA: l_numc2 TYPE salv_wd_constant. + METHOD get_columns_info. + DATA: l_numc2 TYPE salv_wd_constant. - FIELD-SYMBOLS: TYPE salv_wd_s_column_ref. + FIELD-SYMBOLS: TYPE salv_wd_s_column_ref. - READ TABLE wt_columns ASSIGNING WITH KEY id = xs_fcat-fieldname . - IF sy-subrc = 0. - xs_fcat-col_pos = -r_column->get_position( ) . - l_numc2 = -r_column->get_fixed_position( ). - IF l_numc2 = '02'. - xs_fcat-fix_column = abap_true . - ENDIF. - l_numc2 = -r_column->get_visible( ). - IF l_numc2 = '01'. - xs_fcat-no_out = abap_true . + READ TABLE wt_columns ASSIGNING WITH KEY id = xs_fcat-fieldname . + IF sy-subrc = 0. + xs_fcat-col_pos = -r_column->get_position( ) . + l_numc2 = -r_column->get_fixed_position( ). + IF l_numc2 = '02'. + xs_fcat-fix_column = abap_true . + ENDIF. + l_numc2 = -r_column->get_visible( ). + IF l_numc2 = '01'. + xs_fcat-no_out = abap_true . + ENDIF. ENDIF. - ENDIF. - - endmethod. - - -method GET_FIELDS_INFO. - DATA: lo_aggr TYPE REF TO cl_salv_wd_aggr_rule, - l_aggrtype TYPE salv_wd_constant. - - FIELD-SYMBOLS: TYPE salv_wd_s_field_ref. - - READ TABLE wt_fields ASSIGNING WITH KEY fieldname = xs_fcat-fieldname. - IF sy-subrc = 0. - lo_aggr = -r_field->if_salv_wd_aggr~get_aggr_rule( ) . - IF lo_aggr IS BOUND. - l_aggrtype = lo_aggr->get_aggregation_type( ) . - CASE l_aggrtype. - WHEN if_salv_wd_c_aggregation=>aggrtype_total. - xs_fcat-do_sum = abap_true. - WHEN if_salv_wd_c_aggregation=>aggrtype_minimum. - xs_fcat-do_sum = 'A'. - WHEN if_salv_wd_c_aggregation=>aggrtype_maximum . - xs_fcat-do_sum = 'B'. - WHEN if_salv_wd_c_aggregation=>aggrtype_average . - xs_fcat-do_sum = 'C'. - WHEN OTHERS. - CLEAR xs_fcat-do_sum . - ENDCASE. + + ENDMETHOD. + + + METHOD get_fields_info. + DATA: lo_aggr TYPE REF TO cl_salv_wd_aggr_rule, + l_aggrtype TYPE salv_wd_constant. + + FIELD-SYMBOLS: TYPE salv_wd_s_field_ref. + + READ TABLE wt_fields ASSIGNING WITH KEY fieldname = xs_fcat-fieldname. + IF sy-subrc = 0. + lo_aggr = -r_field->if_salv_wd_aggr~get_aggr_rule( ) . + IF lo_aggr IS BOUND. + l_aggrtype = lo_aggr->get_aggregation_type( ) . + CASE l_aggrtype. + WHEN if_salv_wd_c_aggregation=>aggrtype_total. + xs_fcat-do_sum = abap_true. + WHEN if_salv_wd_c_aggregation=>aggrtype_minimum. + xs_fcat-do_sum = 'A'. + WHEN if_salv_wd_c_aggregation=>aggrtype_maximum . + xs_fcat-do_sum = 'B'. + WHEN if_salv_wd_c_aggregation=>aggrtype_average . + xs_fcat-do_sum = 'C'. + WHEN OTHERS. + CLEAR xs_fcat-do_sum . + ENDCASE. + ENDIF. ENDIF. - ENDIF. - endmethod. + ENDMETHOD. -METHOD ZIF_EXCEL_CONVERTER~GET_SUPPORTED_CLASS. - rv_supported_class = 'CL_SALV_WD_RESULT_DATA_TABLE'. -ENDMETHOD. + METHOD zif_excel_converter~get_supported_class. + rv_supported_class = 'CL_SALV_WD_RESULT_DATA_TABLE'. + ENDMETHOD. -METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + METHOD zif_excel_converter~can_convert_object. - DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table. + DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table. - TRY. - lo_result ?= io_object. - CATCH cx_sy_move_cast_error . - RAISE EXCEPTION TYPE zcx_excel. - ENDTRY. + TRY. + lo_result ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. -ENDMETHOD. + ENDMETHOD. -METHOD zif_excel_converter~create_fieldcatalog. - DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table, - lo_data TYPE REF TO data. + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table, + lo_data TYPE REF TO data. - FIELD-SYMBOLS: TYPE STANDARD TABLE. + FIELD-SYMBOLS: TYPE STANDARD TABLE. - zif_excel_converter~can_convert_object( io_object = io_object ). + zif_excel_converter~can_convert_object( io_object = io_object ). - ws_option = is_option. + ws_option = is_option. - lo_result ?= io_object. + lo_result ?= io_object. - CLEAR: es_layout, - et_fieldcatalog. + CLEAR: es_layout, + et_fieldcatalog. - IF lo_result IS BOUND. - lo_data = get_table( io_object = lo_result->r_model->r_data ). - IF lo_data IS BOUND. - ASSIGN lo_data->* TO . + IF lo_result IS BOUND. + lo_data = get_table( io_object = lo_result->r_model->r_data ). + IF lo_data IS BOUND. + ASSIGN lo_data->* TO . - wo_config ?= lo_result->r_model->r_model. + wo_config ?= lo_result->r_model->r_model. - IF wo_config IS BOUND. - wt_fields = wo_config->if_salv_wd_field_settings~get_fields( ) . - wt_columns = wo_config->if_salv_wd_column_settings~get_columns( ) . - ENDIF. + IF wo_config IS BOUND. + wt_fields = wo_config->if_salv_wd_field_settings~get_fields( ) . + wt_columns = wo_config->if_salv_wd_column_settings~get_columns( ) . + ENDIF. - create_wt_fcat( io_table = lo_data ). - create_wt_sort( ). - create_wt_filt( ). + create_wt_fcat( io_table = lo_data ). + create_wt_sort( ). + create_wt_filt( ). - apply_sort( EXPORTING it_table = - IMPORTING eo_table = eo_table ) . + apply_sort( EXPORTING it_table = + IMPORTING eo_table = eo_table ) . * get_color( EXPORTING io_table = eo_table * IMPORTING et_colors = et_colors ) . - get_filter( IMPORTING et_filter = et_filter - CHANGING xo_table = eo_table ) . + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . - update_catalog( CHANGING cs_layout = es_layout - ct_fieldcatalog = et_fieldcatalog ). - ELSE. + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ELSE. * We have a problem and should stop here + ENDIF. ENDIF. - ENDIF. -ENDMETHOD. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_converter_salv_table.clas.abap b/src/zcl_excel_converter_salv_table.clas.abap index 766f65b82..a08583ac6 100644 --- a/src/zcl_excel_converter_salv_table.clas.abap +++ b/src/zcl_excel_converter_salv_table.clas.abap @@ -1,258 +1,256 @@ -class ZCL_EXCEL_CONVERTER_SALV_TABLE definition - public - inheriting from ZCL_EXCEL_CONVERTER_ALV - final - create public . +CLASS zcl_excel_converter_salv_table DEFINITION + PUBLIC + INHERITING FROM zcl_excel_converter_alv + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_CONVERTER_SALV_TABLE *"* do not include other source files here!!! -public section. - - methods ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT - redefinition . - methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG - redefinition . - methods ZIF_EXCEL_CONVERTER~GET_SUPPORTED_CLASS - redefinition . + PUBLIC SECTION. + + METHODS zif_excel_converter~can_convert_object + REDEFINITION . + METHODS zif_excel_converter~create_fieldcatalog + REDEFINITION . + METHODS zif_excel_converter~get_supported_class + REDEFINITION . *"* protected components of class ZCL_EXCEL_CONVERTER_SALV_TABLE *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_CONVERTER_SALV_TABLE *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_CONVERTER_SALV_TABLE *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. - methods LOAD_DATA - importing - !IO_SALV type ref to CL_SALV_TABLE - !IT_TABLE type STANDARD TABLE . + METHODS load_data + IMPORTING + !io_salv TYPE REF TO cl_salv_table + !it_table TYPE STANDARD TABLE . ENDCLASS. -CLASS ZCL_EXCEL_CONVERTER_SALV_TABLE IMPLEMENTATION. +CLASS zcl_excel_converter_salv_table IMPLEMENTATION. -method LOAD_DATA. - DATA: lo_columns TYPE REF TO cl_salv_columns_table, - lo_aggregations TYPE REF TO cl_salv_aggregations, - lo_sorts TYPE REF TO cl_salv_sorts, - lo_filters TYPE REF TO cl_salv_filters, - lo_functional TYPE REF TO cl_salv_functional_settings, - lo_display TYPE REF TO cl_salv_display_settings. + METHOD load_data. + DATA: lo_columns TYPE REF TO cl_salv_columns_table, + lo_aggregations TYPE REF TO cl_salv_aggregations, + lo_sorts TYPE REF TO cl_salv_sorts, + lo_filters TYPE REF TO cl_salv_filters, + lo_functional TYPE REF TO cl_salv_functional_settings, + lo_display TYPE REF TO cl_salv_display_settings. - DATA: ls_vari TYPE disvariant, - lo_layout TYPE REF TO cl_salv_layout. + DATA: ls_vari TYPE disvariant, + lo_layout TYPE REF TO cl_salv_layout. - DATA lt_kkblo_fieldcat TYPE kkblo_t_fieldcat. - DATA ls_kkblo_layout TYPE kkblo_layout. - DATA lt_kkblo_filter TYPE kkblo_t_filter. - DATA lt_kkblo_sort TYPE kkblo_t_sortinfo. + DATA lt_kkblo_fieldcat TYPE kkblo_t_fieldcat. + DATA ls_kkblo_layout TYPE kkblo_layout. + DATA lt_kkblo_filter TYPE kkblo_t_filter. + DATA lt_kkblo_sort TYPE kkblo_t_sortinfo. - lo_layout = io_salv->get_layout( ) . - lo_columns = io_salv->get_columns( ). - lo_aggregations = io_salv->get_aggregations( ) . - lo_sorts = io_salv->get_sorts( ) . - lo_filters = io_salv->get_filters( ) . - lo_display = io_salv->get_display_settings( ) . - lo_functional = io_salv->get_functional_settings( ) . + lo_layout = io_salv->get_layout( ) . + lo_columns = io_salv->get_columns( ). + lo_aggregations = io_salv->get_aggregations( ) . + lo_sorts = io_salv->get_sorts( ) . + lo_filters = io_salv->get_filters( ) . + lo_display = io_salv->get_display_settings( ) . + lo_functional = io_salv->get_functional_settings( ) . - REFRESH: wt_fcat, - wt_sort, - wt_filt. + REFRESH: wt_fcat, + wt_sort, + wt_filt. * First update metadata if we can. - IF io_salv->is_offline( ) = abap_false. - io_salv->get_metadata( ) . - ELSE. + IF io_salv->is_offline( ) = abap_false. + io_salv->get_metadata( ) . + ELSE. * If we are offline we need to build this. - cl_salv_controller_metadata=>get_variant( - EXPORTING - r_layout = lo_layout - CHANGING - s_variant = ls_vari ). - ENDIF. + cl_salv_controller_metadata=>get_variant( + EXPORTING + r_layout = lo_layout + CHANGING + s_variant = ls_vari ). + ENDIF. *... get the column information - wt_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog( - r_columns = lo_columns - r_aggregations = lo_aggregations ). + wt_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog( + r_columns = lo_columns + r_aggregations = lo_aggregations ). *... get the layout information - cl_salv_controller_metadata=>get_lvc_layout( - EXPORTING - r_functional_settings = lo_functional - r_display_settings = lo_display - r_columns = lo_columns - r_aggregations = lo_aggregations - CHANGING - s_layout = ws_layo ). + cl_salv_controller_metadata=>get_lvc_layout( + EXPORTING + r_functional_settings = lo_functional + r_display_settings = lo_display + r_columns = lo_columns + r_aggregations = lo_aggregations + CHANGING + s_layout = ws_layo ). * the fieldcatalog is not complete yet! - CALL FUNCTION 'LVC_FIELDCAT_COMPLETE' - EXPORTING - i_complete = 'X' - i_refresh_buffer = space - i_buffer_active = space - is_layout = ws_layo - i_test = '1' - i_fcat_complete = 'X' - IMPORTING -* E_EDIT = - es_layout = ws_layo - CHANGING - ct_fieldcat = wt_fcat. - - IF ls_vari IS NOT INITIAL AND io_salv->is_offline( ) = abap_true. - CALL FUNCTION 'LVC_TRANSFER_TO_KKBLO' + CALL FUNCTION 'LVC_FIELDCAT_COMPLETE' EXPORTING - it_fieldcat_lvc = wt_fcat - is_layout_lvc = ws_layo + i_complete = 'X' + i_refresh_buffer = space + i_buffer_active = space + is_layout = ws_layo + i_test = '1' + i_fcat_complete = 'X' IMPORTING - et_fieldcat_kkblo = lt_kkblo_fieldcat - es_layout_kkblo = ls_kkblo_layout - TABLES - it_data = it_table - EXCEPTIONS - it_data_missing = 1 - it_fieldcat_lvc_missing = 2 - OTHERS = 3. - IF sy-subrc <> 0. +* E_EDIT = + es_layout = ws_layo + CHANGING + ct_fieldcat = wt_fcat. + + IF ls_vari IS NOT INITIAL AND io_salv->is_offline( ) = abap_true. + CALL FUNCTION 'LVC_TRANSFER_TO_KKBLO' + EXPORTING + it_fieldcat_lvc = wt_fcat + is_layout_lvc = ws_layo + IMPORTING + et_fieldcat_kkblo = lt_kkblo_fieldcat + es_layout_kkblo = ls_kkblo_layout + TABLES + it_data = it_table + EXCEPTIONS + it_data_missing = 1 + it_fieldcat_lvc_missing = 2 + OTHERS = 3. + IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. - ENDIF. - - CALL FUNCTION 'LT_VARIANT_LOAD' - EXPORTING -* I_TOOL = 'LT' - i_tabname = '1' -* I_TABNAME_SLAVE = - i_dialog = ' ' - I_USER_SPECIFIC = 'X' -* I_DEFAULT = 'X' -* I_NO_REPTEXT_OPTIMIZE = -* I_VIA_GRID = - i_fcat_complete = 'X' - IMPORTING -* E_EXIT = - et_fieldcat = lt_kkblo_fieldcat - et_sort = lt_kkblo_sort - et_filter = lt_kkblo_filter - CHANGING - cs_layout = ls_kkblo_layout - ct_default_fieldcat = lt_kkblo_fieldcat - cs_variant = ls_vari - EXCEPTIONS - wrong_input = 1 - fc_not_complete = 2 - not_found = 3 - OTHERS = 4 - . - IF sy-subrc <> 0. + ENDIF. + + CALL FUNCTION 'LT_VARIANT_LOAD' + EXPORTING +* I_TOOL = 'LT' + i_tabname = '1' +* I_TABNAME_SLAVE = + i_dialog = ' ' + i_user_specific = 'X' +* I_DEFAULT = 'X' +* I_NO_REPTEXT_OPTIMIZE = +* I_VIA_GRID = + i_fcat_complete = 'X' + IMPORTING +* E_EXIT = + et_fieldcat = lt_kkblo_fieldcat + et_sort = lt_kkblo_sort + et_filter = lt_kkblo_filter + CHANGING + cs_layout = ls_kkblo_layout + ct_default_fieldcat = lt_kkblo_fieldcat + cs_variant = ls_vari + EXCEPTIONS + wrong_input = 1 + fc_not_complete = 2 + not_found = 3 + OTHERS = 4. + IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. - ENDIF. - - CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO' - EXPORTING -* I_TECH_COMPLETE = -* I_STRUCTURE_NAME = - it_fieldcat_kkblo = lt_kkblo_fieldcat - it_sort_kkblo = lt_kkblo_sort - it_filter_kkblo = lt_kkblo_filter -* IT_SPECIAL_GROUPS_KKBLO = -* IT_FILTERED_ENTRIES_KKBLO = -* IT_GROUPLEVELS_KKBLO = -* IS_SUBTOT_OPTIONS_KKBLO = - is_layout_kkblo = ls_kkblo_layout -* IS_REPREP_ID_KKBLO = -* I_CALLBACK_PROGRAM_KKBLO = -* IT_ADD_FIELDCAT = -* IT_EXCLUDING_KKBLO = -* IT_EXCEPT_QINFO_KKBLO = - IMPORTING - et_fieldcat_lvc = wt_fcat - et_sort_lvc = wt_sort - et_filter_lvc = wt_filt -* ET_SPECIAL_GROUPS_LVC = -* ET_FILTER_INDEX_LVC = -* ET_GROUPLEVELS_LVC = -* ES_TOTAL_OPTIONS_LVC = - es_layout_lvc = ws_layo -* ES_VARIANT_LVC = -* E_VARIANT_SAVE_LVC = -* ES_PRINT_INFO_LVC = -* ES_REPREP_LVC = -* E_REPREP_ACTIVE_LVC = -* ET_EXCLUDING_LVC = -* ET_EXCEPT_QINFO_LVC = - TABLES - it_data = it_table - EXCEPTIONS - it_data_missing = 1 - OTHERS = 2 - . - IF sy-subrc <> 0. + ENDIF. + + CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO' + EXPORTING +* I_TECH_COMPLETE = +* I_STRUCTURE_NAME = + it_fieldcat_kkblo = lt_kkblo_fieldcat + it_sort_kkblo = lt_kkblo_sort + it_filter_kkblo = lt_kkblo_filter +* IT_SPECIAL_GROUPS_KKBLO = +* IT_FILTERED_ENTRIES_KKBLO = +* IT_GROUPLEVELS_KKBLO = +* IS_SUBTOT_OPTIONS_KKBLO = + is_layout_kkblo = ls_kkblo_layout +* IS_REPREP_ID_KKBLO = +* I_CALLBACK_PROGRAM_KKBLO = +* IT_ADD_FIELDCAT = +* IT_EXCLUDING_KKBLO = +* IT_EXCEPT_QINFO_KKBLO = + IMPORTING + et_fieldcat_lvc = wt_fcat + et_sort_lvc = wt_sort + et_filter_lvc = wt_filt +* ET_SPECIAL_GROUPS_LVC = +* ET_FILTER_INDEX_LVC = +* ET_GROUPLEVELS_LVC = +* ES_TOTAL_OPTIONS_LVC = + es_layout_lvc = ws_layo +* ES_VARIANT_LVC = +* E_VARIANT_SAVE_LVC = +* ES_PRINT_INFO_LVC = +* ES_REPREP_LVC = +* E_REPREP_ACTIVE_LVC = +* ET_EXCLUDING_LVC = +* ET_EXCEPT_QINFO_LVC = + TABLES + it_data = it_table + EXCEPTIONS + it_data_missing = 1 + OTHERS = 2. + IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. - ENDIF. + ENDIF. - ELSE. + ELSE. * ... get the sort information - wt_sort = cl_salv_controller_metadata=>get_lvc_sort( lo_sorts ). + wt_sort = cl_salv_controller_metadata=>get_lvc_sort( lo_sorts ). * ... get the filter information - wt_filt = cl_salv_controller_metadata=>get_lvc_filter( lo_filters ). - ENDIF. + wt_filt = cl_salv_controller_metadata=>get_lvc_filter( lo_filters ). + ENDIF. - endmethod. + ENDMETHOD. -METHOD zif_excel_converter~get_supported_class. - rv_supported_class = 'CL_SALV_TABLE'. -ENDMETHOD. + METHOD zif_excel_converter~get_supported_class. + rv_supported_class = 'CL_SALV_TABLE'. + ENDMETHOD. -METHOD zif_excel_converter~can_convert_object. + METHOD zif_excel_converter~can_convert_object. - DATA: lo_salv TYPE REF TO cl_salv_table. + DATA: lo_salv TYPE REF TO cl_salv_table. - TRY. - lo_salv ?= io_object. - CATCH cx_sy_move_cast_error . - RAISE EXCEPTION TYPE zcx_excel. - ENDTRY. + TRY. + lo_salv ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. -ENDMETHOD. + ENDMETHOD. -METHOD zif_excel_converter~create_fieldcatalog. - DATA: lo_salv TYPE REF TO cl_salv_table. + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_salv TYPE REF TO cl_salv_table. - zif_excel_converter~can_convert_object( io_object = io_object ). + zif_excel_converter~can_convert_object( io_object = io_object ). - ws_option = is_option. + ws_option = is_option. - lo_salv ?= io_object. + lo_salv ?= io_object. - CLEAR: es_layout, - et_fieldcatalog, - et_colors . + CLEAR: es_layout, + et_fieldcatalog, + et_colors . - IF lo_salv IS BOUND. - load_data( EXPORTING io_salv = lo_salv - it_table = it_table ). - apply_sort( EXPORTING it_table = it_table - IMPORTING eo_table = eo_table ) . + IF lo_salv IS BOUND. + load_data( EXPORTING io_salv = lo_salv + it_table = it_table ). + apply_sort( EXPORTING it_table = it_table + IMPORTING eo_table = eo_table ) . - get_color( EXPORTING io_table = eo_table - IMPORTING et_colors = et_colors ) . + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . - get_filter( IMPORTING et_filter = et_filter - CHANGING xo_table = eo_table ) . + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . - update_catalog( CHANGING cs_layout = es_layout - ct_fieldcatalog = et_fieldcatalog ). - ENDIF. -ENDMETHOD. + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ENDIF. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_customui.clas.abap b/src/zcl_excel_customui.clas.abap index 638782153..bb84d58e8 100644 --- a/src/zcl_excel_customui.clas.abap +++ b/src/zcl_excel_customui.clas.abap @@ -1,20 +1,20 @@ -class ZCL_EXCEL_CUSTOMUI definition - public - final - create public . +CLASS zcl_excel_customui DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_CUSTOMUI *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_CUSTOMUI *"* do not include other source files here!!! -private section. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_CUSTOMUI *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_CUSTOMUI IMPLEMENTATION. +CLASS zcl_excel_customui IMPLEMENTATION. ENDCLASS. diff --git a/src/zcl_excel_customui_button.clas.abap b/src/zcl_excel_customui_button.clas.abap index 7513feab7..dc7207936 100644 --- a/src/zcl_excel_customui_button.clas.abap +++ b/src/zcl_excel_customui_button.clas.abap @@ -1,22 +1,22 @@ -class ZCL_EXCEL_CUSTOMUI_BUTTON definition - public - final - create public . +CLASS zcl_excel_customui_button DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_CUSTOMUI_BUTTON *"* do not include other source files here!!! - interfaces ZIF_EXCEL_CUSTOMUI_ELEMENT . -protected section. + INTERFACES zif_excel_customui_element . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_CUSTOMUI_BUTTON *"* do not include other source files here!!! -private section. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_CUSTOMUI_BUTTON *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_CUSTOMUI_BUTTON IMPLEMENTATION. +CLASS zcl_excel_customui_button IMPLEMENTATION. ENDCLASS. diff --git a/src/zcl_excel_data_validation.clas.abap b/src/zcl_excel_data_validation.clas.abap index 796edf9da..181e68f3a 100644 --- a/src/zcl_excel_data_validation.clas.abap +++ b/src/zcl_excel_data_validation.clas.abap @@ -1,83 +1,83 @@ -class ZCL_EXCEL_DATA_VALIDATION definition - public - final - create public . +CLASS zcl_excel_data_validation DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_DATA_VALIDATION *"* do not include other source files here!!! - type-pools ABAP . + TYPE-POOLS abap . - data ERRORSTYLE type ZEXCEL_DATA_VAL_ERROR_STYLE . - data OPERATOR type ZEXCEL_DATA_VAL_OPERATOR . - data ALLOWBLANK type FLAG value 'X'. "#EC NOTEXT . . . . . . . . . . " . - data CELL_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA . - data CELL_COLUMN_TO type ZEXCEL_CELL_COLUMN_ALPHA . - data CELL_ROW type ZEXCEL_CELL_ROW . - data CELL_ROW_TO type ZEXCEL_CELL_ROW . - constants C_TYPE_CUSTOM type ZEXCEL_DATA_VAL_TYPE value 'custom'. "#EC NOTEXT - constants C_TYPE_LIST type ZEXCEL_DATA_VAL_TYPE value 'list'. "#EC NOTEXT - data SHOWERRORMESSAGE type FLAG value 'X'. "#EC NOTEXT . . . . . . . . . . " . - data SHOWINPUTMESSAGE type FLAG value 'X'. "#EC NOTEXT . . . . . . . . . . " . - data TYPE type ZEXCEL_DATA_VAL_TYPE . - data FORMULA1 type ZEXCEL_VALIDATION_FORMULA1 . - data FORMULA2 type ZEXCEL_VALIDATION_FORMULA1 . - constants C_TYPE_NONE type ZEXCEL_DATA_VAL_TYPE value 'none'. "#EC NOTEXT - constants C_TYPE_DATE type ZEXCEL_DATA_VAL_TYPE value 'date'. "#EC NOTEXT - constants C_TYPE_DECIMAL type ZEXCEL_DATA_VAL_TYPE value 'decimal'. "#EC NOTEXT - constants C_TYPE_TEXTLENGTH type ZEXCEL_DATA_VAL_TYPE value 'textLength'. "#EC NOTEXT - constants C_TYPE_TIME type ZEXCEL_DATA_VAL_TYPE value 'time'. "#EC NOTEXT - constants C_TYPE_WHOLE type ZEXCEL_DATA_VAL_TYPE value 'whole'. "#EC NOTEXT - constants C_STYLE_STOP type ZEXCEL_DATA_VAL_ERROR_STYLE value 'stop'. "#EC NOTEXT - constants C_STYLE_WARNING type ZEXCEL_DATA_VAL_ERROR_STYLE value 'warning'. "#EC NOTEXT - constants C_STYLE_INFORMATION type ZEXCEL_DATA_VAL_ERROR_STYLE value 'information'. "#EC NOTEXT - constants C_OPERATOR_BETWEEN type ZEXCEL_DATA_VAL_OPERATOR value 'between'. "#EC NOTEXT - constants C_OPERATOR_EQUAL type ZEXCEL_DATA_VAL_OPERATOR value 'equal'. "#EC NOTEXT - constants C_OPERATOR_GREATERTHAN type ZEXCEL_DATA_VAL_OPERATOR value 'greaterThan'. "#EC NOTEXT - constants C_OPERATOR_GREATERTHANOREQUAL type ZEXCEL_DATA_VAL_OPERATOR value 'greaterThanOrEqual'. "#EC NOTEXT - constants C_OPERATOR_LESSTHAN type ZEXCEL_DATA_VAL_OPERATOR value 'lessThan'. "#EC NOTEXT - constants C_OPERATOR_LESSTHANOREQUAL type ZEXCEL_DATA_VAL_OPERATOR value 'lessThanOrEqual'. "#EC NOTEXT - constants C_OPERATOR_NOTBETWEEN type ZEXCEL_DATA_VAL_OPERATOR value 'notBetween'. "#EC NOTEXT - constants C_OPERATOR_NOTEQUAL type ZEXCEL_DATA_VAL_OPERATOR value 'notEqual'. "#EC NOTEXT - data SHOWDROPDOWN type FLAG . - data ERRORTITLE type STRING . - data ERROR type STRING . - data PROMPTTITLE type STRING . - data PROMPT type STRING . + DATA errorstyle TYPE zexcel_data_val_error_style . + DATA operator TYPE zexcel_data_val_operator . + DATA allowblank TYPE flag VALUE 'X'. "#EC NOTEXT . . . . . . . . . . " . + DATA cell_column TYPE zexcel_cell_column_alpha . + DATA cell_column_to TYPE zexcel_cell_column_alpha . + DATA cell_row TYPE zexcel_cell_row . + DATA cell_row_to TYPE zexcel_cell_row . + CONSTANTS c_type_custom TYPE zexcel_data_val_type VALUE 'custom'. "#EC NOTEXT + CONSTANTS c_type_list TYPE zexcel_data_val_type VALUE 'list'. "#EC NOTEXT + DATA showerrormessage TYPE flag VALUE 'X'. "#EC NOTEXT . . . . . . . . . . " . + DATA showinputmessage TYPE flag VALUE 'X'. "#EC NOTEXT . . . . . . . . . . " . + DATA type TYPE zexcel_data_val_type . + DATA formula1 TYPE zexcel_validation_formula1 . + DATA formula2 TYPE zexcel_validation_formula1 . + CONSTANTS c_type_none TYPE zexcel_data_val_type VALUE 'none'. "#EC NOTEXT + CONSTANTS c_type_date TYPE zexcel_data_val_type VALUE 'date'. "#EC NOTEXT + CONSTANTS c_type_decimal TYPE zexcel_data_val_type VALUE 'decimal'. "#EC NOTEXT + CONSTANTS c_type_textlength TYPE zexcel_data_val_type VALUE 'textLength'. "#EC NOTEXT + CONSTANTS c_type_time TYPE zexcel_data_val_type VALUE 'time'. "#EC NOTEXT + CONSTANTS c_type_whole TYPE zexcel_data_val_type VALUE 'whole'. "#EC NOTEXT + CONSTANTS c_style_stop TYPE zexcel_data_val_error_style VALUE 'stop'. "#EC NOTEXT + CONSTANTS c_style_warning TYPE zexcel_data_val_error_style VALUE 'warning'. "#EC NOTEXT + CONSTANTS c_style_information TYPE zexcel_data_val_error_style VALUE 'information'. "#EC NOTEXT + CONSTANTS c_operator_between TYPE zexcel_data_val_operator VALUE 'between'. "#EC NOTEXT + CONSTANTS c_operator_equal TYPE zexcel_data_val_operator VALUE 'equal'. "#EC NOTEXT + CONSTANTS c_operator_greaterthan TYPE zexcel_data_val_operator VALUE 'greaterThan'. "#EC NOTEXT + CONSTANTS c_operator_greaterthanorequal TYPE zexcel_data_val_operator VALUE 'greaterThanOrEqual'. "#EC NOTEXT + CONSTANTS c_operator_lessthan TYPE zexcel_data_val_operator VALUE 'lessThan'. "#EC NOTEXT + CONSTANTS c_operator_lessthanorequal TYPE zexcel_data_val_operator VALUE 'lessThanOrEqual'. "#EC NOTEXT + CONSTANTS c_operator_notbetween TYPE zexcel_data_val_operator VALUE 'notBetween'. "#EC NOTEXT + CONSTANTS c_operator_notequal TYPE zexcel_data_val_operator VALUE 'notEqual'. "#EC NOTEXT + DATA showdropdown TYPE flag . + DATA errortitle TYPE string . + DATA error TYPE string . + DATA prompttitle TYPE string . + DATA prompt TYPE string . - methods CONSTRUCTOR . + METHODS constructor . *"* protected components of class ZCL_EXCEL_DATA_VALIDATION *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_DATA_VALIDATION *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_DATA_VALIDATION *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_DATA_VALIDATION IMPLEMENTATION. +CLASS zcl_excel_data_validation IMPLEMENTATION. -method CONSTRUCTOR. - " Initialise instance variables - formula1 = ''. - formula2 = ''. - type = me->c_type_none. - errorstyle = me->c_style_stop. - operator = ''. - allowblank = abap_false. - showdropdown = abap_false. - showinputmessage = abap_true. - showerrormessage = abap_true. - errortitle = ''. - error = ''. - prompttitle = ''. - prompt = ''. + METHOD constructor. + " Initialise instance variables + formula1 = ''. + formula2 = ''. + type = me->c_type_none. + errorstyle = me->c_style_stop. + operator = ''. + allowblank = abap_false. + showdropdown = abap_false. + showinputmessage = abap_true. + showerrormessage = abap_true. + errortitle = ''. + error = ''. + prompttitle = ''. + prompt = ''. * inizialize dimension range - cell_row = 1. - cell_column = 'A'. - endmethod. + cell_row = 1. + cell_column = 'A'. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_data_validations.clas.abap b/src/zcl_excel_data_validations.clas.abap index 3ddf36812..6eec1f7ff 100644 --- a/src/zcl_excel_data_validations.clas.abap +++ b/src/zcl_excel_data_validations.clas.abap @@ -1,78 +1,78 @@ -class ZCL_EXCEL_DATA_VALIDATIONS definition - public - final - create public . +CLASS zcl_excel_data_validations DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_DATA_VALIDATIONS *"* do not include other source files here!!! -public section. - type-pools ABAP . - - methods ADD - importing - !IP_DATA_VALIDATION type ref to ZCL_EXCEL_DATA_VALIDATION . - methods CLEAR . - methods CONSTRUCTOR . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IP_DATA_VALIDATION type ref to ZCL_EXCEL_DATA_VALIDATION . - methods SIZE - returning - value(EP_SIZE) type I . + PUBLIC SECTION. + TYPE-POOLS abap . + + METHODS add + IMPORTING + !ip_data_validation TYPE REF TO zcl_excel_data_validation . + METHODS clear . + METHODS constructor . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !ip_data_validation TYPE REF TO zcl_excel_data_validation . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . *"* protected components of class ZCL_EXCEL_DATA_VALIDATIONS *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_DATA_VALIDATIONS *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - data DATA_VALIDATIONS type ref to CL_OBJECT_COLLECTION . + DATA data_validations TYPE REF TO cl_object_collection . ENDCLASS. -CLASS ZCL_EXCEL_DATA_VALIDATIONS IMPLEMENTATION. +CLASS zcl_excel_data_validations IMPLEMENTATION. -method ADD. - data_validations->add( ip_data_validation ). - endmethod. + METHOD add. + data_validations->add( ip_data_validation ). + ENDMETHOD. -method CLEAR. - data_validations->clear( ). - endmethod. + METHOD clear. + data_validations->clear( ). + ENDMETHOD. -method CONSTRUCTOR. + METHOD constructor. - CREATE OBJECT data_validations. + CREATE OBJECT data_validations. - endmethod. + ENDMETHOD. -method GET_ITERATOR. - eo_iterator ?= data_validations->get_iterator( ). - endmethod. + METHOD get_iterator. + eo_iterator ?= data_validations->get_iterator( ). + ENDMETHOD. -method IS_EMPTY. - is_empty = data_validations->is_empty( ). - endmethod. + METHOD is_empty. + is_empty = data_validations->is_empty( ). + ENDMETHOD. -method REMOVE. - data_validations->remove( ip_data_validation ). - endmethod. + METHOD remove. + data_validations->remove( ip_data_validation ). + ENDMETHOD. -method SIZE. - ep_size = data_validations->size( ). - endmethod. + METHOD size. + ep_size = data_validations->size( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_drawing.clas.abap b/src/zcl_excel_drawing.clas.abap index dbf58c90c..ea04fe1f0 100644 --- a/src/zcl_excel_drawing.clas.abap +++ b/src/zcl_excel_drawing.clas.abap @@ -1,9 +1,9 @@ -class ZCL_EXCEL_DRAWING definition - public - final - create public . +CLASS zcl_excel_drawing DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_DRAWING *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_DRAWING @@ -12,1123 +12,1123 @@ public section. *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_DRAWING *"* do not include other source files here!!! - type-pools ABAP . - - constants C_GRAPH_PIE type ZEXCEL_GRAPH_TYPE value 1. "#EC NOTEXT - constants C_GRAPH_LINE type ZEXCEL_GRAPH_TYPE value 2. "#EC NOTEXT - constants C_GRAPH_BARS type ZEXCEL_GRAPH_TYPE value 0. "#EC NOTEXT - data GRAPH_TYPE type ZEXCEL_GRAPH_TYPE . - data TITLE type STRING value 'image1.jpg'. "#EC NOTEXT - data X_REFERENCES type CHAR1 . - data Y_REFERENCES type CHAR1 . - constants TYPE_IMAGE type ZEXCEL_DRAWING_TYPE value 'image'. "#EC NOTEXT - constants TYPE_CHART type ZEXCEL_DRAWING_TYPE value 'chart'. "#EC NOTEXT - constants ANCHOR_ABSOLUTE type ZEXCEL_DRAWING_ANCHOR value 'ABS'. "#EC NOTEXT - constants ANCHOR_ONE_CELL type ZEXCEL_DRAWING_ANCHOR value 'ONE'. "#EC NOTEXT - constants ANCHOR_TWO_CELL type ZEXCEL_DRAWING_ANCHOR value 'TWO'. "#EC NOTEXT - data GRAPH type ref to ZCL_EXCEL_GRAPH . - constants C_MEDIA_TYPE_BMP type STRING value 'bmp'. "#EC NOTEXT - constants C_MEDIA_TYPE_XML type STRING value 'xml'. "#EC NOTEXT - constants C_MEDIA_TYPE_JPG type STRING value 'jpg'. "#EC NOTEXT - constants TYPE_IMAGE_HEADER_FOOTER type ZEXCEL_DRAWING_TYPE value 'hd_ft'. "#EC NOTEXT - - methods CONSTRUCTOR - importing - !IP_TYPE type ZEXCEL_DRAWING_TYPE default ZCL_EXCEL_DRAWING=>TYPE_IMAGE - !IP_TITLE type CLIKE optional . - methods CREATE_MEDIA_NAME - importing - !IP_INDEX type I . - methods GET_FROM_COL - returning - value(R_FROM_COL) type ZEXCEL_CELL_COLUMN . - methods GET_FROM_ROW - returning - value(R_FROM_ROW) type ZEXCEL_CELL_ROW . - methods GET_GUID - returning - value(EP_GUID) type GUID_16 . - methods GET_HEIGHT_EMU_STR - returning - value(R_HEIGHT) type STRING . - methods GET_MEDIA - returning - value(R_MEDIA) type XSTRING . - methods GET_MEDIA_NAME - returning - value(R_NAME) type STRING . - methods GET_MEDIA_TYPE - returning - value(R_TYPE) type STRING . - methods GET_NAME - returning - value(R_NAME) type STRING . - methods GET_TO_COL - returning - value(R_TO_COL) type ZEXCEL_CELL_COLUMN . - methods GET_TO_ROW - returning - value(R_TO_ROW) type ZEXCEL_CELL_ROW . - methods GET_WIDTH_EMU_STR - returning - value(R_WIDTH) type STRING . - class-methods PIXEL2EMU - importing - !IP_PIXEL type INT4 - !IP_DPI type INT2 optional - returning - value(R_EMU) type STRING . - class-methods EMU2PIXEL - importing - !IP_EMU type INT4 - !IP_DPI type INT2 optional - returning - value(R_PIXEL) type INT4 . - methods SET_MEDIA - importing - !IP_MEDIA type XSTRING optional - !IP_MEDIA_TYPE type STRING - !IP_WIDTH type INT4 default 0 - !IP_HEIGHT type INT4 default 0 . - methods SET_MEDIA_MIME - importing - !IP_IO type SKWF_IO - !IP_WIDTH type INT4 - !IP_HEIGHT type INT4 . - methods SET_MEDIA_WWW - importing - !IP_KEY type WWWDATATAB - !IP_WIDTH type INT4 - !IP_HEIGHT type INT4 . - methods SET_POSITION - importing - !IP_FROM_ROW type ZEXCEL_CELL_ROW - !IP_FROM_COL type ZEXCEL_CELL_COLUMN_ALPHA - !IP_ROWOFF type INT4 optional - !IP_COLOFF type INT4 optional - raising - ZCX_EXCEL . - methods SET_POSITION2 - importing - !IP_FROM type ZEXCEL_DRAWING_LOCATION - !IP_TO type ZEXCEL_DRAWING_LOCATION - !IP_ANCHOR type ZEXCEL_DRAWING_ANCHOR optional . - methods GET_POSITION - returning - value(RP_POSITION) type ZEXCEL_DRAWING_POSITION . - methods GET_TYPE - returning - value(RP_TYPE) type ZEXCEL_DRAWING_TYPE . - methods GET_INDEX - returning - value(RP_INDEX) type STRING . - methods LOAD_CHART_ATTRIBUTES - importing - value(IP_CHART) type ref to IF_IXML_DOCUMENT . -protected section. -private section. + TYPE-POOLS abap . + + CONSTANTS c_graph_pie TYPE zexcel_graph_type VALUE 1. "#EC NOTEXT + CONSTANTS c_graph_line TYPE zexcel_graph_type VALUE 2. "#EC NOTEXT + CONSTANTS c_graph_bars TYPE zexcel_graph_type VALUE 0. "#EC NOTEXT + DATA graph_type TYPE zexcel_graph_type . + DATA title TYPE string VALUE 'image1.jpg'. "#EC NOTEXT + DATA x_references TYPE char1 . + DATA y_references TYPE char1 . + CONSTANTS type_image TYPE zexcel_drawing_type VALUE 'image'. "#EC NOTEXT + CONSTANTS type_chart TYPE zexcel_drawing_type VALUE 'chart'. "#EC NOTEXT + CONSTANTS anchor_absolute TYPE zexcel_drawing_anchor VALUE 'ABS'. "#EC NOTEXT + CONSTANTS anchor_one_cell TYPE zexcel_drawing_anchor VALUE 'ONE'. "#EC NOTEXT + CONSTANTS anchor_two_cell TYPE zexcel_drawing_anchor VALUE 'TWO'. "#EC NOTEXT + DATA graph TYPE REF TO zcl_excel_graph . + CONSTANTS c_media_type_bmp TYPE string VALUE 'bmp'. "#EC NOTEXT + CONSTANTS c_media_type_xml TYPE string VALUE 'xml'. "#EC NOTEXT + CONSTANTS c_media_type_jpg TYPE string VALUE 'jpg'. "#EC NOTEXT + CONSTANTS type_image_header_footer TYPE zexcel_drawing_type VALUE 'hd_ft'. "#EC NOTEXT + + METHODS constructor + IMPORTING + !ip_type TYPE zexcel_drawing_type DEFAULT zcl_excel_drawing=>type_image + !ip_title TYPE clike OPTIONAL . + METHODS create_media_name + IMPORTING + !ip_index TYPE i . + METHODS get_from_col + RETURNING + VALUE(r_from_col) TYPE zexcel_cell_column . + METHODS get_from_row + RETURNING + VALUE(r_from_row) TYPE zexcel_cell_row . + METHODS get_guid + RETURNING + VALUE(ep_guid) TYPE guid_16 . + METHODS get_height_emu_str + RETURNING + VALUE(r_height) TYPE string . + METHODS get_media + RETURNING + VALUE(r_media) TYPE xstring . + METHODS get_media_name + RETURNING + VALUE(r_name) TYPE string . + METHODS get_media_type + RETURNING + VALUE(r_type) TYPE string . + METHODS get_name + RETURNING + VALUE(r_name) TYPE string . + METHODS get_to_col + RETURNING + VALUE(r_to_col) TYPE zexcel_cell_column . + METHODS get_to_row + RETURNING + VALUE(r_to_row) TYPE zexcel_cell_row . + METHODS get_width_emu_str + RETURNING + VALUE(r_width) TYPE string . + CLASS-METHODS pixel2emu + IMPORTING + !ip_pixel TYPE int4 + !ip_dpi TYPE int2 OPTIONAL + RETURNING + VALUE(r_emu) TYPE string . + CLASS-METHODS emu2pixel + IMPORTING + !ip_emu TYPE int4 + !ip_dpi TYPE int2 OPTIONAL + RETURNING + VALUE(r_pixel) TYPE int4 . + METHODS set_media + IMPORTING + !ip_media TYPE xstring OPTIONAL + !ip_media_type TYPE string + !ip_width TYPE int4 DEFAULT 0 + !ip_height TYPE int4 DEFAULT 0 . + METHODS set_media_mime + IMPORTING + !ip_io TYPE skwf_io + !ip_width TYPE int4 + !ip_height TYPE int4 . + METHODS set_media_www + IMPORTING + !ip_key TYPE wwwdatatab + !ip_width TYPE int4 + !ip_height TYPE int4 . + METHODS set_position + IMPORTING + !ip_from_row TYPE zexcel_cell_row + !ip_from_col TYPE zexcel_cell_column_alpha + !ip_rowoff TYPE int4 OPTIONAL + !ip_coloff TYPE int4 OPTIONAL + RAISING + zcx_excel . + METHODS set_position2 + IMPORTING + !ip_from TYPE zexcel_drawing_location + !ip_to TYPE zexcel_drawing_location + !ip_anchor TYPE zexcel_drawing_anchor OPTIONAL . + METHODS get_position + RETURNING + VALUE(rp_position) TYPE zexcel_drawing_position . + METHODS get_type + RETURNING + VALUE(rp_type) TYPE zexcel_drawing_type . + METHODS get_index + RETURNING + VALUE(rp_index) TYPE string . + METHODS load_chart_attributes + IMPORTING + VALUE(ip_chart) TYPE REF TO if_ixml_document . + PROTECTED SECTION. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_DRAWING *"* do not include other source files here!!! - data TYPE type ZEXCEL_DRAWING_TYPE value TYPE_IMAGE. "#EC NOTEXT . . . . . . . . . . . " . - data INDEX type STRING . - data ANCHOR type ZEXCEL_DRAWING_ANCHOR value ANCHOR_ONE_CELL. "#EC NOTEXT . . . . . . . . . . . " . - constants C_MEDIA_SOURCE_WWW type CHAR1 value 1. "#EC NOTEXT - constants C_MEDIA_SOURCE_XSTRING type CHAR1 value 0. "#EC NOTEXT - constants C_MEDIA_SOURCE_MIME type CHAR1 value 2. "#EC NOTEXT - data GUID type GUID_16 . - data MEDIA type XSTRING . - data MEDIA_KEY_WWW type WWWDATATAB . - data MEDIA_NAME type STRING . - data MEDIA_SOURCE type CHAR1 . - data MEDIA_TYPE type STRING . - data IO type SKWF_IO . - data FROM_LOC type ZEXCEL_DRAWING_LOCATION . - data TO_LOC type ZEXCEL_DRAWING_LOCATION . - data SIZE type ZEXCEL_DRAWING_SIZE . + DATA type TYPE zexcel_drawing_type VALUE type_image. "#EC NOTEXT . . . . . . . . . . . " . + DATA index TYPE string . + DATA anchor TYPE zexcel_drawing_anchor VALUE anchor_one_cell. "#EC NOTEXT . . . . . . . . . . . " . + CONSTANTS c_media_source_www TYPE char1 VALUE 1. "#EC NOTEXT + CONSTANTS c_media_source_xstring TYPE char1 VALUE 0. "#EC NOTEXT + CONSTANTS c_media_source_mime TYPE char1 VALUE 2. "#EC NOTEXT + DATA guid TYPE guid_16 . + DATA media TYPE xstring . + DATA media_key_www TYPE wwwdatatab . + DATA media_name TYPE string . + DATA media_source TYPE char1 . + DATA media_type TYPE string . + DATA io TYPE skwf_io . + DATA from_loc TYPE zexcel_drawing_location . + DATA to_loc TYPE zexcel_drawing_location . + DATA size TYPE zexcel_drawing_size . ENDCLASS. -CLASS ZCL_EXCEL_DRAWING IMPLEMENTATION. +CLASS zcl_excel_drawing IMPLEMENTATION. -METHOD constructor. + METHOD constructor. * CALL FUNCTION 'GUID_CREATE' " del issue #379 - function is outdated in newer releases * IMPORTING * ev_guid_16 = me->guid. - me->guid = zcl_excel_obsolete_func_wrap=>guid_create( ). " ins issue #379 - replacement for outdated function call + me->guid = zcl_excel_obsolete_func_wrap=>guid_create( ). " ins issue #379 - replacement for outdated function call - IF ip_title IS NOT INITIAL. - title = ip_title. - ELSE. - title = me->guid. - ENDIF. + IF ip_title IS NOT INITIAL. + title = ip_title. + ELSE. + title = me->guid. + ENDIF. - me->type = ip_type. + me->type = ip_type. * inizialize dimension range - anchor = anchor_one_cell. - from_loc-col = 1. - from_loc-row = 1. -ENDMETHOD. + anchor = anchor_one_cell. + from_loc-col = 1. + from_loc-row = 1. + ENDMETHOD. -method CREATE_MEDIA_NAME. + METHOD create_media_name. * if media name is initial, create unique name - CHECK media_name IS INITIAL. + CHECK media_name IS INITIAL. - index = ip_index. - CONCATENATE me->type index INTO media_name. - CONDENSE media_name NO-GAPS. - endmethod. + index = ip_index. + CONCATENATE me->type index INTO media_name. + CONDENSE media_name NO-GAPS. + ENDMETHOD. -METHOD emu2pixel. + METHOD emu2pixel. * suppose 96 DPI - IF ip_dpi IS SUPPLIED. + IF ip_dpi IS SUPPLIED. * r_emu = ip_pixel * 914400 / ip_dpi. - r_pixel = ip_emu * ip_dpi / 914400. - ELSE. + r_pixel = ip_emu * ip_dpi / 914400. + ELSE. * suppose 96 DPI * r_emu = ip_pixel * 914400 / 96. - r_pixel = ip_emu * 96 / 914400. - ENDIF. -ENDMETHOD. - - -method GET_FROM_COL. - r_from_col = me->from_loc-col. - endmethod. - - -method GET_FROM_ROW. - r_from_row = me->from_loc-row. - endmethod. - - -method GET_GUID. - - ep_guid = me->guid. + r_pixel = ip_emu * 96 / 914400. + ENDIF. + ENDMETHOD. - endmethod. - - -method GET_HEIGHT_EMU_STR. - r_height = pixel2emu( size-height ). - CONDENSE r_height NO-GAPS. - endmethod. + METHOD get_from_col. + r_from_col = me->from_loc-col. + ENDMETHOD. -method GET_INDEX. - rp_index = me->index. - endmethod. + METHOD get_from_row. + r_from_row = me->from_loc-row. + ENDMETHOD. -METHOD get_media. - DATA: lv_language TYPE sylangu. - DATA: lt_bin_mime TYPE sdokcntbins. - DATA: lt_mime TYPE tsfmime, - lv_filesize TYPE i, - lv_filesizec(10). + METHOD get_guid. - CASE media_source. - WHEN c_media_source_xstring. - r_media = media. - WHEN c_media_source_www. - CALL FUNCTION 'WWWDATA_IMPORT' - EXPORTING - key = media_key_www - TABLES - mime = lt_mime - EXCEPTIONS - OTHERS = 1. + ep_guid = me->guid. - CALL FUNCTION 'WWWPARAMS_READ' - EXPORTING - relid = media_key_www-relid - objid = media_key_www-objid - name = 'filesize' - IMPORTING - value = lv_filesizec. + ENDMETHOD. - lv_filesize = lv_filesizec. - CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' - EXPORTING - input_length = lv_filesize - IMPORTING - buffer = r_media - TABLES - binary_tab = lt_mime - EXCEPTIONS - failed = 1 - OTHERS = 2. - WHEN c_media_source_mime. - lv_language = sy-langu. - cl_wb_mime_repository=>load_mime( EXPORTING - io = me->io - IMPORTING - filesize = lv_filesize - bin_data = lt_bin_mime - CHANGING - language = lv_language ). - - CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' - EXPORTING - input_length = lv_filesize - IMPORTING - buffer = r_media - TABLES - binary_tab = lt_bin_mime - EXCEPTIONS - failed = 1 - OTHERS = 2. - ENDCASE. -ENDMETHOD. - - -method GET_MEDIA_NAME. - CONCATENATE media_name `.` media_type INTO r_name. - endmethod. - - -method GET_MEDIA_TYPE. - r_type = media_type. - endmethod. - - -method GET_NAME. - r_name = title. - endmethod. - - -method GET_POSITION. - rp_position-anchor = anchor. - rp_position-from = from_loc. - rp_position-to = to_loc. - rp_position-size = size. - endmethod. - - -method GET_TO_COL. - r_to_col = me->to_loc-col. - endmethod. - - -method GET_TO_ROW. - r_to_row = me->to_loc-row. - endmethod. - - -method GET_TYPE. - rp_type = me->type. - endmethod. - - -method GET_WIDTH_EMU_STR. - r_width = pixel2emu( size-width ). - CONDENSE r_width NO-GAPS. - endmethod. - - -METHOD load_chart_attributes. - DATA: node TYPE REF TO if_ixml_element. - DATA: node2 TYPE REF TO if_ixml_element. - DATA: node3 TYPE REF TO if_ixml_element. - DATA: node4 TYPE REF TO if_ixml_element. - - DATA lo_barchart TYPE REF TO zcl_excel_graph_bars. - DATA lo_piechart TYPE REF TO zcl_excel_graph_pie. - DATA lo_linechart TYPE REF TO zcl_excel_graph_line. - - TYPES: BEGIN OF t_prop, - val TYPE string, - rtl TYPE string, - lang TYPE string, - formatcode TYPE string, - sourcelinked TYPE string, - END OF t_prop. - - TYPES: BEGIN OF t_pagemargins, - b TYPE string, - l TYPE string, - r TYPE string, - t TYPE string, - header TYPE string, - footer TYPE string, - END OF t_pagemargins. - - DATA ls_prop TYPE t_prop. - DATA ls_pagemargins TYPE t_pagemargins. - - DATA lo_collection TYPE REF TO if_ixml_node_collection. - DATA lo_node TYPE REF TO if_ixml_node. - DATA lo_iterator TYPE REF TO if_ixml_node_iterator. - DATA lv_idx TYPE i. - DATA lv_order TYPE i. - DATA lv_invertifnegative TYPE string. - DATA lv_symbol TYPE string. - DATA lv_smooth TYPE c. - DATA lv_sername TYPE string. - DATA lv_label TYPE string. - DATA lv_value TYPE string. - DATA lv_axid TYPE string. - DATA lv_orientation TYPE string. - DATA lv_delete TYPE string. - DATA lv_axpos TYPE string. - DATA lv_formatcode TYPE string. - DATA lv_sourcelinked TYPE string. - DATA lv_majortickmark TYPE string. - DATA lv_minortickmark TYPE string. - DATA lv_ticklblpos TYPE string. - DATA lv_crossax TYPE string. - DATA lv_crosses TYPE string. - DATA lv_auto TYPE string. - DATA lv_lblalgn TYPE string. - DATA lv_lbloffset TYPE string. - DATA lv_nomultilvllbl TYPE string. - DATA lv_crossbetween TYPE string. - - node ?= ip_chart->if_ixml_node~get_first_child( ). - CHECK node IS NOT INITIAL. - - CASE me->graph_type. - WHEN c_graph_bars. - CREATE OBJECT lo_barchart. - me->graph = lo_barchart. - WHEN c_graph_pie. - CREATE OBJECT lo_piechart. - me->graph = lo_piechart. - WHEN c_graph_line. - CREATE OBJECT lo_linechart. - me->graph = lo_linechart. - WHEN OTHERS. - ENDCASE. - - "Fill properties - node2 ?= node->find_from_name( name = 'date1904' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_1904val = ls_prop-val. - node2 ?= node->find_from_name( name = 'lang' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_langval = ls_prop-val. - node2 ?= node->find_from_name( name = 'roundedCorners' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_roundedcornersval = ls_prop-val. - - "style - node2 ?= node->find_from_name( name = 'style' namespace = 'c14' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_c14styleval = ls_prop-val. - node2 ?= node->find_from_name( name = 'style' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_styleval = ls_prop-val. - "---------------------------Read graph properties - "ADDED - CLEAR node2. - node2 ?= node->find_from_name( name = 'title' namespace = 'c' ). - IF node2 IS BOUND AND node2 IS NOT INITIAL. - node3 ?= node2->find_from_name( name = 't' namespace = 'a' ). - me->graph->title = node3->get_value( ). - ENDIF. - "END - - node2 ?= node->find_from_name( name = 'autoTitleDeleted' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_autotitledeletedval = ls_prop-val. - - "plotArea - CASE me->graph_type. - WHEN c_graph_bars. - node2 ?= node->find_from_name( name = 'barDir' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_bardirval = ls_prop-val. - node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_groupingval = ls_prop-val. - node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_varycolorsval = ls_prop-val. - - "Load series - CALL METHOD node->get_elements_by_tag_name - EXPORTING -* depth = 0 - name = 'ser' -* namespace = '' - RECEIVING - rval = lo_collection. - CALL METHOD lo_collection->create_iterator - RECEIVING - rval = lo_iterator. - lo_node = lo_iterator->get_next( ). - IF lo_node IS BOUND. - node2 ?= lo_node->query_interface( ixml_iid_element ). - ENDIF. - WHILE lo_node IS BOUND. - node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_idx = ls_prop-val. - node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_order = ls_prop-val. - node3 ?= node2->find_from_name( name = 'invertIfNegative' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_invertifnegative = ls_prop-val. - node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). - IF node3 IS BOUND. - lv_sername = node3->get_value( ). - ENDIF. - node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). - IF node3 IS BOUND. - node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). - lv_label = node4->get_value( ). - ENDIF. - node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). - IF node3 IS BOUND. - node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). - lv_value = node4->get_value( ). - ENDIF. - CALL METHOD lo_barchart->create_serie + + METHOD get_height_emu_str. + r_height = pixel2emu( size-height ). + CONDENSE r_height NO-GAPS. + ENDMETHOD. + + + METHOD get_index. + rp_index = me->index. + ENDMETHOD. + + + METHOD get_media. + + DATA: lv_language TYPE sylangu. + DATA: lt_bin_mime TYPE sdokcntbins. + DATA: lt_mime TYPE tsfmime, + lv_filesize TYPE i, + lv_filesizec(10). + + CASE media_source. + WHEN c_media_source_xstring. + r_media = media. + WHEN c_media_source_www. + CALL FUNCTION 'WWWDATA_IMPORT' + EXPORTING + key = media_key_www + TABLES + mime = lt_mime + EXCEPTIONS + OTHERS = 1. + + CALL FUNCTION 'WWWPARAMS_READ' + EXPORTING + relid = media_key_www-relid + objid = media_key_www-objid + name = 'filesize' + IMPORTING + value = lv_filesizec. + + lv_filesize = lv_filesizec. + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filesize + IMPORTING + buffer = r_media + TABLES + binary_tab = lt_mime + EXCEPTIONS + failed = 1 + OTHERS = 2. + WHEN c_media_source_mime. + lv_language = sy-langu. + cl_wb_mime_repository=>load_mime( EXPORTING + io = me->io + IMPORTING + filesize = lv_filesize + bin_data = lt_bin_mime + CHANGING + language = lv_language ). + + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filesize + IMPORTING + buffer = r_media + TABLES + binary_tab = lt_bin_mime + EXCEPTIONS + failed = 1 + OTHERS = 2. + ENDCASE. + ENDMETHOD. + + + METHOD get_media_name. + CONCATENATE media_name `.` media_type INTO r_name. + ENDMETHOD. + + + METHOD get_media_type. + r_type = media_type. + ENDMETHOD. + + + METHOD get_name. + r_name = title. + ENDMETHOD. + + + METHOD get_position. + rp_position-anchor = anchor. + rp_position-from = from_loc. + rp_position-to = to_loc. + rp_position-size = size. + ENDMETHOD. + + + METHOD get_to_col. + r_to_col = me->to_loc-col. + ENDMETHOD. + + + METHOD get_to_row. + r_to_row = me->to_loc-row. + ENDMETHOD. + + + METHOD get_type. + rp_type = me->type. + ENDMETHOD. + + + METHOD get_width_emu_str. + r_width = pixel2emu( size-width ). + CONDENSE r_width NO-GAPS. + ENDMETHOD. + + + METHOD load_chart_attributes. + DATA: node TYPE REF TO if_ixml_element. + DATA: node2 TYPE REF TO if_ixml_element. + DATA: node3 TYPE REF TO if_ixml_element. + DATA: node4 TYPE REF TO if_ixml_element. + + DATA lo_barchart TYPE REF TO zcl_excel_graph_bars. + DATA lo_piechart TYPE REF TO zcl_excel_graph_pie. + DATA lo_linechart TYPE REF TO zcl_excel_graph_line. + + TYPES: BEGIN OF t_prop, + val TYPE string, + rtl TYPE string, + lang TYPE string, + formatcode TYPE string, + sourcelinked TYPE string, + END OF t_prop. + + TYPES: BEGIN OF t_pagemargins, + b TYPE string, + l TYPE string, + r TYPE string, + t TYPE string, + header TYPE string, + footer TYPE string, + END OF t_pagemargins. + + DATA ls_prop TYPE t_prop. + DATA ls_pagemargins TYPE t_pagemargins. + + DATA lo_collection TYPE REF TO if_ixml_node_collection. + DATA lo_node TYPE REF TO if_ixml_node. + DATA lo_iterator TYPE REF TO if_ixml_node_iterator. + DATA lv_idx TYPE i. + DATA lv_order TYPE i. + DATA lv_invertifnegative TYPE string. + DATA lv_symbol TYPE string. + DATA lv_smooth TYPE c. + DATA lv_sername TYPE string. + DATA lv_label TYPE string. + DATA lv_value TYPE string. + DATA lv_axid TYPE string. + DATA lv_orientation TYPE string. + DATA lv_delete TYPE string. + DATA lv_axpos TYPE string. + DATA lv_formatcode TYPE string. + DATA lv_sourcelinked TYPE string. + DATA lv_majortickmark TYPE string. + DATA lv_minortickmark TYPE string. + DATA lv_ticklblpos TYPE string. + DATA lv_crossax TYPE string. + DATA lv_crosses TYPE string. + DATA lv_auto TYPE string. + DATA lv_lblalgn TYPE string. + DATA lv_lbloffset TYPE string. + DATA lv_nomultilvllbl TYPE string. + DATA lv_crossbetween TYPE string. + + node ?= ip_chart->if_ixml_node~get_first_child( ). + CHECK node IS NOT INITIAL. + + CASE me->graph_type. + WHEN c_graph_bars. + CREATE OBJECT lo_barchart. + me->graph = lo_barchart. + WHEN c_graph_pie. + CREATE OBJECT lo_piechart. + me->graph = lo_piechart. + WHEN c_graph_line. + CREATE OBJECT lo_linechart. + me->graph = lo_linechart. + WHEN OTHERS. + ENDCASE. + + "Fill properties + node2 ?= node->find_from_name( name = 'date1904' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_1904val = ls_prop-val. + node2 ?= node->find_from_name( name = 'lang' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_langval = ls_prop-val. + node2 ?= node->find_from_name( name = 'roundedCorners' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_roundedcornersval = ls_prop-val. + + "style + node2 ?= node->find_from_name( name = 'style' namespace = 'c14' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_c14styleval = ls_prop-val. + node2 ?= node->find_from_name( name = 'style' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_styleval = ls_prop-val. + "---------------------------Read graph properties + "ADDED + CLEAR node2. + node2 ?= node->find_from_name( name = 'title' namespace = 'c' ). + IF node2 IS BOUND AND node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 't' namespace = 'a' ). + me->graph->title = node3->get_value( ). + ENDIF. + "END + + node2 ?= node->find_from_name( name = 'autoTitleDeleted' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_autotitledeletedval = ls_prop-val. + + "plotArea + CASE me->graph_type. + WHEN c_graph_bars. + node2 ?= node->find_from_name( name = 'barDir' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_bardirval = ls_prop-val. + node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_groupingval = ls_prop-val. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name EXPORTING - ip_idx = lv_idx - ip_order = lv_order - ip_invertifnegative = lv_invertifnegative - ip_lbl = lv_label - ip_ref = lv_value - ip_sername = lv_sername. +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. lo_node = lo_iterator->get_next( ). IF lo_node IS BOUND. node2 ?= lo_node->query_interface( ixml_iid_element ). ENDIF. - ENDWHILE. - "note: numCache avoided - node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_showlegendkeyval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_showvalval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_showcatnameval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_showsernameval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_showpercentval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_showbubblesizeval = ls_prop-val. - node2 ?= node->find_from_name( name = 'gapWidth' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_gapwidthval = ls_prop-val. - - "Load axes - node2 ?= node->find_from_name( name = 'barChart' namespace = 'c' ). - CALL METHOD node2->get_elements_by_tag_name - EXPORTING -* depth = 0 - name = 'axId' -* namespace = '' - RECEIVING - rval = lo_collection. - CALL METHOD lo_collection->create_iterator - RECEIVING - rval = lo_iterator. - lo_node = lo_iterator->get_next( ). - IF lo_node IS BOUND. - node2 ?= lo_node->query_interface( ixml_iid_element ). - ENDIF. - WHILE lo_node IS BOUND. - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lv_axid = ls_prop-val. - IF sy-index EQ 1. "catAx - node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). - node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_orientation = ls_prop-val. - node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_delete = ls_prop-val. - node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_axpos = ls_prop-val. - node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'invertIfNegative' namespace = 'c' ). zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_formatcode = ls_prop-formatcode. - lv_sourcelinked = ls_prop-sourcelinked. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_majortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_minortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_ticklblpos = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crossax = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crosses = ls_prop-val. - node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_auto = ls_prop-val. - node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_lblalgn = ls_prop-val. - node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_lbloffset = ls_prop-val. - node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_nomultilvllbl = ls_prop-val. - CALL METHOD lo_barchart->create_ax + lv_invertifnegative = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_barchart->create_serie EXPORTING - ip_axid = lv_axid - ip_type = zcl_excel_graph_bars=>c_catax - ip_orientation = lv_orientation - ip_delete = lv_delete - ip_axpos = lv_axpos - ip_formatcode = lv_formatcode - ip_sourcelinked = lv_sourcelinked - ip_majortickmark = lv_majortickmark - ip_minortickmark = lv_minortickmark - ip_ticklblpos = lv_ticklblpos - ip_crossax = lv_crossax - ip_crosses = lv_crosses - ip_auto = lv_auto - ip_lblalgn = lv_lblalgn - ip_lbloffset = lv_lbloffset - ip_nomultilvllbl = lv_nomultilvllbl. - ELSEIF sy-index EQ 2. "valAx - node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). - node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_orientation = ls_prop-val. - node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_delete = ls_prop-val. - node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_axpos = ls_prop-val. - node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_formatcode = ls_prop-formatcode. - lv_sourcelinked = ls_prop-sourcelinked. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_majortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_minortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_ticklblpos = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crossax = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crosses = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crossbetween = ls_prop-val. - CALL METHOD lo_barchart->create_ax - EXPORTING - ip_axid = lv_axid - ip_type = zcl_excel_graph_bars=>c_valax - ip_orientation = lv_orientation - ip_delete = lv_delete - ip_axpos = lv_axpos - ip_formatcode = lv_formatcode - ip_sourcelinked = lv_sourcelinked - ip_majortickmark = lv_majortickmark - ip_minortickmark = lv_minortickmark - ip_ticklblpos = lv_ticklblpos - ip_crossax = lv_crossax - ip_crosses = lv_crosses - ip_crossbetween = lv_crossbetween. - ENDIF. + ip_idx = lv_idx + ip_order = lv_order + ip_invertifnegative = lv_invertifnegative + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showbubblesizeval = ls_prop-val. + node2 ?= node->find_from_name( name = 'gapWidth' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_gapwidthval = ls_prop-val. + + "Load axes + node2 ?= node->find_from_name( name = 'barChart' namespace = 'c' ). + CALL METHOD node2->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'axId' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. lo_node = lo_iterator->get_next( ). IF lo_node IS BOUND. node2 ?= lo_node->query_interface( ixml_iid_element ). ENDIF. - ENDWHILE. - - WHEN c_graph_pie. - node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_varycolorsval = ls_prop-val. - - "Load series - CALL METHOD node->get_elements_by_tag_name - EXPORTING -* depth = 0 - name = 'ser' -* namespace = '' - RECEIVING - rval = lo_collection. - CALL METHOD lo_collection->create_iterator - RECEIVING - rval = lo_iterator. - lo_node = lo_iterator->get_next( ). - IF lo_node IS BOUND. - node2 ?= lo_node->query_interface( ixml_iid_element ). - ENDIF. - WHILE lo_node IS BOUND. - node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_idx = ls_prop-val. - node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_order = ls_prop-val. - node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). - IF node3 IS BOUND. - lv_sername = node3->get_value( ). - ENDIF. - node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). - IF node3 IS BOUND. - node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). - lv_label = node4->get_value( ). - ENDIF. - node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). - IF node3 IS BOUND. - node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). - lv_value = node4->get_value( ). - ENDIF. - CALL METHOD lo_piechart->create_serie + WHILE lo_node IS BOUND. + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lv_axid = ls_prop-val. + IF sy-index EQ 1. "catAx + node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_auto = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lblalgn = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lbloffset = ls_prop-val. + node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_nomultilvllbl = ls_prop-val. + CALL METHOD lo_barchart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_bars=>c_catax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_auto = lv_auto + ip_lblalgn = lv_lblalgn + ip_lbloffset = lv_lbloffset + ip_nomultilvllbl = lv_nomultilvllbl. + ELSEIF sy-index EQ 2. "valAx + node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossbetween = ls_prop-val. + CALL METHOD lo_barchart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_bars=>c_valax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_crossbetween = lv_crossbetween. + ENDIF. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + + WHEN c_graph_pie. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name EXPORTING - ip_idx = lv_idx - ip_order = lv_order - ip_lbl = lv_label - ip_ref = lv_value - ip_sername = lv_sername. +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. lo_node = lo_iterator->get_next( ). IF lo_node IS BOUND. node2 ?= lo_node->query_interface( ixml_iid_element ). ENDIF. - ENDWHILE. - - "note: numCache avoided - node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_showlegendkeyval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_showvalval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_showcatnameval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_showsernameval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_showpercentval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_showbubblesizeval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showLeaderLines' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_showleaderlinesval = ls_prop-val. - node2 ?= node->find_from_name( name = 'firstSliceAng' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_firstsliceangval = ls_prop-val. - WHEN c_graph_line. - node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_groupingval = ls_prop-val. - node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_varycolorsval = ls_prop-val. - - "Load series - CALL METHOD node->get_elements_by_tag_name - EXPORTING -* depth = 0 - name = 'ser' -* namespace = '' - RECEIVING - rval = lo_collection. - CALL METHOD lo_collection->create_iterator - RECEIVING - rval = lo_iterator. - lo_node = lo_iterator->get_next( ). - IF lo_node IS BOUND. - node2 ?= lo_node->query_interface( ixml_iid_element ). - ENDIF. - WHILE lo_node IS BOUND. - node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_idx = ls_prop-val. - node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_order = ls_prop-val. - node3 ?= node2->find_from_name( name = 'symbol' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_symbol = ls_prop-val. - node3 ?= node2->find_from_name( name = 'smooth' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_smooth = ls_prop-val. - node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). - IF node3 IS BOUND. - lv_sername = node3->get_value( ). - ENDIF. - node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). - IF node3 IS BOUND. - node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). - lv_label = node4->get_value( ). - ENDIF. - node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). - IF node3 IS BOUND. - node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). - lv_value = node4->get_value( ). - ENDIF. - CALL METHOD lo_linechart->create_serie + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_piechart->create_serie + EXPORTING + ip_idx = lv_idx + ip_order = lv_order + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showbubblesizeval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showLeaderLines' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showleaderlinesval = ls_prop-val. + node2 ?= node->find_from_name( name = 'firstSliceAng' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_firstsliceangval = ls_prop-val. + WHEN c_graph_line. + node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_groupingval = ls_prop-val. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name EXPORTING - ip_idx = lv_idx - ip_order = lv_order - ip_symbol = lv_symbol - ip_smooth = lv_smooth - ip_lbl = lv_label - ip_ref = lv_value - ip_sername = lv_sername. +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. lo_node = lo_iterator->get_next( ). IF lo_node IS BOUND. node2 ?= lo_node->query_interface( ixml_iid_element ). ENDIF. - ENDWHILE. - "note: numCache avoided - node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_showlegendkeyval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_showvalval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_showcatnameval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_showsernameval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_showpercentval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_showbubblesizeval = ls_prop-val. - - node ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). - node2 ?= node->find_from_name( name = 'marker' namespace = 'c' depth = '1' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_markerval = ls_prop-val. - node2 ?= node->find_from_name( name = 'smooth' namespace = 'c' depth = '1' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_smoothval = ls_prop-val. - node ?= ip_chart->if_ixml_node~get_first_child( ). - CHECK node IS NOT INITIAL. - - "Load axes - node2 ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). - CALL METHOD node2->get_elements_by_tag_name - EXPORTING -* depth = 0 - name = 'axId' -* namespace = '' - RECEIVING - rval = lo_collection. - CALL METHOD lo_collection->create_iterator - RECEIVING - rval = lo_iterator. - lo_node = lo_iterator->get_next( ). - IF lo_node IS BOUND. - node2 ?= lo_node->query_interface( ixml_iid_element ). - ENDIF. - WHILE lo_node IS BOUND. - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lv_axid = ls_prop-val. - IF sy-index EQ 1. "catAx - node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). - node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_orientation = ls_prop-val. - node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_delete = ls_prop-val. - node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_axpos = ls_prop-val. -* node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). -* zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). -* lv_formatcode = ls_prop-formatcode. -* lv_sourcelinked = ls_prop-sourcelinked. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_majortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_minortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_ticklblpos = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'symbol' namespace = 'c' ). zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crossax = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + lv_symbol = ls_prop-val. + node3 ?= node2->find_from_name( name = 'smooth' namespace = 'c' ). zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crosses = ls_prop-val. - node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_auto = ls_prop-val. - node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_lblalgn = ls_prop-val. - node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_lbloffset = ls_prop-val. - node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_nomultilvllbl = ls_prop-val. - CALL METHOD lo_linechart->create_ax + lv_smooth = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_linechart->create_serie EXPORTING - ip_axid = lv_axid - ip_type = zcl_excel_graph_line=>c_catax - ip_orientation = lv_orientation - ip_delete = lv_delete - ip_axpos = lv_axpos - ip_formatcode = lv_formatcode - ip_sourcelinked = lv_sourcelinked - ip_majortickmark = lv_majortickmark - ip_minortickmark = lv_minortickmark - ip_ticklblpos = lv_ticklblpos - ip_crossax = lv_crossax - ip_crosses = lv_crosses - ip_auto = lv_auto - ip_lblalgn = lv_lblalgn - ip_lbloffset = lv_lbloffset - ip_nomultilvllbl = lv_nomultilvllbl. - ELSEIF sy-index EQ 2. "valAx - node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). - node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_orientation = ls_prop-val. - node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_delete = ls_prop-val. - node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_axpos = ls_prop-val. - node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_formatcode = ls_prop-formatcode. - lv_sourcelinked = ls_prop-sourcelinked. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_majortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_minortickmark = ls_prop-val. - node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_ticklblpos = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crossax = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crosses = ls_prop-val. - node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). - lv_crossbetween = ls_prop-val. - CALL METHOD lo_linechart->create_ax - EXPORTING - ip_axid = lv_axid - ip_type = zcl_excel_graph_line=>c_valax - ip_orientation = lv_orientation - ip_delete = lv_delete - ip_axpos = lv_axpos - ip_formatcode = lv_formatcode - ip_sourcelinked = lv_sourcelinked - ip_majortickmark = lv_majortickmark - ip_minortickmark = lv_minortickmark - ip_ticklblpos = lv_ticklblpos - ip_crossax = lv_crossax - ip_crosses = lv_crosses - ip_crossbetween = lv_crossbetween. - ENDIF. + ip_idx = lv_idx + ip_order = lv_order + ip_symbol = lv_symbol + ip_smooth = lv_smooth + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showbubblesizeval = ls_prop-val. + + node ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). + node2 ?= node->find_from_name( name = 'marker' namespace = 'c' depth = '1' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_markerval = ls_prop-val. + node2 ?= node->find_from_name( name = 'smooth' namespace = 'c' depth = '1' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_smoothval = ls_prop-val. + node ?= ip_chart->if_ixml_node~get_first_child( ). + CHECK node IS NOT INITIAL. + + "Load axes + node2 ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). + CALL METHOD node2->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'axId' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. lo_node = lo_iterator->get_next( ). IF lo_node IS BOUND. node2 ?= lo_node->query_interface( ixml_iid_element ). ENDIF. - ENDWHILE. - WHEN OTHERS. - ENDCASE. - - "legend - CASE me->graph_type. - WHEN c_graph_bars. - node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_legendposval = ls_prop-val. - node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_barchart->ns_overlayval = ls_prop-val. - WHEN c_graph_line. - node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_legendposval = ls_prop-val. - node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_linechart->ns_overlayval = ls_prop-val. - WHEN c_graph_pie. - node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_legendposval = ls_prop-val. - node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_overlayval = ls_prop-val. - node2 ?= node->find_from_name( name = 'pPr' namespace = 'a' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_pprrtl = ls_prop-rtl. - node2 ?= node->find_from_name( name = 'endParaRPr' namespace = 'a' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - lo_piechart->ns_endpararprlang = ls_prop-lang. - - WHEN OTHERS. - ENDCASE. - - node2 ?= node->find_from_name( name = 'plotVisOnly' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_plotvisonlyval = ls_prop-val. - node2 ?= node->find_from_name( name = 'dispBlanksAs' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_dispblanksasval = ls_prop-val. - node2 ?= node->find_from_name( name = 'showDLblsOverMax' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). - me->graph->ns_showdlblsovermaxval = ls_prop-val. - "--------------------- - - node2 ?= node->find_from_name( name = 'pageMargins' namespace = 'c' ). - zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_pagemargins ). - me->graph->pagemargins = ls_pagemargins. - - -ENDMETHOD. - - -method PIXEL2EMU. + WHILE lo_node IS BOUND. + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lv_axid = ls_prop-val. + IF sy-index EQ 1. "catAx + node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. +* node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). +* zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). +* lv_formatcode = ls_prop-formatcode. +* lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_auto = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lblalgn = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lbloffset = ls_prop-val. + node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_nomultilvllbl = ls_prop-val. + CALL METHOD lo_linechart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_line=>c_catax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_auto = lv_auto + ip_lblalgn = lv_lblalgn + ip_lbloffset = lv_lbloffset + ip_nomultilvllbl = lv_nomultilvllbl. + ELSEIF sy-index EQ 2. "valAx + node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossbetween = ls_prop-val. + CALL METHOD lo_linechart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_line=>c_valax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_crossbetween = lv_crossbetween. + ENDIF. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + WHEN OTHERS. + ENDCASE. + + "legend + CASE me->graph_type. + WHEN c_graph_bars. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_overlayval = ls_prop-val. + WHEN c_graph_line. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_overlayval = ls_prop-val. + WHEN c_graph_pie. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_overlayval = ls_prop-val. + node2 ?= node->find_from_name( name = 'pPr' namespace = 'a' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_pprrtl = ls_prop-rtl. + node2 ?= node->find_from_name( name = 'endParaRPr' namespace = 'a' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_endpararprlang = ls_prop-lang. + + WHEN OTHERS. + ENDCASE. + + node2 ?= node->find_from_name( name = 'plotVisOnly' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_plotvisonlyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'dispBlanksAs' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_dispblanksasval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showDLblsOverMax' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_showdlblsovermaxval = ls_prop-val. + "--------------------- + + node2 ?= node->find_from_name( name = 'pageMargins' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_pagemargins ). + me->graph->pagemargins = ls_pagemargins. + + + ENDMETHOD. + + + METHOD pixel2emu. * suppose 96 DPI - IF ip_dpi IS SUPPLIED. - r_emu = ip_pixel * 914400 / ip_dpi. - ELSE. + IF ip_dpi IS SUPPLIED. + r_emu = ip_pixel * 914400 / ip_dpi. + ELSE. * suppose 96 DPI - r_emu = ip_pixel * 914400 / 96. - ENDIF. - endmethod. - - -method SET_MEDIA. - IF ip_media IS SUPPLIED. - media = ip_media. - ENDIF. - media_type = ip_media_type. - media_source = c_media_source_xstring. - IF ip_width IS SUPPLIED. - size-width = ip_width. - ENDIF. - IF ip_height IS SUPPLIED. - size-height = ip_height. - ENDIF. - endmethod. + r_emu = ip_pixel * 914400 / 96. + ENDIF. + ENDMETHOD. -METHOD set_media_mime. + METHOD set_media. + IF ip_media IS SUPPLIED. + media = ip_media. + ENDIF. + media_type = ip_media_type. + media_source = c_media_source_xstring. + IF ip_width IS SUPPLIED. + size-width = ip_width. + ENDIF. + IF ip_height IS SUPPLIED. + size-height = ip_height. + ENDIF. + ENDMETHOD. - DATA: lv_language TYPE sylangu. - io = ip_io. - media_source = c_media_source_mime. - size-width = ip_width. - size-height = ip_height. + METHOD set_media_mime. - lv_language = sy-langu. - cl_wb_mime_repository=>load_mime( EXPORTING - io = ip_io - IMPORTING - filename = media_name - "mimetype = media_type - CHANGING - language = lv_language ). + DATA: lv_language TYPE sylangu. - SPLIT media_name AT '.' INTO media_name media_type. + io = ip_io. + media_source = c_media_source_mime. + size-width = ip_width. + size-height = ip_height. -ENDMETHOD. + lv_language = sy-langu. + cl_wb_mime_repository=>load_mime( EXPORTING + io = ip_io + IMPORTING + filename = media_name + "mimetype = media_type + CHANGING + language = lv_language ). + SPLIT media_name AT '.' INTO media_name media_type. -method SET_MEDIA_WWW. - DATA: lv_value(20). + ENDMETHOD. - media_key_www = ip_key. - media_source = c_media_source_www. - CALL FUNCTION 'WWWPARAMS_READ' - EXPORTING - relid = media_key_www-relid - objid = media_key_www-objid - name = 'fileextension' - IMPORTING - value = lv_value. - media_type = lv_value. - SHIFT media_type LEFT DELETING LEADING '.'. + METHOD set_media_www. + DATA: lv_value(20). - size-width = ip_width. - size-height = ip_height. - endmethod. + media_key_www = ip_key. + media_source = c_media_source_www. + CALL FUNCTION 'WWWPARAMS_READ' + EXPORTING + relid = media_key_www-relid + objid = media_key_www-objid + name = 'fileextension' + IMPORTING + value = lv_value. + media_type = lv_value. + SHIFT media_type LEFT DELETING LEADING '.'. -method SET_POSITION. - from_loc-col = zcl_excel_common=>convert_column2int( ip_from_col ) - 1. - IF ip_coloff IS SUPPLIED. - from_loc-col_offset = ip_coloff. - ENDIF. - from_loc-row = ip_from_row - 1. - IF ip_rowoff IS SUPPLIED. - from_loc-row_offset = ip_rowoff. - ENDIF. - anchor = anchor_one_cell. - endmethod. + size-width = ip_width. + size-height = ip_height. + ENDMETHOD. -method SET_POSITION2. + METHOD set_position. + from_loc-col = zcl_excel_common=>convert_column2int( ip_from_col ) - 1. + IF ip_coloff IS SUPPLIED. + from_loc-col_offset = ip_coloff. + ENDIF. + from_loc-row = ip_from_row - 1. + IF ip_rowoff IS SUPPLIED. + from_loc-row_offset = ip_rowoff. + ENDIF. + anchor = anchor_one_cell. + ENDMETHOD. - data: lv_anchor type zexcel_drawing_anchor. - lv_anchor = ip_anchor. - IF lv_anchor IS INITIAL. - IF ip_to IS NOT INITIAL. - lv_anchor = anchor_two_cell. - ELSE. - lv_anchor = anchor_one_cell. + METHOD set_position2. + + DATA: lv_anchor TYPE zexcel_drawing_anchor. + lv_anchor = ip_anchor. + + IF lv_anchor IS INITIAL. + IF ip_to IS NOT INITIAL. + lv_anchor = anchor_two_cell. + ELSE. + lv_anchor = anchor_one_cell. + ENDIF. ENDIF. - ENDIF. - CASE lv_anchor. - WHEN anchor_absolute OR anchor_one_cell. - CLEAR: me->to_loc. - WHEN anchor_two_cell. - CLEAR: me->size. - ENDCASE. + CASE lv_anchor. + WHEN anchor_absolute OR anchor_one_cell. + CLEAR: me->to_loc. + WHEN anchor_two_cell. + CLEAR: me->size. + ENDCASE. - me->from_loc = ip_from. - me->to_loc = ip_to. - me->anchor = lv_anchor. + me->from_loc = ip_from. + me->to_loc = ip_to. + me->anchor = lv_anchor. - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_drawings.clas.abap b/src/zcl_excel_drawings.clas.abap index de6b0944a..b5a69bd8f 100644 --- a/src/zcl_excel_drawings.clas.abap +++ b/src/zcl_excel_drawings.clas.abap @@ -1,123 +1,123 @@ -class ZCL_EXCEL_DRAWINGS definition - public - final - create public . +CLASS zcl_excel_drawings DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_DRAWINGS *"* do not include other source files here!!! - data TYPE type ZEXCEL_DRAWING_TYPE read-only value 'IMAGE'. "#EC NOTEXT . . . . . . . . . . " . - - methods ADD - importing - !IP_DRAWING type ref to ZCL_EXCEL_DRAWING . - methods INCLUDE - importing - !IP_DRAWING type ref to ZCL_EXCEL_DRAWING . - methods CLEAR . - methods CONSTRUCTOR - importing - !IP_TYPE type ZEXCEL_DRAWING_TYPE . - methods GET - importing - !IP_INDEX type ZEXCEL_ACTIVE_WORKSHEET - returning - value(EO_DRAWING) type ref to ZCL_EXCEL_DRAWING . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IP_DRAWING type ref to ZCL_EXCEL_DRAWING . - methods SIZE - returning - value(EP_SIZE) type I . - methods GET_TYPE - returning - value(RP_TYPE) type ZEXCEL_DRAWING_TYPE . + DATA type TYPE zexcel_drawing_type READ-ONLY VALUE 'IMAGE'. "#EC NOTEXT . . . . . . . . . . " . + + METHODS add + IMPORTING + !ip_drawing TYPE REF TO zcl_excel_drawing . + METHODS include + IMPORTING + !ip_drawing TYPE REF TO zcl_excel_drawing . + METHODS clear . + METHODS constructor + IMPORTING + !ip_type TYPE zexcel_drawing_type . + METHODS get + IMPORTING + !ip_index TYPE zexcel_active_worksheet + RETURNING + VALUE(eo_drawing) TYPE REF TO zcl_excel_drawing . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !ip_drawing TYPE REF TO zcl_excel_drawing . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . + METHODS get_type + RETURNING + VALUE(rp_type) TYPE zexcel_drawing_type . *"* protected components of class ZCL_EXCEL_DRAWINGS *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_DRAWINGS *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_DRAWINGS *"* do not include other source files here!!! - data DRAWINGS type ref to CL_OBJECT_COLLECTION . + DATA drawings TYPE REF TO cl_object_collection . ENDCLASS. -CLASS ZCL_EXCEL_DRAWINGS IMPLEMENTATION. +CLASS zcl_excel_drawings IMPLEMENTATION. -method ADD. - DATA: lv_index TYPE i. + METHOD add. + DATA: lv_index TYPE i. - drawings->add( ip_drawing ). - lv_index = drawings->size( ). - ip_drawing->create_media_name( - ip_index = lv_index ). - endmethod. + drawings->add( ip_drawing ). + lv_index = drawings->size( ). + ip_drawing->create_media_name( + ip_index = lv_index ). + ENDMETHOD. -method CLEAR. + METHOD clear. - drawings->clear( ). - endmethod. + drawings->clear( ). + ENDMETHOD. -method CONSTRUCTOR. + METHOD constructor. - CREATE OBJECT drawings. - type = ip_type. + CREATE OBJECT drawings. + type = ip_type. - endmethod. + ENDMETHOD. -method GET. + METHOD get. - DATA lv_index TYPE i. - lv_index = ip_index. - eo_drawing ?= drawings->get( lv_index ). - endmethod. + DATA lv_index TYPE i. + lv_index = ip_index. + eo_drawing ?= drawings->get( lv_index ). + ENDMETHOD. -method GET_ITERATOR. + METHOD get_iterator. - eo_iterator ?= drawings->get_iterator( ). - endmethod. + eo_iterator ?= drawings->get_iterator( ). + ENDMETHOD. -method GET_TYPE. - rp_type = me->type. - endmethod. + METHOD get_type. + rp_type = me->type. + ENDMETHOD. -method INCLUDE. - drawings->add( ip_drawing ). - endmethod. + METHOD include. + drawings->add( ip_drawing ). + ENDMETHOD. -method IS_EMPTY. + METHOD is_empty. - is_empty = drawings->is_empty( ). - endmethod. + is_empty = drawings->is_empty( ). + ENDMETHOD. -method REMOVE. + METHOD remove. - drawings->remove( ip_drawing ). - endmethod. + drawings->remove( ip_drawing ). + ENDMETHOD. -method SIZE. + METHOD size. - ep_size = drawings->size( ). - endmethod. + ep_size = drawings->size( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_graph.clas.abap b/src/zcl_excel_graph.clas.abap index 63de65d19..a74e27082 100644 --- a/src/zcl_excel_graph.clas.abap +++ b/src/zcl_excel_graph.clas.abap @@ -1,410 +1,410 @@ -class ZCL_EXCEL_GRAPH definition - public - create public . +CLASS zcl_excel_graph DEFINITION + PUBLIC + CREATE PUBLIC . -public section. + PUBLIC SECTION. - types: + TYPES: *"* public components of class ZCL_EXCEL_GRAPH *"* do not include other source files here!!! - BEGIN OF s_style, - c14style type i, - cstyle type i, - end of s_style . - types: - BEGIN OF s_series, - idx TYPE i, - order TYPE i, - invertifnegative TYPE string, - symbol TYPE string, - smooth TYPE string, - lbl TYPE string, - ref TYPE string, - sername TYPE string, - END OF s_series . - types: - t_series TYPE STANDARD TABLE OF s_series . - types: - BEGIN OF s_pagemargins, - b TYPE string, - l TYPE string, - r TYPE string, - t TYPE string, - header TYPE string, - footer TYPE string, - END OF s_pagemargins . + BEGIN OF s_style, + c14style TYPE i, + cstyle TYPE i, + END OF s_style . + TYPES: + BEGIN OF s_series, + idx TYPE i, + order TYPE i, + invertifnegative TYPE string, + symbol TYPE string, + smooth TYPE string, + lbl TYPE string, + ref TYPE string, + sername TYPE string, + END OF s_series . + TYPES: + t_series TYPE STANDARD TABLE OF s_series . + TYPES: + BEGIN OF s_pagemargins, + b TYPE string, + l TYPE string, + r TYPE string, + t TYPE string, + header TYPE string, + footer TYPE string, + END OF s_pagemargins . - data NS_1904VAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data NS_LANGVAL type STRING value 'it-IT'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data NS_ROUNDEDCORNERSVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data PAGEMARGINS type S_PAGEMARGINS . - data NS_AUTOTITLEDELETEDVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data NS_PLOTVISONLYVAL type STRING value '1'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data NS_DISPBLANKSASVAL type STRING value 'gap'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data NS_SHOWDLBLSOVERMAXVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data TITLE type STRING . . . " . - data SERIES type T_SERIES . - data NS_C14STYLEVAL type STRING value '102'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data PRINT_LABEL type C value 'X'. "#EC NOTEXT . . . . . . . . . . . . . . " . - data NS_STYLEVAL type STRING value '2'. "#EC NOTEXT . . . . . . . . . . . . . . " . - constants: - BEGIN OF c_style_default, - c14style type i value 102, - cstyle type i value 2, - END OF c_style_default . - constants: - BEGIN OF c_style_1, - c14style type i value 101, - cstyle type i value 1, - END OF c_style_1 . - constants: - BEGIN OF c_style_3, - c14style type i value 103, - cstyle type i value 3, - END OF c_style_3 . - constants: - BEGIN OF c_style_4, - c14style type i value 104, - cstyle type i value 4, - END OF c_style_4 . - constants: - BEGIN OF c_style_5, - c14style type i value 105, - cstyle type i value 5, - END OF c_style_5 . - constants: - BEGIN OF c_style_6, - c14style type i value 106, - cstyle type i value 6, - END OF c_style_6 . - constants: - BEGIN OF c_style_7, - c14style type i value 107, - cstyle type i value 7, - END OF c_style_7 . - constants: - BEGIN OF c_style_8, - c14style type i value 108, - cstyle type i value 8, - END OF c_style_8 . - constants: - BEGIN OF c_style_9, - c14style type i value 109, - cstyle type i value 9, - END OF c_style_9 . - constants: - BEGIN OF c_style_10, - c14style type i value 110, - cstyle type i value 10, - END OF c_style_10 . - constants: - BEGIN OF c_style_11, - c14style type i value 111, - cstyle type i value 11, - END OF c_style_11 . - constants: - BEGIN OF c_style_12, - c14style type i value 112, - cstyle type i value 12, - END OF c_style_12 . - constants: - BEGIN OF c_style_13, - c14style type i value 113, - cstyle type i value 13, - END OF c_style_13 . - constants: - BEGIN OF c_style_14, - c14style type i value 114, - cstyle type i value 14, - END OF c_style_14 . - constants: - BEGIN OF c_style_15, - c14style type i value 115, - cstyle type i value 15, - END OF c_style_15 . - constants: - BEGIN OF c_style_16, - c14style type i value 116, - cstyle type i value 16, - END OF c_style_16 . - constants: - BEGIN OF c_style_17, - c14style type i value 117, - cstyle type i value 17, - END OF c_style_17 . - constants: - BEGIN OF c_style_18, - c14style type i value 118, - cstyle type i value 18, - END OF c_style_18 . - constants: - BEGIN OF c_style_19, - c14style type i value 119, - cstyle type i value 19, - END OF c_style_19 . - constants: - BEGIN OF c_style_20, - c14style type i value 120, - cstyle type i value 20, - END OF c_style_20 . - constants: - BEGIN OF c_style_21, - c14style type i value 121, - cstyle type i value 21, - END OF c_style_21 . - constants: - BEGIN OF c_style_22, - c14style type i value 122, - cstyle type i value 22, - END OF c_style_22 . - constants: - BEGIN OF c_style_23, - c14style type i value 123, - cstyle type i value 23, - END OF c_style_23 . - constants: - BEGIN OF c_style_24, - c14style type i value 124, - cstyle type i value 24, - END OF c_style_24 . - constants: - BEGIN OF c_style_25, - c14style type i value 125, - cstyle type i value 25, - END OF c_style_25 . - constants: - BEGIN OF c_style_26, - c14style type i value 126, - cstyle type i value 26, - END OF c_style_26 . - constants: - BEGIN OF c_style_27, - c14style type i value 127, - cstyle type i value 27, - END OF c_style_27 . - constants: - BEGIN OF c_style_28, - c14style type i value 128, - cstyle type i value 28, - END OF c_style_28 . - constants: - BEGIN OF c_style_29, - c14style type i value 129, - cstyle type i value 29, - END OF c_style_29 . - constants: - BEGIN OF c_style_30, - c14style type i value 130, - cstyle type i value 30, - END OF c_style_30 . - constants: - BEGIN OF c_style_31, - c14style type i value 131, - cstyle type i value 31, - END OF c_style_31 . - constants: - BEGIN OF c_style_32, - c14style type i value 132, - cstyle type i value 32, - END OF c_style_32 . - constants: - BEGIN OF c_style_33, - c14style type i value 133, - cstyle type i value 33, - END OF c_style_33 . - constants: - BEGIN OF c_style_34, - c14style type i value 134, - cstyle type i value 34, - END OF c_style_34 . - constants: - BEGIN OF c_style_35, - c14style type i value 135, - cstyle type i value 35, - END OF c_style_35 . - constants: - BEGIN OF c_style_36, - c14style type i value 136, - cstyle type i value 36, - END OF c_style_36 . - constants: - BEGIN OF c_style_37, - c14style type i value 137, - cstyle type i value 37, - END OF c_style_37 . - constants: - BEGIN OF c_style_38, - c14style type i value 138, - cstyle type i value 38, - END OF c_style_38 . - constants: - BEGIN OF c_style_39, - c14style type i value 139, - cstyle type i value 39, - END OF c_style_39 . - constants: - BEGIN OF c_style_40, - c14style type i value 140, - cstyle type i value 40, - END OF c_style_40 . - constants: - BEGIN OF c_style_41, - c14style type i value 141, - cstyle type i value 41, - END OF c_style_41 . - constants: - BEGIN OF c_style_42, - c14style type i value 142, - cstyle type i value 42, - END OF c_style_42 . - constants: - BEGIN OF c_style_43, - c14style type i value 143, - cstyle type i value 43, - END OF c_style_43 . - constants: - BEGIN OF c_style_44, - c14style type i value 144, - cstyle type i value 44, - END OF c_style_44 . - constants: - BEGIN OF c_style_45, - c14style type i value 145, - cstyle type i value 45, - END OF c_style_45 . - constants: - BEGIN OF c_style_46, - c14style type i value 146, - cstyle type i value 46, - END OF c_style_46 . - constants: - BEGIN OF c_style_47, - c14style type i value 147, - cstyle type i value 47, - END OF c_style_47 . - constants: - BEGIN OF c_style_48, - c14style type i value 148, - cstyle type i value 48, - END OF c_style_48 . - constants C_SHOW_TRUE type C value '1'. "#EC NOTEXT - constants C_SHOW_FALSE type C value '0'. "#EC NOTEXT - constants C_PRINT_LBL_TRUE type C value '1'. "#EC NOTEXT - constants C_PRINT_LBL_FALSE type C value '0'. "#EC NOTEXT + DATA ns_1904val TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA ns_langval TYPE string VALUE 'it-IT'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA ns_roundedcornersval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA pagemargins TYPE s_pagemargins . + DATA ns_autotitledeletedval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA ns_plotvisonlyval TYPE string VALUE '1'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA ns_dispblanksasval TYPE string VALUE 'gap'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA ns_showdlblsovermaxval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA title TYPE string . . . " . + DATA series TYPE t_series . + DATA ns_c14styleval TYPE string VALUE '102'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA print_label TYPE c VALUE 'X'. "#EC NOTEXT . . . . . . . . . . . . . . " . + DATA ns_styleval TYPE string VALUE '2'. "#EC NOTEXT . . . . . . . . . . . . . . " . + CONSTANTS: + BEGIN OF c_style_default, + c14style TYPE i VALUE 102, + cstyle TYPE i VALUE 2, + END OF c_style_default . + CONSTANTS: + BEGIN OF c_style_1, + c14style TYPE i VALUE 101, + cstyle TYPE i VALUE 1, + END OF c_style_1 . + CONSTANTS: + BEGIN OF c_style_3, + c14style TYPE i VALUE 103, + cstyle TYPE i VALUE 3, + END OF c_style_3 . + CONSTANTS: + BEGIN OF c_style_4, + c14style TYPE i VALUE 104, + cstyle TYPE i VALUE 4, + END OF c_style_4 . + CONSTANTS: + BEGIN OF c_style_5, + c14style TYPE i VALUE 105, + cstyle TYPE i VALUE 5, + END OF c_style_5 . + CONSTANTS: + BEGIN OF c_style_6, + c14style TYPE i VALUE 106, + cstyle TYPE i VALUE 6, + END OF c_style_6 . + CONSTANTS: + BEGIN OF c_style_7, + c14style TYPE i VALUE 107, + cstyle TYPE i VALUE 7, + END OF c_style_7 . + CONSTANTS: + BEGIN OF c_style_8, + c14style TYPE i VALUE 108, + cstyle TYPE i VALUE 8, + END OF c_style_8 . + CONSTANTS: + BEGIN OF c_style_9, + c14style TYPE i VALUE 109, + cstyle TYPE i VALUE 9, + END OF c_style_9 . + CONSTANTS: + BEGIN OF c_style_10, + c14style TYPE i VALUE 110, + cstyle TYPE i VALUE 10, + END OF c_style_10 . + CONSTANTS: + BEGIN OF c_style_11, + c14style TYPE i VALUE 111, + cstyle TYPE i VALUE 11, + END OF c_style_11 . + CONSTANTS: + BEGIN OF c_style_12, + c14style TYPE i VALUE 112, + cstyle TYPE i VALUE 12, + END OF c_style_12 . + CONSTANTS: + BEGIN OF c_style_13, + c14style TYPE i VALUE 113, + cstyle TYPE i VALUE 13, + END OF c_style_13 . + CONSTANTS: + BEGIN OF c_style_14, + c14style TYPE i VALUE 114, + cstyle TYPE i VALUE 14, + END OF c_style_14 . + CONSTANTS: + BEGIN OF c_style_15, + c14style TYPE i VALUE 115, + cstyle TYPE i VALUE 15, + END OF c_style_15 . + CONSTANTS: + BEGIN OF c_style_16, + c14style TYPE i VALUE 116, + cstyle TYPE i VALUE 16, + END OF c_style_16 . + CONSTANTS: + BEGIN OF c_style_17, + c14style TYPE i VALUE 117, + cstyle TYPE i VALUE 17, + END OF c_style_17 . + CONSTANTS: + BEGIN OF c_style_18, + c14style TYPE i VALUE 118, + cstyle TYPE i VALUE 18, + END OF c_style_18 . + CONSTANTS: + BEGIN OF c_style_19, + c14style TYPE i VALUE 119, + cstyle TYPE i VALUE 19, + END OF c_style_19 . + CONSTANTS: + BEGIN OF c_style_20, + c14style TYPE i VALUE 120, + cstyle TYPE i VALUE 20, + END OF c_style_20 . + CONSTANTS: + BEGIN OF c_style_21, + c14style TYPE i VALUE 121, + cstyle TYPE i VALUE 21, + END OF c_style_21 . + CONSTANTS: + BEGIN OF c_style_22, + c14style TYPE i VALUE 122, + cstyle TYPE i VALUE 22, + END OF c_style_22 . + CONSTANTS: + BEGIN OF c_style_23, + c14style TYPE i VALUE 123, + cstyle TYPE i VALUE 23, + END OF c_style_23 . + CONSTANTS: + BEGIN OF c_style_24, + c14style TYPE i VALUE 124, + cstyle TYPE i VALUE 24, + END OF c_style_24 . + CONSTANTS: + BEGIN OF c_style_25, + c14style TYPE i VALUE 125, + cstyle TYPE i VALUE 25, + END OF c_style_25 . + CONSTANTS: + BEGIN OF c_style_26, + c14style TYPE i VALUE 126, + cstyle TYPE i VALUE 26, + END OF c_style_26 . + CONSTANTS: + BEGIN OF c_style_27, + c14style TYPE i VALUE 127, + cstyle TYPE i VALUE 27, + END OF c_style_27 . + CONSTANTS: + BEGIN OF c_style_28, + c14style TYPE i VALUE 128, + cstyle TYPE i VALUE 28, + END OF c_style_28 . + CONSTANTS: + BEGIN OF c_style_29, + c14style TYPE i VALUE 129, + cstyle TYPE i VALUE 29, + END OF c_style_29 . + CONSTANTS: + BEGIN OF c_style_30, + c14style TYPE i VALUE 130, + cstyle TYPE i VALUE 30, + END OF c_style_30 . + CONSTANTS: + BEGIN OF c_style_31, + c14style TYPE i VALUE 131, + cstyle TYPE i VALUE 31, + END OF c_style_31 . + CONSTANTS: + BEGIN OF c_style_32, + c14style TYPE i VALUE 132, + cstyle TYPE i VALUE 32, + END OF c_style_32 . + CONSTANTS: + BEGIN OF c_style_33, + c14style TYPE i VALUE 133, + cstyle TYPE i VALUE 33, + END OF c_style_33 . + CONSTANTS: + BEGIN OF c_style_34, + c14style TYPE i VALUE 134, + cstyle TYPE i VALUE 34, + END OF c_style_34 . + CONSTANTS: + BEGIN OF c_style_35, + c14style TYPE i VALUE 135, + cstyle TYPE i VALUE 35, + END OF c_style_35 . + CONSTANTS: + BEGIN OF c_style_36, + c14style TYPE i VALUE 136, + cstyle TYPE i VALUE 36, + END OF c_style_36 . + CONSTANTS: + BEGIN OF c_style_37, + c14style TYPE i VALUE 137, + cstyle TYPE i VALUE 37, + END OF c_style_37 . + CONSTANTS: + BEGIN OF c_style_38, + c14style TYPE i VALUE 138, + cstyle TYPE i VALUE 38, + END OF c_style_38 . + CONSTANTS: + BEGIN OF c_style_39, + c14style TYPE i VALUE 139, + cstyle TYPE i VALUE 39, + END OF c_style_39 . + CONSTANTS: + BEGIN OF c_style_40, + c14style TYPE i VALUE 140, + cstyle TYPE i VALUE 40, + END OF c_style_40 . + CONSTANTS: + BEGIN OF c_style_41, + c14style TYPE i VALUE 141, + cstyle TYPE i VALUE 41, + END OF c_style_41 . + CONSTANTS: + BEGIN OF c_style_42, + c14style TYPE i VALUE 142, + cstyle TYPE i VALUE 42, + END OF c_style_42 . + CONSTANTS: + BEGIN OF c_style_43, + c14style TYPE i VALUE 143, + cstyle TYPE i VALUE 43, + END OF c_style_43 . + CONSTANTS: + BEGIN OF c_style_44, + c14style TYPE i VALUE 144, + cstyle TYPE i VALUE 44, + END OF c_style_44 . + CONSTANTS: + BEGIN OF c_style_45, + c14style TYPE i VALUE 145, + cstyle TYPE i VALUE 45, + END OF c_style_45 . + CONSTANTS: + BEGIN OF c_style_46, + c14style TYPE i VALUE 146, + cstyle TYPE i VALUE 46, + END OF c_style_46 . + CONSTANTS: + BEGIN OF c_style_47, + c14style TYPE i VALUE 147, + cstyle TYPE i VALUE 47, + END OF c_style_47 . + CONSTANTS: + BEGIN OF c_style_48, + c14style TYPE i VALUE 148, + cstyle TYPE i VALUE 48, + END OF c_style_48 . + CONSTANTS c_show_true TYPE c VALUE '1'. "#EC NOTEXT + CONSTANTS c_show_false TYPE c VALUE '0'. "#EC NOTEXT + CONSTANTS c_print_lbl_true TYPE c VALUE '1'. "#EC NOTEXT + CONSTANTS c_print_lbl_false TYPE c VALUE '0'. "#EC NOTEXT - methods CONSTRUCTOR . - methods CREATE_SERIE - importing - !IP_IDX type I optional - !IP_ORDER type I - !IP_INVERTIFNEGATIVE type STRING optional - !IP_SYMBOL type STRING optional - !IP_SMOOTH type C optional - !IP_LBL_FROM_COL type ZEXCEL_CELL_COLUMN_ALPHA optional - !IP_LBL_FROM_ROW type ZEXCEL_CELL_ROW optional - !IP_LBL_TO_COL type ZEXCEL_CELL_COLUMN_ALPHA optional - !IP_LBL_TO_ROW type ZEXCEL_CELL_ROW optional - !IP_LBL type STRING optional - !IP_REF_FROM_COL type ZEXCEL_CELL_COLUMN_ALPHA optional - !IP_REF_FROM_ROW type ZEXCEL_CELL_ROW optional - !IP_REF_TO_COL type ZEXCEL_CELL_COLUMN_ALPHA optional - !IP_REF_TO_ROW type ZEXCEL_CELL_ROW optional - !IP_REF type STRING optional - !IP_SERNAME type STRING - !IP_SHEET type ZEXCEL_SHEET_TITLE optional . - methods SET_STYLE - importing - !IP_STYLE type S_STYLE . - methods SET_PRINT_LBL - importing - !IP_VALUE type C . - methods SET_TITLE - importing - value(IP_VALUE) type STRING . -protected section. + METHODS constructor . + METHODS create_serie + IMPORTING + !ip_idx TYPE i OPTIONAL + !ip_order TYPE i + !ip_invertifnegative TYPE string OPTIONAL + !ip_symbol TYPE string OPTIONAL + !ip_smooth TYPE c OPTIONAL + !ip_lbl_from_col TYPE zexcel_cell_column_alpha OPTIONAL + !ip_lbl_from_row TYPE zexcel_cell_row OPTIONAL + !ip_lbl_to_col TYPE zexcel_cell_column_alpha OPTIONAL + !ip_lbl_to_row TYPE zexcel_cell_row OPTIONAL + !ip_lbl TYPE string OPTIONAL + !ip_ref_from_col TYPE zexcel_cell_column_alpha OPTIONAL + !ip_ref_from_row TYPE zexcel_cell_row OPTIONAL + !ip_ref_to_col TYPE zexcel_cell_column_alpha OPTIONAL + !ip_ref_to_row TYPE zexcel_cell_row OPTIONAL + !ip_ref TYPE string OPTIONAL + !ip_sername TYPE string + !ip_sheet TYPE zexcel_sheet_title OPTIONAL . + METHODS set_style + IMPORTING + !ip_style TYPE s_style . + METHODS set_print_lbl + IMPORTING + !ip_value TYPE c . + METHODS set_title + IMPORTING + VALUE(ip_value) TYPE string . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_GRAPH *"* do not include other source files here!!! -private section. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_GRAPH *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_GRAPH IMPLEMENTATION. +CLASS zcl_excel_graph IMPLEMENTATION. -method CONSTRUCTOR. - "Load default values - me->pagemargins-b = '0.75'. - me->pagemargins-l = '0.7'. - me->pagemargins-r = '0.7'. - me->pagemargins-t = '0.75'. - me->pagemargins-header = '0.3'. - me->pagemargins-footer = '0.3'. - endmethod. + METHOD constructor. + "Load default values + me->pagemargins-b = '0.75'. + me->pagemargins-l = '0.7'. + me->pagemargins-r = '0.7'. + me->pagemargins-t = '0.75'. + me->pagemargins-header = '0.3'. + me->pagemargins-footer = '0.3'. + ENDMETHOD. -method CREATE_SERIE. - DATA ls_serie TYPE s_series. + METHOD create_serie. + DATA ls_serie TYPE s_series. - DATA: lv_start_row_c TYPE char7, - lv_stop_row_c TYPE char7. + DATA: lv_start_row_c TYPE char7, + lv_stop_row_c TYPE char7. - IF ip_lbl IS NOT SUPPLIED. - lv_stop_row_c = ip_lbl_to_row. - SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. - SHIFT lv_stop_row_c LEFT DELETING LEADING space. - lv_start_row_c = ip_lbl_from_row. - SHIFT lv_start_row_c RIGHT DELETING TRAILING space. - SHIFT lv_start_row_c LEFT DELETING LEADING space. - ls_serie-lbl = ip_sheet. - ls_serie-lbl = zcl_excel_common=>escape_string( ip_value = ls_serie-lbl ). - CONCATENATE ls_serie-lbl '!$' ip_lbl_from_col '$' lv_start_row_c ':$' ip_lbl_to_col '$' lv_stop_row_c INTO ls_serie-lbl. - CLEAR: lv_start_row_c, lv_stop_row_c. - ELSE. - ls_serie-lbl = ip_lbl. - ENDIF. - IF ip_ref IS NOT SUPPLIED. - lv_stop_row_c = ip_ref_to_row. - SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. - SHIFT lv_stop_row_c LEFT DELETING LEADING space. - lv_start_row_c = ip_ref_from_row. - SHIFT lv_start_row_c RIGHT DELETING TRAILING space. - SHIFT lv_start_row_c LEFT DELETING LEADING space. - ls_serie-ref = ip_sheet. - ls_serie-ref = zcl_excel_common=>escape_string( ip_value = ls_serie-ref ). - CONCATENATE ls_serie-ref '!$' ip_ref_from_col '$' lv_start_row_c ':$' ip_ref_to_col '$' lv_stop_row_c INTO ls_serie-ref. - CLEAR: lv_start_row_c, lv_stop_row_c. - ELSE. - ls_serie-ref = ip_ref. - ENDIF. - ls_serie-idx = ip_idx. - ls_serie-order = ip_order. - ls_serie-invertifnegative = ip_invertifnegative. - ls_serie-symbol = ip_symbol. - ls_serie-smooth = ip_smooth. - ls_serie-sername = ip_sername. - APPEND ls_serie TO me->series. - SORT me->series BY order ASCENDING. - endmethod. + IF ip_lbl IS NOT SUPPLIED. + lv_stop_row_c = ip_lbl_to_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_lbl_from_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + ls_serie-lbl = ip_sheet. + ls_serie-lbl = zcl_excel_common=>escape_string( ip_value = ls_serie-lbl ). + CONCATENATE ls_serie-lbl '!$' ip_lbl_from_col '$' lv_start_row_c ':$' ip_lbl_to_col '$' lv_stop_row_c INTO ls_serie-lbl. + CLEAR: lv_start_row_c, lv_stop_row_c. + ELSE. + ls_serie-lbl = ip_lbl. + ENDIF. + IF ip_ref IS NOT SUPPLIED. + lv_stop_row_c = ip_ref_to_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_ref_from_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + ls_serie-ref = ip_sheet. + ls_serie-ref = zcl_excel_common=>escape_string( ip_value = ls_serie-ref ). + CONCATENATE ls_serie-ref '!$' ip_ref_from_col '$' lv_start_row_c ':$' ip_ref_to_col '$' lv_stop_row_c INTO ls_serie-ref. + CLEAR: lv_start_row_c, lv_stop_row_c. + ELSE. + ls_serie-ref = ip_ref. + ENDIF. + ls_serie-idx = ip_idx. + ls_serie-order = ip_order. + ls_serie-invertifnegative = ip_invertifnegative. + ls_serie-symbol = ip_symbol. + ls_serie-smooth = ip_smooth. + ls_serie-sername = ip_sername. + APPEND ls_serie TO me->series. + SORT me->series BY order ASCENDING. + ENDMETHOD. -method SET_PRINT_LBL. - me->print_label = ip_value. - endmethod. + METHOD set_print_lbl. + me->print_label = ip_value. + ENDMETHOD. -method SET_STYLE. - me->ns_c14styleval = ip_style-c14style. - CONDENSE me->ns_c14styleval NO-GAPS. - me->ns_styleval = ip_style-cstyle. - CONDENSE me->ns_styleval NO-GAPS. - endmethod. + METHOD set_style. + me->ns_c14styleval = ip_style-c14style. + CONDENSE me->ns_c14styleval NO-GAPS. + me->ns_styleval = ip_style-cstyle. + CONDENSE me->ns_styleval NO-GAPS. + ENDMETHOD. -method SET_TITLE. - me->title = ip_value. -endmethod. + METHOD set_title. + me->title = ip_value. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_graph_bars.clas.abap b/src/zcl_excel_graph_bars.clas.abap index efa18c425..eaa588346 100644 --- a/src/zcl_excel_graph_bars.clas.abap +++ b/src/zcl_excel_graph_bars.clas.abap @@ -1,282 +1,282 @@ -class ZCL_EXCEL_GRAPH_BARS definition - public - inheriting from ZCL_EXCEL_GRAPH - final - create public . +CLASS zcl_excel_graph_bars DEFINITION + PUBLIC + INHERITING FROM zcl_excel_graph + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. - types: + TYPES: *"* public components of class ZCL_EXCEL_GRAPH_BARS *"* do not include other source files here!!! - BEGIN OF s_ax, - axid TYPE string, - type TYPE char5, - orientation TYPE string, - delete TYPE string, - axpos TYPE string, - formatcode TYPE string, - sourcelinked TYPE string, - majortickmark TYPE string, - minortickmark TYPE string, - ticklblpos TYPE string, - crossax TYPE string, - crosses TYPE string, - auto TYPE string, - lblalgn TYPE string, - lbloffset TYPE string, - nomultilvllbl TYPE string, - crossbetween TYPE string, - END OF s_ax . - types: - t_ax TYPE STANDARD TABLE OF s_ax . + BEGIN OF s_ax, + axid TYPE string, + type TYPE char5, + orientation TYPE string, + delete TYPE string, + axpos TYPE string, + formatcode TYPE string, + sourcelinked TYPE string, + majortickmark TYPE string, + minortickmark TYPE string, + ticklblpos TYPE string, + crossax TYPE string, + crosses TYPE string, + auto TYPE string, + lblalgn TYPE string, + lbloffset TYPE string, + nomultilvllbl TYPE string, + crossbetween TYPE string, + END OF s_ax . + TYPES: + t_ax TYPE STANDARD TABLE OF s_ax . - data NS_BARDIRVAL type STRING value 'col'. "#EC NOTEXT . . . . . . . . . . . " . - constants C_GROUPINGVAL_CLUSTERED type STRING value 'clustered'. "#EC NOTEXT - constants C_GROUPINGVAL_STACKED type STRING value 'stacked'. "#EC NOTEXT - data NS_GROUPINGVAL type STRING value C_GROUPINGVAL_CLUSTERED. "#EC NOTEXT . . . . . . . . . . . " . - data NS_VARYCOLORSVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_SHOWLEGENDKEYVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_SHOWVALVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_SHOWCATNAMEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_SHOWSERNAMEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_SHOWPERCENTVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_SHOWBUBBLESIZEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_GAPWIDTHVAL type STRING value '150'. "#EC NOTEXT . . . . . . . . . . . " . - data AXES type T_AX . - constants: - C_VALAX type c length 5 value 'VALAX'. "#EC NOTEXT - constants: - C_CATAX type c length 5 value 'CATAX'. "#EC NOTEXT - data NS_LEGENDPOSVAL type STRING value 'r'. "#EC NOTEXT . . . . . . . . . . . " . - data NS_OVERLAYVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . . " . - constants C_INVERTIFNEGATIVE_YES type STRING value '1'. "#EC NOTEXT - constants C_INVERTIFNEGATIVE_NO type STRING value '0'. "#EC NOTEXT + DATA ns_bardirval TYPE string VALUE 'col'. "#EC NOTEXT . . . . . . . . . . . " . + CONSTANTS c_groupingval_clustered TYPE string VALUE 'clustered'. "#EC NOTEXT + CONSTANTS c_groupingval_stacked TYPE string VALUE 'stacked'. "#EC NOTEXT + DATA ns_groupingval TYPE string VALUE c_groupingval_clustered. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_varycolorsval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_showlegendkeyval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_showvalval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_showcatnameval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_showsernameval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_showpercentval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_showbubblesizeval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_gapwidthval TYPE string VALUE '150'. "#EC NOTEXT . . . . . . . . . . . " . + DATA axes TYPE t_ax . + CONSTANTS: + c_valax TYPE c LENGTH 5 VALUE 'VALAX'. "#EC NOTEXT + CONSTANTS: + c_catax TYPE c LENGTH 5 VALUE 'CATAX'. "#EC NOTEXT + DATA ns_legendposval TYPE string VALUE 'r'. "#EC NOTEXT . . . . . . . . . . . " . + DATA ns_overlayval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . . " . + CONSTANTS c_invertifnegative_yes TYPE string VALUE '1'. "#EC NOTEXT + CONSTANTS c_invertifnegative_no TYPE string VALUE '0'. "#EC NOTEXT - methods CREATE_AX - importing - !IP_AXID type STRING optional - !IP_TYPE type CHAR5 - !IP_ORIENTATION type STRING optional - !IP_DELETE type STRING optional - !IP_AXPOS type STRING optional - !IP_FORMATCODE type STRING optional - !IP_SOURCELINKED type STRING optional - !IP_MAJORTICKMARK type STRING optional - !IP_MINORTICKMARK type STRING optional - !IP_TICKLBLPOS type STRING optional - !IP_CROSSAX type STRING optional - !IP_CROSSES type STRING optional - !IP_AUTO type STRING optional - !IP_LBLALGN type STRING optional - !IP_LBLOFFSET type STRING optional - !IP_NOMULTILVLLBL type STRING optional - !IP_CROSSBETWEEN type STRING optional . - methods SET_SHOW_LEGEND_KEY - importing - !IP_VALUE type C . - methods SET_SHOW_VALUES - importing - !IP_VALUE type C . - methods SET_SHOW_CAT_NAME - importing - !IP_VALUE type C . - methods SET_SHOW_SER_NAME - importing - !IP_VALUE type C . - methods SET_SHOW_PERCENT - importing - !IP_VALUE type C . - methods SET_VARYCOLOR - importing - !IP_VALUE type C . -protected section. + METHODS create_ax + IMPORTING + !ip_axid TYPE string OPTIONAL + !ip_type TYPE char5 + !ip_orientation TYPE string OPTIONAL + !ip_delete TYPE string OPTIONAL + !ip_axpos TYPE string OPTIONAL + !ip_formatcode TYPE string OPTIONAL + !ip_sourcelinked TYPE string OPTIONAL + !ip_majortickmark TYPE string OPTIONAL + !ip_minortickmark TYPE string OPTIONAL + !ip_ticklblpos TYPE string OPTIONAL + !ip_crossax TYPE string OPTIONAL + !ip_crosses TYPE string OPTIONAL + !ip_auto TYPE string OPTIONAL + !ip_lblalgn TYPE string OPTIONAL + !ip_lbloffset TYPE string OPTIONAL + !ip_nomultilvllbl TYPE string OPTIONAL + !ip_crossbetween TYPE string OPTIONAL . + METHODS set_show_legend_key + IMPORTING + !ip_value TYPE c . + METHODS set_show_values + IMPORTING + !ip_value TYPE c . + METHODS set_show_cat_name + IMPORTING + !ip_value TYPE c . + METHODS set_show_ser_name + IMPORTING + !ip_value TYPE c . + METHODS set_show_percent + IMPORTING + !ip_value TYPE c . + METHODS set_varycolor + IMPORTING + !ip_value TYPE c . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_GRAPH_BARS *"* do not include other source files here!!! -private section. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_GRAPH_BARS *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_GRAPH_BARS IMPLEMENTATION. +CLASS zcl_excel_graph_bars IMPLEMENTATION. -method CREATE_AX. - DATA ls_ax TYPE s_ax. - ls_ax-type = ip_type. + METHOD create_ax. + DATA ls_ax TYPE s_ax. + ls_ax-type = ip_type. - if ip_type = c_catax. - if ip_axid is SUPPLIED. - ls_ax-axid = ip_axid. - else. - ls_ax-axid = '1'. - endif. - if ip_orientation is SUPPLIED. - ls_ax-orientation = ip_orientation. - else. - ls_ax-orientation = 'minMax'. - endif. - if ip_delete is SUPPLIED. - ls_ax-delete = ip_delete. - else. - ls_ax-delete = '0'. - endif. - if ip_axpos is SUPPLIED. - ls_ax-axpos = ip_axpos. - else. - ls_ax-axpos = 'b'. - endif. - if ip_formatcode is SUPPLIED. - ls_ax-formatcode = ip_formatcode. - else. - ls_ax-formatcode = 'General'. - endif. - if ip_sourcelinked is SUPPLIED. - ls_ax-sourcelinked = ip_sourcelinked. - else. - ls_ax-sourcelinked = '1'. - endif. - if ip_majorTickMark is SUPPLIED. - ls_ax-majorTickMark = ip_majorTickMark. - else. - ls_ax-majorTickMark = 'out'. - endif. - if ip_minorTickMark is SUPPLIED. - ls_ax-minorTickMark = ip_minorTickMark. - else. - ls_ax-minorTickMark = 'none'. - endif. - if ip_ticklblpos is SUPPLIED. - ls_ax-ticklblpos = ip_ticklblpos. - else. - ls_ax-ticklblpos = 'nextTo'. - endif. - if ip_crossax is SUPPLIED. - ls_ax-crossax = ip_crossax. - else. - ls_ax-crossax = '2'. - endif. - if ip_crosses is SUPPLIED. - ls_ax-crosses = ip_crosses. - else. - ls_ax-crosses = 'autoZero'. - endif. - if ip_auto is SUPPLIED. - ls_ax-auto = ip_auto. - else. - ls_ax-auto = '1'. - endif. - if ip_lblAlgn is SUPPLIED. - ls_ax-lblAlgn = ip_lblAlgn. - else. - ls_ax-lblAlgn = 'ctr'. - endif. - if ip_lblOffset is SUPPLIED. - ls_ax-lblOffset = ip_lblOffset. - else. - ls_ax-lblOffset = '100'. - endif. - if ip_noMultiLvlLbl is SUPPLIED. - ls_ax-noMultiLvlLbl = ip_noMultiLvlLbl. - else. - ls_ax-noMultiLvlLbl = '0'. - endif. - elseif ip_type = c_valax. - if ip_axid is SUPPLIED. - ls_ax-axid = ip_axid. - else. - ls_ax-axid = '2'. - endif. - if ip_orientation is SUPPLIED. - ls_ax-orientation = ip_orientation. - else. - ls_ax-orientation = 'minMax'. - endif. - if ip_delete is SUPPLIED. - ls_ax-delete = ip_delete. - else. - ls_ax-delete = '0'. - endif. - if ip_axpos is SUPPLIED. - ls_ax-axpos = ip_axpos. - else. - ls_ax-axpos = 'l'. - endif. - if ip_formatcode is SUPPLIED. - ls_ax-formatcode = ip_formatcode. - else. - ls_ax-formatcode = 'General'. - endif. - if ip_sourcelinked is SUPPLIED. - ls_ax-sourcelinked = ip_sourcelinked. - else. - ls_ax-sourcelinked = '1'. - endif. - if ip_majorTickMark is SUPPLIED. - ls_ax-majorTickMark = ip_majorTickMark. - else. - ls_ax-majorTickMark = 'out'. - endif. - if ip_minorTickMark is SUPPLIED. - ls_ax-minorTickMark = ip_minorTickMark. - else. - ls_ax-minorTickMark = 'none'. - endif. - if ip_ticklblpos is SUPPLIED. - ls_ax-ticklblpos = ip_ticklblpos. - else. - ls_ax-ticklblpos = 'nextTo'. - endif. - if ip_crossax is SUPPLIED. - ls_ax-crossax = ip_crossax. - else. - ls_ax-crossax = '1'. - endif. - if ip_crosses is SUPPLIED. - ls_ax-crosses = ip_crosses. - else. - ls_ax-crosses = 'autoZero'. - endif. - if ip_crossBetween is SUPPLIED. - ls_ax-crossBetween = ip_crossBetween. - else. - ls_ax-crossBetween = 'between'. - endif. - endif. + IF ip_type = c_catax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '1'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'b'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '2'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_auto IS SUPPLIED. + ls_ax-auto = ip_auto. + ELSE. + ls_ax-auto = '1'. + ENDIF. + IF ip_lblalgn IS SUPPLIED. + ls_ax-lblalgn = ip_lblalgn. + ELSE. + ls_ax-lblalgn = 'ctr'. + ENDIF. + IF ip_lbloffset IS SUPPLIED. + ls_ax-lbloffset = ip_lbloffset. + ELSE. + ls_ax-lbloffset = '100'. + ENDIF. + IF ip_nomultilvllbl IS SUPPLIED. + ls_ax-nomultilvllbl = ip_nomultilvllbl. + ELSE. + ls_ax-nomultilvllbl = '0'. + ENDIF. + ELSEIF ip_type = c_valax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '2'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'l'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '1'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_crossbetween IS SUPPLIED. + ls_ax-crossbetween = ip_crossbetween. + ELSE. + ls_ax-crossbetween = 'between'. + ENDIF. + ENDIF. - APPEND ls_ax TO me->axes. - sort me->axes by axid ascending. - endmethod. + APPEND ls_ax TO me->axes. + SORT me->axes BY axid ASCENDING. + ENDMETHOD. -method SET_SHOW_CAT_NAME. + METHOD set_show_cat_name. ns_showcatnameval = ip_value. - endmethod. + ENDMETHOD. -method SET_SHOW_LEGEND_KEY. - ns_showlegendkeyval = ip_value. - endmethod. + METHOD set_show_legend_key. + ns_showlegendkeyval = ip_value. + ENDMETHOD. -method SET_SHOW_PERCENT. - ns_showpercentval = ip_value. - endmethod. + METHOD set_show_percent. + ns_showpercentval = ip_value. + ENDMETHOD. -method SET_SHOW_SER_NAME. - ns_showsernameval = ip_value. - endmethod. + METHOD set_show_ser_name. + ns_showsernameval = ip_value. + ENDMETHOD. -method SET_SHOW_VALUES. - ns_showvalval = ip_value. - endmethod. + METHOD set_show_values. + ns_showvalval = ip_value. + ENDMETHOD. -method SET_VARYCOLOR. - ns_varycolorsval = ip_value. - endmethod. + METHOD set_varycolor. + ns_varycolorsval = ip_value. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_graph_line.clas.abap b/src/zcl_excel_graph_line.clas.abap index 7ebd68b59..fed2987a9 100644 --- a/src/zcl_excel_graph_line.clas.abap +++ b/src/zcl_excel_graph_line.clas.abap @@ -1,280 +1,280 @@ -class ZCL_EXCEL_GRAPH_LINE definition - public - inheriting from ZCL_EXCEL_GRAPH - final - create public . +CLASS zcl_excel_graph_line DEFINITION + PUBLIC + INHERITING FROM zcl_excel_graph + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. - types: + TYPES: *"* public components of class ZCL_EXCEL_GRAPH_LINE *"* do not include other source files here!!! - BEGIN OF s_ax, - axid TYPE string, - type TYPE char5, - orientation TYPE string, - delete TYPE string, - axpos TYPE string, - formatcode TYPE string, - sourcelinked TYPE string, - majortickmark TYPE string, - minortickmark TYPE string, - ticklblpos TYPE string, - crossax TYPE string, - crosses TYPE string, - auto TYPE string, - lblalgn TYPE string, - lbloffset TYPE string, - nomultilvllbl TYPE string, - crossbetween TYPE string, - END OF s_ax . - types: - t_ax TYPE STANDARD TABLE OF s_ax . + BEGIN OF s_ax, + axid TYPE string, + type TYPE char5, + orientation TYPE string, + delete TYPE string, + axpos TYPE string, + formatcode TYPE string, + sourcelinked TYPE string, + majortickmark TYPE string, + minortickmark TYPE string, + ticklblpos TYPE string, + crossax TYPE string, + crosses TYPE string, + auto TYPE string, + lblalgn TYPE string, + lbloffset TYPE string, + nomultilvllbl TYPE string, + crossbetween TYPE string, + END OF s_ax . + TYPES: + t_ax TYPE STANDARD TABLE OF s_ax . - data NS_GROUPINGVAL type STRING value 'standard'. "#EC NOTEXT . . . . . . . . . . " . - data NS_VARYCOLORSVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWLEGENDKEYVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWVALVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWCATNAMEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWSERNAMEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWPERCENTVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWBUBBLESIZEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_MARKERVAL type STRING value '1'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SMOOTHVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data AXES type T_AX . - constants: - C_VALAX type c length 5 value 'VALAX'. "#EC NOTEXT - constants: - C_CATAX type c length 5 value 'CATAX'. "#EC NOTEXT - data NS_LEGENDPOSVAL type STRING value 'r'. "#EC NOTEXT . . . . . . . . . . " . - data NS_OVERLAYVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - constants C_SYMBOL_AUTO type STRING value 'auto'. "#EC NOTEXT - constants C_SYMBOL_NONE type STRING value 'none'. "#EC NOTEXT + DATA ns_groupingval TYPE string VALUE 'standard'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_varycolorsval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showlegendkeyval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showvalval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showcatnameval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showsernameval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showpercentval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showbubblesizeval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_markerval TYPE string VALUE '1'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_smoothval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA axes TYPE t_ax . + CONSTANTS: + c_valax TYPE c LENGTH 5 VALUE 'VALAX'. "#EC NOTEXT + CONSTANTS: + c_catax TYPE c LENGTH 5 VALUE 'CATAX'. "#EC NOTEXT + DATA ns_legendposval TYPE string VALUE 'r'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_overlayval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + CONSTANTS c_symbol_auto TYPE string VALUE 'auto'. "#EC NOTEXT + CONSTANTS c_symbol_none TYPE string VALUE 'none'. "#EC NOTEXT - methods CREATE_AX - importing - !IP_AXID type STRING optional - !IP_TYPE type CHAR5 - !IP_ORIENTATION type STRING optional - !IP_DELETE type STRING optional - !IP_AXPOS type STRING optional - !IP_FORMATCODE type STRING optional - !IP_SOURCELINKED type STRING optional - !IP_MAJORTICKMARK type STRING optional - !IP_MINORTICKMARK type STRING optional - !IP_TICKLBLPOS type STRING optional - !IP_CROSSAX type STRING optional - !IP_CROSSES type STRING optional - !IP_AUTO type STRING optional - !IP_LBLALGN type STRING optional - !IP_LBLOFFSET type STRING optional - !IP_NOMULTILVLLBL type STRING optional - !IP_CROSSBETWEEN type STRING optional . - methods SET_SHOW_LEGEND_KEY - importing - !IP_VALUE type C . - methods SET_SHOW_VALUES - importing - !IP_VALUE type C . - methods SET_SHOW_CAT_NAME - importing - !IP_VALUE type C . - methods SET_SHOW_SER_NAME - importing - !IP_VALUE type C . - methods SET_SHOW_PERCENT - importing - !IP_VALUE type C . - methods SET_VARYCOLOR - importing - !IP_VALUE type C . -protected section. + METHODS create_ax + IMPORTING + !ip_axid TYPE string OPTIONAL + !ip_type TYPE char5 + !ip_orientation TYPE string OPTIONAL + !ip_delete TYPE string OPTIONAL + !ip_axpos TYPE string OPTIONAL + !ip_formatcode TYPE string OPTIONAL + !ip_sourcelinked TYPE string OPTIONAL + !ip_majortickmark TYPE string OPTIONAL + !ip_minortickmark TYPE string OPTIONAL + !ip_ticklblpos TYPE string OPTIONAL + !ip_crossax TYPE string OPTIONAL + !ip_crosses TYPE string OPTIONAL + !ip_auto TYPE string OPTIONAL + !ip_lblalgn TYPE string OPTIONAL + !ip_lbloffset TYPE string OPTIONAL + !ip_nomultilvllbl TYPE string OPTIONAL + !ip_crossbetween TYPE string OPTIONAL . + METHODS set_show_legend_key + IMPORTING + !ip_value TYPE c . + METHODS set_show_values + IMPORTING + !ip_value TYPE c . + METHODS set_show_cat_name + IMPORTING + !ip_value TYPE c . + METHODS set_show_ser_name + IMPORTING + !ip_value TYPE c . + METHODS set_show_percent + IMPORTING + !ip_value TYPE c . + METHODS set_varycolor + IMPORTING + !ip_value TYPE c . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_GRAPH_LINE *"* do not include other source files here!!! -private section. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_GRAPH_LINE *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_GRAPH_LINE IMPLEMENTATION. +CLASS zcl_excel_graph_line IMPLEMENTATION. -method CREATE_AX. - DATA ls_ax TYPE s_ax. - ls_ax-type = ip_type. + METHOD create_ax. + DATA ls_ax TYPE s_ax. + ls_ax-type = ip_type. - IF ip_type = c_catax. - IF ip_axid IS SUPPLIED. - ls_ax-axid = ip_axid. - ELSE. - ls_ax-axid = '1'. + IF ip_type = c_catax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '1'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'b'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '2'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_auto IS SUPPLIED. + ls_ax-auto = ip_auto. + ELSE. + ls_ax-auto = '1'. + ENDIF. + IF ip_lblalgn IS SUPPLIED. + ls_ax-lblalgn = ip_lblalgn. + ELSE. + ls_ax-lblalgn = 'ctr'. + ENDIF. + IF ip_lbloffset IS SUPPLIED. + ls_ax-lbloffset = ip_lbloffset. + ELSE. + ls_ax-lbloffset = '100'. + ENDIF. + IF ip_nomultilvllbl IS SUPPLIED. + ls_ax-nomultilvllbl = ip_nomultilvllbl. + ELSE. + ls_ax-nomultilvllbl = '0'. + ENDIF. + ELSEIF ip_type = c_valax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '2'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'l'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '1'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_crossbetween IS SUPPLIED. + ls_ax-crossbetween = ip_crossbetween. + ELSE. + ls_ax-crossbetween = 'between'. + ENDIF. ENDIF. - IF ip_orientation IS SUPPLIED. - ls_ax-orientation = ip_orientation. - ELSE. - ls_ax-orientation = 'minMax'. - ENDIF. - IF ip_delete IS SUPPLIED. - ls_ax-delete = ip_delete. - ELSE. - ls_ax-delete = '0'. - ENDIF. - IF ip_axpos IS SUPPLIED. - ls_ax-axpos = ip_axpos. - ELSE. - ls_ax-axpos = 'b'. - ENDIF. - IF ip_formatcode IS SUPPLIED. - ls_ax-formatcode = ip_formatcode. - ELSE. - ls_ax-formatcode = 'General'. - ENDIF. - IF ip_sourcelinked IS SUPPLIED. - ls_ax-sourcelinked = ip_sourcelinked. - ELSE. - ls_ax-sourcelinked = '1'. - ENDIF. - IF ip_majortickmark IS SUPPLIED. - ls_ax-majortickmark = ip_majortickmark. - ELSE. - ls_ax-majortickmark = 'out'. - ENDIF. - IF ip_minortickmark IS SUPPLIED. - ls_ax-minortickmark = ip_minortickmark. - ELSE. - ls_ax-minortickmark = 'none'. - ENDIF. - IF ip_ticklblpos IS SUPPLIED. - ls_ax-ticklblpos = ip_ticklblpos. - ELSE. - ls_ax-ticklblpos = 'nextTo'. - ENDIF. - IF ip_crossax IS SUPPLIED. - ls_ax-crossax = ip_crossax. - ELSE. - ls_ax-crossax = '2'. - ENDIF. - IF ip_crosses IS SUPPLIED. - ls_ax-crosses = ip_crosses. - ELSE. - ls_ax-crosses = 'autoZero'. - ENDIF. - IF ip_auto IS SUPPLIED. - ls_ax-auto = ip_auto. - ELSE. - ls_ax-auto = '1'. - ENDIF. - IF ip_lblalgn IS SUPPLIED. - ls_ax-lblalgn = ip_lblalgn. - ELSE. - ls_ax-lblalgn = 'ctr'. - ENDIF. - IF ip_lbloffset IS SUPPLIED. - ls_ax-lbloffset = ip_lbloffset. - ELSE. - ls_ax-lbloffset = '100'. - ENDIF. - IF ip_nomultilvllbl IS SUPPLIED. - ls_ax-nomultilvllbl = ip_nomultilvllbl. - ELSE. - ls_ax-nomultilvllbl = '0'. - ENDIF. - ELSEIF ip_type = c_valax. - IF ip_axid IS SUPPLIED. - ls_ax-axid = ip_axid. - ELSE. - ls_ax-axid = '2'. - ENDIF. - IF ip_orientation IS SUPPLIED. - ls_ax-orientation = ip_orientation. - ELSE. - ls_ax-orientation = 'minMax'. - ENDIF. - IF ip_delete IS SUPPLIED. - ls_ax-delete = ip_delete. - ELSE. - ls_ax-delete = '0'. - ENDIF. - IF ip_axpos IS SUPPLIED. - ls_ax-axpos = ip_axpos. - ELSE. - ls_ax-axpos = 'l'. - ENDIF. - IF ip_formatcode IS SUPPLIED. - ls_ax-formatcode = ip_formatcode. - ELSE. - ls_ax-formatcode = 'General'. - ENDIF. - IF ip_sourcelinked IS SUPPLIED. - ls_ax-sourcelinked = ip_sourcelinked. - ELSE. - ls_ax-sourcelinked = '1'. - ENDIF. - IF ip_majortickmark IS SUPPLIED. - ls_ax-majortickmark = ip_majortickmark. - ELSE. - ls_ax-majortickmark = 'out'. - ENDIF. - IF ip_minortickmark IS SUPPLIED. - ls_ax-minortickmark = ip_minortickmark. - ELSE. - ls_ax-minortickmark = 'none'. - ENDIF. - IF ip_ticklblpos IS SUPPLIED. - ls_ax-ticklblpos = ip_ticklblpos. - ELSE. - ls_ax-ticklblpos = 'nextTo'. - ENDIF. - IF ip_crossax IS SUPPLIED. - ls_ax-crossax = ip_crossax. - ELSE. - ls_ax-crossax = '1'. - ENDIF. - IF ip_crosses IS SUPPLIED. - ls_ax-crosses = ip_crosses. - ELSE. - ls_ax-crosses = 'autoZero'. - ENDIF. - IF ip_crossbetween IS SUPPLIED. - ls_ax-crossbetween = ip_crossbetween. - ELSE. - ls_ax-crossbetween = 'between'. - ENDIF. - ENDIF. - APPEND ls_ax TO me->axes. - SORT me->axes BY axid ASCENDING. - endmethod. + APPEND ls_ax TO me->axes. + SORT me->axes BY axid ASCENDING. + ENDMETHOD. -method SET_SHOW_CAT_NAME. + METHOD set_show_cat_name. ns_showcatnameval = ip_value. - endmethod. + ENDMETHOD. -method SET_SHOW_LEGEND_KEY. - ns_showlegendkeyval = ip_value. - endmethod. + METHOD set_show_legend_key. + ns_showlegendkeyval = ip_value. + ENDMETHOD. -method SET_SHOW_PERCENT. - ns_showpercentval = ip_value. - endmethod. + METHOD set_show_percent. + ns_showpercentval = ip_value. + ENDMETHOD. -method SET_SHOW_SER_NAME. - ns_showsernameval = ip_value. - endmethod. + METHOD set_show_ser_name. + ns_showsernameval = ip_value. + ENDMETHOD. -method SET_SHOW_VALUES. - ns_showvalval = ip_value. - endmethod. + METHOD set_show_values. + ns_showvalval = ip_value. + ENDMETHOD. -method SET_VARYCOLOR. - ns_varycolorsval = ip_value. - endmethod. + METHOD set_varycolor. + ns_varycolorsval = ip_value. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_graph_pie.clas.abap b/src/zcl_excel_graph_pie.clas.abap index 2f8d63c9c..7ff28c48d 100644 --- a/src/zcl_excel_graph_pie.clas.abap +++ b/src/zcl_excel_graph_pie.clas.abap @@ -1,92 +1,92 @@ -class ZCL_EXCEL_GRAPH_PIE definition - public - inheriting from ZCL_EXCEL_GRAPH - final - create public . +CLASS zcl_excel_graph_pie DEFINITION + PUBLIC + INHERITING FROM zcl_excel_graph + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_GRAPH_PIE *"* do not include other source files here!!! - data NS_LEGENDPOSVAL type STRING value 'r'. "#EC NOTEXT . . . . . . . . . . " . - data NS_OVERLAYVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_PPRRTL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_ENDPARARPRLANG type STRING value 'it-IT'. "#EC NOTEXT . . . . . . . . . . " . - data NS_VARYCOLORSVAL type STRING value '1'. "#EC NOTEXT . . . . . . . . . . " . - data NS_FIRSTSLICEANGVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWLEGENDKEYVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWVALVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWCATNAMEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWSERNAMEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWPERCENTVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWBUBBLESIZEVAL type STRING value '0'. "#EC NOTEXT . . . . . . . . . . " . - data NS_SHOWLEADERLINESVAL type STRING value '1'. "#EC NOTEXT . . . . . . . . . . " . - - methods SET_SHOW_LEGEND_KEY - importing - !IP_VALUE type C . - methods SET_SHOW_VALUES - importing - !IP_VALUE type C . - methods SET_SHOW_CAT_NAME - importing - !IP_VALUE type C . - methods SET_SHOW_SER_NAME - importing - !IP_VALUE type C . - methods SET_SHOW_PERCENT - importing - !IP_VALUE type C . - methods SET_SHOW_LEADER_LINES - importing - !IP_VALUE type C . - methods SET_VARYCOLOR - importing - !IP_VALUE type C . -protected section. + DATA ns_legendposval TYPE string VALUE 'r'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_overlayval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_pprrtl TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_endpararprlang TYPE string VALUE 'it-IT'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_varycolorsval TYPE string VALUE '1'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_firstsliceangval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showlegendkeyval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showvalval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showcatnameval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showsernameval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showpercentval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showbubblesizeval TYPE string VALUE '0'. "#EC NOTEXT . . . . . . . . . . " . + DATA ns_showleaderlinesval TYPE string VALUE '1'. "#EC NOTEXT . . . . . . . . . . " . + + METHODS set_show_legend_key + IMPORTING + !ip_value TYPE c . + METHODS set_show_values + IMPORTING + !ip_value TYPE c . + METHODS set_show_cat_name + IMPORTING + !ip_value TYPE c . + METHODS set_show_ser_name + IMPORTING + !ip_value TYPE c . + METHODS set_show_percent + IMPORTING + !ip_value TYPE c . + METHODS set_show_leader_lines + IMPORTING + !ip_value TYPE c . + METHODS set_varycolor + IMPORTING + !ip_value TYPE c . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_GRAPH_PIE *"* do not include other source files here!!! -private section. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_GRAPH_PIE *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_GRAPH_PIE IMPLEMENTATION. +CLASS zcl_excel_graph_pie IMPLEMENTATION. -method SET_SHOW_CAT_NAME. - ns_showcatnameval = ip_value. - endmethod. + METHOD set_show_cat_name. + ns_showcatnameval = ip_value. + ENDMETHOD. -method SET_SHOW_LEADER_LINES. - ns_showleaderlinesval = ip_value. - endmethod. + METHOD set_show_leader_lines. + ns_showleaderlinesval = ip_value. + ENDMETHOD. -method SET_SHOW_LEGEND_KEY. - ns_showlegendkeyval = ip_value. - endmethod. + METHOD set_show_legend_key. + ns_showlegendkeyval = ip_value. + ENDMETHOD. -method SET_SHOW_PERCENT. - ns_showpercentval = ip_value. - endmethod. + METHOD set_show_percent. + ns_showpercentval = ip_value. + ENDMETHOD. -method SET_SHOW_SER_NAME. - ns_showsernameval = ip_value. - endmethod. + METHOD set_show_ser_name. + ns_showsernameval = ip_value. + ENDMETHOD. -method SET_SHOW_VALUES. - ns_showvalval = ip_value. - endmethod. + METHOD set_show_values. + ns_showvalval = ip_value. + ENDMETHOD. -method SET_VARYCOLOR. - ns_varycolorsval = ip_value. - endmethod. + METHOD set_varycolor. + ns_varycolorsval = ip_value. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_hyperlink.clas.abap b/src/zcl_excel_hyperlink.clas.abap index 894608bf8..d4f3f8b9f 100644 --- a/src/zcl_excel_hyperlink.clas.abap +++ b/src/zcl_excel_hyperlink.clas.abap @@ -1,108 +1,108 @@ -class ZCL_EXCEL_HYPERLINK definition - public - final - create private . +CLASS zcl_excel_hyperlink DEFINITION + PUBLIC + FINAL + CREATE PRIVATE . *"* public components of class ZCL_EXCEL_HYPERLINK *"* do not include other source files here!!! -public section. - type-pools ABAP . - - class-methods CREATE_EXTERNAL_LINK - importing - !IV_URL type STRING - returning - value(OV_LINK) type ref to ZCL_EXCEL_HYPERLINK . - class-methods CREATE_INTERNAL_LINK - importing - !IV_LOCATION type STRING - returning - value(OV_LINK) type ref to ZCL_EXCEL_HYPERLINK . - methods IS_INTERNAL - returning - value(EV_RET) type ABAP_BOOL . - methods SET_CELL_REFERENCE - importing - !IP_COLUMN type SIMPLE - !IP_ROW type ZEXCEL_CELL_ROW - raising - ZCX_EXCEL . - methods GET_REF - returning - value(EV_REF) type STRING . - methods GET_URL - returning - value(EV_URL) type STRING . + PUBLIC SECTION. + TYPE-POOLS abap . + + CLASS-METHODS create_external_link + IMPORTING + !iv_url TYPE string + RETURNING + VALUE(ov_link) TYPE REF TO zcl_excel_hyperlink . + CLASS-METHODS create_internal_link + IMPORTING + !iv_location TYPE string + RETURNING + VALUE(ov_link) TYPE REF TO zcl_excel_hyperlink . + METHODS is_internal + RETURNING + VALUE(ev_ret) TYPE abap_bool . + METHODS set_cell_reference + IMPORTING + !ip_column TYPE simple + !ip_row TYPE zexcel_cell_row + RAISING + zcx_excel . + METHODS get_ref + RETURNING + VALUE(ev_ref) TYPE string . + METHODS get_url + RETURNING + VALUE(ev_url) TYPE string . *"* protected components of class ZCL_EXCEL_HYPERLINK *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_HYPERLINK *"* do not include other source files here!!! -private section. - - data LOCATION type STRING . - data CELL_REFERENCE type STRING . - data INTERNAL type ABAP_BOOL . - data COLUMN type ZEXCEL_CELL_COLUMN_ALPHA . - data ROW type ZEXCEL_CELL_ROW . - - class-methods CREATE - importing - !IV_URL type STRING - !IV_INTERNAL type ABAP_BOOL - returning - value(OV_LINK) type ref to ZCL_EXCEL_HYPERLINK . + PRIVATE SECTION. + + DATA location TYPE string . + DATA cell_reference TYPE string . + DATA internal TYPE abap_bool . + DATA column TYPE zexcel_cell_column_alpha . + DATA row TYPE zexcel_cell_row . + + CLASS-METHODS create + IMPORTING + !iv_url TYPE string + !iv_internal TYPE abap_bool + RETURNING + VALUE(ov_link) TYPE REF TO zcl_excel_hyperlink . ENDCLASS. -CLASS ZCL_EXCEL_HYPERLINK IMPLEMENTATION. +CLASS zcl_excel_hyperlink IMPLEMENTATION. -method CREATE. - data: lo_hyperlink type REF TO zcl_excel_hyperlink. + METHOD create. + DATA: lo_hyperlink TYPE REF TO zcl_excel_hyperlink. - create OBJECT lo_hyperlink. + CREATE OBJECT lo_hyperlink. - lo_hyperlink->location = iv_url. - lo_hyperlink->internal = iv_internal. + lo_hyperlink->location = iv_url. + lo_hyperlink->internal = iv_internal. - ov_link = lo_hyperlink. - endmethod. + ov_link = lo_hyperlink. + ENDMETHOD. -method CREATE_EXTERNAL_LINK. + METHOD create_external_link. - ov_link = zcl_excel_hyperlink=>create( iv_url = iv_url - iv_internal = abap_false ). - endmethod. + ov_link = zcl_excel_hyperlink=>create( iv_url = iv_url + iv_internal = abap_false ). + ENDMETHOD. -method CREATE_INTERNAL_LINK. - ov_link = zcl_excel_hyperlink=>create( iv_url = iv_location - iv_internal = abap_true ). - endmethod. + METHOD create_internal_link. + ov_link = zcl_excel_hyperlink=>create( iv_url = iv_location + iv_internal = abap_true ). + ENDMETHOD. -method GET_REF. - ev_ref = row. - CONDENSE ev_ref. - CONCATENATE column ev_ref INTO ev_ref. - endmethod. + METHOD get_ref. + ev_ref = row. + CONDENSE ev_ref. + CONCATENATE column ev_ref INTO ev_ref. + ENDMETHOD. -method GET_URL. - ev_url = me->location. - endmethod. + METHOD get_url. + ev_url = me->location. + ENDMETHOD. -method IS_INTERNAL. - ev_ret = me->internal. - endmethod. + METHOD is_internal. + ev_ret = me->internal. + ENDMETHOD. -method SET_CELL_REFERENCE. - me->column = zcl_excel_common=>convert_column2alpha( ip_column ). " issue #155 - less restrictive typing for ip_column - me->row = ip_row. - endmethod. + METHOD set_cell_reference. + me->column = zcl_excel_common=>convert_column2alpha( ip_column ). " issue #155 - less restrictive typing for ip_column + me->row = ip_row. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_legacy_palette.clas.abap b/src/zcl_excel_legacy_palette.clas.abap index 47054ac29..4931604ae 100644 --- a/src/zcl_excel_legacy_palette.clas.abap +++ b/src/zcl_excel_legacy_palette.clas.abap @@ -1,162 +1,162 @@ -class ZCL_EXCEL_LEGACY_PALETTE definition - public - create public . +CLASS zcl_excel_legacy_palette DEFINITION + PUBLIC + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_LEGACY_PALETTE *"* do not include other source files here!!! - type-pools ABAP . - - methods CONSTRUCTOR . - methods IS_MODIFIED - returning - value(EP_MODIFIED) type ABAP_BOOL . - methods GET_COLOR - importing - !IP_INDEX type I - returning - value(EP_COLOR) type ZEXCEL_STYLE_COLOR_ARGB - raising - ZCX_EXCEL . - methods GET_COLORS - returning - value(EP_COLORS) type ZEXCEL_T_STYLE_COLOR_ARGB . - methods SET_COLOR - importing - !IP_INDEX type I - !IP_COLOR type ZEXCEL_STYLE_COLOR_ARGB - raising - ZCX_EXCEL . -protected section. + TYPE-POOLS abap . + + METHODS constructor . + METHODS is_modified + RETURNING + VALUE(ep_modified) TYPE abap_bool . + METHODS get_color + IMPORTING + !ip_index TYPE i + RETURNING + VALUE(ep_color) TYPE zexcel_style_color_argb + RAISING + zcx_excel . + METHODS get_colors + RETURNING + VALUE(ep_colors) TYPE zexcel_t_style_color_argb . + METHODS set_color + IMPORTING + !ip_index TYPE i + !ip_color TYPE zexcel_style_color_argb + RAISING + zcx_excel . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_LEGACY_PALETTE *"* do not include other source files here!!! -private section. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_LEGACY_PALETTE *"* do not include other source files here!!! - data MODIFIED type ABAP_BOOL value ABAP_FALSE. "#EC NOTEXT . . . . . . . . . . " . - data COLORS type ZEXCEL_T_STYLE_COLOR_ARGB . + DATA modified TYPE abap_bool VALUE abap_false. "#EC NOTEXT . . . . . . . . . . " . + DATA colors TYPE zexcel_t_style_color_argb . ENDCLASS. -CLASS ZCL_EXCEL_LEGACY_PALETTE IMPLEMENTATION. - - -method CONSTRUCTOR. - " default Excel palette based on - " http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.indexedcolors.aspx - - APPEND '00000000' TO colors. - APPEND '00FFFFFF' TO colors. - APPEND '00FF0000' TO colors. - APPEND '0000FF00' TO colors. - APPEND '000000FF' TO colors. - APPEND '00FFFF00' TO colors. - APPEND '00FF00FF' TO colors. - APPEND '0000FFFF' TO colors. - APPEND '00000000' TO colors. - APPEND '00FFFFFF' TO colors. - - APPEND '00FF0000' TO colors. - APPEND '0000FF00' TO colors. - APPEND '000000FF' TO colors. - APPEND '00FFFF00' TO colors. - APPEND '00FF00FF' TO colors. - APPEND '0000FFFF' TO colors. - APPEND '00800000' TO colors. - APPEND '00008000' TO colors. - APPEND '00000080' TO colors. - APPEND '00808000' TO colors. - - APPEND '00800080' TO colors. - APPEND '00008080' TO colors. - APPEND '00C0C0C0' TO colors. - APPEND '00808080' TO colors. - APPEND '009999FF' TO colors. - APPEND '00993366' TO colors. - APPEND '00FFFFCC' TO colors. - APPEND '00CCFFFF' TO colors. - APPEND '00660066' TO colors. - APPEND '00FF8080' TO colors. - - APPEND '000066CC' TO colors. - APPEND '00CCCCFF' TO colors. - APPEND '00000080' TO colors. - APPEND '00FF00FF' TO colors. - APPEND '00FFFF00' TO colors. - APPEND '0000FFFF' TO colors. - APPEND '00800080' TO colors. - APPEND '00800000' TO colors. - APPEND '00008080' TO colors. - APPEND '000000FF' TO colors. - - APPEND '0000CCFF' TO colors. - APPEND '00CCFFFF' TO colors. - APPEND '00CCFFCC' TO colors. - APPEND '00FFFF99' TO colors. - APPEND '0099CCFF' TO colors. - APPEND '00FF99CC' TO colors. - APPEND '00CC99FF' TO colors. - APPEND '00FFCC99' TO colors. - APPEND '003366FF' TO colors. - APPEND '0033CCCC' TO colors. - - APPEND '0099CC00' TO colors. - APPEND '00FFCC00' TO colors. - APPEND '00FF9900' TO colors. - APPEND '00FF6600' TO colors. - APPEND '00666699' TO colors. - APPEND '00969696' TO colors. - APPEND '00003366' TO colors. - APPEND '00339966' TO colors. - APPEND '00003300' TO colors. - APPEND '00333300' TO colors. - - APPEND '00993300' TO colors. - APPEND '00993366' TO colors. - APPEND '00333399' TO colors. - APPEND '00333333' TO colors. - - endmethod. - - -method GET_COLOR. - DATA: lv_index type i. - - lv_index = ip_index + 1. - READ TABLE colors INTO ep_color INDEX lv_index. - IF sy-subrc <> 0. - zcx_excel=>raise_text( 'Invalid color index' ). - ENDIF. - endmethod. - - -method GET_COLORS. - ep_colors = colors. - endmethod. - - -method IS_MODIFIED. - ep_modified = modified. - endmethod. - - -method SET_COLOR. - DATA: lv_index TYPE i. - - FIELD-SYMBOLS: LIKE LINE OF colors. - - lv_index = ip_index + 1. - READ TABLE colors ASSIGNING INDEX lv_index. - IF sy-subrc <> 0. - zcx_excel=>raise_text( 'Invalid color index' ). - ENDIF. - - IF <> ip_color. - modified = abap_true. - = ip_color. - ENDIF. - - endmethod. +CLASS zcl_excel_legacy_palette IMPLEMENTATION. + + + METHOD constructor. + " default Excel palette based on + " http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.indexedcolors.aspx + + APPEND '00000000' TO colors. + APPEND '00FFFFFF' TO colors. + APPEND '00FF0000' TO colors. + APPEND '0000FF00' TO colors. + APPEND '000000FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00000000' TO colors. + APPEND '00FFFFFF' TO colors. + + APPEND '00FF0000' TO colors. + APPEND '0000FF00' TO colors. + APPEND '000000FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00800000' TO colors. + APPEND '00008000' TO colors. + APPEND '00000080' TO colors. + APPEND '00808000' TO colors. + + APPEND '00800080' TO colors. + APPEND '00008080' TO colors. + APPEND '00C0C0C0' TO colors. + APPEND '00808080' TO colors. + APPEND '009999FF' TO colors. + APPEND '00993366' TO colors. + APPEND '00FFFFCC' TO colors. + APPEND '00CCFFFF' TO colors. + APPEND '00660066' TO colors. + APPEND '00FF8080' TO colors. + + APPEND '000066CC' TO colors. + APPEND '00CCCCFF' TO colors. + APPEND '00000080' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00800080' TO colors. + APPEND '00800000' TO colors. + APPEND '00008080' TO colors. + APPEND '000000FF' TO colors. + + APPEND '0000CCFF' TO colors. + APPEND '00CCFFFF' TO colors. + APPEND '00CCFFCC' TO colors. + APPEND '00FFFF99' TO colors. + APPEND '0099CCFF' TO colors. + APPEND '00FF99CC' TO colors. + APPEND '00CC99FF' TO colors. + APPEND '00FFCC99' TO colors. + APPEND '003366FF' TO colors. + APPEND '0033CCCC' TO colors. + + APPEND '0099CC00' TO colors. + APPEND '00FFCC00' TO colors. + APPEND '00FF9900' TO colors. + APPEND '00FF6600' TO colors. + APPEND '00666699' TO colors. + APPEND '00969696' TO colors. + APPEND '00003366' TO colors. + APPEND '00339966' TO colors. + APPEND '00003300' TO colors. + APPEND '00333300' TO colors. + + APPEND '00993300' TO colors. + APPEND '00993366' TO colors. + APPEND '00333399' TO colors. + APPEND '00333333' TO colors. + + ENDMETHOD. + + + METHOD get_color. + DATA: lv_index TYPE i. + + lv_index = ip_index + 1. + READ TABLE colors INTO ep_color INDEX lv_index. + IF sy-subrc <> 0. + zcx_excel=>raise_text( 'Invalid color index' ). + ENDIF. + ENDMETHOD. + + + METHOD get_colors. + ep_colors = colors. + ENDMETHOD. + + + METHOD is_modified. + ep_modified = modified. + ENDMETHOD. + + + METHOD set_color. + DATA: lv_index TYPE i. + + FIELD-SYMBOLS: LIKE LINE OF colors. + + lv_index = ip_index + 1. + READ TABLE colors ASSIGNING INDEX lv_index. + IF sy-subrc <> 0. + zcx_excel=>raise_text( 'Invalid color index' ). + ENDIF. + + IF <> ip_color. + modified = abap_true. + = ip_color. + ENDIF. + + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_obsolete_func_wrap.clas.abap b/src/zcl_excel_obsolete_func_wrap.clas.abap index 3aa14b482..8558dfc62 100644 --- a/src/zcl_excel_obsolete_func_wrap.clas.abap +++ b/src/zcl_excel_obsolete_func_wrap.clas.abap @@ -1,27 +1,27 @@ -class ZCL_EXCEL_OBSOLETE_FUNC_WRAP definition - public - create public . +CLASS zcl_excel_obsolete_func_wrap DEFINITION + PUBLIC + CREATE PUBLIC . -public section. + PUBLIC SECTION. - class-methods GUID_CREATE - returning - value(RV_GUID_16) type GUID_16 . -protected section. -private section. + CLASS-METHODS guid_create + RETURNING + VALUE(rv_guid_16) TYPE guid_16 . + PROTECTED SECTION. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_OBSOLETE_FUNC_WRAP IMPLEMENTATION. +CLASS zcl_excel_obsolete_func_wrap IMPLEMENTATION. -METHOD guid_create. + METHOD guid_create. - TRY. - rv_guid_16 = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ). - CATCH cx_uuid_error. - ENDTRY. + TRY. + rv_guid_16 = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ). + CATCH cx_uuid_error. + ENDTRY. *--------------------------------------------------------------------* * If you are on a release that does not yet have the class cl_system_uuid @@ -34,5 +34,5 @@ METHOD guid_create. * IMPORTING * ev_guid_16 = rv_guid_16. -ENDMETHOD. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_properties.clas.abap b/src/zcl_excel_properties.clas.abap index d075496f4..6592a782d 100644 --- a/src/zcl_excel_properties.clas.abap +++ b/src/zcl_excel_properties.clas.abap @@ -1,45 +1,45 @@ -class ZCL_EXCEL_PROPERTIES definition - public - final - create public . - -public section. - - data CREATOR type ZEXCEL_CREATOR value 'Ivan Femia'. "#EC NOTEXT . . . " . - data LASTMODIFIEDBY type ZEXCEL_CREATOR value 'Ivan Femia'. "#EC NOTEXT . . . " . - data CREATED type TIMESTAMPL . - data MODIFIED type TIMESTAMPL . - data TITLE type ZEXCEL_TITLE value 'abap2xlsx'. "#EC NOTEXT . . . " . - data SUBJECT type ZEXCEL_SUBJECT . - data DESCRIPTION type ZEXCEL_DESCRIPTION value 'Created using abap2xlsx'. "#EC NOTEXT . . . " . - data KEYWORDS type ZEXCEL_KEYWORDS . - data CATEGORY type ZEXCEL_CATEGORY . - data COMPANY type ZEXCEL_COMPANY value 'abap2xlsx'. "#EC NOTEXT . . . " . - data APPLICATION type ZEXCEL_APPLICATION value 'Microsoft Excel'. "#EC NOTEXT . . . " . - data DOCSECURITY type ZEXCEL_DOCSECURITY value '0'. "#EC NOTEXT . . . " . - data SCALECROP type ZEXCEL_SCALECROP value ''. "#EC NOTEXT . . . " . - data LINKSUPTODATE type FLAG . - data SHAREDDOC type FLAG . - data HYPERLINKSCHANGED type FLAG . - data APPVERSION type ZEXCEL_APPVERSION value '12.0000'. "#EC NOTEXT . . . " . - - methods CONSTRUCTOR . -protected section. -private section. +CLASS zcl_excel_properties DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + DATA creator TYPE zexcel_creator VALUE 'Ivan Femia'. "#EC NOTEXT . . . " . + DATA lastmodifiedby TYPE zexcel_creator VALUE 'Ivan Femia'. "#EC NOTEXT . . . " . + DATA created TYPE timestampl . + DATA modified TYPE timestampl . + DATA title TYPE zexcel_title VALUE 'abap2xlsx'. "#EC NOTEXT . . . " . + DATA subject TYPE zexcel_subject . + DATA description TYPE zexcel_description VALUE 'Created using abap2xlsx'. "#EC NOTEXT . . . " . + DATA keywords TYPE zexcel_keywords . + DATA category TYPE zexcel_category . + DATA company TYPE zexcel_company VALUE 'abap2xlsx'. "#EC NOTEXT . . . " . + DATA application TYPE zexcel_application VALUE 'Microsoft Excel'. "#EC NOTEXT . . . " . + DATA docsecurity TYPE zexcel_docsecurity VALUE '0'. "#EC NOTEXT . . . " . + DATA scalecrop TYPE zexcel_scalecrop VALUE ''. "#EC NOTEXT . . . " . + DATA linksuptodate TYPE flag . + DATA shareddoc TYPE flag . + DATA hyperlinkschanged TYPE flag . + DATA appversion TYPE zexcel_appversion VALUE '12.0000'. "#EC NOTEXT . . . " . + + METHODS constructor . + PROTECTED SECTION. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_PROPERTIES IMPLEMENTATION. +CLASS zcl_excel_properties IMPLEMENTATION. -method CONSTRUCTOR. + METHOD constructor. - DATA: lv_timestamp TYPE timestampl. + DATA: lv_timestamp TYPE timestampl. - GET TIME STAMP FIELD lv_timestamp. - created = lv_timestamp. - modified = lv_timestamp. + GET TIME STAMP FIELD lv_timestamp. + created = lv_timestamp. + modified = lv_timestamp. -endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_range.clas.abap b/src/zcl_excel_range.clas.abap index 44273f167..a3d1bcbac 100644 --- a/src/zcl_excel_range.clas.abap +++ b/src/zcl_excel_range.clas.abap @@ -1,83 +1,83 @@ -class ZCL_EXCEL_RANGE definition - public - final - create public . +CLASS zcl_excel_range DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_RANGE *"* do not include other source files here!!! -public section. - - constants GCV_PRINT_TITLE_NAME type STRING value '_xlnm.Print_Titles'. "#EC NOTEXT - data NAME type ZEXCEL_RANGE_NAME . - data GUID type ZEXCEL_RANGE_GUID . - - methods GET_GUID - returning - value(EP_GUID) type ZEXCEL_RANGE_GUID . - methods SET_VALUE - importing - !IP_SHEET_NAME type ZEXCEL_SHEET_TITLE - !IP_START_ROW type ZEXCEL_CELL_ROW - !IP_START_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - !IP_STOP_ROW type ZEXCEL_CELL_ROW - !IP_STOP_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA . - methods GET_VALUE - returning - value(EP_VALUE) type ZEXCEL_RANGE_VALUE . - methods SET_RANGE_VALUE - importing - !IP_VALUE type ZEXCEL_RANGE_VALUE . + PUBLIC SECTION. + + CONSTANTS gcv_print_title_name TYPE string VALUE '_xlnm.Print_Titles'. "#EC NOTEXT + DATA name TYPE zexcel_range_name . + DATA guid TYPE zexcel_range_guid . + + METHODS get_guid + RETURNING + VALUE(ep_guid) TYPE zexcel_range_guid . + METHODS set_value + IMPORTING + !ip_sheet_name TYPE zexcel_sheet_title + !ip_start_row TYPE zexcel_cell_row + !ip_start_column TYPE zexcel_cell_column_alpha + !ip_stop_row TYPE zexcel_cell_row + !ip_stop_column TYPE zexcel_cell_column_alpha . + METHODS get_value + RETURNING + VALUE(ep_value) TYPE zexcel_range_value . + METHODS set_range_value + IMPORTING + !ip_value TYPE zexcel_range_value . *"* protected components of class ZABAP_EXCEL_WORKSHEET *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_RANGE *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - data VALUE type ZEXCEL_RANGE_VALUE . + DATA value TYPE zexcel_range_value . ENDCLASS. -CLASS ZCL_EXCEL_RANGE IMPLEMENTATION. +CLASS zcl_excel_range IMPLEMENTATION. -method GET_GUID. + METHOD get_guid. - ep_guid = me->guid. + ep_guid = me->guid. - endmethod. + ENDMETHOD. -method GET_VALUE. + METHOD get_value. - ep_value = me->value. + ep_value = me->value. - endmethod. + ENDMETHOD. -method SET_RANGE_VALUE. - me->value = ip_value. - endmethod. + METHOD set_range_value. + me->value = ip_value. + ENDMETHOD. -method SET_VALUE. - DATA: lv_start_row_c TYPE char7, - lv_stop_row_c TYPE char7, - lv_value TYPE string. - lv_stop_row_c = ip_stop_row. - SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. - SHIFT lv_stop_row_c LEFT DELETING LEADING space. - lv_start_row_c = ip_start_row. - SHIFT lv_start_row_c RIGHT DELETING TRAILING space. - SHIFT lv_start_row_c LEFT DELETING LEADING space. - lv_value = ip_sheet_name. - me->value = zcl_excel_common=>escape_string( ip_value = lv_value ). + METHOD set_value. + DATA: lv_start_row_c TYPE char7, + lv_stop_row_c TYPE char7, + lv_value TYPE string. + lv_stop_row_c = ip_stop_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_start_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + lv_value = ip_sheet_name. + me->value = zcl_excel_common=>escape_string( ip_value = lv_value ). - IF ip_stop_column IS INITIAL AND ip_stop_row IS INITIAL. - CONCATENATE me->value '!$' ip_start_column '$' lv_start_row_c INTO me->value. - ELSE. - CONCATENATE me->value '!$' ip_start_column '$' lv_start_row_c ':$' ip_stop_column '$' lv_stop_row_c INTO me->value. - ENDIF. - endmethod. + IF ip_stop_column IS INITIAL AND ip_stop_row IS INITIAL. + CONCATENATE me->value '!$' ip_start_column '$' lv_start_row_c INTO me->value. + ELSE. + CONCATENATE me->value '!$' ip_start_column '$' lv_start_row_c ':$' ip_stop_column '$' lv_stop_row_c INTO me->value. + ENDIF. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_ranges.clas.abap b/src/zcl_excel_ranges.clas.abap index ef3471b23..9751e9cff 100644 --- a/src/zcl_excel_ranges.clas.abap +++ b/src/zcl_excel_ranges.clas.abap @@ -1,88 +1,88 @@ -class ZCL_EXCEL_RANGES definition - public - final - create public . +CLASS zcl_excel_ranges DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_RANGES *"* do not include other source files here!!! -public section. - - methods ADD - importing - !IP_RANGE type ref to ZCL_EXCEL_RANGE . - methods CLEAR . - methods CONSTRUCTOR . - methods GET - importing - !IP_INDEX type I - returning - value(EO_RANGE) type ref to ZCL_EXCEL_RANGE . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IP_RANGE type ref to ZCL_EXCEL_RANGE . - methods SIZE - returning - value(EP_SIZE) type I . + PUBLIC SECTION. + + METHODS add + IMPORTING + !ip_range TYPE REF TO zcl_excel_range . + METHODS clear . + METHODS constructor . + METHODS get + IMPORTING + !ip_index TYPE i + RETURNING + VALUE(eo_range) TYPE REF TO zcl_excel_range . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !ip_range TYPE REF TO zcl_excel_range . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZABAP_EXCEL_RANGES *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - data RANGES type ref to CL_OBJECT_COLLECTION . + DATA ranges TYPE REF TO cl_object_collection . ENDCLASS. -CLASS ZCL_EXCEL_RANGES IMPLEMENTATION. +CLASS zcl_excel_ranges IMPLEMENTATION. -method ADD. - ranges->add( ip_range ). - endmethod. + METHOD add. + ranges->add( ip_range ). + ENDMETHOD. -method CLEAR. - ranges->clear( ). - endmethod. + METHOD clear. + ranges->clear( ). + ENDMETHOD. -method CONSTRUCTOR. + METHOD constructor. - CREATE OBJECT ranges. + CREATE OBJECT ranges. - endmethod. + ENDMETHOD. -method GET. - eo_range ?= ranges->get( ip_index ). - endmethod. + METHOD get. + eo_range ?= ranges->get( ip_index ). + ENDMETHOD. -method GET_ITERATOR. - eo_iterator ?= ranges->get_iterator( ). - endmethod. + METHOD get_iterator. + eo_iterator ?= ranges->get_iterator( ). + ENDMETHOD. -method IS_EMPTY. - is_empty = ranges->is_empty( ). - endmethod. + METHOD is_empty. + is_empty = ranges->is_empty( ). + ENDMETHOD. -method REMOVE. - ranges->remove( ip_range ). - endmethod. + METHOD remove. + ranges->remove( ip_range ). + ENDMETHOD. -method SIZE. - ep_size = ranges->size( ). - endmethod. + METHOD size. + ep_size = ranges->size( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap index f62471705..e647b795c 100644 --- a/src/zcl_excel_reader_2007.clas.abap +++ b/src/zcl_excel_reader_2007.clas.abap @@ -1,404 +1,404 @@ -class ZCL_EXCEL_READER_2007 definition - public - create public . +CLASS zcl_excel_reader_2007 DEFINITION + PUBLIC + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_READER_2007 *"* do not include other source files here!!! - type-pools IXML . + TYPE-POOLS ixml . - interfaces ZIF_EXCEL_READER . + INTERFACES zif_excel_reader . - class-methods FILL_STRUCT_FROM_ATTRIBUTES - importing - !IP_ELEMENT type ref to IF_IXML_ELEMENT - changing - !CP_STRUCTURE type ANY . -protected section. + CLASS-METHODS fill_struct_from_attributes + IMPORTING + !ip_element TYPE REF TO if_ixml_element + CHANGING + !cp_structure TYPE any . + PROTECTED SECTION. - types: + TYPES: *"* protected components of class ZCL_EXCEL_READER_2007 *"* do not include other source files here!!! - BEGIN OF t_relationship, - id TYPE string, - type 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 - END OF t_relationship . - types: - BEGIN OF t_fileversion, - appname TYPE string, - lastedited TYPE string, - lowestedited TYPE string, - rupbuild TYPE string, - codename TYPE string, - END OF t_fileversion . - types: - BEGIN OF t_sheet, - name TYPE string, - sheetid TYPE string, - id TYPE string, - state TYPE string, - END OF t_sheet . - types: - BEGIN OF t_workbookpr, - codename TYPE string, - defaultthemeversion TYPE string, - END OF t_workbookpr . - types: - BEGIN OF t_sheetpr, - codename TYPE string, - END OF t_sheetpr . - types: - BEGIN OF t_range, - name TYPE string, - hidden TYPE string, "inserted with issue #235 because Autofilters didn't passthrough - localsheetid TYPE string, " issue #163 - END OF t_range . - types: - t_fills TYPE STANDARD TABLE OF REF TO zcl_excel_style_fill WITH NON-UNIQUE DEFAULT KEY . - types: - t_borders TYPE STANDARD TABLE OF REF TO zcl_excel_style_borders WITH NON-UNIQUE DEFAULT KEY . - types: - t_fonts TYPE STANDARD TABLE OF REF TO zcl_excel_style_font WITH NON-UNIQUE DEFAULT KEY . - types: - t_style_refs TYPE STANDARD TABLE OF REF TO zcl_excel_style WITH NON-UNIQUE DEFAULT KEY . - types: - BEGIN OF t_color, - indexed TYPE string, - rgb TYPE string, - theme TYPE string, - tint TYPE string, - END OF t_color . - types: - BEGIN OF t_rel_drawing, - id TYPE string, - content TYPE xstring, - file_ext TYPE string, - content_xml TYPE REF TO if_ixml_document, - END OF t_rel_drawing . - types: - t_rel_drawings TYPE STANDARD TABLE OF t_rel_drawing WITH NON-UNIQUE DEFAULT KEY . - types: - BEGIN OF gts_external_hyperlink, - id TYPE string, - target TYPE string, - END OF gts_external_hyperlink . - types: - gtt_external_hyperlinks TYPE HASHED TABLE OF gts_external_hyperlink WITH UNIQUE KEY id . - types: - BEGIN OF ty_ref_formulae, - sheet TYPE REF TO zcl_excel_worksheet, - row TYPE i, - column TYPE i, - si TYPE i, - ref TYPE string, - formula TYPE string, - END OF ty_ref_formulae . - types: - tyt_ref_formulae TYPE HASHED TABLE OF ty_ref_formulae WITH UNIQUE KEY sheet row column . - - data SHARED_STRINGS type STRINGTAB . - data STYLES type T_STYLE_REFS . - data MT_REF_FORMULAE type TYT_REF_FORMULAE . - data MT_DXF_STYLES type ZEXCEL_T_STYLES_COND_MAPPING . - - methods FILL_ROW_OUTLINES - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods GET_FROM_ZIP_ARCHIVE - importing - !I_FILENAME type STRING - returning - value(R_CONTENT) type XSTRING - raising - ZCX_EXCEL . - methods GET_IXML_FROM_ZIP_ARCHIVE - importing - !I_FILENAME type STRING - !IS_NORMALIZING type abap_bool default 'X' - returning - value(R_IXML) type ref to IF_IXML_DOCUMENT - raising - ZCX_EXCEL . - methods LOAD_DRAWING_ANCHOR - importing - !IO_ANCHOR_ELEMENT type ref to IF_IXML_ELEMENT - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - !IT_RELATED_DRAWINGS type T_REL_DRAWINGS . - methods LOAD_SHARED_STRINGS - importing - !IP_PATH type STRING - raising - ZCX_EXCEL . - methods LOAD_STYLES - importing - !IP_PATH type STRING - !IP_EXCEL type ref to ZCL_EXCEL - raising - ZCX_EXCEL . - methods LOAD_DXF_STYLES - importing - !IV_PATH type STRING - !IO_EXCEL type ref to ZCL_EXCEL - raising - ZCX_EXCEL . - methods LOAD_STYLE_BORDERS - importing - !IP_XML type ref to IF_IXML_DOCUMENT - returning - value(EP_BORDERS) type T_BORDERS . - methods LOAD_STYLE_FILLS - importing - !IP_XML type ref to IF_IXML_DOCUMENT - returning - value(EP_FILLS) type T_FILLS . - methods LOAD_STYLE_FONTS - importing - !IP_XML type ref to IF_IXML_DOCUMENT - returning - value(EP_FONTS) type T_FONTS . - methods LOAD_STYLE_NUM_FORMATS - importing - !IP_XML type ref to IF_IXML_DOCUMENT - returning - value(EP_NUM_FORMATS) type ZCL_EXCEL_STYLE_NUMBER_FORMAT=>T_NUM_FORMATS . - methods LOAD_WORKBOOK - importing - !IV_WORKBOOK_FULL_FILENAME type STRING - !IO_EXCEL type ref to ZCL_EXCEL - raising - ZCX_EXCEL . - methods LOAD_WORKSHEET - importing - !IP_PATH type STRING - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods LOAD_WORKSHEET_COND_FORMAT - importing - !IO_IXML_WORKSHEET type ref to IF_IXML_DOCUMENT - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods LOAD_WORKSHEET_COND_FORMAT_AA - importing - !IO_IXML_RULE type ref to IF_IXML_ELEMENT - !IO_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND. - methods LOAD_WORKSHEET_COND_FORMAT_CI - importing - !IO_IXML_RULE type ref to IF_IXML_ELEMENT - !IO_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods LOAD_WORKSHEET_COND_FORMAT_CS - importing - !IO_IXML_RULE type ref to IF_IXML_ELEMENT - !IO_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods LOAD_WORKSHEET_COND_FORMAT_EX - importing - !IO_IXML_RULE type ref to IF_IXML_ELEMENT - !IO_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods LOAD_WORKSHEET_COND_FORMAT_IS - importing - !IO_IXML_RULE type ref to IF_IXML_ELEMENT - !IO_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods LOAD_WORKSHEET_COND_FORMAT_DB - importing - !IO_IXML_RULE type ref to IF_IXML_ELEMENT - !IO_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods LOAD_WORKSHEET_COND_FORMAT_T10 - importing - !IO_IXML_RULE type ref to IF_IXML_ELEMENT - !IO_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods LOAD_WORKSHEET_DRAWING - importing - !IP_PATH type STRING - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods LOAD_WORKSHEET_HYPERLINKS - importing - !IO_IXML_WORKSHEET type ref to IF_IXML_DOCUMENT - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - !IT_EXTERNAL_HYPERLINKS type GTT_EXTERNAL_HYPERLINKS - raising - ZCX_EXCEL . - methods LOAD_WORKSHEET_PAGEBREAKS - importing - !IO_IXML_WORKSHEET type ref to IF_IXML_DOCUMENT - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods LOAD_WORKSHEET_PAGEMARGINS - importing - !IO_IXML_WORKSHEET type ref to IF_IXML_DOCUMENT - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - class-methods RESOLVE_PATH - importing - !IP_PATH type STRING - returning - value(RP_RESULT) type STRING . - methods RESOLVE_REFERENCED_FORMULAE . - methods GET_DXF_STYLE_GUID - importing - !IO_IXML_DXF type ref to IF_IXML_ELEMENT - !IO_EXCEL type ref to ZCL_EXCEL - returning - value(RV_STYLE_GUID) type ZEXCEL_CELL_STYLE . - methods LOAD_THEME - importing - value(IV_PATH) type STRING - !IP_EXCEL type ref to ZCL_EXCEL . -private section. - - data ZIP type ref to LCL_ZIP_ARCHIVE . - - methods CREATE_ZIP_ARCHIVE - importing - !I_XLSX_BINARY type XSTRING - !I_USE_ALTERNATE_ZIP type SEOCLSNAME optional - returning - value(E_ZIP) type ref to LCL_ZIP_ARCHIVE - raising - ZCX_EXCEL . - methods READ_FROM_APPLSERVER - importing - !I_FILENAME type CSEQUENCE - returning - value(R_EXCEL_DATA) type XSTRING - raising - ZCX_EXCEL. - methods READ_FROM_LOCAL_FILE - importing - !I_FILENAME type CSEQUENCE - returning - value(R_EXCEL_DATA) type XSTRING - raising - ZCX_EXCEL . + BEGIN OF t_relationship, + id TYPE string, + type 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 + END OF t_relationship . + TYPES: + BEGIN OF t_fileversion, + appname TYPE string, + lastedited TYPE string, + lowestedited TYPE string, + rupbuild TYPE string, + codename TYPE string, + END OF t_fileversion . + TYPES: + BEGIN OF t_sheet, + name TYPE string, + sheetid TYPE string, + id TYPE string, + state TYPE string, + END OF t_sheet . + TYPES: + BEGIN OF t_workbookpr, + codename TYPE string, + defaultthemeversion TYPE string, + END OF t_workbookpr . + TYPES: + BEGIN OF t_sheetpr, + codename TYPE string, + END OF t_sheetpr . + TYPES: + BEGIN OF t_range, + name TYPE string, + hidden TYPE string, "inserted with issue #235 because Autofilters didn't passthrough + localsheetid TYPE string, " issue #163 + END OF t_range . + TYPES: + t_fills TYPE STANDARD TABLE OF REF TO zcl_excel_style_fill WITH NON-UNIQUE DEFAULT KEY . + TYPES: + t_borders TYPE STANDARD TABLE OF REF TO zcl_excel_style_borders WITH NON-UNIQUE DEFAULT KEY . + TYPES: + t_fonts TYPE STANDARD TABLE OF REF TO zcl_excel_style_font WITH NON-UNIQUE DEFAULT KEY . + TYPES: + t_style_refs TYPE STANDARD TABLE OF REF TO zcl_excel_style WITH NON-UNIQUE DEFAULT KEY . + TYPES: + BEGIN OF t_color, + indexed TYPE string, + rgb TYPE string, + theme TYPE string, + tint TYPE string, + END OF t_color . + TYPES: + BEGIN OF t_rel_drawing, + id TYPE string, + content TYPE xstring, + file_ext TYPE string, + content_xml TYPE REF TO if_ixml_document, + END OF t_rel_drawing . + TYPES: + t_rel_drawings TYPE STANDARD TABLE OF t_rel_drawing WITH NON-UNIQUE DEFAULT KEY . + TYPES: + BEGIN OF gts_external_hyperlink, + id TYPE string, + target TYPE string, + END OF gts_external_hyperlink . + TYPES: + gtt_external_hyperlinks TYPE HASHED TABLE OF gts_external_hyperlink WITH UNIQUE KEY id . + TYPES: + BEGIN OF ty_ref_formulae, + sheet TYPE REF TO zcl_excel_worksheet, + row TYPE i, + column TYPE i, + si TYPE i, + ref TYPE string, + formula TYPE string, + END OF ty_ref_formulae . + TYPES: + tyt_ref_formulae TYPE HASHED TABLE OF ty_ref_formulae WITH UNIQUE KEY sheet row column . + + DATA shared_strings TYPE stringtab . + DATA styles TYPE t_style_refs . + DATA mt_ref_formulae TYPE tyt_ref_formulae . + DATA mt_dxf_styles TYPE zexcel_t_styles_cond_mapping . + + METHODS fill_row_outlines + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS get_from_zip_archive + IMPORTING + !i_filename TYPE string + RETURNING + VALUE(r_content) TYPE xstring + RAISING + zcx_excel . + METHODS get_ixml_from_zip_archive + IMPORTING + !i_filename TYPE string + !is_normalizing TYPE abap_bool DEFAULT 'X' + RETURNING + VALUE(r_ixml) TYPE REF TO if_ixml_document + RAISING + zcx_excel . + METHODS load_drawing_anchor + IMPORTING + !io_anchor_element TYPE REF TO if_ixml_element + !io_worksheet TYPE REF TO zcl_excel_worksheet + !it_related_drawings TYPE t_rel_drawings . + METHODS load_shared_strings + IMPORTING + !ip_path TYPE string + RAISING + zcx_excel . + METHODS load_styles + IMPORTING + !ip_path TYPE string + !ip_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . + METHODS load_dxf_styles + IMPORTING + !iv_path TYPE string + !io_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . + METHODS load_style_borders + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_borders) TYPE t_borders . + METHODS load_style_fills + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_fills) TYPE t_fills . + METHODS load_style_fonts + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_fonts) TYPE t_fonts . + METHODS load_style_num_formats + IMPORTING + !ip_xml TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_num_formats) TYPE zcl_excel_style_number_format=>t_num_formats . + METHODS load_workbook + IMPORTING + !iv_workbook_full_filename TYPE string + !io_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . + METHODS load_worksheet + IMPORTING + !ip_path TYPE string + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_cond_format + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_cond_format_aa + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond. + METHODS load_worksheet_cond_format_ci + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_cs + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_ex + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_is + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_db + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_cond_format_t10 + IMPORTING + !io_ixml_rule TYPE REF TO if_ixml_element + !io_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS load_worksheet_drawing + IMPORTING + !ip_path TYPE string + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_hyperlinks + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + !it_external_hyperlinks TYPE gtt_external_hyperlinks + RAISING + zcx_excel . + METHODS load_worksheet_pagebreaks + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS load_worksheet_pagemargins + IMPORTING + !io_ixml_worksheet TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + CLASS-METHODS resolve_path + IMPORTING + !ip_path TYPE string + RETURNING + VALUE(rp_result) TYPE string . + METHODS resolve_referenced_formulae . + METHODS get_dxf_style_guid + IMPORTING + !io_ixml_dxf TYPE REF TO if_ixml_element + !io_excel TYPE REF TO zcl_excel + RETURNING + VALUE(rv_style_guid) TYPE zexcel_cell_style . + METHODS load_theme + IMPORTING + VALUE(iv_path) TYPE string + !ip_excel TYPE REF TO zcl_excel . + PRIVATE SECTION. + + DATA zip TYPE REF TO lcl_zip_archive . + + METHODS create_zip_archive + IMPORTING + !i_xlsx_binary TYPE xstring + !i_use_alternate_zip TYPE seoclsname OPTIONAL + RETURNING + VALUE(e_zip) TYPE REF TO lcl_zip_archive + RAISING + zcx_excel . + METHODS read_from_applserver + IMPORTING + !i_filename TYPE csequence + RETURNING + VALUE(r_excel_data) TYPE xstring + RAISING + zcx_excel. + METHODS read_from_local_file + IMPORTING + !i_filename TYPE csequence + RETURNING + VALUE(r_excel_data) TYPE xstring + RAISING + zcx_excel . ENDCLASS. -CLASS ZCL_EXCEL_READER_2007 IMPLEMENTATION. +CLASS zcl_excel_reader_2007 IMPLEMENTATION. -METHOD create_zip_archive. - CASE i_use_alternate_zip. - WHEN space. - e_zip = lcl_abap_zip_archive=>create( i_xlsx_binary ). - WHEN OTHERS. - e_zip = lcl_alternate_zip_archive=>create( i_data = i_xlsx_binary - i_alternate_zip_class = i_use_alternate_zip ). - ENDCASE. -ENDMETHOD. + METHOD create_zip_archive. + CASE i_use_alternate_zip. + WHEN space. + e_zip = lcl_abap_zip_archive=>create( i_xlsx_binary ). + WHEN OTHERS. + e_zip = lcl_alternate_zip_archive=>create( i_data = i_xlsx_binary + i_alternate_zip_class = i_use_alternate_zip ). + ENDCASE. + ENDMETHOD. -METHOD fill_row_outlines. + METHOD fill_row_outlines. - TYPES: BEGIN OF lts_row_data, - row TYPE i, - outline_level TYPE i, - END OF lts_row_data, - ltt_row_data TYPE SORTED TABLE OF lts_row_data WITH UNIQUE KEY row. + TYPES: BEGIN OF lts_row_data, + row TYPE i, + outline_level TYPE i, + END OF lts_row_data, + ltt_row_data TYPE SORTED TABLE OF lts_row_data WITH UNIQUE KEY row. - DATA: lt_row_data TYPE ltt_row_data, - ls_row_data LIKE LINE OF lt_row_data, - lt_collapse_rows TYPE HASHED TABLE OF i WITH UNIQUE KEY table_line, + DATA: lt_row_data TYPE ltt_row_data, + ls_row_data LIKE LINE OF lt_row_data, + lt_collapse_rows TYPE HASHED TABLE OF i WITH UNIQUE KEY table_line, - lv_collapsed TYPE abap_bool, + lv_collapsed TYPE abap_bool, - lv_outline_level TYPE i, - lv_next_consecutive_row TYPE i, - lt_outline_rows TYPE zcl_excel_worksheet=>mty_ts_outlines_row, - ls_outline_row LIKE LINE OF lt_outline_rows, - lo_row TYPE REF TO zcl_excel_row, - lo_row_iterator TYPE REF TO cl_object_collection_iterator, - lv_row_offset TYPE i, - lv_row_collapse_flag TYPE i. + lv_outline_level TYPE i, + lv_next_consecutive_row TYPE i, + lt_outline_rows TYPE zcl_excel_worksheet=>mty_ts_outlines_row, + ls_outline_row LIKE LINE OF lt_outline_rows, + lo_row TYPE REF TO zcl_excel_row, + lo_row_iterator TYPE REF TO cl_object_collection_iterator, + lv_row_offset TYPE i, + lv_row_collapse_flag TYPE i. - FIELD-SYMBOLS: LIKE LINE OF lt_row_data. + FIELD-SYMBOLS: LIKE LINE OF lt_row_data. * First collect information about outlines ( outline leven and collapsed state ) - lo_row_iterator = io_worksheet->get_rows_iterator( ). - WHILE lo_row_iterator->has_next( ) = abap_true. - lo_row ?= lo_row_iterator->get_next( ). - ls_row_data-row = lo_row->get_row_index( ). - ls_row_data-outline_level = lo_row->get_outline_level( ). - IF ls_row_data-outline_level IS NOT INITIAL. - INSERT ls_row_data INTO TABLE lt_row_data. - ENDIF. + lo_row_iterator = io_worksheet->get_rows_iterator( ). + WHILE lo_row_iterator->has_next( ) = abap_true. + lo_row ?= lo_row_iterator->get_next( ). + ls_row_data-row = lo_row->get_row_index( ). + ls_row_data-outline_level = lo_row->get_outline_level( ). + IF ls_row_data-outline_level IS NOT INITIAL. + INSERT ls_row_data INTO TABLE lt_row_data. + ENDIF. - lv_collapsed = lo_row->get_collapsed( ). - IF lv_collapsed = abap_true. - INSERT lo_row->get_row_index( ) INTO TABLE lt_collapse_rows. - ENDIF. - ENDWHILE. + lv_collapsed = lo_row->get_collapsed( ). + IF lv_collapsed = abap_true. + INSERT lo_row->get_row_index( ) INTO TABLE lt_collapse_rows. + ENDIF. + ENDWHILE. * Now parse this information - we need consecutive rows - any gap will create a new outline - DO 7 TIMES. " max number of outlines allowed - lv_outline_level = sy-index. - CLEAR lv_next_consecutive_row. - CLEAR ls_outline_row. - LOOP AT lt_row_data ASSIGNING WHERE outline_level >= lv_outline_level. - - IF lv_next_consecutive_row <> -row " A gap --> close all open outlines - AND lv_next_consecutive_row IS NOT INITIAL. " First time in loop. - INSERT ls_outline_row INTO TABLE lt_outline_rows. - CLEAR: ls_outline_row. - ENDIF. + DO 7 TIMES. " max number of outlines allowed + lv_outline_level = sy-index. + CLEAR lv_next_consecutive_row. + CLEAR ls_outline_row. + LOOP AT lt_row_data ASSIGNING WHERE outline_level >= lv_outline_level. + + IF lv_next_consecutive_row <> -row " A gap --> close all open outlines + AND lv_next_consecutive_row IS NOT INITIAL. " First time in loop. + INSERT ls_outline_row INTO TABLE lt_outline_rows. + CLEAR: ls_outline_row. + ENDIF. - IF ls_outline_row-row_from IS INITIAL. - ls_outline_row-row_from = -row. - ENDIF. - ls_outline_row-row_to = -row. + IF ls_outline_row-row_from IS INITIAL. + ls_outline_row-row_from = -row. + ENDIF. + ls_outline_row-row_to = -row. - lv_next_consecutive_row = -row + 1. + lv_next_consecutive_row = -row + 1. - ENDLOOP. - IF ls_outline_row-row_from IS NOT INITIAL. - INSERT ls_outline_row INTO TABLE lt_outline_rows. - ENDIF. - ENDDO. + ENDLOOP. + IF ls_outline_row-row_from IS NOT INITIAL. + INSERT ls_outline_row INTO TABLE lt_outline_rows. + ENDIF. + ENDDO. * lt_outline_rows holds all outline information * we now need to determine whether the outline is collapsed or not - LOOP AT lt_outline_rows INTO ls_outline_row. + LOOP AT lt_outline_rows INTO ls_outline_row. - IF io_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_off. - lv_row_collapse_flag = ls_outline_row-row_from - 1. - ELSE. - lv_row_collapse_flag = ls_outline_row-row_to + 1. - ENDIF. - READ TABLE lt_collapse_rows TRANSPORTING NO FIELDS WITH TABLE KEY table_line = lv_row_collapse_flag. - IF sy-subrc = 0. - ls_outline_row-collapsed = abap_true. - ENDIF. - io_worksheet->set_row_outline( iv_row_from = ls_outline_row-row_from - iv_row_to = ls_outline_row-row_to - iv_collapsed = ls_outline_row-collapsed ). + IF io_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_off. + lv_row_collapse_flag = ls_outline_row-row_from - 1. + ELSE. + lv_row_collapse_flag = ls_outline_row-row_to + 1. + ENDIF. + READ TABLE lt_collapse_rows TRANSPORTING NO FIELDS WITH TABLE KEY table_line = lv_row_collapse_flag. + IF sy-subrc = 0. + ls_outline_row-collapsed = abap_true. + ENDIF. + io_worksheet->set_row_outline( iv_row_from = ls_outline_row-row_from + iv_row_to = ls_outline_row-row_to + iv_collapsed = ls_outline_row-collapsed ). - ENDLOOP. + ENDLOOP. * Finally purge outline information ( collapsed state, outline leve) from row_dimensions, since we want to keep these in the outline-table - lo_row_iterator = io_worksheet->get_rows_iterator( ). - WHILE lo_row_iterator->has_next( ) = abap_true. - lo_row ?= lo_row_iterator->get_next( ). + lo_row_iterator = io_worksheet->get_rows_iterator( ). + WHILE lo_row_iterator->has_next( ) = abap_true. + lo_row ?= lo_row_iterator->get_next( ). - lo_row->set_outline_level( 0 ). - lo_row->set_collapsed( abap_false ). + lo_row->set_outline_level( 0 ). + lo_row->set_collapsed( abap_false ). - ENDWHILE. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -method fill_struct_from_attributes. + METHOD fill_struct_from_attributes. *--------------------------------------------------------------------* * issue #230 - Pimp my Code * - Stefan Schmoecker, (done) 2012-11-07 @@ -408,12 +408,12 @@ method fill_struct_from_attributes. * adding comments to explain what we are trying to achieve *--------------------------------------------------------------------* - data: lv_name type string, - lo_attributes type ref to if_ixml_named_node_map, - lo_attribute type ref to if_ixml_attribute, - lo_iterator type ref to if_ixml_node_iterator. + DATA: lv_name TYPE string, + lo_attributes TYPE REF TO if_ixml_named_node_map, + lo_attribute TYPE REF TO if_ixml_attribute, + lo_iterator TYPE REF TO if_ixml_node_iterator. - field-symbols: type any. + FIELD-SYMBOLS: TYPE any. *--------------------------------------------------------------------* * The values of named attributes of a tag are being read and moved into corresponding @@ -426,126 +426,126 @@ method fill_struct_from_attributes. * structure has fieldnames Id and Target these would be filled with * "rId3" and "docProps/app.xml" respectively *--------------------------------------------------------------------* - clear cp_structure. + CLEAR cp_structure. - lo_attributes = ip_element->get_attributes( ). - lo_iterator = lo_attributes->create_iterator( ). - lo_attribute ?= lo_iterator->get_next( ). - while lo_attribute is bound. + lo_attributes = ip_element->get_attributes( ). + lo_iterator = lo_attributes->create_iterator( ). + lo_attribute ?= lo_iterator->get_next( ). + WHILE lo_attribute IS BOUND. - lv_name = lo_attribute->get_name( ). - translate lv_name to upper case. - assign component lv_name of structure cp_structure to . - if sy-subrc = 0. - = lo_attribute->get_value( ). - endif. - lo_attribute ?= lo_iterator->get_next( ). + lv_name = lo_attribute->get_name( ). + TRANSLATE lv_name TO UPPER CASE. + ASSIGN COMPONENT lv_name OF STRUCTURE cp_structure TO . + IF sy-subrc = 0. + = lo_attribute->get_value( ). + ENDIF. + lo_attribute ?= lo_iterator->get_next( ). - endwhile. + ENDWHILE. -endmethod. + ENDMETHOD. -METHOD get_dxf_style_guid. - DATA: lo_ixml_dxf_children TYPE REF TO if_ixml_node_list, - lo_ixml_iterator_dxf_children TYPE REF TO if_ixml_node_iterator, - lo_ixml_dxf_child TYPE REF TO if_ixml_element, + METHOD get_dxf_style_guid. + DATA: lo_ixml_dxf_children TYPE REF TO if_ixml_node_list, + lo_ixml_iterator_dxf_children TYPE REF TO if_ixml_node_iterator, + lo_ixml_dxf_child TYPE REF TO if_ixml_element, - lv_dxf_child_type TYPE string, + lv_dxf_child_type TYPE string, - lo_ixml_element TYPE REF TO if_ixml_element, - lo_ixml_element2 TYPE REF TO if_ixml_element, - lv_val TYPE string. + lo_ixml_element TYPE REF TO if_ixml_element, + lo_ixml_element2 TYPE REF TO if_ixml_element, + lv_val TYPE string. - DATA: ls_cstyle TYPE zexcel_s_cstyle_complete, - ls_cstylex TYPE zexcel_s_cstylex_complete. + DATA: ls_cstyle TYPE zexcel_s_cstyle_complete, + ls_cstylex TYPE zexcel_s_cstylex_complete. - lo_ixml_dxf_children = io_ixml_dxf->get_children( ). - lo_ixml_iterator_dxf_children = lo_ixml_dxf_children->create_iterator( ). - lo_ixml_dxf_child ?= lo_ixml_iterator_dxf_children->get_next( ). - WHILE lo_ixml_dxf_child IS BOUND. + lo_ixml_dxf_children = io_ixml_dxf->get_children( ). + lo_ixml_iterator_dxf_children = lo_ixml_dxf_children->create_iterator( ). + lo_ixml_dxf_child ?= lo_ixml_iterator_dxf_children->get_next( ). + WHILE lo_ixml_dxf_child IS BOUND. - lv_dxf_child_type = lo_ixml_dxf_child->get_name( ). - CASE lv_dxf_child_type. + lv_dxf_child_type = lo_ixml_dxf_child->get_name( ). + CASE lv_dxf_child_type. - WHEN 'font'. + WHEN 'font'. *--------------------------------------------------------------------* * italic *--------------------------------------------------------------------* - lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'i' ). - IF lo_ixml_element IS BOUND. - CLEAR lv_val. - lv_val = lo_ixml_element->get_attribute_ns( 'val' ). - IF lv_val <> '0'. - ls_cstyle-font-italic = 'X'. - ls_cstylex-font-italic = 'X'. - ENDIF. + lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'i' ). + IF lo_ixml_element IS BOUND. + CLEAR lv_val. + lv_val = lo_ixml_element->get_attribute_ns( 'val' ). + IF lv_val <> '0'. + ls_cstyle-font-italic = 'X'. + ls_cstylex-font-italic = 'X'. + ENDIF. - ENDIF. + ENDIF. *--------------------------------------------------------------------* * bold *--------------------------------------------------------------------* - lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'b' ). - IF lo_ixml_element IS BOUND. - CLEAR lv_val. - lv_val = lo_ixml_element->get_attribute_ns( 'val' ). - IF lv_val <> '0'. - ls_cstyle-font-bold = 'X'. - ls_cstylex-font-bold = 'X'. - ENDIF. + lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'b' ). + IF lo_ixml_element IS BOUND. + CLEAR lv_val. + lv_val = lo_ixml_element->get_attribute_ns( 'val' ). + IF lv_val <> '0'. + ls_cstyle-font-bold = 'X'. + ls_cstylex-font-bold = 'X'. + ENDIF. - ENDIF. + ENDIF. *--------------------------------------------------------------------* * strikethrough *--------------------------------------------------------------------* - lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'strike' ). - IF lo_ixml_element IS BOUND. - CLEAR lv_val. - lv_val = lo_ixml_element->get_attribute_ns( 'val' ). - IF lv_val <> '0'. - ls_cstyle-font-strikethrough = 'X'. - ls_cstylex-font-strikethrough = 'X'. - ENDIF. + lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'strike' ). + IF lo_ixml_element IS BOUND. + CLEAR lv_val. + lv_val = lo_ixml_element->get_attribute_ns( 'val' ). + IF lv_val <> '0'. + ls_cstyle-font-strikethrough = 'X'. + ls_cstylex-font-strikethrough = 'X'. + ENDIF. - ENDIF. + ENDIF. *--------------------------------------------------------------------* * color *--------------------------------------------------------------------* - lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'color' ). - IF lo_ixml_element IS BOUND. - CLEAR lv_val. - lv_val = lo_ixml_element->get_attribute_ns( 'rgb' ). - ls_cstyle-font-color-rgb = lv_val. - ls_cstylex-font-color-rgb = 'X'. - ENDIF. - - WHEN 'fill'. - lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'patternFill' ). - IF lo_ixml_element IS BOUND. - lo_ixml_element2 = lo_ixml_element->find_from_name( 'bgColor' ). - IF lo_ixml_element2 IS BOUND. + lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'color' ). + IF lo_ixml_element IS BOUND. CLEAR lv_val. - lv_val = lo_ixml_element2->get_attribute_ns( 'rgb' ). - IF lv_val IS NOT INITIAL. - ls_cstyle-fill-filltype = zcl_excel_style_fill=>c_fill_solid. - ls_cstyle-fill-bgcolor-rgb = lv_val. - ls_cstylex-fill-filltype = 'X'. - ls_cstylex-fill-bgcolor-rgb = 'X'. - ENDIF. - CLEAR lv_val. - lv_val = lo_ixml_element2->get_attribute_ns( 'theme' ). - IF lv_val IS NOT INITIAL. - ls_cstyle-fill-filltype = zcl_excel_style_fill=>c_fill_solid. - ls_cstyle-fill-bgcolor-theme = lv_val. - ls_cstylex-fill-filltype = 'X'. - ls_cstylex-fill-bgcolor-theme = 'X'. + lv_val = lo_ixml_element->get_attribute_ns( 'rgb' ). + ls_cstyle-font-color-rgb = lv_val. + ls_cstylex-font-color-rgb = 'X'. + ENDIF. + + WHEN 'fill'. + lo_ixml_element = lo_ixml_dxf_child->find_from_name( 'patternFill' ). + IF lo_ixml_element IS BOUND. + lo_ixml_element2 = lo_ixml_element->find_from_name( 'bgColor' ). + IF lo_ixml_element2 IS BOUND. + CLEAR lv_val. + lv_val = lo_ixml_element2->get_attribute_ns( 'rgb' ). + IF lv_val IS NOT INITIAL. + ls_cstyle-fill-filltype = zcl_excel_style_fill=>c_fill_solid. + ls_cstyle-fill-bgcolor-rgb = lv_val. + ls_cstylex-fill-filltype = 'X'. + ls_cstylex-fill-bgcolor-rgb = 'X'. + ENDIF. + CLEAR lv_val. + lv_val = lo_ixml_element2->get_attribute_ns( 'theme' ). + IF lv_val IS NOT INITIAL. + ls_cstyle-fill-filltype = zcl_excel_style_fill=>c_fill_solid. + ls_cstyle-fill-bgcolor-theme = lv_val. + ls_cstylex-fill-filltype = 'X'. + ls_cstylex-fill-bgcolor-theme = 'X'. + ENDIF. + CLEAR lv_val. ENDIF. - CLEAR lv_val. ENDIF. - ENDIF. * 2do - borders into dxf-styles. Here and in writerclass * WHEN 'border'. @@ -559,273 +559,273 @@ METHOD get_dxf_style_guid. * ENDIF. * ENDIF. - ENDCASE. + ENDCASE. - lo_ixml_dxf_child ?= lo_ixml_iterator_dxf_children->get_next( ). + lo_ixml_dxf_child ?= lo_ixml_iterator_dxf_children->get_next( ). - ENDWHILE. + ENDWHILE. - rv_style_guid = io_excel->get_static_cellstyle_guid( ip_cstyle_complete = ls_cstyle - ip_cstylex_complete = ls_cstylex ). + rv_style_guid = io_excel->get_static_cellstyle_guid( ip_cstyle_complete = ls_cstyle + ip_cstylex_complete = ls_cstylex ). -ENDMETHOD. + ENDMETHOD. -METHOD get_from_zip_archive. + METHOD get_from_zip_archive. - ASSERT zip IS BOUND. " zip object has to exist at this point + ASSERT zip IS BOUND. " zip object has to exist at this point - r_content = zip->read( i_filename ). + r_content = zip->read( i_filename ). -ENDMETHOD. + ENDMETHOD. -METHOD get_ixml_from_zip_archive. + METHOD get_ixml_from_zip_archive. - DATA: lv_content TYPE xstring, - lo_ixml TYPE REF TO if_ixml, - lo_streamfactory TYPE REF TO if_ixml_stream_factory, - lo_istream TYPE REF TO if_ixml_istream, - lo_parser TYPE REF TO if_ixml_parser. + DATA: lv_content TYPE xstring, + lo_ixml TYPE REF TO if_ixml, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_istream TYPE REF TO if_ixml_istream, + lo_parser TYPE REF TO if_ixml_parser. *--------------------------------------------------------------------* * Load XML file from archive into an input stream, * and parse that stream into an ixml object *--------------------------------------------------------------------* - lv_content = me->get_from_zip_archive( i_filename ). - lo_ixml = cl_ixml=>create( ). - lo_streamfactory = lo_ixml->create_stream_factory( ). - lo_istream = lo_streamfactory->create_istream_xstring( lv_content ). - r_ixml = lo_ixml->create_document( ). - lo_parser = lo_ixml->create_parser( stream_factory = lo_streamfactory - istream = lo_istream - document = r_ixml ). - lo_parser->set_normalizing( is_normalizing ). - lo_parser->set_validating( mode = if_ixml_parser=>co_no_validation ). - lo_parser->parse( ). - -ENDMETHOD. - - -METHOD load_drawing_anchor. - - TYPES: BEGIN OF t_c_nv_pr, - name TYPE string, - id TYPE string, - END OF t_c_nv_pr. - - TYPES: BEGIN OF t_blip, - cstate TYPE string, - embed TYPE string, - END OF t_blip. - - TYPES: BEGIN OF t_chart, - id TYPE string, - END OF t_chart. - - TYPES: BEGIN OF t_ext, - cx TYPE string, - cy TYPE string, - END OF t_ext. - - CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', - lc_xml_attr_true_int TYPE string VALUE '1'. - CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', - lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. - - DATA: lo_drawing TYPE REF TO zcl_excel_drawing, - node TYPE REF TO if_ixml_element, - node2 TYPE REF TO if_ixml_element, - node3 TYPE REF TO if_ixml_element, - node4 TYPE REF TO if_ixml_element, - - ls_upper TYPE zexcel_drawing_location, - ls_lower TYPE zexcel_drawing_location, - ls_size TYPE zexcel_drawing_size, - ext TYPE t_ext, - lv_content TYPE xstring, - lv_relation_id TYPE string, - lv_title TYPE string, - - cnvpr TYPE t_c_nv_pr, - blip TYPE t_blip, - chart TYPE t_chart, - drawing_type TYPE zexcel_drawing_type, - - rel_drawing TYPE t_rel_drawing. - - node ?= io_anchor_element->find_from_name( name = 'from' namespace = 'xdr' ). - CHECK node IS NOT INITIAL. - node2 ?= node->find_from_name( name = 'col' namespace = 'xdr' ). - ls_upper-col = node2->get_value( ). - node2 ?= node->find_from_name( name = 'row' namespace = 'xdr' ). - ls_upper-row = node2->get_value( ). - node2 ?= node->find_from_name( name = 'colOff' namespace = 'xdr' ). - ls_upper-col_offset = node2->get_value( ). - node2 ?= node->find_from_name( name = 'rowOff' namespace = 'xdr' ). - ls_upper-row_offset = node2->get_value( ). - - node ?= io_anchor_element->find_from_name( name = 'ext' namespace = 'xdr' ). - IF node IS INITIAL. - CLEAR ls_size. - ELSE. - me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = ext ). - ls_size-width = ext-cx. - ls_size-height = ext-cy. - TRY. - ls_size-width = zcl_excel_drawing=>emu2pixel( ls_size-width ). - CATCH cx_root. - ENDTRY. - TRY. - ls_size-height = zcl_excel_drawing=>emu2pixel( ls_size-height ). - CATCH cx_root. - ENDTRY. - ENDIF. + lv_content = me->get_from_zip_archive( i_filename ). + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_istream = lo_streamfactory->create_istream_xstring( lv_content ). + r_ixml = lo_ixml->create_document( ). + lo_parser = lo_ixml->create_parser( stream_factory = lo_streamfactory + istream = lo_istream + document = r_ixml ). + lo_parser->set_normalizing( is_normalizing ). + lo_parser->set_validating( mode = if_ixml_parser=>co_no_validation ). + lo_parser->parse( ). + + ENDMETHOD. + + + METHOD load_drawing_anchor. + + TYPES: BEGIN OF t_c_nv_pr, + name TYPE string, + id TYPE string, + END OF t_c_nv_pr. + + TYPES: BEGIN OF t_blip, + cstate TYPE string, + embed TYPE string, + END OF t_blip. + + TYPES: BEGIN OF t_chart, + id TYPE string, + END OF t_chart. + + TYPES: BEGIN OF t_ext, + cx TYPE string, + cy TYPE string, + END OF t_ext. + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1'. + CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. + + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + node TYPE REF TO if_ixml_element, + node2 TYPE REF TO if_ixml_element, + node3 TYPE REF TO if_ixml_element, + node4 TYPE REF TO if_ixml_element, - node ?= io_anchor_element->find_from_name( name = 'to' namespace = 'xdr' ). - IF node IS INITIAL. - CLEAR ls_lower. - ELSE. + ls_upper TYPE zexcel_drawing_location, + ls_lower TYPE zexcel_drawing_location, + ls_size TYPE zexcel_drawing_size, + ext TYPE t_ext, + lv_content TYPE xstring, + lv_relation_id TYPE string, + lv_title TYPE string, + + cnvpr TYPE t_c_nv_pr, + blip TYPE t_blip, + chart TYPE t_chart, + drawing_type TYPE zexcel_drawing_type, + + rel_drawing TYPE t_rel_drawing. + + node ?= io_anchor_element->find_from_name( name = 'from' namespace = 'xdr' ). + CHECK node IS NOT INITIAL. node2 ?= node->find_from_name( name = 'col' namespace = 'xdr' ). - ls_lower-col = node2->get_value( ). + ls_upper-col = node2->get_value( ). node2 ?= node->find_from_name( name = 'row' namespace = 'xdr' ). - ls_lower-row = node2->get_value( ). + ls_upper-row = node2->get_value( ). node2 ?= node->find_from_name( name = 'colOff' namespace = 'xdr' ). - ls_lower-col_offset = node2->get_value( ). + ls_upper-col_offset = node2->get_value( ). node2 ?= node->find_from_name( name = 'rowOff' namespace = 'xdr' ). - ls_lower-row_offset = node2->get_value( ). - ENDIF. - - node ?= io_anchor_element->find_from_name( name = 'pic' namespace = 'xdr' ). - IF node IS NOT INITIAL. - node2 ?= node->find_from_name( name = 'nvPicPr' namespace = 'xdr' ). - CHECK node2 IS NOT INITIAL. - node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). - CHECK node3 IS NOT INITIAL. - me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). - lv_title = cnvpr-name. - - node2 ?= node->find_from_name( name = 'blipFill' namespace = 'xdr' ). - CHECK node2 IS NOT INITIAL. - node3 ?= node2->find_from_name( name = 'blip' namespace = 'a' ). - CHECK node3 IS NOT INITIAL. - me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = blip ). - lv_relation_id = blip-embed. - - drawing_type = zcl_excel_drawing=>type_image. - ENDIF. - - node ?= io_anchor_element->find_from_name( name = 'graphicFrame' namespace = 'xdr' ). - IF node IS NOT INITIAL. - node2 ?= node->find_from_name( name = 'nvGraphicFramePr' namespace = 'xdr' ). - CHECK node2 IS NOT INITIAL. - node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). - CHECK node3 IS NOT INITIAL. - me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). - lv_title = cnvpr-name. - - node2 ?= node->find_from_name( name = 'graphic' namespace = 'a' ). - CHECK node2 IS NOT INITIAL. - node3 ?= node2->find_from_name( name = 'graphicData' namespace = 'a' ). - CHECK node3 IS NOT INITIAL. - node4 ?= node2->find_from_name( name = 'chart' namespace = 'c' ). - CHECK node4 IS NOT INITIAL. - me->fill_struct_from_attributes( EXPORTING ip_element = node4 CHANGING cp_structure = chart ). - lv_relation_id = chart-id. - - drawing_type = zcl_excel_drawing=>type_chart. - ENDIF. - - lo_drawing = io_worksheet->excel->add_new_drawing( - ip_type = drawing_type - ip_title = lv_title ). - io_worksheet->add_drawing( lo_drawing ). - - lo_drawing->set_position2( - EXPORTING - ip_from = ls_upper - ip_to = ls_lower ). - - READ TABLE it_related_drawings INTO rel_drawing - WITH KEY id = lv_relation_id. - - lo_drawing->set_media( - EXPORTING - ip_media = rel_drawing-content - ip_media_type = rel_drawing-file_ext - ip_width = ls_size-width - ip_height = ls_size-height ). - - IF drawing_type = zcl_excel_drawing=>type_chart. + ls_upper-row_offset = node2->get_value( ). + + node ?= io_anchor_element->find_from_name( name = 'ext' namespace = 'xdr' ). + IF node IS INITIAL. + CLEAR ls_size. + ELSE. + me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = ext ). + ls_size-width = ext-cx. + ls_size-height = ext-cy. + TRY. + ls_size-width = zcl_excel_drawing=>emu2pixel( ls_size-width ). + CATCH cx_root. + ENDTRY. + TRY. + ls_size-height = zcl_excel_drawing=>emu2pixel( ls_size-height ). + CATCH cx_root. + ENDTRY. + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'to' namespace = 'xdr' ). + IF node IS INITIAL. + CLEAR ls_lower. + ELSE. + node2 ?= node->find_from_name( name = 'col' namespace = 'xdr' ). + ls_lower-col = node2->get_value( ). + node2 ?= node->find_from_name( name = 'row' namespace = 'xdr' ). + ls_lower-row = node2->get_value( ). + node2 ?= node->find_from_name( name = 'colOff' namespace = 'xdr' ). + ls_lower-col_offset = node2->get_value( ). + node2 ?= node->find_from_name( name = 'rowOff' namespace = 'xdr' ). + ls_lower-row_offset = node2->get_value( ). + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'pic' namespace = 'xdr' ). + IF node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'nvPicPr' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). + lv_title = cnvpr-name. + + node2 ?= node->find_from_name( name = 'blipFill' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'blip' namespace = 'a' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = blip ). + lv_relation_id = blip-embed. + + drawing_type = zcl_excel_drawing=>type_image. + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'graphicFrame' namespace = 'xdr' ). + IF node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'nvGraphicFramePr' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). + lv_title = cnvpr-name. + + node2 ?= node->find_from_name( name = 'graphic' namespace = 'a' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'graphicData' namespace = 'a' ). + CHECK node3 IS NOT INITIAL. + node4 ?= node2->find_from_name( name = 'chart' namespace = 'c' ). + CHECK node4 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node4 CHANGING cp_structure = chart ). + lv_relation_id = chart-id. + + drawing_type = zcl_excel_drawing=>type_chart. + ENDIF. + + lo_drawing = io_worksheet->excel->add_new_drawing( + ip_type = drawing_type + ip_title = lv_title ). + io_worksheet->add_drawing( lo_drawing ). + + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + READ TABLE it_related_drawings INTO rel_drawing + WITH KEY id = lv_relation_id. + + lo_drawing->set_media( + EXPORTING + ip_media = rel_drawing-content + ip_media_type = rel_drawing-file_ext + ip_width = ls_size-width + ip_height = ls_size-height ). + + IF drawing_type = zcl_excel_drawing=>type_chart. * Begin fix for Issue #551 - DATA: lo_tmp_node_2 TYPE REF TO if_ixml_element. - lo_tmp_node_2 ?= rel_drawing-content_xml->find_from_name( name = 'pieChart' namespace = 'c' ). - if lo_tmp_node_2 is not initial. + DATA: lo_tmp_node_2 TYPE REF TO if_ixml_element. + lo_tmp_node_2 ?= rel_drawing-content_xml->find_from_name( name = 'pieChart' namespace = 'c' ). + IF lo_tmp_node_2 IS NOT INITIAL. lo_drawing->graph_type = zcl_excel_drawing=>c_graph_pie. - else. + ELSE. lo_tmp_node_2 ?= rel_drawing-content_xml->find_from_name( name = 'barChart' namespace = 'c' ). - if lo_tmp_node_2 is not initial. - lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars. - else. - lo_tmp_node_2 ?= rel_drawing-content_xml->find_from_name( name = 'lineChart' namespace = 'c' ). - if lo_tmp_node_2 is not initial. - lo_drawing->graph_type = zcl_excel_drawing=>c_graph_line. - endif. - endif. - endif. + IF lo_tmp_node_2 IS NOT INITIAL. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars. + ELSE. + lo_tmp_node_2 ?= rel_drawing-content_xml->find_from_name( name = 'lineChart' namespace = 'c' ). + IF lo_tmp_node_2 IS NOT INITIAL. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_line. + ENDIF. + ENDIF. + ENDIF. * End fix for issue #551 - "-------------Added by Alessandro Iannacci - Should load chart attributes - lo_drawing->load_chart_attributes( rel_drawing-content_xml ). - ENDIF. + "-------------Added by Alessandro Iannacci - Should load chart attributes + lo_drawing->load_chart_attributes( rel_drawing-content_xml ). + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD load_dxf_styles. + METHOD load_dxf_styles. - DATA: lo_styles_xml TYPE REF TO if_ixml_document, - lo_node_dxfs TYPE REF TO if_ixml_element, + DATA: lo_styles_xml TYPE REF TO if_ixml_document, + lo_node_dxfs TYPE REF TO if_ixml_element, - lo_nodes_dxf TYPE REF TO if_ixml_node_collection, - lo_iterator_dxf TYPE REF TO if_ixml_node_iterator, - lo_node_dxf TYPE REF TO if_ixml_element, + lo_nodes_dxf TYPE REF TO if_ixml_node_collection, + lo_iterator_dxf TYPE REF TO if_ixml_node_iterator, + lo_node_dxf TYPE REF TO if_ixml_element, - lv_dxf_count TYPE i. + lv_dxf_count TYPE i. - FIELD-SYMBOLS: LIKE LINE OF mt_dxf_styles. + FIELD-SYMBOLS: LIKE LINE OF mt_dxf_styles. *--------------------------------------------------------------------* * Look for dxfs-node *--------------------------------------------------------------------* - lo_styles_xml = me->get_ixml_from_zip_archive( iv_path ). - lo_node_dxfs = lo_styles_xml->find_from_name( 'dxfs' ). - CHECK lo_node_dxfs IS BOUND. + lo_styles_xml = me->get_ixml_from_zip_archive( iv_path ). + lo_node_dxfs = lo_styles_xml->find_from_name( 'dxfs' ). + CHECK lo_node_dxfs IS BOUND. *--------------------------------------------------------------------* * loop through all dxf-nodes and create style for each *--------------------------------------------------------------------* - lo_nodes_dxf ?= lo_node_dxfs->get_elements_by_tag_name( 'dxf' ). - lo_iterator_dxf = lo_nodes_dxf->create_iterator( ). - lo_node_dxf ?= lo_iterator_dxf->get_next( ). - WHILE lo_node_dxf IS BOUND. + lo_nodes_dxf ?= lo_node_dxfs->get_elements_by_tag_name( 'dxf' ). + lo_iterator_dxf = lo_nodes_dxf->create_iterator( ). + lo_node_dxf ?= lo_iterator_dxf->get_next( ). + WHILE lo_node_dxf IS BOUND. - APPEND INITIAL LINE TO mt_dxf_styles ASSIGNING . - -dxf = lv_dxf_count. " We start counting at 0 - ADD 1 TO lv_dxf_count. " prepare next entry + APPEND INITIAL LINE TO mt_dxf_styles ASSIGNING . + -dxf = lv_dxf_count. " We start counting at 0 + ADD 1 TO lv_dxf_count. " prepare next entry - -guid = get_dxf_style_guid( io_ixml_dxf = lo_node_dxf - io_excel = io_excel ). - lo_node_dxf ?= lo_iterator_dxf->get_next( ). + -guid = get_dxf_style_guid( io_ixml_dxf = lo_node_dxf + io_excel = io_excel ). + lo_node_dxf ?= lo_iterator_dxf->get_next( ). - ENDWHILE. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -method LOAD_SHARED_STRINGS. + METHOD load_shared_strings. *--------------------------------------------------------------------* * ToDos: * 2do§1 Support partial formatting of strings in cells @@ -844,15 +844,15 @@ method LOAD_SHARED_STRINGS. - DATA: - lo_shared_strings_xml TYPE REF TO if_ixml_document, - lo_node_si TYPE REF TO if_ixml_element, - lo_node_si_child TYPE REF TO if_ixml_element, - lo_node_r_child_t TYPE REF TO if_ixml_element, - lv_tag_name TYPE string, - lv_node_value TYPE string. + DATA: + lo_shared_strings_xml TYPE REF TO if_ixml_document, + lo_node_si TYPE REF TO if_ixml_element, + lo_node_si_child TYPE REF TO if_ixml_element, + lo_node_r_child_t TYPE REF TO if_ixml_element, + lv_tag_name TYPE string, + lv_node_value TYPE string. - FIELD-SYMBOLS: LIKE LINE OF me->shared_strings. + FIELD-SYMBOLS: LIKE LINE OF me->shared_strings. *--------------------------------------------------------------------* @@ -900,49 +900,49 @@ method LOAD_SHARED_STRINGS. * *--------------------------------------------------------------------* - lo_shared_strings_xml = me->get_ixml_from_zip_archive( i_filename = ip_path - is_normalizing = space ). " NO!!! normalizing - otherwise leading blanks will be omitted and that is not really desired for the stringtable - lo_node_si ?= lo_shared_strings_xml->find_from_name( 'si' ). - WHILE lo_node_si IS BOUND. + lo_shared_strings_xml = me->get_ixml_from_zip_archive( i_filename = ip_path + is_normalizing = space ). " NO!!! normalizing - otherwise leading blanks will be omitted and that is not really desired for the stringtable + lo_node_si ?= lo_shared_strings_xml->find_from_name( 'si' ). + WHILE lo_node_si IS BOUND. - APPEND INITIAL LINE TO me->shared_strings ASSIGNING . " Each -entry in the xml-file must lead to an entry in our stringtable - lo_node_si_child ?= lo_node_si->get_first_child( ). - IF lo_node_si_child IS BOUND. - lv_tag_name = lo_node_si_child->get_name( ). - IF lv_tag_name = 't'. + APPEND INITIAL LINE TO me->shared_strings ASSIGNING . " Each -entry in the xml-file must lead to an entry in our stringtable + lo_node_si_child ?= lo_node_si->get_first_child( ). + IF lo_node_si_child IS BOUND. + lv_tag_name = lo_node_si_child->get_name( ). + IF lv_tag_name = 't'. *--------------------------------------------------------------------* * §1.1 - "simple" strings * Example: see above *--------------------------------------------------------------------* - = lo_node_si_child->get_value( ). - ELSE. + = lo_node_si_child->get_value( ). + ELSE. *--------------------------------------------------------------------* * §1.2 - rich text formatted strings * it is sufficient to strip the ... tag from each -tag and concatenate these * as long as rich text formatting is not supported (2do§1) ignore all info about formatting * Example: see above *--------------------------------------------------------------------* - WHILE lo_node_si_child IS BOUND. " actually these children of are -tags + WHILE lo_node_si_child IS BOUND. " actually these children of are -tags - lo_node_r_child_t ?= lo_node_si_child->find_from_name( 't' ). " extract the ... part of each -tag - IF lo_node_r_child_t IS BOUND. - lv_node_value = lo_node_r_child_t->get_value( ). - CONCATENATE lv_node_value INTO RESPECTING BLANKS. - ENDIF. + lo_node_r_child_t ?= lo_node_si_child->find_from_name( 't' ). " extract the ... part of each -tag + IF lo_node_r_child_t IS BOUND. + lv_node_value = lo_node_r_child_t->get_value( ). + CONCATENATE lv_node_value INTO RESPECTING BLANKS. + ENDIF. - lo_node_si_child ?= lo_node_si_child->get_next( ). + lo_node_si_child ?= lo_node_si_child->get_next( ). - ENDWHILE. + ENDWHILE. + ENDIF. ENDIF. - ENDIF. - lo_node_si ?= lo_node_si->get_next( ). - ENDWHILE. + lo_node_si ?= lo_node_si->get_next( ). + ENDWHILE. - endmethod. + ENDMETHOD. -METHOD load_styles. + METHOD load_styles. *--------------------------------------------------------------------* * issue #230 - Pimp my Code @@ -952,64 +952,64 @@ METHOD load_styles. * aligning code * adding comments to explain what we are trying to achieve *--------------------------------------------------------------------* - TYPES: BEGIN OF lty_xf, - applyalignment TYPE string, - applyborder TYPE string, - applyfill TYPE string, - applyfont TYPE string, - applynumberformat TYPE string, - applyprotection TYPE string, - borderid TYPE string, - fillid TYPE string, - fontid TYPE string, - numfmtid TYPE string, - pivotbutton TYPE string, - quoteprefix TYPE string, - xfid TYPE string, - END OF lty_xf. - - TYPES: BEGIN OF lty_alignment, - horizontal TYPE string, - indent TYPE string, - justifylastline TYPE string, - readingorder TYPE string, - relativeindent TYPE string, - shrinktofit TYPE string, - textrotation TYPE string, - vertical TYPE string, - wraptext TYPE string, - END OF lty_alignment. - - TYPES: BEGIN OF lty_protection, - hidden TYPE string, - locked TYPE string, - END OF lty_protection. - - DATA: lo_styles_xml TYPE REF TO if_ixml_document, - lo_style TYPE REF TO zcl_excel_style, - - lt_num_formats TYPE zcl_excel_style_number_format=>t_num_formats, - lt_fills TYPE t_fills, - lt_borders TYPE t_borders, - lt_fonts TYPE t_fonts, - - ls_num_format TYPE zcl_excel_style_number_format=>t_num_format , - ls_fill TYPE REF TO zcl_excel_style_fill, - ls_cell_border TYPE REF TO zcl_excel_style_borders, - ls_font TYPE REF TO zcl_excel_style_font, - - lo_node_cellxfs TYPE REF TO if_ixml_element, - lo_node_cellxfs_xf TYPE REF TO if_ixml_element, - lo_node_cellxfs_xf_alignment TYPE REF TO if_ixml_element, - lo_node_cellxfs_xf_protection TYPE REF TO if_ixml_element, - - lo_nodes_xf TYPE REF TO if_ixml_node_collection, - lo_iterator_cellxfs TYPE REF TO if_ixml_node_iterator, - - ls_xf TYPE lty_xf, - ls_alignment TYPE lty_alignment, - ls_protection TYPE lty_protection, - lv_index TYPE i. + TYPES: BEGIN OF lty_xf, + applyalignment TYPE string, + applyborder TYPE string, + applyfill TYPE string, + applyfont TYPE string, + applynumberformat TYPE string, + applyprotection TYPE string, + borderid TYPE string, + fillid TYPE string, + fontid TYPE string, + numfmtid TYPE string, + pivotbutton TYPE string, + quoteprefix TYPE string, + xfid TYPE string, + END OF lty_xf. + + TYPES: BEGIN OF lty_alignment, + horizontal TYPE string, + indent TYPE string, + justifylastline TYPE string, + readingorder TYPE string, + relativeindent TYPE string, + shrinktofit TYPE string, + textrotation TYPE string, + vertical TYPE string, + wraptext TYPE string, + END OF lty_alignment. + + TYPES: BEGIN OF lty_protection, + hidden TYPE string, + locked TYPE string, + END OF lty_protection. + + DATA: lo_styles_xml TYPE REF TO if_ixml_document, + lo_style TYPE REF TO zcl_excel_style, + + lt_num_formats TYPE zcl_excel_style_number_format=>t_num_formats, + lt_fills TYPE t_fills, + lt_borders TYPE t_borders, + lt_fonts TYPE t_fonts, + + ls_num_format TYPE zcl_excel_style_number_format=>t_num_format, + ls_fill TYPE REF TO zcl_excel_style_fill, + ls_cell_border TYPE REF TO zcl_excel_style_borders, + ls_font TYPE REF TO zcl_excel_style_font, + + lo_node_cellxfs TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf_alignment TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf_protection TYPE REF TO if_ixml_element, + + lo_nodes_xf TYPE REF TO if_ixml_node_collection, + lo_iterator_cellxfs TYPE REF TO if_ixml_node_iterator, + + ls_xf TYPE lty_xf, + ls_alignment TYPE lty_alignment, + ls_protection TYPE lty_protection, + lv_index TYPE i. *--------------------------------------------------------------------* * To build a complete style that fully describes how a cell looks like @@ -1037,7 +1037,7 @@ METHOD load_styles. * *--------------------------------------------------------------------* - lo_styles_xml = me->get_ixml_from_zip_archive( ip_path ). + lo_styles_xml = me->get_ixml_from_zip_archive( ip_path ). *--------------------------------------------------------------------* * The styles are build up from @@ -1048,137 +1048,137 @@ METHOD load_styles. * These need to be read before we can try to build up a complete * style that describes the look of a cell *--------------------------------------------------------------------* - lt_num_formats = load_style_num_formats( lo_styles_xml ). " §1 - lt_fills = load_style_fills( lo_styles_xml ). " §2 - lt_borders = load_style_borders( lo_styles_xml ). " §3 - lt_fonts = load_style_fonts( lo_styles_xml ). " §4 + lt_num_formats = load_style_num_formats( lo_styles_xml ). " §1 + lt_fills = load_style_fills( lo_styles_xml ). " §2 + lt_borders = load_style_borders( lo_styles_xml ). " §3 + lt_fonts = load_style_fonts( lo_styles_xml ). " §4 *--------------------------------------------------------------------* * Now everything is prepared to build a "full" style *--------------------------------------------------------------------* - lo_node_cellxfs = lo_styles_xml->find_from_name( name = 'cellXfs' ). - IF lo_node_cellxfs IS BOUND. - lo_nodes_xf = lo_node_cellxfs->get_elements_by_tag_name( name = 'xf' ). - lo_iterator_cellxfs = lo_nodes_xf->create_iterator( ). - lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). - WHILE lo_node_cellxfs_xf IS BOUND. + lo_node_cellxfs = lo_styles_xml->find_from_name( name = 'cellXfs' ). + IF lo_node_cellxfs IS BOUND. + lo_nodes_xf = lo_node_cellxfs->get_elements_by_tag_name( name = 'xf' ). + lo_iterator_cellxfs = lo_nodes_xf->create_iterator( ). + lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). + WHILE lo_node_cellxfs_xf IS BOUND. - lo_style = ip_excel->add_new_style( ). - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_cellxfs_xf - CHANGING - cp_structure = ls_xf ). + lo_style = ip_excel->add_new_style( ). + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf + CHANGING + cp_structure = ls_xf ). *--------------------------------------------------------------------* * §2 fill style *--------------------------------------------------------------------* - IF ls_xf-applyfill = '1' AND ls_xf-fillid IS NOT INITIAL. - lv_index = ls_xf-fillid + 1. - READ TABLE lt_fills INTO ls_fill INDEX lv_index. - IF sy-subrc = 0. - lo_style->fill = ls_fill. + IF ls_xf-applyfill = '1' AND ls_xf-fillid IS NOT INITIAL. + lv_index = ls_xf-fillid + 1. + READ TABLE lt_fills INTO ls_fill INDEX lv_index. + IF sy-subrc = 0. + lo_style->fill = ls_fill. + ENDIF. ENDIF. - ENDIF. *--------------------------------------------------------------------* * §1 number format *--------------------------------------------------------------------* - IF ls_xf-numfmtid IS NOT INITIAL. - READ TABLE lt_num_formats INTO ls_num_format WITH TABLE KEY id = ls_xf-numfmtid. - IF sy-subrc = 0. - lo_style->number_format = ls_num_format-format. + IF ls_xf-numfmtid IS NOT INITIAL. + READ TABLE lt_num_formats INTO ls_num_format WITH TABLE KEY id = ls_xf-numfmtid. + IF sy-subrc = 0. + lo_style->number_format = ls_num_format-format. + ENDIF. ENDIF. - ENDIF. *--------------------------------------------------------------------* * §3 border style *--------------------------------------------------------------------* - IF ls_xf-applyborder = '1' AND ls_xf-borderid IS NOT INITIAL. - lv_index = ls_xf-borderid + 1. - READ TABLE lt_borders INTO ls_cell_border INDEX lv_index. - IF sy-subrc = 0. - lo_style->borders = ls_cell_border. + IF ls_xf-applyborder = '1' AND ls_xf-borderid IS NOT INITIAL. + lv_index = ls_xf-borderid + 1. + READ TABLE lt_borders INTO ls_cell_border INDEX lv_index. + IF sy-subrc = 0. + lo_style->borders = ls_cell_border. + ENDIF. ENDIF. - ENDIF. *--------------------------------------------------------------------* * §4 font *--------------------------------------------------------------------* - IF ls_xf-applyfont = '1' AND ls_xf-fontid IS NOT INITIAL. - lv_index = ls_xf-fontid + 1. - READ TABLE lt_fonts INTO ls_font INDEX lv_index. - IF sy-subrc = 0. - lo_style->font = ls_font. + IF ls_xf-applyfont = '1' AND ls_xf-fontid IS NOT INITIAL. + lv_index = ls_xf-fontid + 1. + READ TABLE lt_fonts INTO ls_font INDEX lv_index. + IF sy-subrc = 0. + lo_style->font = ls_font. + ENDIF. ENDIF. - ENDIF. *--------------------------------------------------------------------* * §5 - Alignment *--------------------------------------------------------------------* - lo_node_cellxfs_xf_alignment ?= lo_node_cellxfs_xf->find_from_name( 'alignment' ). - IF lo_node_cellxfs_xf_alignment IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_cellxfs_xf_alignment - CHANGING - cp_structure = ls_alignment ). - IF ls_alignment-horizontal IS NOT INITIAL. - lo_style->alignment->horizontal = ls_alignment-horizontal. - ENDIF. + lo_node_cellxfs_xf_alignment ?= lo_node_cellxfs_xf->find_from_name( 'alignment' ). + IF lo_node_cellxfs_xf_alignment IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf_alignment + CHANGING + cp_structure = ls_alignment ). + IF ls_alignment-horizontal IS NOT INITIAL. + lo_style->alignment->horizontal = ls_alignment-horizontal. + ENDIF. - IF ls_alignment-vertical IS NOT INITIAL. - lo_style->alignment->vertical = ls_alignment-vertical. - ENDIF. + IF ls_alignment-vertical IS NOT INITIAL. + lo_style->alignment->vertical = ls_alignment-vertical. + ENDIF. - IF ls_alignment-textrotation IS NOT INITIAL. - lo_style->alignment->textrotation = ls_alignment-textrotation. - ENDIF. + IF ls_alignment-textrotation IS NOT INITIAL. + lo_style->alignment->textrotation = ls_alignment-textrotation. + ENDIF. - IF ls_alignment-wraptext = '1' OR ls_alignment-wraptext = 'true'. - lo_style->alignment->wraptext = abap_true. - ENDIF. + IF ls_alignment-wraptext = '1' OR ls_alignment-wraptext = 'true'. + lo_style->alignment->wraptext = abap_true. + ENDIF. - IF ls_alignment-shrinktofit = '1' OR ls_alignment-shrinktofit = 'true'. - lo_style->alignment->shrinktofit = abap_true. - ENDIF. + IF ls_alignment-shrinktofit = '1' OR ls_alignment-shrinktofit = 'true'. + lo_style->alignment->shrinktofit = abap_true. + ENDIF. - IF ls_alignment-indent IS NOT INITIAL. - lo_style->alignment->indent = ls_alignment-indent. + IF ls_alignment-indent IS NOT INITIAL. + lo_style->alignment->indent = ls_alignment-indent. + ENDIF. ENDIF. - ENDIF. *--------------------------------------------------------------------* * §6 - Protection *--------------------------------------------------------------------* - lo_node_cellxfs_xf_protection ?= lo_node_cellxfs_xf->find_from_name( 'protection' ). - IF lo_node_cellxfs_xf_protection IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_cellxfs_xf_protection - CHANGING - cp_structure = ls_protection ). - IF ls_protection-locked = '1' OR ls_protection-locked = 'true'. - lo_style->protection->locked = zcl_excel_style_protection=>c_protection_locked. - ELSE. - lo_style->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. - ENDIF. + lo_node_cellxfs_xf_protection ?= lo_node_cellxfs_xf->find_from_name( 'protection' ). + IF lo_node_cellxfs_xf_protection IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf_protection + CHANGING + cp_structure = ls_protection ). + IF ls_protection-locked = '1' OR ls_protection-locked = 'true'. + lo_style->protection->locked = zcl_excel_style_protection=>c_protection_locked. + ELSE. + lo_style->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. + ENDIF. - IF ls_protection-hidden = '1' OR ls_protection-hidden = 'true'. - lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_hidden. - ELSE. - lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_unhidden. - ENDIF. + IF ls_protection-hidden = '1' OR ls_protection-hidden = 'true'. + lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_hidden. + ELSE. + lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_unhidden. + ENDIF. - ENDIF. + ENDIF. - INSERT lo_style INTO TABLE me->styles. + INSERT lo_style INTO TABLE me->styles. - lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). + lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). - ENDWHILE. - ENDIF. + ENDWHILE. + ENDIF. -ENDMETHOD. + ENDMETHOD. -method LOAD_STYLE_BORDERS. + METHOD load_style_borders. *--------------------------------------------------------------------* * issue #230 - Pimp my Code @@ -1189,12 +1189,12 @@ method LOAD_STYLE_BORDERS. * renaming variables to indicate what they are used for * adding comments to explain what we are trying to achieve *--------------------------------------------------------------------* - DATA: lo_node_border TYPE REF TO if_ixml_element, - lo_node_bordertype TYPE REF TO if_ixml_element, - lo_node_bordercolor TYPE REF TO if_ixml_element, - lo_cell_border TYPE REF TO zcl_excel_style_borders, - lo_border TYPE REF TO zcl_excel_style_border, - ls_color TYPE t_color. + DATA: lo_node_border TYPE REF TO if_ixml_element, + lo_node_bordertype TYPE REF TO if_ixml_element, + lo_node_bordercolor TYPE REF TO if_ixml_element, + lo_cell_border TYPE REF TO zcl_excel_style_borders, + lo_border TYPE REF TO zcl_excel_style_border, + ls_color TYPE t_color. *--------------------------------------------------------------------* * We need a table of used borderformats to build up our styles @@ -1221,10 +1221,10 @@ method LOAD_STYLE_BORDERS. * * *--------------------------------------------------------------------* - lo_node_border ?= ip_xml->find_from_name( 'border' ). - WHILE lo_node_border IS BOUND. + lo_node_border ?= ip_xml->find_from_name( 'border' ). + WHILE lo_node_border IS BOUND. - CREATE OBJECT lo_cell_border. + CREATE OBJECT lo_cell_border. *--------------------------------------------------------------------* * Diagonal borderlines are formatted the equally. Determine what kind of diagonal borders are present if any @@ -1234,79 +1234,79 @@ method LOAD_STYLE_BORDERS. * DiagonalDown = 2 * DiagonalBoth = 3 *--------------------------------------------------------------------* - IF lo_node_border->get_attribute( 'diagonalDown' ) IS NOT INITIAL. - add zcl_excel_style_borders=>c_diagonal_down to lo_cell_border->diagonal_mode. - ENDIF. + IF lo_node_border->get_attribute( 'diagonalDown' ) IS NOT INITIAL. + ADD zcl_excel_style_borders=>c_diagonal_down TO lo_cell_border->diagonal_mode. + ENDIF. - IF lo_node_border->get_attribute( 'diagonalUp' ) IS NOT INITIAL. - add zcl_excel_style_borders=>c_diagonal_up to lo_cell_border->diagonal_mode. - ENDIF. + IF lo_node_border->get_attribute( 'diagonalUp' ) IS NOT INITIAL. + ADD zcl_excel_style_borders=>c_diagonal_up TO lo_cell_border->diagonal_mode. + ENDIF. - lo_node_bordertype ?= lo_node_border->get_first_child( ). - WHILE lo_node_bordertype IS BOUND. + lo_node_bordertype ?= lo_node_border->get_first_child( ). + WHILE lo_node_bordertype IS BOUND. *--------------------------------------------------------------------* * §1 Determine what kind of border we are talking about *--------------------------------------------------------------------* * Up, down, left, right, diagonal *--------------------------------------------------------------------* - CREATE OBJECT lo_border. + CREATE OBJECT lo_border. - CASE lo_node_bordertype->get_name( ). + CASE lo_node_bordertype->get_name( ). - WHEN 'left'. - lo_cell_border->left = lo_border. + WHEN 'left'. + lo_cell_border->left = lo_border. - WHEN 'right'. - lo_cell_border->right = lo_border. + WHEN 'right'. + lo_cell_border->right = lo_border. - WHEN 'top'. - lo_cell_border->top = lo_border. + WHEN 'top'. + lo_cell_border->top = lo_border. - WHEN 'bottom'. - lo_cell_border->down = lo_border. + WHEN 'bottom'. + lo_cell_border->down = lo_border. - WHEN 'diagonal'. - lo_cell_border->diagonal = lo_border. + WHEN 'diagonal'. + lo_cell_border->diagonal = lo_border. - ENDCASE. + ENDCASE. *--------------------------------------------------------------------* * §2 Read the border-formatting *--------------------------------------------------------------------* - lo_border->border_style = lo_node_bordertype->get_attribute( 'style' ). - lo_node_bordercolor ?= lo_node_bordertype->find_from_name( 'color' ). - IF lo_node_bordercolor IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_bordercolor - CHANGING - cp_structure = ls_color ). + lo_border->border_style = lo_node_bordertype->get_attribute( 'style' ). + lo_node_bordercolor ?= lo_node_bordertype->find_from_name( 'color' ). + IF lo_node_bordercolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_bordercolor + CHANGING + cp_structure = ls_color ). - lo_border->border_color-rgb = ls_color-rgb. - IF ls_color-indexed IS NOT INITIAL. - lo_border->border_color-indexed = ls_color-indexed. - ENDIF. + lo_border->border_color-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_border->border_color-indexed = ls_color-indexed. + ENDIF. - IF ls_color-theme IS NOT INITIAL. - lo_border->border_color-theme = ls_color-theme. + IF ls_color-theme IS NOT INITIAL. + lo_border->border_color-theme = ls_color-theme. + ENDIF. + lo_border->border_color-tint = ls_color-tint. ENDIF. - lo_border->border_color-tint = ls_color-tint. - ENDIF. - lo_node_bordertype ?= lo_node_bordertype->get_next( ). + lo_node_bordertype ?= lo_node_bordertype->get_next( ). - ENDWHILE. + ENDWHILE. - INSERT lo_cell_border INTO TABLE ep_borders. + INSERT lo_cell_border INTO TABLE ep_borders. - lo_node_border ?= lo_node_border->get_next( ). + lo_node_border ?= lo_node_border->get_next( ). - ENDWHILE. + ENDWHILE. - endmethod. + ENDMETHOD. -method LOAD_STYLE_FILLS. + METHOD load_style_fills. *--------------------------------------------------------------------* * ToDos: * 2do§1 Support gradientFill @@ -1322,14 +1322,14 @@ method LOAD_STYLE_FILLS. * adding comments to explain what we are trying to achieve * renaming variables to indicate what they are used for *--------------------------------------------------------------------* - DATA: lv_value TYPE string, - lo_node_fill TYPE REF TO if_ixml_element, - lo_node_fill_child TYPE REF TO if_ixml_element, - lo_node_bgcolor TYPE REF TO if_ixml_element, - lo_node_fgcolor TYPE REF TO if_ixml_element, - lo_node_stop TYPE REF TO if_ixml_element, - lo_fill TYPE REF TO zcl_excel_style_fill, - ls_color TYPE t_color. + DATA: lv_value TYPE string, + lo_node_fill TYPE REF TO if_ixml_element, + lo_node_fill_child TYPE REF TO if_ixml_element, + lo_node_bgcolor TYPE REF TO if_ixml_element, + lo_node_fgcolor TYPE REF TO if_ixml_element, + lo_node_stop TYPE REF TO if_ixml_element, + lo_fill TYPE REF TO zcl_excel_style_fill, + ls_color TYPE t_color. *--------------------------------------------------------------------* * We need a table of used fillformats to build up our styles @@ -1346,83 +1346,83 @@ method LOAD_STYLE_FILLS. * *--------------------------------------------------------------------* - lo_node_fill ?= ip_xml->find_from_name( 'fill' ). - WHILE lo_node_fill IS BOUND. + lo_node_fill ?= ip_xml->find_from_name( 'fill' ). + WHILE lo_node_fill IS BOUND. - CREATE OBJECT lo_fill. - lo_node_fill_child ?= lo_node_fill->get_first_child( ). - lv_value = lo_node_fill_child->get_name( ). - CASE lv_value. + CREATE OBJECT lo_fill. + lo_node_fill_child ?= lo_node_fill->get_first_child( ). + lv_value = lo_node_fill_child->get_name( ). + CASE lv_value. *--------------------------------------------------------------------* * Patternfill *--------------------------------------------------------------------* - WHEN 'patternFill'. - lo_fill->filltype = lo_node_fill_child->get_attribute( 'patternType' ). + WHEN 'patternFill'. + lo_fill->filltype = lo_node_fill_child->get_attribute( 'patternType' ). *--------------------------------------------------------------------* * Patternfill - background color *--------------------------------------------------------------------* - lo_node_bgcolor = lo_node_fill_child->find_from_name( 'bgColor' ). - IF lo_node_bgcolor IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_bgcolor - CHANGING - cp_structure = ls_color ). + lo_node_bgcolor = lo_node_fill_child->find_from_name( 'bgColor' ). + IF lo_node_bgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_bgcolor + CHANGING + cp_structure = ls_color ). - lo_fill->bgcolor-rgb = ls_color-rgb. - IF ls_color-indexed IS NOT INITIAL. - lo_fill->bgcolor-indexed = ls_color-indexed. - ENDIF. + lo_fill->bgcolor-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_fill->bgcolor-indexed = ls_color-indexed. + ENDIF. - IF ls_color-theme IS NOT INITIAL. - lo_fill->bgcolor-theme = ls_color-theme. + IF ls_color-theme IS NOT INITIAL. + lo_fill->bgcolor-theme = ls_color-theme. + ENDIF. + lo_fill->bgcolor-tint = ls_color-tint. ENDIF. - lo_fill->bgcolor-tint = ls_color-tint. - ENDIF. *--------------------------------------------------------------------* * Patternfill - foreground color *--------------------------------------------------------------------* - lo_node_fgcolor = lo_node_fill->find_from_name( 'fgColor' ). - IF lo_node_fgcolor IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_fgcolor - CHANGING - cp_structure = ls_color ). + lo_node_fgcolor = lo_node_fill->find_from_name( 'fgColor' ). + IF lo_node_fgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_fgcolor + CHANGING + cp_structure = ls_color ). - lo_fill->fgcolor-rgb = ls_color-rgb. - IF ls_color-indexed IS NOT INITIAL. - lo_fill->fgcolor-indexed = ls_color-indexed. - ENDIF. + lo_fill->fgcolor-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_fill->fgcolor-indexed = ls_color-indexed. + ENDIF. - IF ls_color-theme IS NOT INITIAL. - lo_fill->fgcolor-theme = ls_color-theme. + IF ls_color-theme IS NOT INITIAL. + lo_fill->fgcolor-theme = ls_color-theme. + ENDIF. + lo_fill->fgcolor-tint = ls_color-tint. ENDIF. - lo_fill->fgcolor-tint = ls_color-tint. - ENDIF. *--------------------------------------------------------------------* * gradientFill *--------------------------------------------------------------------* - WHEN 'gradientFill'. - lo_fill->gradtype-type = lo_node_fill_child->get_attribute( 'type' ). - lo_fill->gradtype-top = lo_node_fill_child->get_attribute( 'top' ). - lo_fill->gradtype-left = lo_node_fill_child->get_attribute( 'left' ). - lo_fill->gradtype-right = lo_node_fill_child->get_attribute( 'right' ). - lo_fill->gradtype-bottom = lo_node_fill_child->get_attribute( 'bottom' ). - lo_fill->gradtype-degree = lo_node_fill_child->get_attribute( 'degree' ). - free lo_node_stop. - lo_node_stop ?= lo_node_fill_child->find_from_name( 'stop' ). - while lo_node_stop is bound. - if lo_fill->gradtype-position1 is initial. - lo_fill->gradtype-position1 = lo_node_stop->get_attribute( 'position' ). - lo_node_bgcolor = lo_node_stop->find_from_name( 'color' ). - IF lo_node_bgcolor IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_bgcolor - CHANGING - cp_structure = ls_color ). + WHEN 'gradientFill'. + lo_fill->gradtype-type = lo_node_fill_child->get_attribute( 'type' ). + lo_fill->gradtype-top = lo_node_fill_child->get_attribute( 'top' ). + lo_fill->gradtype-left = lo_node_fill_child->get_attribute( 'left' ). + lo_fill->gradtype-right = lo_node_fill_child->get_attribute( 'right' ). + lo_fill->gradtype-bottom = lo_node_fill_child->get_attribute( 'bottom' ). + lo_fill->gradtype-degree = lo_node_fill_child->get_attribute( 'degree' ). + FREE lo_node_stop. + lo_node_stop ?= lo_node_fill_child->find_from_name( 'stop' ). + WHILE lo_node_stop IS BOUND. + IF lo_fill->gradtype-position1 IS INITIAL. + lo_fill->gradtype-position1 = lo_node_stop->get_attribute( 'position' ). + lo_node_bgcolor = lo_node_stop->find_from_name( 'color' ). + IF lo_node_bgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_bgcolor + CHANGING + cp_structure = ls_color ). lo_fill->bgcolor-rgb = ls_color-rgb. IF ls_color-indexed IS NOT INITIAL. @@ -1433,50 +1433,50 @@ method LOAD_STYLE_FILLS. lo_fill->bgcolor-theme = ls_color-theme. ENDIF. lo_fill->bgcolor-tint = ls_color-tint. - ENDIF. - elseif lo_fill->gradtype-position2 is initial. - lo_fill->gradtype-position2 = lo_node_stop->get_attribute( 'position' ). - lo_node_fgcolor = lo_node_stop->find_from_name( 'color' ). - IF lo_node_fgcolor IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node_fgcolor - CHANGING - cp_structure = ls_color ). - - lo_fill->fgcolor-rgb = ls_color-rgb. - IF ls_color-indexed IS NOT INITIAL. - lo_fill->fgcolor-indexed = ls_color-indexed. - ENDIF. - - IF ls_color-theme IS NOT INITIAL. - lo_fill->fgcolor-theme = ls_color-theme. ENDIF. - lo_fill->fgcolor-tint = ls_color-tint. - ENDIF. - elseif lo_fill->gradtype-position3 is initial. - lo_fill->gradtype-position3 = lo_node_stop->get_attribute( 'position' ). - "BGColor is filled already with position 1 no need to check again - endif. + ELSEIF lo_fill->gradtype-position2 IS INITIAL. + lo_fill->gradtype-position2 = lo_node_stop->get_attribute( 'position' ). + lo_node_fgcolor = lo_node_stop->find_from_name( 'color' ). + IF lo_node_fgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_fgcolor + CHANGING + cp_structure = ls_color ). - lo_node_stop ?= lo_node_stop->get_next( ). - ENDWHILE. + lo_fill->fgcolor-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_fill->fgcolor-indexed = ls_color-indexed. + ENDIF. - WHEN OTHERS. + IF ls_color-theme IS NOT INITIAL. + lo_fill->fgcolor-theme = ls_color-theme. + ENDIF. + lo_fill->fgcolor-tint = ls_color-tint. + ENDIF. + ELSEIF lo_fill->gradtype-position3 IS INITIAL. + lo_fill->gradtype-position3 = lo_node_stop->get_attribute( 'position' ). + "BGColor is filled already with position 1 no need to check again + ENDIF. - ENDCASE. + lo_node_stop ?= lo_node_stop->get_next( ). + ENDWHILE. + WHEN OTHERS. - INSERT lo_fill INTO TABLE ep_fills. + ENDCASE. - lo_node_fill ?= lo_node_fill->get_next( ). - ENDWHILE. + INSERT lo_fill INTO TABLE ep_fills. + lo_node_fill ?= lo_node_fill->get_next( ). + + ENDWHILE. - endmethod. + ENDMETHOD. -METHOD load_style_fonts. + + METHOD load_style_fonts. *--------------------------------------------------------------------* * issue #230 - Pimp my Code @@ -1487,10 +1487,10 @@ METHOD load_style_fonts. * removing unused variables * adding comments to explain what we are trying to achieve *--------------------------------------------------------------------* - DATA: lo_node_font TYPE REF TO if_ixml_element, - lo_node2 TYPE REF TO if_ixml_element, - lo_font TYPE REF TO zcl_excel_style_font, - ls_color TYPE t_color. + DATA: lo_node_font TYPE REF TO if_ixml_element, + lo_node2 TYPE REF TO if_ixml_element, + lo_font TYPE REF TO zcl_excel_style_font, + ls_color TYPE t_color. *--------------------------------------------------------------------* * We need a table of used fonts to build up our styles @@ -1504,105 +1504,105 @@ METHOD load_style_fonts. * * *--------------------------------------------------------------------* - lo_node_font ?= ip_xml->find_from_name( 'font' ). - WHILE lo_node_font IS BOUND. + lo_node_font ?= ip_xml->find_from_name( 'font' ). + WHILE lo_node_font IS BOUND. - CREATE OBJECT lo_font. + CREATE OBJECT lo_font. *--------------------------------------------------------------------* * Bold *--------------------------------------------------------------------* - IF lo_node_font->find_from_name( 'b' ) IS BOUND. - lo_font->bold = abap_true. - ENDIF. + IF lo_node_font->find_from_name( 'b' ) IS BOUND. + lo_font->bold = abap_true. + ENDIF. *--------------------------------------------------------------------* * Italic *--------------------------------------------------------------------* - IF lo_node_font->find_from_name( 'i' ) IS BOUND. - lo_font->italic = abap_true. - ENDIF. + IF lo_node_font->find_from_name( 'i' ) IS BOUND. + lo_font->italic = abap_true. + ENDIF. *--------------------------------------------------------------------* * Underline *--------------------------------------------------------------------* - lo_node2 = lo_node_font->find_from_name( 'u' ). - IF lo_node2 IS BOUND. - lo_font->underline = abap_true. - lo_font->underline_mode = lo_node2->get_attribute( 'val' ). - ENDIF. + lo_node2 = lo_node_font->find_from_name( 'u' ). + IF lo_node2 IS BOUND. + lo_font->underline = abap_true. + lo_font->underline_mode = lo_node2->get_attribute( 'val' ). + ENDIF. *--------------------------------------------------------------------* * StrikeThrough *--------------------------------------------------------------------* - IF lo_node_font->find_from_name( 'strike' ) IS BOUND. - lo_font->strikethrough = abap_true. - ENDIF. + IF lo_node_font->find_from_name( 'strike' ) IS BOUND. + lo_font->strikethrough = abap_true. + ENDIF. *--------------------------------------------------------------------* * Fontsize *--------------------------------------------------------------------* - lo_node2 = lo_node_font->find_from_name( 'sz' ). - IF lo_node2 IS BOUND. - lo_font->size = lo_node2->get_attribute( 'val' ). - ENDIF. + lo_node2 = lo_node_font->find_from_name( 'sz' ). + IF lo_node2 IS BOUND. + lo_font->size = lo_node2->get_attribute( 'val' ). + ENDIF. *--------------------------------------------------------------------* * Fontname *--------------------------------------------------------------------* - lo_node2 = lo_node_font->find_from_name( 'name' ). - IF lo_node2 IS BOUND. - lo_font->name = lo_node2->get_attribute( 'val' ). - ENDIF. + lo_node2 = lo_node_font->find_from_name( 'name' ). + IF lo_node2 IS BOUND. + lo_font->name = lo_node2->get_attribute( 'val' ). + ENDIF. *--------------------------------------------------------------------* * Fontfamily *--------------------------------------------------------------------* - lo_node2 = lo_node_font->find_from_name( 'family' ). - IF lo_node2 IS BOUND. - lo_font->family = lo_node2->get_attribute( 'val' ). - ENDIF. + lo_node2 = lo_node_font->find_from_name( 'family' ). + IF lo_node2 IS BOUND. + lo_font->family = lo_node2->get_attribute( 'val' ). + ENDIF. *--------------------------------------------------------------------* * Fontscheme *--------------------------------------------------------------------* - lo_node2 = lo_node_font->find_from_name( 'scheme' ). - IF lo_node2 IS BOUND. - lo_font->scheme = lo_node2->get_attribute( 'val' ). - ELSE. - CLEAR lo_font->scheme. - ENDIF. + lo_node2 = lo_node_font->find_from_name( 'scheme' ). + IF lo_node2 IS BOUND. + lo_font->scheme = lo_node2->get_attribute( 'val' ). + ELSE. + CLEAR lo_font->scheme. + ENDIF. *--------------------------------------------------------------------* * Fontcolor *--------------------------------------------------------------------* - lo_node2 = lo_node_font->find_from_name( 'color' ). - IF lo_node2 IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node2 - CHANGING - cp_structure = ls_color ). - lo_font->color-rgb = ls_color-rgb. - IF ls_color-indexed IS NOT INITIAL. - lo_font->color-indexed = ls_color-indexed. - ENDIF. + lo_node2 = lo_node_font->find_from_name( 'color' ). + IF lo_node2 IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node2 + CHANGING + cp_structure = ls_color ). + lo_font->color-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_font->color-indexed = ls_color-indexed. + ENDIF. - IF ls_color-theme IS NOT INITIAL. - lo_font->color-theme = ls_color-theme. + IF ls_color-theme IS NOT INITIAL. + lo_font->color-theme = ls_color-theme. + ENDIF. + lo_font->color-tint = ls_color-tint. ENDIF. - lo_font->color-tint = ls_color-tint. - ENDIF. - INSERT lo_font INTO TABLE ep_fonts. + INSERT lo_font INTO TABLE ep_fonts. - lo_node_font ?= lo_node_font->get_next( ). + lo_node_font ?= lo_node_font->get_next( ). - ENDWHILE. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -METHOD load_style_num_formats. + METHOD load_style_num_formats. *--------------------------------------------------------------------* * ToDos: * 2do§1 Explain gaps in predefined formats @@ -1616,8 +1616,8 @@ METHOD load_style_num_formats. * adding comments to explain what we are trying to achieve * aligning code *--------------------------------------------------------------------* - DATA: lo_node_numfmt TYPE REF TO if_ixml_element, - ls_num_format TYPE ZCL_EXCEL_STYLE_NUMBER_FORMAT=>T_NUM_FORMAT . + DATA: lo_node_numfmt TYPE REF TO if_ixml_element, + ls_num_format TYPE zcl_excel_style_number_format=>t_num_format. *--------------------------------------------------------------------* * We need a table of used numberformats to build up our styles @@ -1629,7 +1629,7 @@ METHOD load_style_num_formats. *--------------------------------------------------------------------* * §1 built-in numberformats *--------------------------------------------------------------------* - ep_num_formats = ZCL_EXCEL_STYLE_NUMBER_FORMAT=>mt_built_in_num_formats. + ep_num_formats = zcl_excel_style_number_format=>mt_built_in_num_formats. *--------------------------------------------------------------------* * §2 Get non-internal numberformats that are found in the file explicitly @@ -1639,35 +1639,35 @@ METHOD load_style_num_formats. * * *--------------------------------------------------------------------* - lo_node_numfmt ?= ip_xml->find_from_name( 'numFmt' ). - WHILE lo_node_numfmt IS BOUND. + lo_node_numfmt ?= ip_xml->find_from_name( 'numFmt' ). + WHILE lo_node_numfmt IS BOUND. - CLEAR ls_num_format. + CLEAR ls_num_format. - CREATE OBJECT ls_num_format-format. - ls_num_format-format->format_code = lo_node_numfmt->get_attribute( 'formatCode' ). - ls_num_format-id = lo_node_numfmt->get_attribute( 'numFmtId' ). - INSERT ls_num_format INTO TABLE ep_num_formats. + CREATE OBJECT ls_num_format-format. + ls_num_format-format->format_code = lo_node_numfmt->get_attribute( 'formatCode' ). + ls_num_format-id = lo_node_numfmt->get_attribute( 'numFmtId' ). + INSERT ls_num_format INTO TABLE ep_num_formats. - lo_node_numfmt ?= lo_node_numfmt->get_next( ). + lo_node_numfmt ?= lo_node_numfmt->get_next( ). - ENDWHILE. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -method load_theme. - data theme type ref to zcl_excel_theme. - data: lo_theme_xml type ref to if_ixml_document. - create object theme. - lo_theme_xml = me->get_ixml_from_zip_archive( iv_path ). - theme->read_theme( io_theme_xml = lo_theme_xml ). - ip_excel->set_theme( io_theme = theme ). -endmethod. + METHOD load_theme. + DATA theme TYPE REF TO zcl_excel_theme. + DATA: lo_theme_xml TYPE REF TO if_ixml_document. + CREATE OBJECT theme. + lo_theme_xml = me->get_ixml_from_zip_archive( iv_path ). + theme->read_theme( io_theme_xml = lo_theme_xml ). + ip_excel->set_theme( io_theme = theme ). + ENDMETHOD. -method LOAD_WORKBOOK. + METHOD load_workbook. *--------------------------------------------------------------------* * ToDos: * 2do§1 Move macro-reading from zcl_excel_reader_xlsm to this class @@ -1702,61 +1702,61 @@ method LOAD_WORKBOOK. * after all worksheets have been read resolve formuae *--------------------------------------------------------------------* - CONSTANTS: lcv_shared_strings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', - lcv_worksheet TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', - lcv_styles TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', - lcv_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', "#EC NEEDED for future incorporation of XLSM-reader - lcv_theme TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + CONSTANTS: lcv_shared_strings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + lcv_worksheet TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + lcv_styles TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + lcv_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', "#EC NEEDED for future incorporation of XLSM-reader + lcv_theme TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', *--------------------------------------------------------------------* * #232: Read worksheetstate hidden/veryHidden - begin data declarations *--------------------------------------------------------------------* - lcv_worksheet_state_hidden TYPE string VALUE 'hidden', - lcv_worksheet_state_veryhidden TYPE string VALUE 'veryHidden'. + lcv_worksheet_state_hidden TYPE string VALUE 'hidden', + lcv_worksheet_state_veryhidden TYPE string VALUE 'veryHidden'. *--------------------------------------------------------------------* * #232: Read worksheetstate hidden/veryHidden - end data declarations *--------------------------------------------------------------------* - DATA: - lv_path TYPE string, - lv_filename TYPE chkfile, - lv_full_filename TYPE string, + DATA: + lv_path TYPE string, + lv_filename TYPE chkfile, + lv_full_filename TYPE string, - lo_rels_workbook TYPE REF TO if_ixml_document, - lt_worksheets TYPE STANDARD TABLE OF t_relationship WITH NON-UNIQUE DEFAULT KEY, - lo_workbook TYPE REF TO if_ixml_document, - lv_workbook_index TYPE i, - lv_worksheet_path TYPE string, - ls_sheet TYPE t_sheet, + lo_rels_workbook TYPE REF TO if_ixml_document, + lt_worksheets TYPE STANDARD TABLE OF t_relationship WITH NON-UNIQUE DEFAULT KEY, + lo_workbook TYPE REF TO if_ixml_document, + lv_workbook_index TYPE i, + lv_worksheet_path TYPE string, + ls_sheet TYPE t_sheet, - lo_node TYPE REF TO if_ixml_element, - ls_relationship TYPE t_relationship, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_range TYPE REF TO zcl_excel_range, - lv_worksheet_title TYPE zexcel_sheet_title, - lv_tabix TYPE sytabix, " #235 - repeat rows/cols. Needed to link defined name to correct worksheet + lo_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lv_worksheet_title TYPE zexcel_sheet_title, + lv_tabix TYPE sytabix, " #235 - repeat rows/cols. Needed to link defined name to correct worksheet - ls_range TYPE t_range, - lv_range_value TYPE zexcel_range_value, + ls_range TYPE t_range, + lv_range_value TYPE zexcel_range_value, *--------------------------------------------------------------------* * #229: Set active worksheet - begin data declarations *--------------------------------------------------------------------* - lv_active_sheet_string TYPE string, - lv_zexcel_active_worksheet TYPE zexcel_active_worksheet, + lv_active_sheet_string TYPE string, + lv_zexcel_active_worksheet TYPE zexcel_active_worksheet, *--------------------------------------------------------------------* * issue#235 - repeat rows/columns - added autofilter support while changing this section - lo_autofilter TYPE REF TO zcl_excel_autofilter, - ls_area TYPE zexcel_s_autofilter_area, - lv_col_start_alpha TYPE zexcel_cell_column_alpha, - lv_col_end_alpha TYPE zexcel_cell_column_alpha, - lv_row_start TYPE zexcel_cell_row, - lv_row_end TYPE zexcel_cell_row , - lv_regex TYPE string, - lv_range_value_1 TYPE zexcel_range_value, - lv_range_value_2 TYPE zexcel_range_value. + lo_autofilter TYPE REF TO zcl_excel_autofilter, + ls_area TYPE zexcel_s_autofilter_area, + lv_col_start_alpha TYPE zexcel_cell_column_alpha, + lv_col_end_alpha TYPE zexcel_cell_column_alpha, + lv_row_start TYPE zexcel_cell_row, + lv_row_end TYPE zexcel_cell_row, + lv_regex TYPE string, + lv_range_value_1 TYPE zexcel_range_value, + lv_range_value_2 TYPE zexcel_range_value. *--------------------------------------------------------------------* * #229: Set active worksheet - end data declarations *--------------------------------------------------------------------* - FIELD-SYMBOLS: TYPE t_relationship. + FIELD-SYMBOLS: TYPE t_relationship. *--------------------------------------------------------------------* @@ -1815,37 +1815,37 @@ method LOAD_WORKBOOK. * *--------------------------------------------------------------------* - CLEAR me->mt_ref_formulae. " ins issue#284 + CLEAR me->mt_ref_formulae. " ins issue#284 *--------------------------------------------------------------------* * §1 Get the position of files related to this workbook * Entry into this method is with the filename of the workbook *--------------------------------------------------------------------* - CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' - EXPORTING - full_name = iv_workbook_full_filename - IMPORTING - stripped_name = lv_filename - file_path = lv_path. + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = iv_workbook_full_filename + IMPORTING + stripped_name = lv_filename + file_path = lv_path. - CONCATENATE lv_path '_rels/' lv_filename '.rels' - INTO lv_full_filename. - lo_rels_workbook = me->get_ixml_from_zip_archive( lv_full_filename ). + CONCATENATE lv_path '_rels/' lv_filename '.rels' + INTO lv_full_filename. + lo_rels_workbook = me->get_ixml_from_zip_archive( lv_full_filename ). - lo_node ?= lo_rels_workbook->find_from_name( 'Relationship' ). "#EC NOTEXT - WHILE lo_node IS BOUND. + lo_node ?= lo_rels_workbook->find_from_name( 'Relationship' ). "#EC NOTEXT + WHILE lo_node IS BOUND. - me->fill_struct_from_attributes( EXPORTING ip_element = lo_node CHANGING cp_structure = ls_relationship ). + me->fill_struct_from_attributes( EXPORTING ip_element = lo_node CHANGING cp_structure = ls_relationship ). - CASE ls_relationship-type. + CASE ls_relationship-type. *--------------------------------------------------------------------* * §2.1 Shared strings - This holds all strings that are used in all worksheets *--------------------------------------------------------------------* - WHEN lcv_shared_strings. - CONCATENATE lv_path ls_relationship-target - INTO lv_full_filename. - me->load_shared_strings( lv_full_filename ). + WHEN lcv_shared_strings. + CONCATENATE lv_path ls_relationship-target + INTO lv_full_filename. + me->load_shared_strings( lv_full_filename ). *--------------------------------------------------------------------* * §2.3 Worksheets @@ -1853,116 +1853,116 @@ method LOAD_WORKBOOK. * Shared strings and styles have to be present before we can start with creating the worksheets * thus we only store this information for use when parsing the workbookfile for sheetinformations *--------------------------------------------------------------------* - WHEN lcv_worksheet. - APPEND ls_relationship TO lt_worksheets. + WHEN lcv_worksheet. + APPEND ls_relationship TO lt_worksheets. *--------------------------------------------------------------------* * §2.2 Styles - This holds the styles that are used in all worksheets *--------------------------------------------------------------------* - WHEN lcv_styles. - CONCATENATE lv_path ls_relationship-target - INTO lv_full_filename. - me->load_styles( ip_path = lv_full_filename - ip_excel = io_excel ). - me->load_dxf_styles( iv_path = lv_full_filename - io_excel = io_excel ). - when lcv_theme. - CONCATENATE lv_path ls_relationship-target - INTO lv_full_filename. - me->load_theme( - exporting - iv_path = lv_full_filename - ip_excel = io_excel " Excel creator - ). - WHEN OTHERS. + WHEN lcv_styles. + CONCATENATE lv_path ls_relationship-target + INTO lv_full_filename. + me->load_styles( ip_path = lv_full_filename + ip_excel = io_excel ). + me->load_dxf_styles( iv_path = lv_full_filename + io_excel = io_excel ). + WHEN lcv_theme. + CONCATENATE lv_path ls_relationship-target + INTO lv_full_filename. + me->load_theme( + EXPORTING + iv_path = lv_full_filename + ip_excel = io_excel " Excel creator + ). + WHEN OTHERS. - ENDCASE. + ENDCASE. - lo_node ?= lo_node->get_next( ). + lo_node ?= lo_node->get_next( ). - ENDWHILE. + ENDWHILE. *--------------------------------------------------------------------* * §3 Some information held in the workbookfile *--------------------------------------------------------------------* - 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 *--------------------------------------------------------------------* - lo_node ?= lo_workbook->find_from_name( 'sheet' ). - lv_workbook_index = 1. - WHILE lo_node IS BOUND. + lo_node ?= lo_workbook->find_from_name( 'sheet' ). + lv_workbook_index = 1. + WHILE lo_node IS BOUND. - me->fill_struct_from_attributes( EXPORTING - ip_element = lo_node - CHANGING - cp_structure = ls_sheet ). + me->fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_sheet ). *--------------------------------------------------------------------* * Create new worksheet in workbook with correct name *--------------------------------------------------------------------* - lv_worksheet_title = ls_sheet-name. - IF lv_workbook_index = 1. " First sheet has been added automatically by creating io_excel - lo_worksheet = io_excel->get_active_worksheet( ). - lo_worksheet->set_title( lv_worksheet_title ). - ELSE. - lo_worksheet = io_excel->add_new_worksheet( lv_worksheet_title ). - ENDIF. + lv_worksheet_title = ls_sheet-name. + IF lv_workbook_index = 1. " First sheet has been added automatically by creating io_excel + lo_worksheet = io_excel->get_active_worksheet( ). + lo_worksheet->set_title( lv_worksheet_title ). + ELSE. + lo_worksheet = io_excel->add_new_worksheet( lv_worksheet_title ). + ENDIF. *--------------------------------------------------------------------* * #232 - Read worksheetstate hidden/veryHidden - begin of coding * Set status hidden if necessary *--------------------------------------------------------------------* - CASE ls_sheet-state. + CASE ls_sheet-state. - WHEN lcv_worksheet_state_hidden. - lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_hidden. + WHEN lcv_worksheet_state_hidden. + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_hidden. - WHEN lcv_worksheet_state_veryhidden. - lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_veryhidden. + WHEN lcv_worksheet_state_veryhidden. + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_veryhidden. - ENDCASE. + ENDCASE. *--------------------------------------------------------------------* * #232 - Read worksheetstate hidden/veryHidden - end of coding *--------------------------------------------------------------------* *--------------------------------------------------------------------* * Load worksheetdata *--------------------------------------------------------------------* - READ TABLE lt_worksheets ASSIGNING WITH KEY id = ls_sheet-id. - IF sy-subrc = 0. - -sheetid = ls_sheet-sheetid. "ins #235 - repeat rows/cols - needed to identify correct sheet - CONCATENATE lv_path -target - INTO lv_worksheet_path. - me->load_worksheet( ip_path = lv_worksheet_path - io_worksheet = lo_worksheet ). - -worksheet = lo_worksheet. - ENDIF. + READ TABLE lt_worksheets ASSIGNING WITH KEY id = ls_sheet-id. + IF sy-subrc = 0. + -sheetid = ls_sheet-sheetid. "ins #235 - repeat rows/cols - needed to identify correct sheet + CONCATENATE lv_path -target + INTO lv_worksheet_path. + me->load_worksheet( ip_path = lv_worksheet_path + io_worksheet = lo_worksheet ). + -worksheet = lo_worksheet. + ENDIF. - lo_node ?= lo_node->get_next( ). - ADD 1 TO lv_workbook_index. + lo_node ?= lo_node->get_next( ). + ADD 1 TO lv_workbook_index. - ENDWHILE. - SORT lt_worksheets BY sheetid. " needed for localSheetid -referencing + ENDWHILE. + SORT lt_worksheets BY sheetid. " needed for localSheetid -referencing *--------------------------------------------------------------------* * #284: Set active worksheet - Resolve referenced formulae to * explicit formulae those cells *--------------------------------------------------------------------* - me->resolve_referenced_formulae( ). - " ins issue#284 + me->resolve_referenced_formulae( ). + " ins issue#284 *--------------------------------------------------------------------* * #229: Set active worksheet - begin coding * §3.2 Active worksheet *--------------------------------------------------------------------* - lv_zexcel_active_worksheet = 1. " First sheet = active sheet if nothing else specified. - lo_node ?= lo_workbook->find_from_name( 'workbookView' ). - IF lo_node IS BOUND. - lv_active_sheet_string = lo_node->get_attribute( 'activeTab' ). - TRY. - lv_zexcel_active_worksheet = lv_active_sheet_string + 1. " EXCEL numbers the sheets from 0 onwards --> index into worksheettable is increased by one - CATCH cx_sy_conversion_error. "#EC NO_HANDLER - error here --> just use the default 1st sheet - ENDTRY. - ENDIF. - io_excel->set_active_sheet_index( lv_zexcel_active_worksheet ). + lv_zexcel_active_worksheet = 1. " First sheet = active sheet if nothing else specified. + lo_node ?= lo_workbook->find_from_name( 'workbookView' ). + IF lo_node IS BOUND. + lv_active_sheet_string = lo_node->get_attribute( 'activeTab' ). + TRY. + lv_zexcel_active_worksheet = lv_active_sheet_string + 1. " EXCEL numbers the sheets from 0 onwards --> index into worksheettable is increased by one + CATCH cx_sy_conversion_error. "#EC NO_HANDLER - error here --> just use the default 1st sheet + ENDTRY. + ENDIF. + io_excel->set_active_sheet_index( lv_zexcel_active_worksheet ). *--------------------------------------------------------------------* * #229: Set active worksheet - end coding *--------------------------------------------------------------------* @@ -1977,31 +1977,31 @@ method LOAD_WORKBOOK. * - repeat rows/cols - sheetlocal ( special range ) * *--------------------------------------------------------------------* - lo_node ?= lo_workbook->find_from_name( 'definedName' ). - WHILE lo_node IS BOUND. + lo_node ?= lo_workbook->find_from_name( 'definedName' ). + WHILE lo_node IS BOUND. - CLEAR lo_range. "ins issue #235 - repeat rows/cols - me->fill_struct_from_attributes( EXPORTING - ip_element = lo_node - CHANGING - cp_structure = ls_range ). - lv_range_value = lo_node->get_value( ). + CLEAR lo_range. "ins issue #235 - repeat rows/cols + me->fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_range ). + 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 WITH KEY id = ls_range-localsheetid. "del issue #235 - repeat rows/cols " issue #163+ * lo_range = -worksheet->add_new_range( ). "del issue #235 - repeat rows/cols " issue #163+ *--------------------------------------------------------------------* * issue#235 - repeat rows/columns - begin *--------------------------------------------------------------------* - lv_tabix = ls_range-localsheetid + 1. - READ TABLE lt_worksheets ASSIGNING INDEX lv_tabix. - IF sy-subrc = 0. - CASE ls_range-name. + lv_tabix = ls_range-localsheetid + 1. + READ TABLE lt_worksheets ASSIGNING INDEX lv_tabix. + IF sy-subrc = 0. + CASE ls_range-name. *--------------------------------------------------------------------* * insert autofilters *--------------------------------------------------------------------* - WHEN zcl_excel_autofilters=>c_autofilter. + WHEN zcl_excel_autofilters=>c_autofilter. " begin Dennis Schaaf TRY. zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value @@ -2021,86 +2021,86 @@ method LOAD_WORKBOOK. *--------------------------------------------------------------------* * repeat print rows/columns *--------------------------------------------------------------------* - WHEN zif_excel_sheet_printsettings=>gcv_print_title_name. - lo_range = -worksheet->add_new_range( ). + WHEN zif_excel_sheet_printsettings=>gcv_print_title_name. + lo_range = -worksheet->add_new_range( ). *--------------------------------------------------------------------* * This might be a temporary solution. Maybe ranges get be reworked * to support areas consisting of multiple rectangles * But for now just split the range into row and columnpart *--------------------------------------------------------------------* - CLEAR:lv_range_value_1, - lv_range_value_2. - IF lv_range_value IS INITIAL. + CLEAR:lv_range_value_1, + lv_range_value_2. + IF lv_range_value IS INITIAL. * Empty --> nothing to do - ELSE. - IF lv_range_value(1) = `'`. " Escaped - lv_regex = `^('[^']*')+![^,]*,`. ELSE. - lv_regex = `^[^!]*![^,]*,`. - ENDIF. + IF lv_range_value(1) = `'`. " Escaped + lv_regex = `^('[^']*')+![^,]*,`. + ELSE. + lv_regex = `^[^!]*![^,]*,`. + ENDIF. * Split into two ranges if necessary - FIND REGEX lv_regex IN lv_range_value MATCH LENGTH sy-fdpos. - IF sy-subrc = 0 AND sy-fdpos > 0. - lv_range_value_2 = lv_range_value+sy-fdpos. - SUBTRACT 1 FROM sy-fdpos. - lv_range_value_1 = lv_range_value(sy-fdpos). - ELSE. - lv_range_value_1 = lv_range_value. + FIND REGEX lv_regex IN lv_range_value MATCH LENGTH sy-fdpos. + IF sy-subrc = 0 AND sy-fdpos > 0. + lv_range_value_2 = lv_range_value+sy-fdpos. + SUBTRACT 1 FROM sy-fdpos. + lv_range_value_1 = lv_range_value(sy-fdpos). + ELSE. + lv_range_value_1 = lv_range_value. + ENDIF. ENDIF. - ENDIF. * 1st range - zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1 - IMPORTING e_column_start = lv_col_start_alpha - e_column_end = lv_col_end_alpha - e_row_start = lv_row_start - e_row_end = lv_row_end ). - IF lv_col_start_alpha IS NOT INITIAL. - -worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha - iv_columns_to = lv_col_end_alpha ). - ENDIF. - IF lv_row_start IS NOT INITIAL. - -worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start - iv_rows_to = lv_row_end ). - ENDIF. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1 + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). + IF lv_col_start_alpha IS NOT INITIAL. + -worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha + iv_columns_to = lv_col_end_alpha ). + ENDIF. + IF lv_row_start IS NOT INITIAL. + -worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start + iv_rows_to = lv_row_end ). + ENDIF. * 2nd range - zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2 - IMPORTING e_column_start = lv_col_start_alpha - e_column_end = lv_col_end_alpha - e_row_start = lv_row_start - e_row_end = lv_row_end ). - IF lv_col_start_alpha IS NOT INITIAL. - -worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha - iv_columns_to = lv_col_end_alpha ). - ENDIF. - IF lv_row_start IS NOT INITIAL. - -worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start - iv_rows_to = lv_row_end ). - ENDIF. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2 + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). + IF lv_col_start_alpha IS NOT INITIAL. + -worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha + iv_columns_to = lv_col_end_alpha ). + ENDIF. + IF lv_row_start IS NOT INITIAL. + -worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start + iv_rows_to = lv_row_end ). + ENDIF. - WHEN OTHERS. + WHEN OTHERS. - ENDCASE. - ENDIF. + ENDCASE. + ENDIF. *--------------------------------------------------------------------* * issue#235 - repeat rows/columns - end *--------------------------------------------------------------------* - ELSE. " issue #163+ - lo_range = io_excel->add_new_range( ). " issue #163+ - ENDIF. " issue #163+ + ELSE. " issue #163+ + lo_range = io_excel->add_new_range( ). " 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 - lo_range->name = ls_range-name. - lo_range->set_range_value( lv_range_value ). - ENDIF. "ins issue #235 - repeat rows/cols - lo_node ?= lo_node->get_next( ). + IF lo_range IS BOUND. "ins issue #235 - repeat rows/cols + lo_range->name = ls_range-name. + lo_range->set_range_value( lv_range_value ). + ENDIF. "ins issue #235 - repeat rows/cols + lo_node ?= lo_node->get_next( ). - ENDWHILE. + ENDWHILE. - endmethod. + ENDMETHOD. -METHOD load_worksheet. + METHOD load_worksheet. *--------------------------------------------------------------------* * ToDos: * 2do§1 Header/footer @@ -2123,195 +2123,195 @@ METHOD load_worksheet. * by extracting the code that needed correction into * own method ( load_worksheet_pagemargins ) *--------------------------------------------------------------------* - TYPES: BEGIN OF lty_cell, - r TYPE string, - t TYPE string, - s TYPE string, - END OF lty_cell. - - TYPES: BEGIN OF lty_column, - min TYPE string, - max TYPE string, - width TYPE float, - customwidth TYPE string, - style TYPE string, - bestfit TYPE string, - collapsed TYPE string, - hidden TYPE string, - outlinelevel TYPE string, - END OF lty_column. - - TYPES: BEGIN OF lty_sheetview, - showgridlines TYPE zexcel_show_gridlines, - tabselected TYPE string, - zoomscalenormal TYPE string, - workbookviewid TYPE string, - showrowcolheaders TYPE string, - END OF lty_sheetview. - - TYPES: BEGIN OF lty_mergecell, - ref TYPE string, - END OF lty_mergecell. - - TYPES: BEGIN OF lty_row, - r TYPE string, - customheight TYPE string, - ht TYPE float, - spans TYPE string, - thickbot TYPE string, - customformat TYPE string, - thicktop TYPE string, - collapsed TYPE string, - hidden TYPE string, - outlinelevel TYPE string, - END OF lty_row. - - TYPES: BEGIN OF lty_page_setup, - id TYPE string, - orientation TYPE string, - scale TYPE string, - fittoheight TYPE string, - fittowidth TYPE string, - papersize TYPE string, - END OF lty_page_setup. - - TYPES: BEGIN OF lty_sheetformatpr, - customheight TYPE string, - defaultrowheight TYPE string, - customwidth TYPE string, - defaultcolwidth TYPE string, - END OF lty_sheetformatpr. - - TYPES: BEGIN OF lty_headerfooter, - alignwithmargins TYPE string, - differentoddeven TYPE string, - END OF lty_headerfooter. - - TYPES: BEGIN OF lty_tabcolor, - rgb TYPE string, - theme TYPE string, - END OF lty_tabcolor. - - TYPES: BEGIN OF lty_datavalidation, - type TYPE zexcel_data_val_type, - allowblank TYPE flag, - showinputmessage TYPE flag, - showerrormessage TYPE flag, - showdropdown TYPE flag, - operator TYPE zexcel_data_val_operator, - formula1 TYPE zexcel_validation_formula1, - formula2 TYPE zexcel_validation_formula1, - sqref TYPE string, - cell_column TYPE zexcel_cell_column_alpha, - cell_column_to TYPE zexcel_cell_column_alpha, - cell_row TYPE zexcel_cell_row, - cell_row_to TYPE zexcel_cell_row, - error TYPE string, - errortitle TYPE string, - prompt TYPE string, - prompttitle TYPE string, - errorstyle TYPE zexcel_data_val_error_style, - END OF lty_datavalidation. - - - - CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', - lc_xml_attr_true_int TYPE string VALUE '1', - lc_rel_drawing TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', - lc_rel_hyperlink TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', - lc_rel_printer TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings'. - - DATA: lo_ixml_worksheet TYPE REF TO if_ixml_document, - lo_ixml_cells TYPE REF TO if_ixml_node_collection, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml_iterator2 TYPE REF TO if_ixml_node_iterator, - lo_ixml_row_elem TYPE REF TO if_ixml_element, - lo_ixml_cell_elem TYPE REF TO if_ixml_element, - ls_cell TYPE lty_cell, - lv_index TYPE i, - lo_ixml_value_elem TYPE REF TO if_ixml_element, - lo_ixml_formula_elem TYPE REF TO if_ixml_element, - lv_cell_value TYPE zexcel_cell_value, - lv_cell_formula TYPE zexcel_cell_formula, - lv_cell_column TYPE zexcel_cell_column_alpha, - lv_cell_row TYPE zexcel_cell_row, - lo_excel_style TYPE REF TO zcl_excel_style, - lv_style_guid TYPE zexcel_cell_style, - - lo_ixml_imension_elem TYPE REF TO if_ixml_element, "#+234 - lv_dimension_range TYPE string, "#+234 - - lo_ixml_sheetview_elem TYPE REF TO if_ixml_element, - ls_sheetview TYPE lty_sheetview, - lo_ixml_pane_elem TYPE REF TO if_ixml_element, - ls_excel_pane TYPE zexcel_pane, - lv_pane_cell_row TYPE zexcel_cell_row, - lv_pane_cell_col_a TYPE zexcel_cell_column_alpha, - lv_pane_cell_col TYPE zexcel_cell_column, - - lo_ixml_mergecells TYPE REF TO if_ixml_node_collection, - lo_ixml_mergecell_elem TYPE REF TO if_ixml_element, - ls_mergecell TYPE lty_mergecell, - lv_merge_column_start TYPE zexcel_cell_column_alpha, - lv_merge_column_end TYPE zexcel_cell_column_alpha, - lv_merge_row_start TYPE zexcel_cell_row, - lv_merge_row_end TYPE zexcel_cell_row, - - lo_ixml_sheetformatpr_elem TYPE REF TO if_ixml_element, - ls_sheetformatpr TYPE lty_sheetformatpr, - lv_height TYPE float, - - lo_ixml_headerfooter_elem TYPE REF TO if_ixml_element, - ls_headerfooter TYPE lty_headerfooter, - ls_odd_header TYPE zexcel_s_worksheet_head_foot, - ls_odd_footer TYPE zexcel_s_worksheet_head_foot, - ls_even_header TYPE zexcel_s_worksheet_head_foot, - ls_even_footer TYPE zexcel_s_worksheet_head_foot, - lo_ixml_hf_value_elem TYPE REF TO if_ixml_element, - - lo_ixml_pagesetup_elem TYPE REF TO if_ixml_element, - lo_ixml_sheetpr TYPE REF TO if_ixml_element, - lv_fit_to_page TYPE string, - ls_pagesetup TYPE lty_page_setup, - - lo_ixml_columns TYPE REF TO if_ixml_node_collection, - lo_ixml_column_elem TYPE REF TO if_ixml_element, - ls_column TYPE lty_column, - lv_column_alpha TYPE zexcel_cell_column_alpha, - lo_column TYPE REF TO zcl_excel_column, - lv_outline_level TYPE int4, - - lo_ixml_tabcolor TYPE REF TO if_ixml_element, - ls_tabcolor TYPE lty_tabcolor, - ls_excel_s_tabcolor TYPE zexcel_s_tabcolor, - - lo_ixml_rows TYPE REF TO if_ixml_node_collection, - ls_row TYPE lty_row, - lv_max_col TYPE i, "for use with SPANS element + TYPES: BEGIN OF lty_cell, + r TYPE string, + t TYPE string, + s TYPE string, + END OF lty_cell. + + TYPES: BEGIN OF lty_column, + min TYPE string, + max TYPE string, + width TYPE float, + customwidth TYPE string, + style TYPE string, + bestfit TYPE string, + collapsed TYPE string, + hidden TYPE string, + outlinelevel TYPE string, + END OF lty_column. + + TYPES: BEGIN OF lty_sheetview, + showgridlines TYPE zexcel_show_gridlines, + tabselected TYPE string, + zoomscalenormal TYPE string, + workbookviewid TYPE string, + showrowcolheaders TYPE string, + END OF lty_sheetview. + + TYPES: BEGIN OF lty_mergecell, + ref TYPE string, + END OF lty_mergecell. + + TYPES: BEGIN OF lty_row, + r TYPE string, + customheight TYPE string, + ht TYPE float, + spans TYPE string, + thickbot TYPE string, + customformat TYPE string, + thicktop TYPE string, + collapsed TYPE string, + hidden TYPE string, + outlinelevel TYPE string, + END OF lty_row. + + TYPES: BEGIN OF lty_page_setup, + id TYPE string, + orientation TYPE string, + scale TYPE string, + fittoheight TYPE string, + fittowidth TYPE string, + papersize TYPE string, + END OF lty_page_setup. + + TYPES: BEGIN OF lty_sheetformatpr, + customheight TYPE string, + defaultrowheight TYPE string, + customwidth TYPE string, + defaultcolwidth TYPE string, + END OF lty_sheetformatpr. + + TYPES: BEGIN OF lty_headerfooter, + alignwithmargins TYPE string, + differentoddeven TYPE string, + END OF lty_headerfooter. + + TYPES: BEGIN OF lty_tabcolor, + rgb TYPE string, + theme TYPE string, + END OF lty_tabcolor. + + TYPES: BEGIN OF lty_datavalidation, + type TYPE zexcel_data_val_type, + allowblank TYPE flag, + showinputmessage TYPE flag, + showerrormessage TYPE flag, + showdropdown TYPE flag, + operator TYPE zexcel_data_val_operator, + formula1 TYPE zexcel_validation_formula1, + formula2 TYPE zexcel_validation_formula1, + sqref TYPE string, + cell_column TYPE zexcel_cell_column_alpha, + cell_column_to TYPE zexcel_cell_column_alpha, + cell_row TYPE zexcel_cell_row, + cell_row_to TYPE zexcel_cell_row, + error TYPE string, + errortitle TYPE string, + prompt TYPE string, + prompttitle TYPE string, + errorstyle TYPE zexcel_data_val_error_style, + END OF lty_datavalidation. + + + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1', + lc_rel_drawing TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + lc_rel_hyperlink TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', + lc_rel_printer TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings'. + + DATA: lo_ixml_worksheet TYPE REF TO if_ixml_document, + lo_ixml_cells TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml_iterator2 TYPE REF TO if_ixml_node_iterator, + lo_ixml_row_elem TYPE REF TO if_ixml_element, + lo_ixml_cell_elem TYPE REF TO if_ixml_element, + ls_cell TYPE lty_cell, + lv_index TYPE i, + lo_ixml_value_elem TYPE REF TO if_ixml_element, + lo_ixml_formula_elem TYPE REF TO if_ixml_element, + lv_cell_value TYPE zexcel_cell_value, + lv_cell_formula TYPE zexcel_cell_formula, + lv_cell_column TYPE zexcel_cell_column_alpha, + lv_cell_row TYPE zexcel_cell_row, + lo_excel_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style, + + lo_ixml_imension_elem TYPE REF TO if_ixml_element, "#+234 + lv_dimension_range TYPE string, "#+234 + + lo_ixml_sheetview_elem TYPE REF TO if_ixml_element, + ls_sheetview TYPE lty_sheetview, + lo_ixml_pane_elem TYPE REF TO if_ixml_element, + ls_excel_pane TYPE zexcel_pane, + lv_pane_cell_row TYPE zexcel_cell_row, + lv_pane_cell_col_a TYPE zexcel_cell_column_alpha, + lv_pane_cell_col TYPE zexcel_cell_column, + + lo_ixml_mergecells TYPE REF TO if_ixml_node_collection, + lo_ixml_mergecell_elem TYPE REF TO if_ixml_element, + ls_mergecell TYPE lty_mergecell, + lv_merge_column_start TYPE zexcel_cell_column_alpha, + lv_merge_column_end TYPE zexcel_cell_column_alpha, + lv_merge_row_start TYPE zexcel_cell_row, + lv_merge_row_end TYPE zexcel_cell_row, + + lo_ixml_sheetformatpr_elem TYPE REF TO if_ixml_element, + ls_sheetformatpr TYPE lty_sheetformatpr, + lv_height TYPE float, + + lo_ixml_headerfooter_elem TYPE REF TO if_ixml_element, + ls_headerfooter TYPE lty_headerfooter, + ls_odd_header TYPE zexcel_s_worksheet_head_foot, + ls_odd_footer TYPE zexcel_s_worksheet_head_foot, + ls_even_header TYPE zexcel_s_worksheet_head_foot, + ls_even_footer TYPE zexcel_s_worksheet_head_foot, + lo_ixml_hf_value_elem TYPE REF TO if_ixml_element, + + lo_ixml_pagesetup_elem TYPE REF TO if_ixml_element, + lo_ixml_sheetpr TYPE REF TO if_ixml_element, + lv_fit_to_page TYPE string, + ls_pagesetup TYPE lty_page_setup, + + lo_ixml_columns TYPE REF TO if_ixml_node_collection, + lo_ixml_column_elem TYPE REF TO if_ixml_element, + ls_column TYPE lty_column, + lv_column_alpha TYPE zexcel_cell_column_alpha, + lo_column TYPE REF TO zcl_excel_column, + lv_outline_level TYPE int4, + + lo_ixml_tabcolor TYPE REF TO if_ixml_element, + ls_tabcolor TYPE lty_tabcolor, + ls_excel_s_tabcolor TYPE zexcel_s_tabcolor, + + lo_ixml_rows TYPE REF TO if_ixml_node_collection, + ls_row TYPE lty_row, + lv_max_col TYPE i, "for use with SPANS element * lv_min_col TYPE i, "for use with SPANS element " not in use currently - lv_max_col_s TYPE char10, "for use with SPANS element - lv_min_col_s TYPE char10, "for use with SPANS element - lo_row TYPE REF TO zcl_excel_row, + lv_max_col_s TYPE char10, "for use with SPANS element + lv_min_col_s TYPE char10, "for use with SPANS element + lo_row TYPE REF TO zcl_excel_row, *--- End of current code aligning ------------------------------------------------------------------- - lv_path TYPE string, - lo_ixml_node TYPE REF TO if_ixml_element, - ls_relationship TYPE t_relationship, - lo_ixml_rels_worksheet TYPE REF TO if_ixml_document, - lv_rels_worksheet_path TYPE string, - lv_stripped_name TYPE chkfile, - lv_dirname TYPE string, + lv_path TYPE string, + lo_ixml_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship, + lo_ixml_rels_worksheet TYPE REF TO if_ixml_document, + lv_rels_worksheet_path TYPE string, + lv_stripped_name TYPE chkfile, + lv_dirname TYPE string, - lt_external_hyperlinks TYPE gtt_external_hyperlinks, - ls_external_hyperlink LIKE LINE OF lt_external_hyperlinks, + lt_external_hyperlinks TYPE gtt_external_hyperlinks, + ls_external_hyperlink LIKE LINE OF lt_external_hyperlinks, - lo_ixml_datavalidations TYPE REF TO if_ixml_node_collection, - lo_ixml_datavalidation_elem TYPE REF TO if_ixml_element, - ls_datavalidation TYPE lty_datavalidation, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lv_datavalidation_range TYPE string, - lt_datavalidation_range TYPE TABLE OF string, - ex TYPE REF TO cx_root. + lo_ixml_datavalidations TYPE REF TO if_ixml_node_collection, + lo_ixml_datavalidation_elem TYPE REF TO if_ixml_element, + ls_datavalidation TYPE lty_datavalidation, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lv_datavalidation_range TYPE string, + lt_datavalidation_range TYPE TABLE OF string, + ex TYPE REF TO cx_root. *--------------------------------------------------------------------* * §2 We need to read the the file "\\_rels\.rels" because it tells @@ -2328,88 +2328,88 @@ METHOD load_worksheet. * |--> worksheets *--------------------------------------------------------------------* - " Read Workbook Relationships - CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' - EXPORTING - full_name = ip_path - IMPORTING - stripped_name = lv_stripped_name - file_path = lv_dirname. - CONCATENATE lv_dirname '_rels/' lv_stripped_name '.rels' - INTO lv_rels_worksheet_path. - TRY. " +#222 _rels/xxx.rels might not be present. If not found there can be no drawings --> just ignore this section - lo_ixml_rels_worksheet = me->get_ixml_from_zip_archive( lv_rels_worksheet_path ). - lo_ixml_node ?= lo_ixml_rels_worksheet->find_from_name( 'Relationship' ). - CATCH zcx_excel. "#EC NO_HANDLER +#222 - " +#222 No errorhandling necessary - node will be unbound if error occurs - ENDTRY. " +#222 - WHILE lo_ixml_node IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_node - CHANGING - cp_structure = ls_relationship ). - CONCATENATE lv_dirname ls_relationship-target INTO lv_path. - lv_path = resolve_path( lv_path ). - - CASE ls_relationship-type. - WHEN lc_rel_drawing. - " Read Drawings + " Read Workbook Relationships + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = ip_path + IMPORTING + stripped_name = lv_stripped_name + file_path = lv_dirname. + CONCATENATE lv_dirname '_rels/' lv_stripped_name '.rels' + INTO lv_rels_worksheet_path. + TRY. " +#222 _rels/xxx.rels might not be present. If not found there can be no drawings --> just ignore this section + lo_ixml_rels_worksheet = me->get_ixml_from_zip_archive( lv_rels_worksheet_path ). + lo_ixml_node ?= lo_ixml_rels_worksheet->find_from_name( 'Relationship' ). + CATCH zcx_excel. "#EC NO_HANDLER +#222 + " +#222 No errorhandling necessary - node will be unbound if error occurs + ENDTRY. " +#222 + WHILE lo_ixml_node IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_node + CHANGING + cp_structure = ls_relationship ). + CONCATENATE lv_dirname ls_relationship-target INTO lv_path. + lv_path = resolve_path( lv_path ). + + CASE ls_relationship-type. + WHEN lc_rel_drawing. + " Read Drawings * Issue # 339 Not all drawings are in the path mentioned below. * Some Excel elements like textfields (which we don't support ) have a drawing-part in the relationsships * but no "xl/drawings/_rels/drawing____.xml.rels" part. * Since we don't support these there is no need to read them. Catching exceptions thrown * in the "load_worksheet_drawing" shouldn't lead to an abortion of the reading - TRY. - me->load_worksheet_drawing( ip_path = lv_path - io_worksheet = io_worksheet ). - CATCH zcx_excel. "--> then ignore it - ENDTRY. + TRY. + me->load_worksheet_drawing( ip_path = lv_path + io_worksheet = io_worksheet ). + CATCH zcx_excel. "--> then ignore it + ENDTRY. - WHEN lc_rel_printer. - " Read Printer settings + WHEN lc_rel_printer. + " Read Printer settings - WHEN lc_rel_hyperlink. - MOVE-CORRESPONDING ls_relationship TO ls_external_hyperlink. - INSERT ls_external_hyperlink INTO TABLE lt_external_hyperlinks. + WHEN lc_rel_hyperlink. + MOVE-CORRESPONDING ls_relationship TO ls_external_hyperlink. + INSERT ls_external_hyperlink INTO TABLE lt_external_hyperlinks. - WHEN OTHERS. - ENDCASE. + WHEN OTHERS. + ENDCASE. - lo_ixml_node ?= lo_ixml_node->get_next( ). - ENDWHILE. + lo_ixml_node ?= lo_ixml_node->get_next( ). + ENDWHILE. - lo_ixml_worksheet = me->get_ixml_from_zip_archive( ip_path ). + lo_ixml_worksheet = me->get_ixml_from_zip_archive( ip_path ). - lo_ixml_tabcolor ?= lo_ixml_worksheet->find_from_name( 'tabColor' ). - IF lo_ixml_tabcolor IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_tabcolor - CHANGING - cp_structure = ls_tabcolor ). + lo_ixml_tabcolor ?= lo_ixml_worksheet->find_from_name( 'tabColor' ). + IF lo_ixml_tabcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_tabcolor + CHANGING + cp_structure = ls_tabcolor ). * Theme not supported yet - IF ls_tabcolor-rgb IS NOT INITIAL. - ls_excel_s_tabcolor-rgb = ls_tabcolor-rgb. - io_worksheet->set_tabcolor( ls_excel_s_tabcolor ). - ENDIF. - ENDIF. - - lo_ixml_rows = lo_ixml_worksheet->get_elements_by_tag_name( name = 'row' ). - lo_ixml_iterator = lo_ixml_rows->create_iterator( ). - lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml_row_elem IS BOUND. - - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_row_elem - CHANGING - cp_structure = ls_row ). - SPLIT ls_row-spans AT ':' INTO lv_min_col_s lv_max_col_s. - lv_index = lv_max_col_s. - IF lv_index > lv_max_col. - lv_max_col = lv_index. + IF ls_tabcolor-rgb IS NOT INITIAL. + ls_excel_s_tabcolor-rgb = ls_tabcolor-rgb. + io_worksheet->set_tabcolor( ls_excel_s_tabcolor ). + ENDIF. ENDIF. - lv_cell_row = ls_row-r. + + lo_ixml_rows = lo_ixml_worksheet->get_elements_by_tag_name( name = 'row' ). + lo_ixml_iterator = lo_ixml_rows->create_iterator( ). + lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_row_elem IS BOUND. + + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_row_elem + CHANGING + cp_structure = ls_row ). + SPLIT ls_row-spans AT ':' INTO lv_min_col_s lv_max_col_s. + lv_index = lv_max_col_s. + IF lv_index > lv_max_col. + lv_max_col = lv_index. + ENDIF. + lv_cell_row = ls_row-r. lo_row = io_worksheet->get_row( lv_cell_row ). IF ls_row-customheight = '1'. lo_row->set_row_height( ip_row_height = ls_row-ht ip_custom_height = abap_true ). @@ -2436,1159 +2436,1159 @@ METHOD load_worksheet. ENDIF. ENDIF. - lo_ixml_cells = lo_ixml_row_elem->get_elements_by_tag_name( name = 'c' ). - lo_ixml_iterator2 = lo_ixml_cells->create_iterator( ). - lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). - WHILE lo_ixml_cell_elem IS BOUND. - CLEAR: lv_cell_value, - lv_cell_formula, - lv_style_guid. + lo_ixml_cells = lo_ixml_row_elem->get_elements_by_tag_name( name = 'c' ). + lo_ixml_iterator2 = lo_ixml_cells->create_iterator( ). + lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). + WHILE lo_ixml_cell_elem IS BOUND. + CLEAR: lv_cell_value, + lv_cell_formula, + lv_style_guid. - fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_cell_elem CHANGING cp_structure = ls_cell ). + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_cell_elem CHANGING cp_structure = ls_cell ). - lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'v' ). + lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'v' ). - CASE ls_cell-t. - WHEN 's'. " String values are stored as index in shared string table - IF lo_ixml_value_elem IS BOUND. - lv_index = lo_ixml_value_elem->get_value( ) + 1. - READ TABLE shared_strings INTO lv_cell_value INDEX lv_index. - ENDIF. - WHEN 'inlineStr'. " inlineStr values are kept in special node - lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'is' ). - IF lo_ixml_value_elem IS BOUND. - lv_cell_value = lo_ixml_value_elem->get_value( ). - ENDIF. - WHEN OTHERS. "other types are stored directly - IF lo_ixml_value_elem IS BOUND. - lv_cell_value = lo_ixml_value_elem->get_value( ). - ENDIF. - ENDCASE. + CASE ls_cell-t. + WHEN 's'. " String values are stored as index in shared string table + IF lo_ixml_value_elem IS BOUND. + lv_index = lo_ixml_value_elem->get_value( ) + 1. + READ TABLE shared_strings INTO lv_cell_value INDEX lv_index. + ENDIF. + WHEN 'inlineStr'. " inlineStr values are kept in special node + lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'is' ). + IF lo_ixml_value_elem IS BOUND. + lv_cell_value = lo_ixml_value_elem->get_value( ). + ENDIF. + WHEN OTHERS. "other types are stored directly + IF lo_ixml_value_elem IS BOUND. + lv_cell_value = lo_ixml_value_elem->get_value( ). + ENDIF. + ENDCASE. - CLEAR lv_style_guid. - "read style based on index - IF ls_cell-s IS NOT INITIAL. - lv_index = ls_cell-s + 1. - READ TABLE styles INTO lo_excel_style INDEX lv_index. - IF sy-subrc = 0. - lv_style_guid = lo_excel_style->get_guid( ). + CLEAR lv_style_guid. + "read style based on index + IF ls_cell-s IS NOT INITIAL. + lv_index = ls_cell-s + 1. + READ TABLE styles INTO lo_excel_style INDEX lv_index. + IF sy-subrc = 0. + lv_style_guid = lo_excel_style->get_guid( ). + ENDIF. ENDIF. - ENDIF. - lo_ixml_formula_elem = lo_ixml_cell_elem->find_from_name( name = 'f' ). - IF lo_ixml_formula_elem IS BOUND. - lv_cell_formula = lo_ixml_formula_elem->get_value( ). + lo_ixml_formula_elem = lo_ixml_cell_elem->find_from_name( name = 'f' ). + IF lo_ixml_formula_elem IS BOUND. + lv_cell_formula = lo_ixml_formula_elem->get_value( ). *--------------------------------------------------------------------* * Begin of insertion issue#284 - Copied formulae not *--------------------------------------------------------------------* - DATA: BEGIN OF ls_formula_attributes, - ref TYPE string, - si TYPE i, - t TYPE string, - END OF ls_formula_attributes, - ls_ref_formula TYPE ty_ref_formulae. + DATA: BEGIN OF ls_formula_attributes, + ref TYPE string, + si TYPE i, + t TYPE string, + END OF ls_formula_attributes, + ls_ref_formula TYPE ty_ref_formulae. + + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_formula_elem CHANGING cp_structure = ls_formula_attributes ). + IF ls_formula_attributes-t = 'shared'. + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_cell-r + IMPORTING + e_column = lv_cell_column + e_row = lv_cell_row ). + + TRY. + CLEAR ls_ref_formula. + ls_ref_formula-sheet = io_worksheet. + ls_ref_formula-row = lv_cell_row. + ls_ref_formula-column = zcl_excel_common=>convert_column2int( lv_cell_column ). + ls_ref_formula-si = ls_formula_attributes-si. + ls_ref_formula-ref = ls_formula_attributes-ref. + ls_ref_formula-formula = lv_cell_formula. + INSERT ls_ref_formula INTO TABLE me->mt_ref_formulae. + CATCH cx_root INTO ex. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + previous = ex. + ENDTRY. + ENDIF. +*--------------------------------------------------------------------* +* End of insertion issue#284 - Copied formulae not +*--------------------------------------------------------------------* + ENDIF. - fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_formula_elem CHANGING cp_structure = ls_formula_attributes ). - IF ls_formula_attributes-t = 'shared'. + IF lv_cell_value IS NOT INITIAL + OR lv_cell_formula IS NOT INITIAL + OR lv_style_guid IS NOT INITIAL. zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING i_columnrow = ls_cell-r IMPORTING e_column = lv_cell_column e_row = lv_cell_row ). - - TRY. - CLEAR ls_ref_formula. - ls_ref_formula-sheet = io_worksheet. - ls_ref_formula-row = lv_cell_row. - ls_ref_formula-column = zcl_excel_common=>convert_column2int( lv_cell_column ). - ls_ref_formula-si = ls_formula_attributes-si. - ls_ref_formula-ref = ls_formula_attributes-ref. - ls_ref_formula-formula = lv_cell_formula. - INSERT ls_ref_formula INTO TABLE me->mt_ref_formulae. - CATCH cx_root INTO ex. - RAISE EXCEPTION TYPE zcx_excel - EXPORTING - previous = ex. - ENDTRY. + io_worksheet->set_cell( ip_column = lv_cell_column " cell_elem Column + ip_row = lv_cell_row " cell_elem row_elem + ip_value = lv_cell_value " cell_elem Value + ip_formula = lv_cell_formula + ip_data_type = ls_cell-t + ip_style = lv_style_guid ). ENDIF. -*--------------------------------------------------------------------* -* End of insertion issue#284 - Copied formulae not -*--------------------------------------------------------------------* - ENDIF. - - IF lv_cell_value IS NOT INITIAL - OR lv_cell_formula IS NOT INITIAL - OR lv_style_guid IS NOT INITIAL. - zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING - i_columnrow = ls_cell-r - IMPORTING - e_column = lv_cell_column - e_row = lv_cell_row ). - io_worksheet->set_cell( ip_column = lv_cell_column " cell_elem Column - ip_row = lv_cell_row " cell_elem row_elem - ip_value = lv_cell_value " cell_elem Value - ip_formula = lv_cell_formula - ip_data_type = ls_cell-t - ip_style = lv_style_guid ). - ENDIF. - lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). + lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). + ENDWHILE. + lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). ENDWHILE. - lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). - ENDWHILE. *--------------------------------------------------------------------* *#234 - column width not read correctly - begin of coding * reason - libre office doesn't use SPAN in row - definitions *--------------------------------------------------------------------* - IF lv_max_col = 0. - lo_ixml_imension_elem = lo_ixml_worksheet->find_from_name( name = 'dimension' ). - IF lo_ixml_imension_elem IS BOUND. - lv_dimension_range = lo_ixml_imension_elem->get_attribute( 'ref' ). - IF lv_dimension_range CS ':'. - REPLACE REGEX '\D+\d+:(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column - ELSE. - REPLACE REGEX '(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column + IF lv_max_col = 0. + lo_ixml_imension_elem = lo_ixml_worksheet->find_from_name( name = 'dimension' ). + IF lo_ixml_imension_elem IS BOUND. + lv_dimension_range = lo_ixml_imension_elem->get_attribute( 'ref' ). + IF lv_dimension_range CS ':'. + REPLACE REGEX '\D+\d+:(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column + ELSE. + REPLACE REGEX '(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column + ENDIF. + lv_max_col = zcl_excel_common=>convert_column2int( lv_dimension_range ). ENDIF. - lv_max_col = zcl_excel_common=>convert_column2int( lv_dimension_range ). ENDIF. - ENDIF. *--------------------------------------------------------------------* *#234 - column width not read correctly - end of coding *--------------------------------------------------------------------* - "Get the customized column width - lo_ixml_columns = lo_ixml_worksheet->get_elements_by_tag_name( name = 'col' ). - lo_ixml_iterator = lo_ixml_columns->create_iterator( ). - lo_ixml_column_elem ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml_column_elem IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_column_elem - CHANGING - cp_structure = ls_column ). + "Get the customized column width + lo_ixml_columns = lo_ixml_worksheet->get_elements_by_tag_name( name = 'col' ). + lo_ixml_iterator = lo_ixml_columns->create_iterator( ). lo_ixml_column_elem ?= lo_ixml_iterator->get_next( ). - IF ls_column-customwidth = lc_xml_attr_true - OR ls_column-customwidth = lc_xml_attr_true_int - OR ls_column-bestfit = lc_xml_attr_true - OR ls_column-bestfit = lc_xml_attr_true_int - OR ls_column-collapsed = lc_xml_attr_true - OR ls_column-collapsed = lc_xml_attr_true_int - OR ls_column-hidden = lc_xml_attr_true - OR ls_column-hidden = lc_xml_attr_true_int - OR ls_column-outlinelevel > '' - OR ls_column-style > ''. - lv_index = ls_column-min. - WHILE lv_index <= ls_column-max AND lv_index <= lv_max_col. - - lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_index ). - lo_column = io_worksheet->get_column( lv_column_alpha ). - - IF ls_column-customwidth = lc_xml_attr_true - OR ls_column-customwidth = lc_xml_attr_true_int - OR ls_column-width IS NOT INITIAL. "+#234 - lo_column->set_width( ls_column-width ). - ENDIF. + WHILE lo_ixml_column_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_column_elem + CHANGING + cp_structure = ls_column ). + lo_ixml_column_elem ?= lo_ixml_iterator->get_next( ). + IF ls_column-customwidth = lc_xml_attr_true + OR ls_column-customwidth = lc_xml_attr_true_int + OR ls_column-bestfit = lc_xml_attr_true + OR ls_column-bestfit = lc_xml_attr_true_int + OR ls_column-collapsed = lc_xml_attr_true + OR ls_column-collapsed = lc_xml_attr_true_int + OR ls_column-hidden = lc_xml_attr_true + OR ls_column-hidden = lc_xml_attr_true_int + OR ls_column-outlinelevel > '' + OR ls_column-style > ''. + lv_index = ls_column-min. + WHILE lv_index <= ls_column-max AND lv_index <= lv_max_col. + + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_index ). + lo_column = io_worksheet->get_column( lv_column_alpha ). + + IF ls_column-customwidth = lc_xml_attr_true + OR ls_column-customwidth = lc_xml_attr_true_int + OR ls_column-width IS NOT INITIAL. "+#234 + lo_column->set_width( ls_column-width ). + ENDIF. - IF ls_column-bestfit = lc_xml_attr_true - OR ls_column-bestfit = lc_xml_attr_true_int. - lo_column->set_auto_size( abap_true ). - ENDIF. + IF ls_column-bestfit = lc_xml_attr_true + OR ls_column-bestfit = lc_xml_attr_true_int. + lo_column->set_auto_size( abap_true ). + ENDIF. - IF ls_column-collapsed = lc_xml_attr_true - OR ls_column-collapsed = lc_xml_attr_true_int. - lo_column->set_collapsed( abap_true ). - ENDIF. + IF ls_column-collapsed = lc_xml_attr_true + OR ls_column-collapsed = lc_xml_attr_true_int. + lo_column->set_collapsed( abap_true ). + ENDIF. - IF ls_column-hidden = lc_xml_attr_true - OR ls_column-hidden = lc_xml_attr_true_int. - lo_column->set_visible( abap_false ). - ENDIF. + IF ls_column-hidden = lc_xml_attr_true + OR ls_column-hidden = lc_xml_attr_true_int. + lo_column->set_visible( abap_false ). + ENDIF. - IF ls_column-outlinelevel > ''. + IF ls_column-outlinelevel > ''. * outline_level = condense( column-outlineLevel ). - CONDENSE ls_column-outlinelevel. - lv_outline_level = ls_column-outlinelevel. - IF lv_outline_level > 0. - lo_column->set_outline_level( lv_outline_level ). + CONDENSE ls_column-outlinelevel. + lv_outline_level = ls_column-outlinelevel. + IF lv_outline_level > 0. + lo_column->set_outline_level( lv_outline_level ). + ENDIF. ENDIF. - ENDIF. - IF ls_column-style > ''. + IF ls_column-style > ''. + sy-index = ls_column-style + 1. + READ TABLE styles INTO lo_excel_style INDEX sy-index. + DATA: dummy_zexcel_cell_style TYPE zexcel_cell_style. + dummy_zexcel_cell_style = lo_excel_style->get_guid( ). + lo_column->set_column_style_by_guid( dummy_zexcel_cell_style ). + ENDIF. + + ADD 1 TO lv_index. + ENDWHILE. + ENDIF. + +* issue #367 - hide columns from + IF ls_column-max = zcl_excel_common=>c_excel_sheet_max_col. " Max = very right column + IF ls_column-hidden = 1 " all hidden + AND ls_column-min > 0. + io_worksheet->zif_excel_sheet_properties~hide_columns_from = zcl_excel_common=>convert_column2alpha( ls_column-min ). + ELSEIF ls_column-style > ''. sy-index = ls_column-style + 1. READ TABLE styles INTO lo_excel_style INDEX sy-index. - DATA: dummy_zexcel_cell_style TYPE zexcel_cell_style. dummy_zexcel_cell_style = lo_excel_style->get_guid( ). - lo_column->set_column_style_by_guid( dummy_zexcel_cell_style ). +* Set style for remaining columns + io_worksheet->zif_excel_sheet_properties~set_style( dummy_zexcel_cell_style ). ENDIF. + ENDIF. - ADD 1 TO lv_index. - ENDWHILE. - ENDIF. -* issue #367 - hide columns from - IF ls_column-max = zcl_excel_common=>c_excel_sheet_max_col. " Max = very right column - IF ls_column-hidden = 1 " all hidden - AND ls_column-min > 0. - io_worksheet->zif_excel_sheet_properties~hide_columns_from = zcl_excel_common=>convert_column2alpha( ls_column-min ). - ELSEIF ls_column-style > ''. - sy-index = ls_column-style + 1. - READ TABLE styles INTO lo_excel_style INDEX sy-index. - dummy_zexcel_cell_style = lo_excel_style->get_guid( ). -* Set style for remaining columns - io_worksheet->zif_excel_sheet_properties~set_style( dummy_zexcel_cell_style ). - ENDIF. + ENDWHILE. + + "Now we need to get information from the sheetView node + lo_ixml_sheetview_elem = lo_ixml_worksheet->find_from_name( name = 'sheetView' ). + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetview_elem CHANGING cp_structure = ls_sheetview ). + IF ls_sheetview-showgridlines IS INITIAL OR + ls_sheetview-showgridlines = lc_xml_attr_true OR + ls_sheetview-showgridlines = lc_xml_attr_true_int. + "If the attribute is not specified or set to true, we will show grid lines + ls_sheetview-showgridlines = abap_true. + ELSE. + ls_sheetview-showgridlines = abap_false. ENDIF. + io_worksheet->set_show_gridlines( ls_sheetview-showgridlines ). - ENDWHILE. - - "Now we need to get information from the sheetView node - lo_ixml_sheetview_elem = lo_ixml_worksheet->find_from_name( name = 'sheetView' ). - fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetview_elem CHANGING cp_structure = ls_sheetview ). - IF ls_sheetview-showgridlines IS INITIAL OR - ls_sheetview-showgridlines = lc_xml_attr_true OR - ls_sheetview-showgridlines = lc_xml_attr_true_int. - "If the attribute is not specified or set to true, we will show grid lines - ls_sheetview-showgridlines = abap_true. - ELSE. - ls_sheetview-showgridlines = abap_false. - ENDIF. - io_worksheet->set_show_gridlines( ls_sheetview-showgridlines ). - - - "Add merge cell information - lo_ixml_mergecells = lo_ixml_worksheet->get_elements_by_tag_name( name = 'mergeCell' ). - lo_ixml_iterator = lo_ixml_mergecells->create_iterator( ). - lo_ixml_mergecell_elem ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml_mergecell_elem IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_mergecell_elem - CHANGING - cp_structure = ls_mergecell ). - zcl_excel_common=>convert_range2column_a_row( EXPORTING - i_range = ls_mergecell-ref - IMPORTING - e_column_start = lv_merge_column_start - e_column_end = lv_merge_column_end - e_row_start = lv_merge_row_start - e_row_end = lv_merge_row_end ). + "Add merge cell information + lo_ixml_mergecells = lo_ixml_worksheet->get_elements_by_tag_name( name = 'mergeCell' ). + lo_ixml_iterator = lo_ixml_mergecells->create_iterator( ). lo_ixml_mergecell_elem ?= lo_ixml_iterator->get_next( ). - io_worksheet->set_merge( EXPORTING - ip_column_start = lv_merge_column_start - ip_column_end = lv_merge_column_end - ip_row = lv_merge_row_start - ip_row_to = lv_merge_row_end ). - ENDWHILE. - - " read sheet format properties - lo_ixml_sheetformatpr_elem = lo_ixml_worksheet->find_from_name( 'sheetFormatPr' ). - IF lo_ixml_sheetformatpr_elem IS NOT INITIAL. - fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetformatpr_elem CHANGING cp_structure = ls_sheetformatpr ). - IF ls_sheetformatpr-customheight = '1'. - lv_height = ls_sheetformatpr-defaultrowheight. - lo_row = io_worksheet->get_default_row( ). - lo_row->set_row_height( lv_height ). - ENDIF. + WHILE lo_ixml_mergecell_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_mergecell_elem + CHANGING + cp_structure = ls_mergecell ). + zcl_excel_common=>convert_range2column_a_row( EXPORTING + i_range = ls_mergecell-ref + IMPORTING + e_column_start = lv_merge_column_start + e_column_end = lv_merge_column_end + e_row_start = lv_merge_row_start + e_row_end = lv_merge_row_end ). + lo_ixml_mergecell_elem ?= lo_ixml_iterator->get_next( ). + io_worksheet->set_merge( EXPORTING + ip_column_start = lv_merge_column_start + ip_column_end = lv_merge_column_end + ip_row = lv_merge_row_start + ip_row_to = lv_merge_row_end ). + ENDWHILE. - " TODO... column - ENDIF. + " read sheet format properties + lo_ixml_sheetformatpr_elem = lo_ixml_worksheet->find_from_name( 'sheetFormatPr' ). + IF lo_ixml_sheetformatpr_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetformatpr_elem CHANGING cp_structure = ls_sheetformatpr ). + IF ls_sheetformatpr-customheight = '1'. + lv_height = ls_sheetformatpr-defaultrowheight. + lo_row = io_worksheet->get_default_row( ). + lo_row->set_row_height( lv_height ). + ENDIF. + + " TODO... column + ENDIF. - " Read in page margins - me->load_worksheet_pagemargins( EXPORTING - io_ixml_worksheet = lo_ixml_worksheet - io_worksheet = io_worksheet ). + " Read in page margins + me->load_worksheet_pagemargins( EXPORTING + io_ixml_worksheet = lo_ixml_worksheet + io_worksheet = io_worksheet ). * FitToPage - lo_ixml_sheetpr ?= lo_ixml_worksheet->find_from_name( 'pageSetUpPr' ). - IF lo_ixml_sheetpr IS BOUND. + lo_ixml_sheetpr ?= lo_ixml_worksheet->find_from_name( 'pageSetUpPr' ). + IF lo_ixml_sheetpr IS BOUND. - lv_fit_to_page = lo_ixml_sheetpr->get_attribute_ns( 'fitToPage' ). - IF lv_fit_to_page IS NOT INITIAL. - io_worksheet->sheet_setup->fit_to_page = 'X'. - ENDIF. - ENDIF. - " Read in page setup - lo_ixml_pagesetup_elem = lo_ixml_worksheet->find_from_name( 'pageSetup' ). - IF lo_ixml_pagesetup_elem IS NOT INITIAL. - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_pagesetup_elem - CHANGING - cp_structure = ls_pagesetup ). - io_worksheet->sheet_setup->orientation = ls_pagesetup-orientation. - io_worksheet->sheet_setup->scale = ls_pagesetup-scale. - io_worksheet->sheet_setup->paper_size = ls_pagesetup-papersize. - IF io_worksheet->sheet_setup->fit_to_page = 'X'. - IF ls_pagesetup-fittowidth IS NOT INITIAL. - io_worksheet->sheet_setup->fit_to_width = ls_pagesetup-fittowidth. - ELSE. - io_worksheet->sheet_setup->fit_to_width = 1. " Default if not given - Excel doesn't write this to xml + lv_fit_to_page = lo_ixml_sheetpr->get_attribute_ns( 'fitToPage' ). + IF lv_fit_to_page IS NOT INITIAL. + io_worksheet->sheet_setup->fit_to_page = 'X'. ENDIF. - IF ls_pagesetup-fittoheight IS NOT INITIAL. - io_worksheet->sheet_setup->fit_to_height = ls_pagesetup-fittoheight. - ELSE. - io_worksheet->sheet_setup->fit_to_height = 1. " Default if not given - Excel doesn't write this to xml + ENDIF. + " Read in page setup + lo_ixml_pagesetup_elem = lo_ixml_worksheet->find_from_name( 'pageSetup' ). + IF lo_ixml_pagesetup_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_pagesetup_elem + CHANGING + cp_structure = ls_pagesetup ). + io_worksheet->sheet_setup->orientation = ls_pagesetup-orientation. + io_worksheet->sheet_setup->scale = ls_pagesetup-scale. + io_worksheet->sheet_setup->paper_size = ls_pagesetup-papersize. + IF io_worksheet->sheet_setup->fit_to_page = 'X'. + IF ls_pagesetup-fittowidth IS NOT INITIAL. + io_worksheet->sheet_setup->fit_to_width = ls_pagesetup-fittowidth. + ELSE. + io_worksheet->sheet_setup->fit_to_width = 1. " Default if not given - Excel doesn't write this to xml + ENDIF. + IF ls_pagesetup-fittoheight IS NOT INITIAL. + io_worksheet->sheet_setup->fit_to_height = ls_pagesetup-fittoheight. + ELSE. + io_worksheet->sheet_setup->fit_to_height = 1. " Default if not given - Excel doesn't write this to xml + ENDIF. ENDIF. ENDIF. - ENDIF. - " Read header footer - lo_ixml_headerfooter_elem = lo_ixml_worksheet->find_from_name( 'headerFooter' ). - IF lo_ixml_headerfooter_elem IS NOT INITIAL. - fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_headerfooter_elem CHANGING cp_structure = ls_headerfooter ). - io_worksheet->sheet_setup->diff_oddeven_headerfooter = ls_headerfooter-differentoddeven. + " Read header footer + lo_ixml_headerfooter_elem = lo_ixml_worksheet->find_from_name( 'headerFooter' ). + IF lo_ixml_headerfooter_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_headerfooter_elem CHANGING cp_structure = ls_headerfooter ). + io_worksheet->sheet_setup->diff_oddeven_headerfooter = ls_headerfooter-differentoddeven. - lo_ixml_hf_value_elem = lo_ixml_headerfooter_elem->find_from_name( 'oddFooter' ). - IF lo_ixml_hf_value_elem IS NOT INITIAL. - ls_odd_footer-left_value = lo_ixml_hf_value_elem->get_value( ). - ENDIF. + lo_ixml_hf_value_elem = lo_ixml_headerfooter_elem->find_from_name( 'oddFooter' ). + IF lo_ixml_hf_value_elem IS NOT INITIAL. + ls_odd_footer-left_value = lo_ixml_hf_value_elem->get_value( ). + ENDIF. * 2do§1 Header/footer - " TODO.. get the rest. - - io_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_odd_header - ip_odd_footer = ls_odd_footer - ip_even_header = ls_even_header - ip_even_footer = ls_even_footer ). - - ENDIF. - - " Start fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 - " Read pane - lo_ixml_pane_elem = lo_ixml_sheetview_elem->find_from_name( name = 'pane' ). - IF lo_ixml_pane_elem IS BOUND. - fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_pane_elem CHANGING cp_structure = ls_excel_pane ). - " Issue #194 - " Replace REGEX with method from the common class - zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING - i_columnrow = ls_excel_pane-topleftcell - IMPORTING - e_column = lv_pane_cell_col_a " Cell Column - e_row = lv_pane_cell_row ). " Natural number - lv_pane_cell_col = zcl_excel_common=>convert_column2int( lv_pane_cell_col_a ). - SUBTRACT 1 FROM: lv_pane_cell_col, - lv_pane_cell_row. - IF lv_pane_cell_col > 0 - AND lv_pane_cell_row > 0. - io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row - ip_num_columns = lv_pane_cell_col ). - ELSEIF lv_pane_cell_row > 0. - io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row ). - ELSE. - io_worksheet->freeze_panes( ip_num_columns = lv_pane_cell_col ). - ENDIF. - ENDIF. - " End fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 - - " Start fix 276 Read data validations - lo_ixml_datavalidations = lo_ixml_worksheet->get_elements_by_tag_name( name = 'dataValidation' ). - lo_ixml_iterator = lo_ixml_datavalidations->create_iterator( ). - lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml_datavalidation_elem IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_datavalidation_elem - CHANGING - cp_structure = ls_datavalidation ). - CLEAR lo_ixml_formula_elem. - lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula1' ). - IF lo_ixml_formula_elem IS BOUND. - ls_datavalidation-formula1 = lo_ixml_formula_elem->get_value( ). - ENDIF. - CLEAR lo_ixml_formula_elem. - lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula2' ). - IF lo_ixml_formula_elem IS BOUND. - ls_datavalidation-formula2 = lo_ixml_formula_elem->get_value( ). + " TODO.. get the rest. + + io_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_odd_header + ip_odd_footer = ls_odd_footer + ip_even_header = ls_even_header + ip_even_footer = ls_even_footer ). + ENDIF. - SPLIT ls_datavalidation-sqref AT space INTO TABLE lt_datavalidation_range. - LOOP AT lt_datavalidation_range INTO lv_datavalidation_range. - zcl_excel_common=>convert_range2column_a_row( EXPORTING - i_range = lv_datavalidation_range - IMPORTING - e_column_start = ls_datavalidation-cell_column - e_column_end = ls_datavalidation-cell_column_to - e_row_start = ls_datavalidation-cell_row - e_row_end = ls_datavalidation-cell_row_to ). - lo_data_validation = io_worksheet->add_new_data_validation( ). - lo_data_validation->type = ls_datavalidation-type. - lo_data_validation->allowblank = ls_datavalidation-allowblank. - IF ls_datavalidation-showinputmessage IS INITIAL. - lo_data_validation->showinputmessage = abap_false. + + " Start fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + " Read pane + lo_ixml_pane_elem = lo_ixml_sheetview_elem->find_from_name( name = 'pane' ). + IF lo_ixml_pane_elem IS BOUND. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_pane_elem CHANGING cp_structure = ls_excel_pane ). + " Issue #194 + " Replace REGEX with method from the common class + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_excel_pane-topleftcell + IMPORTING + e_column = lv_pane_cell_col_a " Cell Column + e_row = lv_pane_cell_row ). " Natural number + lv_pane_cell_col = zcl_excel_common=>convert_column2int( lv_pane_cell_col_a ). + SUBTRACT 1 FROM: lv_pane_cell_col, + lv_pane_cell_row. + IF lv_pane_cell_col > 0 + AND lv_pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row + ip_num_columns = lv_pane_cell_col ). + ELSEIF lv_pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row ). ELSE. - lo_data_validation->showinputmessage = abap_true. + io_worksheet->freeze_panes( ip_num_columns = lv_pane_cell_col ). ENDIF. - IF ls_datavalidation-showerrormessage IS INITIAL. - lo_data_validation->showerrormessage = abap_false. - ELSE. - lo_data_validation->showerrormessage = abap_true. + ENDIF. + " End fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + + " Start fix 276 Read data validations + lo_ixml_datavalidations = lo_ixml_worksheet->get_elements_by_tag_name( name = 'dataValidation' ). + lo_ixml_iterator = lo_ixml_datavalidations->create_iterator( ). + lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_datavalidation_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_datavalidation_elem + CHANGING + cp_structure = ls_datavalidation ). + CLEAR lo_ixml_formula_elem. + lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula1' ). + IF lo_ixml_formula_elem IS BOUND. + ls_datavalidation-formula1 = lo_ixml_formula_elem->get_value( ). ENDIF. - IF ls_datavalidation-showdropdown IS INITIAL. - lo_data_validation->showdropdown = abap_false. - ELSE. - lo_data_validation->showdropdown = abap_true. + CLEAR lo_ixml_formula_elem. + lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula2' ). + IF lo_ixml_formula_elem IS BOUND. + ls_datavalidation-formula2 = lo_ixml_formula_elem->get_value( ). ENDIF. - lo_data_validation->operator = ls_datavalidation-operator. - lo_data_validation->formula1 = ls_datavalidation-formula1. - lo_data_validation->formula2 = ls_datavalidation-formula2. - lo_data_validation->prompttitle = ls_datavalidation-prompttitle. - lo_data_validation->prompt = ls_datavalidation-prompt. - lo_data_validation->errortitle = ls_datavalidation-errortitle. - lo_data_validation->error = ls_datavalidation-error. - lo_data_validation->errorstyle = ls_datavalidation-errorstyle. - lo_data_validation->cell_row = ls_datavalidation-cell_row. - lo_data_validation->cell_row_to = ls_datavalidation-cell_row_to. - lo_data_validation->cell_column = ls_datavalidation-cell_column. - lo_data_validation->cell_column_to = ls_datavalidation-cell_column_to. - ENDLOOP. - lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). - ENDWHILE. - " End fix 276 Read data validations - - " Read hyperlinks - TRY. - me->load_worksheet_hyperlinks( io_ixml_worksheet = lo_ixml_worksheet - io_worksheet = io_worksheet - it_external_hyperlinks = lt_external_hyperlinks ). - CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify - ENDTRY. - - TRY. - me->fill_row_outlines( io_worksheet = io_worksheet ). - CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify - ENDTRY. - - " Issue #366 - conditional formatting - TRY. - me->load_worksheet_cond_format( io_ixml_worksheet = lo_ixml_worksheet - io_worksheet = io_worksheet ). - CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify - ENDTRY. - - " Issue #377 - pagebreaks - TRY. - me->load_worksheet_pagebreaks( io_ixml_worksheet = lo_ixml_worksheet - io_worksheet = io_worksheet ). - CATCH zcx_excel. " Ignore pagebreak reading errors - pass everything we were able to identify - ENDTRY. - - -ENDMETHOD. - - -METHOD load_worksheet_cond_format. - - DATA: lo_ixml_cond_formats TYPE REF TO if_ixml_node_collection, - lo_ixml_cond_format TYPE REF TO if_ixml_element, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml_rules TYPE REF TO if_ixml_node_collection, - lo_ixml_rule TYPE REF TO if_ixml_element, - lo_ixml_iterator2 TYPE REF TO if_ixml_node_iterator, - lo_style_cond TYPE REF TO zcl_excel_style_cond, - lo_style_cond2 TYPE REF TO zcl_excel_style_cond. - - - DATA: lv_area TYPE string, - lt_areas TYPE STANDARD TABLE OF string WITH NON-UNIQUE DEFAULT KEY, - lv_area_start_row TYPE zexcel_cell_row, - lv_area_end_row TYPE zexcel_cell_row, - lv_area_start_col TYPE zexcel_cell_column_alpha, - lv_area_end_col TYPE zexcel_cell_column_alpha, - lv_rule TYPE zexcel_condition_rule. + SPLIT ls_datavalidation-sqref AT space INTO TABLE lt_datavalidation_range. + LOOP AT lt_datavalidation_range INTO lv_datavalidation_range. + zcl_excel_common=>convert_range2column_a_row( EXPORTING + i_range = lv_datavalidation_range + IMPORTING + e_column_start = ls_datavalidation-cell_column + e_column_end = ls_datavalidation-cell_column_to + e_row_start = ls_datavalidation-cell_row + e_row_end = ls_datavalidation-cell_row_to ). + lo_data_validation = io_worksheet->add_new_data_validation( ). + lo_data_validation->type = ls_datavalidation-type. + lo_data_validation->allowblank = ls_datavalidation-allowblank. + IF ls_datavalidation-showinputmessage IS INITIAL. + lo_data_validation->showinputmessage = abap_false. + ELSE. + lo_data_validation->showinputmessage = abap_true. + ENDIF. + IF ls_datavalidation-showerrormessage IS INITIAL. + lo_data_validation->showerrormessage = abap_false. + ELSE. + lo_data_validation->showerrormessage = abap_true. + ENDIF. + IF ls_datavalidation-showdropdown IS INITIAL. + lo_data_validation->showdropdown = abap_false. + ELSE. + lo_data_validation->showdropdown = abap_true. + ENDIF. + lo_data_validation->operator = ls_datavalidation-operator. + lo_data_validation->formula1 = ls_datavalidation-formula1. + lo_data_validation->formula2 = ls_datavalidation-formula2. + lo_data_validation->prompttitle = ls_datavalidation-prompttitle. + lo_data_validation->prompt = ls_datavalidation-prompt. + lo_data_validation->errortitle = ls_datavalidation-errortitle. + lo_data_validation->error = ls_datavalidation-error. + lo_data_validation->errorstyle = ls_datavalidation-errorstyle. + lo_data_validation->cell_row = ls_datavalidation-cell_row. + lo_data_validation->cell_row_to = ls_datavalidation-cell_row_to. + lo_data_validation->cell_column = ls_datavalidation-cell_column. + lo_data_validation->cell_column_to = ls_datavalidation-cell_column_to. + ENDLOOP. + lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + " End fix 276 Read data validations + + " Read hyperlinks + TRY. + me->load_worksheet_hyperlinks( io_ixml_worksheet = lo_ixml_worksheet + io_worksheet = io_worksheet + it_external_hyperlinks = lt_external_hyperlinks ). + CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify + ENDTRY. + + TRY. + me->fill_row_outlines( io_worksheet = io_worksheet ). + CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify + ENDTRY. + + " Issue #366 - conditional formatting + TRY. + me->load_worksheet_cond_format( io_ixml_worksheet = lo_ixml_worksheet + io_worksheet = io_worksheet ). + CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify + ENDTRY. + + " Issue #377 - pagebreaks + TRY. + me->load_worksheet_pagebreaks( io_ixml_worksheet = lo_ixml_worksheet + io_worksheet = io_worksheet ). + CATCH zcx_excel. " Ignore pagebreak reading errors - pass everything we were able to identify + ENDTRY. + + + ENDMETHOD. + + + METHOD load_worksheet_cond_format. + + DATA: lo_ixml_cond_formats TYPE REF TO if_ixml_node_collection, + lo_ixml_cond_format TYPE REF TO if_ixml_element, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml_rules TYPE REF TO if_ixml_node_collection, + lo_ixml_rule TYPE REF TO if_ixml_element, + lo_ixml_iterator2 TYPE REF TO if_ixml_node_iterator, + lo_style_cond TYPE REF TO zcl_excel_style_cond, + lo_style_cond2 TYPE REF TO zcl_excel_style_cond. + + + DATA: lv_area TYPE string, + lt_areas TYPE STANDARD TABLE OF string WITH NON-UNIQUE DEFAULT KEY, + lv_area_start_row TYPE zexcel_cell_row, + lv_area_end_row TYPE zexcel_cell_row, + lv_area_start_col TYPE zexcel_cell_column_alpha, + lv_area_end_col TYPE zexcel_cell_column_alpha, + lv_rule TYPE zexcel_condition_rule. * FIELD-SYMBOLS: LIKE LINE OF it_external_hyperlinks. - lo_ixml_cond_formats = io_ixml_worksheet->get_elements_by_tag_name( name = 'conditionalFormatting' ). - lo_ixml_iterator = lo_ixml_cond_formats->create_iterator( ). - lo_ixml_cond_format ?= lo_ixml_iterator->get_next( ). + lo_ixml_cond_formats = io_ixml_worksheet->get_elements_by_tag_name( name = 'conditionalFormatting' ). + lo_ixml_iterator = lo_ixml_cond_formats->create_iterator( ). + lo_ixml_cond_format ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml_cond_format IS BOUND. + WHILE lo_ixml_cond_format IS BOUND. - CLEAR: lv_area, - lo_ixml_rule, - lo_style_cond. + CLEAR: lv_area, + lo_ixml_rule, + lo_style_cond. *--------------------------------------------------------------------* * Get type of rule *--------------------------------------------------------------------* - lo_ixml_rules = lo_ixml_cond_format->get_elements_by_tag_name( name = 'cfRule' ). - lo_ixml_iterator2 = lo_ixml_rules->create_iterator( ). - lo_ixml_rule ?= lo_ixml_iterator2->get_next( ). + lo_ixml_rules = lo_ixml_cond_format->get_elements_by_tag_name( name = 'cfRule' ). + lo_ixml_iterator2 = lo_ixml_rules->create_iterator( ). + lo_ixml_rule ?= lo_ixml_iterator2->get_next( ). - WHILE lo_ixml_rule IS BOUND. - lv_rule = lo_ixml_rule->get_attribute_ns( 'type' ). - CLEAR lo_style_cond. + WHILE lo_ixml_rule IS BOUND. + lv_rule = lo_ixml_rule->get_attribute_ns( 'type' ). + CLEAR lo_style_cond. *--------------------------------------------------------------------* * Depending on ruletype get additional information *--------------------------------------------------------------------* - CASE lv_rule. - - WHEN zcl_excel_style_cond=>c_rule_cellis. - lo_style_cond = io_worksheet->add_new_style_cond( '' ). - load_worksheet_cond_format_ci( io_ixml_rule = lo_ixml_rule - io_style_cond = lo_style_cond ). - - WHEN zcl_excel_style_cond=>c_rule_databar. - lo_style_cond = io_worksheet->add_new_style_cond( '' ). - load_worksheet_cond_format_db( io_ixml_rule = lo_ixml_rule - io_style_cond = lo_style_cond ). - - WHEN zcl_excel_style_cond=>c_rule_expression. - lo_style_cond = io_worksheet->add_new_style_cond( '' ). - load_worksheet_cond_format_ex( io_ixml_rule = lo_ixml_rule - io_style_cond = lo_style_cond ). - - WHEN zcl_excel_style_cond=>c_rule_iconset. - lo_style_cond = io_worksheet->add_new_style_cond( '' ). - load_worksheet_cond_format_is( io_ixml_rule = lo_ixml_rule - io_style_cond = lo_style_cond ). - - WHEN zcl_excel_style_cond=>c_rule_colorscale. - lo_style_cond = io_worksheet->add_new_style_cond( '' ). - load_worksheet_cond_format_cs( io_ixml_rule = lo_ixml_rule - io_style_cond = lo_style_cond ). - - WHEN zcl_excel_style_cond=>c_rule_top10. - lo_style_cond = io_worksheet->add_new_style_cond( '' ). - load_worksheet_cond_format_t10( io_ixml_rule = lo_ixml_rule - io_style_cond = lo_style_cond ). - - WHEN zcl_excel_style_cond=>c_rule_above_average. - lo_style_cond = io_worksheet->add_new_style_cond( '' ). - load_worksheet_cond_format_aa( io_ixml_rule = lo_ixml_rule - io_style_cond = lo_style_cond ). - WHEN OTHERS. - ENDCASE. + CASE lv_rule. + + WHEN zcl_excel_style_cond=>c_rule_cellis. + lo_style_cond = io_worksheet->add_new_style_cond( '' ). + load_worksheet_cond_format_ci( io_ixml_rule = lo_ixml_rule + io_style_cond = lo_style_cond ). + + WHEN zcl_excel_style_cond=>c_rule_databar. + lo_style_cond = io_worksheet->add_new_style_cond( '' ). + load_worksheet_cond_format_db( io_ixml_rule = lo_ixml_rule + io_style_cond = lo_style_cond ). + + WHEN zcl_excel_style_cond=>c_rule_expression. + lo_style_cond = io_worksheet->add_new_style_cond( '' ). + load_worksheet_cond_format_ex( io_ixml_rule = lo_ixml_rule + io_style_cond = lo_style_cond ). + + WHEN zcl_excel_style_cond=>c_rule_iconset. + lo_style_cond = io_worksheet->add_new_style_cond( '' ). + load_worksheet_cond_format_is( io_ixml_rule = lo_ixml_rule + io_style_cond = lo_style_cond ). + + WHEN zcl_excel_style_cond=>c_rule_colorscale. + lo_style_cond = io_worksheet->add_new_style_cond( '' ). + load_worksheet_cond_format_cs( io_ixml_rule = lo_ixml_rule + io_style_cond = lo_style_cond ). + + WHEN zcl_excel_style_cond=>c_rule_top10. + lo_style_cond = io_worksheet->add_new_style_cond( '' ). + load_worksheet_cond_format_t10( io_ixml_rule = lo_ixml_rule + io_style_cond = lo_style_cond ). + + WHEN zcl_excel_style_cond=>c_rule_above_average. + lo_style_cond = io_worksheet->add_new_style_cond( '' ). + load_worksheet_cond_format_aa( io_ixml_rule = lo_ixml_rule + io_style_cond = lo_style_cond ). + WHEN OTHERS. + ENDCASE. - IF lo_style_cond IS BOUND. - lo_style_cond->rule = lv_rule. - lo_style_cond->priority = lo_ixml_rule->get_attribute_ns( 'priority' ). + IF lo_style_cond IS BOUND. + lo_style_cond->rule = lv_rule. + lo_style_cond->priority = lo_ixml_rule->get_attribute_ns( 'priority' ). *--------------------------------------------------------------------* * Set area to which conditional formatting belongs *--------------------------------------------------------------------* - lv_area = lo_ixml_cond_format->get_attribute_ns( 'sqref' ). - SPLIT lv_area AT space INTO TABLE lt_areas. - DELETE lt_areas WHERE table_line IS INITIAL. - LOOP AT lt_areas INTO lv_area. - - zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_area - IMPORTING e_column_start = lv_area_start_col - e_column_end = lv_area_end_col - e_row_start = lv_area_start_row - e_row_end = lv_area_end_row ). - lo_style_cond->add_range( ip_start_column = lv_area_start_col - ip_stop_column = lv_area_end_col - ip_start_row = lv_area_start_row - ip_stop_row = lv_area_end_row ). - ENDLOOP. + lv_area = lo_ixml_cond_format->get_attribute_ns( 'sqref' ). + SPLIT lv_area AT space INTO TABLE lt_areas. + DELETE lt_areas WHERE table_line IS INITIAL. + LOOP AT lt_areas INTO lv_area. + + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_area + IMPORTING e_column_start = lv_area_start_col + e_column_end = lv_area_end_col + e_row_start = lv_area_start_row + e_row_end = lv_area_end_row ). + lo_style_cond->add_range( ip_start_column = lv_area_start_col + ip_stop_column = lv_area_end_col + ip_start_row = lv_area_start_row + ip_stop_row = lv_area_end_row ). + ENDLOOP. - ENDIF. - lo_ixml_rule ?= lo_ixml_iterator2->get_next( ). - ENDWHILE. + ENDIF. + lo_ixml_rule ?= lo_ixml_iterator2->get_next( ). + ENDWHILE. - lo_ixml_cond_format ?= lo_ixml_iterator->get_next( ). + lo_ixml_cond_format ?= lo_ixml_iterator->get_next( ). - ENDWHILE. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -METHOD load_worksheet_cond_format_aa. - DATA: lv_dxf_style_index TYPE i, - val TYPE string. + METHOD load_worksheet_cond_format_aa. + DATA: lv_dxf_style_index TYPE i, + val TYPE string. - FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. + FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. *--------------------------------------------------------------------* * above or below average *--------------------------------------------------------------------* - val = io_ixml_rule->get_attribute_ns( 'aboveAverage' ). - IF val = '0'. " 0 = below average - io_style_cond->mode_above_average-above_average = space. - ELSE. - io_style_cond->mode_above_average-above_average = 'X'. " Not present or <> 0 --> we use above average - ENDIF. + val = io_ixml_rule->get_attribute_ns( 'aboveAverage' ). + IF val = '0'. " 0 = below average + io_style_cond->mode_above_average-above_average = space. + ELSE. + io_style_cond->mode_above_average-above_average = 'X'. " Not present or <> 0 --> we use above average + ENDIF. *--------------------------------------------------------------------* * Equal average also? *--------------------------------------------------------------------* - CLEAR val. - val = io_ixml_rule->get_attribute_ns( 'equalAverage' ). - IF val = '1'. " 0 = below average - io_style_cond->mode_above_average-equal_average = 'X'. - ELSE. - io_style_cond->mode_above_average-equal_average = ' '. " Not present or <> 1 --> we use not equal average - ENDIF. + CLEAR val. + val = io_ixml_rule->get_attribute_ns( 'equalAverage' ). + IF val = '1'. " 0 = below average + io_style_cond->mode_above_average-equal_average = 'X'. + ELSE. + io_style_cond->mode_above_average-equal_average = ' '. " Not present or <> 1 --> we use not equal average + ENDIF. *--------------------------------------------------------------------* * Standard deviation instead of value ( 2nd stddev, 3rd stdev ) *--------------------------------------------------------------------* - CLEAR val. - val = io_ixml_rule->get_attribute_ns( 'stdDev' ). - CASE val. - WHEN 1 - OR 2 - OR 3. " These seem to be supported by excel - don't try anything more - io_style_cond->mode_above_average-standard_deviation = val. - ENDCASE. + CLEAR val. + val = io_ixml_rule->get_attribute_ns( 'stdDev' ). + CASE val. + WHEN 1 + OR 2 + OR 3. " These seem to be supported by excel - don't try anything more + io_style_cond->mode_above_average-standard_deviation = val. + ENDCASE. *--------------------------------------------------------------------* * Cell formatting for top10 *--------------------------------------------------------------------* - lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). - READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. - IF sy-subrc = 0. - io_style_cond->mode_above_average-cell_style = -guid. - ENDIF. - -ENDMETHOD. - - -METHOD load_worksheet_cond_format_ci. - DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml TYPE REF TO if_ixml_element, - lv_dxf_style_index TYPE i, - lo_excel_style LIKE LINE OF me->styles. - - FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. + lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). + READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. + IF sy-subrc = 0. + io_style_cond->mode_above_average-cell_style = -guid. + ENDIF. - io_style_cond->mode_cellis-operator = io_ixml_rule->get_attribute_ns( 'operator' ). - lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). - READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. - IF sy-subrc = 0. - io_style_cond->mode_cellis-cell_style = -guid. - ENDIF. + ENDMETHOD. - lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'formula' ). - lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). - lo_ixml ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml IS BOUND. - CASE sy-index. - WHEN 1. - io_style_cond->mode_cellis-formula = lo_ixml->get_value( ). + METHOD load_worksheet_cond_format_ci. + DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml TYPE REF TO if_ixml_element, + lv_dxf_style_index TYPE i, + lo_excel_style LIKE LINE OF me->styles. - WHEN 2. - io_style_cond->mode_cellis-formula2 = lo_ixml->get_value( ). + FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. - WHEN OTHERS. - EXIT. - ENDCASE. + io_style_cond->mode_cellis-operator = io_ixml_rule->get_attribute_ns( 'operator' ). + lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). + READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. + IF sy-subrc = 0. + io_style_cond->mode_cellis-cell_style = -guid. + ENDIF. + lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'formula' ). + lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). lo_ixml ?= lo_ixml_iterator->get_next( ). - ENDWHILE. - + WHILE lo_ixml IS BOUND. -ENDMETHOD. + CASE sy-index. + WHEN 1. + io_style_cond->mode_cellis-formula = lo_ixml->get_value( ). + WHEN 2. + io_style_cond->mode_cellis-formula2 = lo_ixml->get_value( ). -METHOD load_worksheet_cond_format_cs. - DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml TYPE REF TO if_ixml_element. + WHEN OTHERS. + EXIT. + ENDCASE. + lo_ixml ?= lo_ixml_iterator->get_next( ). + ENDWHILE. - lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'cfvo' ). - lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). - lo_ixml ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml IS BOUND. - CASE sy-index. - WHEN 1. - io_style_cond->mode_colorscale-cfvo1_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_colorscale-cfvo1_value = lo_ixml->get_attribute_ns( 'val' ). + ENDMETHOD. - WHEN 2. - io_style_cond->mode_colorscale-cfvo2_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_colorscale-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN 3. - io_style_cond->mode_colorscale-cfvo3_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_colorscale-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). + METHOD load_worksheet_cond_format_cs. + DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml TYPE REF TO if_ixml_element. - WHEN OTHERS. - EXIT. - ENDCASE. + lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'cfvo' ). + lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). lo_ixml ?= lo_ixml_iterator->get_next( ). - ENDWHILE. + WHILE lo_ixml IS BOUND. - lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'color' ). - lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). - lo_ixml ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml IS BOUND. + CASE sy-index. + WHEN 1. + io_style_cond->mode_colorscale-cfvo1_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_colorscale-cfvo1_value = lo_ixml->get_attribute_ns( 'val' ). - CASE sy-index. - WHEN 1. - io_style_cond->mode_colorscale-colorrgb1 = lo_ixml->get_attribute_ns( 'rgb' ). + WHEN 2. + io_style_cond->mode_colorscale-cfvo2_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_colorscale-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN 2. - io_style_cond->mode_colorscale-colorrgb2 = lo_ixml->get_attribute_ns( 'rgb' ). + WHEN 3. + io_style_cond->mode_colorscale-cfvo3_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_colorscale-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN 3. - io_style_cond->mode_colorscale-colorrgb3 = lo_ixml->get_attribute_ns( 'rgb' ). + WHEN OTHERS. + EXIT. + ENDCASE. - WHEN OTHERS. - EXIT. - ENDCASE. + lo_ixml ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'color' ). + lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). lo_ixml ?= lo_ixml_iterator->get_next( ). - ENDWHILE. + WHILE lo_ixml IS BOUND. -ENDMETHOD. + CASE sy-index. + WHEN 1. + io_style_cond->mode_colorscale-colorrgb1 = lo_ixml->get_attribute_ns( 'rgb' ). + WHEN 2. + io_style_cond->mode_colorscale-colorrgb2 = lo_ixml->get_attribute_ns( 'rgb' ). -METHOD load_worksheet_cond_format_db. - DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml TYPE REF TO if_ixml_element. + WHEN 3. + io_style_cond->mode_colorscale-colorrgb3 = lo_ixml->get_attribute_ns( 'rgb' ). - lo_ixml ?= io_ixml_rule->find_from_name( 'color' ). - IF lo_ixml IS BOUND. - io_style_cond->mode_databar-colorrgb = lo_ixml->get_attribute_ns( 'rgb' ). - ENDIF. + WHEN OTHERS. + EXIT. + ENDCASE. - lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'cfvo' ). - lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). - lo_ixml ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml IS BOUND. + lo_ixml ?= lo_ixml_iterator->get_next( ). + ENDWHILE. - CASE sy-index. - WHEN 1. - io_style_cond->mode_databar-cfvo1_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_databar-cfvo1_value = lo_ixml->get_attribute_ns( 'val' ). + ENDMETHOD. - WHEN 2. - io_style_cond->mode_databar-cfvo2_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_databar-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN OTHERS. - EXIT. - ENDCASE. + METHOD load_worksheet_cond_format_db. + DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml TYPE REF TO if_ixml_element. + + lo_ixml ?= io_ixml_rule->find_from_name( 'color' ). + IF lo_ixml IS BOUND. + io_style_cond->mode_databar-colorrgb = lo_ixml->get_attribute_ns( 'rgb' ). + ENDIF. + lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'cfvo' ). + lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). lo_ixml ?= lo_ixml_iterator->get_next( ). - ENDWHILE. + WHILE lo_ixml IS BOUND. + CASE sy-index. + WHEN 1. + io_style_cond->mode_databar-cfvo1_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_databar-cfvo1_value = lo_ixml->get_attribute_ns( 'val' ). -ENDMETHOD. + WHEN 2. + io_style_cond->mode_databar-cfvo2_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_databar-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). + WHEN OTHERS. + EXIT. + ENDCASE. -METHOD load_worksheet_cond_format_ex. - DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml TYPE REF TO if_ixml_element, - lv_dxf_style_index TYPE i, - lo_excel_style LIKE LINE OF me->styles. + lo_ixml ?= lo_ixml_iterator->get_next( ). + ENDWHILE. - FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. - lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). - READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. - IF sy-subrc = 0. - io_style_cond->mode_expression-cell_style = -guid. - ENDIF. + ENDMETHOD. - lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'formula' ). - lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). - lo_ixml ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml IS BOUND. - CASE sy-index. - WHEN 1. - io_style_cond->mode_expression-formula = lo_ixml->get_value( ). + METHOD load_worksheet_cond_format_ex. + DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml TYPE REF TO if_ixml_element, + lv_dxf_style_index TYPE i, + lo_excel_style LIKE LINE OF me->styles. + FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. - WHEN OTHERS. - EXIT. - ENDCASE. + lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). + READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. + IF sy-subrc = 0. + io_style_cond->mode_expression-cell_style = -guid. + ENDIF. + lo_ixml_nodes ?= io_ixml_rule->get_elements_by_tag_name( 'formula' ). + lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). lo_ixml ?= lo_ixml_iterator->get_next( ). - ENDWHILE. + WHILE lo_ixml IS BOUND. + + CASE sy-index. + WHEN 1. + io_style_cond->mode_expression-formula = lo_ixml->get_value( ). + + + WHEN OTHERS. + EXIT. + ENDCASE. + lo_ixml ?= lo_ixml_iterator->get_next( ). + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -METHOD load_worksheet_cond_format_is. - DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml TYPE REF TO if_ixml_element, - lo_ixml_rule_iconset TYPE REF TO if_ixml_element. - lo_ixml_rule_iconset ?= io_ixml_rule->get_first_child( ). - io_style_cond->mode_iconset-iconset = lo_ixml_rule_iconset->get_attribute_ns( 'iconSet' ). - io_style_cond->mode_iconset-showvalue = lo_ixml_rule_iconset->get_attribute_ns( 'showValue' ). - lo_ixml_nodes ?= lo_ixml_rule_iconset->get_elements_by_tag_name( 'cfvo' ). - lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). - lo_ixml ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml IS BOUND. + METHOD load_worksheet_cond_format_is. + DATA: lo_ixml_nodes TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml TYPE REF TO if_ixml_element, + lo_ixml_rule_iconset TYPE REF TO if_ixml_element. - CASE sy-index. - WHEN 1. - io_style_cond->mode_iconset-cfvo1_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_iconset-cfvo1_value = lo_ixml->get_attribute_ns( 'val' ). + lo_ixml_rule_iconset ?= io_ixml_rule->get_first_child( ). + io_style_cond->mode_iconset-iconset = lo_ixml_rule_iconset->get_attribute_ns( 'iconSet' ). + io_style_cond->mode_iconset-showvalue = lo_ixml_rule_iconset->get_attribute_ns( 'showValue' ). + lo_ixml_nodes ?= lo_ixml_rule_iconset->get_elements_by_tag_name( 'cfvo' ). + lo_ixml_iterator = lo_ixml_nodes->create_iterator( ). + lo_ixml ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml IS BOUND. - WHEN 2. - io_style_cond->mode_iconset-cfvo2_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_iconset-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). + CASE sy-index. + WHEN 1. + io_style_cond->mode_iconset-cfvo1_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_iconset-cfvo1_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN 3. - io_style_cond->mode_iconset-cfvo3_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_iconset-cfvo3_value = lo_ixml->get_attribute_ns( 'val' ). + WHEN 2. + io_style_cond->mode_iconset-cfvo2_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_iconset-cfvo2_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN 4. - io_style_cond->mode_iconset-cfvo4_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_iconset-cfvo4_value = lo_ixml->get_attribute_ns( 'val' ). + WHEN 3. + io_style_cond->mode_iconset-cfvo3_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_iconset-cfvo3_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN 5. - io_style_cond->mode_iconset-cfvo5_type = lo_ixml->get_attribute_ns( 'type' ). - io_style_cond->mode_iconset-cfvo5_value = lo_ixml->get_attribute_ns( 'val' ). + WHEN 4. + io_style_cond->mode_iconset-cfvo4_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_iconset-cfvo4_value = lo_ixml->get_attribute_ns( 'val' ). - WHEN OTHERS. - EXIT. - ENDCASE. + WHEN 5. + io_style_cond->mode_iconset-cfvo5_type = lo_ixml->get_attribute_ns( 'type' ). + io_style_cond->mode_iconset-cfvo5_value = lo_ixml->get_attribute_ns( 'val' ). - lo_ixml ?= lo_ixml_iterator->get_next( ). - ENDWHILE. + WHEN OTHERS. + EXIT. + ENDCASE. -ENDMETHOD. + lo_ixml ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + + ENDMETHOD. -METHOD load_worksheet_cond_format_t10. - DATA: lv_dxf_style_index TYPE i. + METHOD load_worksheet_cond_format_t10. + DATA: lv_dxf_style_index TYPE i. - FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. + FIELD-SYMBOLS: LIKE LINE OF me->mt_dxf_styles. - io_style_cond->mode_top10-topxx_count = io_ixml_rule->get_attribute_ns( 'rank' ). " Top10, Top20, Top 50... + io_style_cond->mode_top10-topxx_count = io_ixml_rule->get_attribute_ns( 'rank' ). " Top10, Top20, Top 50... - io_style_cond->mode_top10-percent = io_ixml_rule->get_attribute_ns( 'percent' ). " Top10 percent instead of Top10 values - IF io_style_cond->mode_top10-percent = '1'. - io_style_cond->mode_top10-percent = 'X'. - ELSE. - io_style_cond->mode_top10-percent = ' '. - ENDIF. + io_style_cond->mode_top10-percent = io_ixml_rule->get_attribute_ns( 'percent' ). " Top10 percent instead of Top10 values + IF io_style_cond->mode_top10-percent = '1'. + io_style_cond->mode_top10-percent = 'X'. + ELSE. + io_style_cond->mode_top10-percent = ' '. + ENDIF. - io_style_cond->mode_top10-bottom = io_ixml_rule->get_attribute_ns( 'bottom' ). " Bottom10 instead of Top10 - IF io_style_cond->mode_top10-bottom = '1'. - io_style_cond->mode_top10-bottom = 'X'. - ELSE. - io_style_cond->mode_top10-bottom = ' '. - ENDIF. + io_style_cond->mode_top10-bottom = io_ixml_rule->get_attribute_ns( 'bottom' ). " Bottom10 instead of Top10 + IF io_style_cond->mode_top10-bottom = '1'. + io_style_cond->mode_top10-bottom = 'X'. + ELSE. + io_style_cond->mode_top10-bottom = ' '. + ENDIF. *--------------------------------------------------------------------* * Cell formatting for top10 *--------------------------------------------------------------------* - lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). - READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. - IF sy-subrc = 0. - io_style_cond->mode_top10-cell_style = -guid. - ENDIF. - -ENDMETHOD. - - -method LOAD_WORKSHEET_DRAWING. - - TYPES: BEGIN OF t_c_nv_pr, - name TYPE string, - id TYPE string, - END OF t_c_nv_pr. - - TYPES: BEGIN OF t_blip, - cstate TYPE string, - embed TYPE string, - END OF t_blip. - - TYPES: BEGIN OF t_chart, - id TYPE string, - END OF t_chart. - - CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', - lc_xml_attr_true_int TYPE string VALUE '1'. - CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', - lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. - - DATA: drawing TYPE REF TO if_ixml_document, - anchors TYPE REF TO if_ixml_node_collection, - node TYPE REF TO if_ixml_element, - coll_length TYPE i, - iterator TYPE REF TO if_ixml_node_iterator, - anchor_elem TYPE REF TO if_ixml_element, - - relationship TYPE t_relationship, - rel_drawings TYPE t_rel_drawings, - rel_drawing TYPE t_rel_drawing, - rels_drawing TYPE REF TO if_ixml_document, - rels_drawing_path TYPE string, - stripped_name TYPE chkfile, - dirname TYPE string, - - path TYPE string, - path2 TYPE text255, - file_ext2 TYPE char10. - - " Read Workbook Relationships - CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' - EXPORTING - full_name = ip_path - IMPORTING - stripped_name = stripped_name - file_path = dirname. - CONCATENATE dirname '_rels/' stripped_name '.rels' - INTO rels_drawing_path. - rels_drawing_path = resolve_path( rels_drawing_path ). - rels_drawing = me->get_ixml_from_zip_archive( rels_drawing_path ). - node ?= rels_drawing->find_from_name( 'Relationship' ). - WHILE node IS BOUND. - fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). - - rel_drawing-id = relationship-id. - - CONCATENATE dirname relationship-target INTO path. - path = resolve_path( path ). - rel_drawing-content = me->get_from_zip_archive( path ). "------------> This is for template usage - - path2 = path. - zcl_excel_common=>split_file( EXPORTING ip_file = path2 - IMPORTING ep_extension = file_ext2 ). - rel_drawing-file_ext = file_ext2. - - "-------------Added by Alessandro Iannacci - Should load graph xml - CASE relationship-type. - WHEN lc_rel_chart. - "Read chart xml - rel_drawing-content_xml = me->get_ixml_from_zip_archive( path ). - WHEN OTHERS. - ENDCASE. - "---------------------------- + lv_dxf_style_index = io_ixml_rule->get_attribute_ns( 'dxfId' ). + READ TABLE me->mt_dxf_styles ASSIGNING WITH KEY dxf = lv_dxf_style_index. + IF sy-subrc = 0. + io_style_cond->mode_top10-cell_style = -guid. + ENDIF. + + ENDMETHOD. + + + METHOD load_worksheet_drawing. + + TYPES: BEGIN OF t_c_nv_pr, + name TYPE string, + id TYPE string, + END OF t_c_nv_pr. + + TYPES: BEGIN OF t_blip, + cstate TYPE string, + embed TYPE string, + END OF t_blip. + + TYPES: BEGIN OF t_chart, + id TYPE string, + END OF t_chart. + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1'. + CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. + + DATA: drawing TYPE REF TO if_ixml_document, + anchors TYPE REF TO if_ixml_node_collection, + node TYPE REF TO if_ixml_element, + coll_length TYPE i, + iterator TYPE REF TO if_ixml_node_iterator, + anchor_elem TYPE REF TO if_ixml_element, + + relationship TYPE t_relationship, + rel_drawings TYPE t_rel_drawings, + rel_drawing TYPE t_rel_drawing, + rels_drawing TYPE REF TO if_ixml_document, + rels_drawing_path TYPE string, + stripped_name TYPE chkfile, + dirname TYPE string, + + path TYPE string, + path2 TYPE text255, + file_ext2 TYPE char10. + + " Read Workbook Relationships + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = ip_path + IMPORTING + stripped_name = stripped_name + file_path = dirname. + CONCATENATE dirname '_rels/' stripped_name '.rels' + INTO rels_drawing_path. + rels_drawing_path = resolve_path( rels_drawing_path ). + rels_drawing = me->get_ixml_from_zip_archive( rels_drawing_path ). + node ?= rels_drawing->find_from_name( 'Relationship' ). + WHILE node IS BOUND. + fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). + + rel_drawing-id = relationship-id. + + CONCATENATE dirname relationship-target INTO path. + path = resolve_path( path ). + rel_drawing-content = me->get_from_zip_archive( path ). "------------> This is for template usage + + path2 = path. + zcl_excel_common=>split_file( EXPORTING ip_file = path2 + IMPORTING ep_extension = file_ext2 ). + rel_drawing-file_ext = file_ext2. + + "-------------Added by Alessandro Iannacci - Should load graph xml + CASE relationship-type. + WHEN lc_rel_chart. + "Read chart xml + rel_drawing-content_xml = me->get_ixml_from_zip_archive( path ). + WHEN OTHERS. + ENDCASE. + "---------------------------- - APPEND rel_drawing TO rel_drawings. + APPEND rel_drawing TO rel_drawings. - node ?= node->get_next( ). - ENDWHILE. + node ?= node->get_next( ). + ENDWHILE. - drawing = me->get_ixml_from_zip_archive( ip_path ). + drawing = me->get_ixml_from_zip_archive( ip_path ). * one-cell anchor ************** - anchors = drawing->get_elements_by_tag_name( name = 'oneCellAnchor' namespace = 'xdr' ). - coll_length = anchors->get_length( ). - iterator = anchors->create_iterator( ). - DO coll_length TIMES. - anchor_elem ?= iterator->get_next( ). + anchors = drawing->get_elements_by_tag_name( name = 'oneCellAnchor' namespace = 'xdr' ). + coll_length = anchors->get_length( ). + iterator = anchors->create_iterator( ). + DO coll_length TIMES. + anchor_elem ?= iterator->get_next( ). - CALL METHOD me->load_drawing_anchor - EXPORTING - io_anchor_element = anchor_elem - io_worksheet = io_worksheet - it_related_drawings = rel_drawings. + CALL METHOD me->load_drawing_anchor + EXPORTING + io_anchor_element = anchor_elem + io_worksheet = io_worksheet + it_related_drawings = rel_drawings. - ENDDO. + ENDDO. * two-cell anchor ****************** - anchors = drawing->get_elements_by_tag_name( name = 'twoCellAnchor' namespace = 'xdr' ). - coll_length = anchors->get_length( ). - iterator = anchors->create_iterator( ). - DO coll_length TIMES. - anchor_elem ?= iterator->get_next( ). + anchors = drawing->get_elements_by_tag_name( name = 'twoCellAnchor' namespace = 'xdr' ). + coll_length = anchors->get_length( ). + iterator = anchors->create_iterator( ). + DO coll_length TIMES. + anchor_elem ?= iterator->get_next( ). - CALL METHOD me->load_drawing_anchor - EXPORTING - io_anchor_element = anchor_elem - io_worksheet = io_worksheet - it_related_drawings = rel_drawings. - - ENDDO. - - endmethod. - - -METHOD load_worksheet_hyperlinks. - - DATA: lo_ixml_hyperlinks TYPE REF TO if_ixml_node_collection, - lo_ixml_hyperlink TYPE REF TO if_ixml_element, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lv_row_start TYPE zexcel_cell_row, - lv_row_end TYPE zexcel_cell_row, - lv_column_start TYPE zexcel_cell_column_alpha, - lv_column_end TYPE zexcel_cell_column_alpha, - lv_is_internal TYPE abap_bool, - lv_url TYPE string, - lv_value TYPE zexcel_cell_value. - - DATA: BEGIN OF ls_hyperlink, - ref TYPE string, - display TYPE string, - location TYPE string, - tooltip TYPE string, - r_id TYPE string, - END OF ls_hyperlink. - - FIELD-SYMBOLS: LIKE LINE OF it_external_hyperlinks. - - lo_ixml_hyperlinks = io_ixml_worksheet->get_elements_by_tag_name( name = 'hyperlink' ). - lo_ixml_iterator = lo_ixml_hyperlinks->create_iterator( ). - lo_ixml_hyperlink ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml_hyperlink IS BOUND. - - CLEAR ls_hyperlink. - CLEAR lv_url. - - ls_hyperlink-ref = lo_ixml_hyperlink->get_attribute_ns( 'ref' ). - ls_hyperlink-display = lo_ixml_hyperlink->get_attribute_ns( 'display' ). - ls_hyperlink-location = lo_ixml_hyperlink->get_attribute_ns( 'location' ). - ls_hyperlink-tooltip = lo_ixml_hyperlink->get_attribute_ns( 'tooltip' ). - ls_hyperlink-r_id = lo_ixml_hyperlink->get_attribute( name = 'id' - namespace = 'r' ). - IF ls_hyperlink-r_id IS INITIAL. " Internal link - lv_is_internal = abap_true. - lv_url = ls_hyperlink-location. - ELSE. " External link - READ TABLE it_external_hyperlinks ASSIGNING WITH TABLE KEY id = ls_hyperlink-r_id. - IF sy-subrc = 0. - lv_is_internal = abap_false. - lv_url = -target. - ENDIF. - ENDIF. + CALL METHOD me->load_drawing_anchor + EXPORTING + io_anchor_element = anchor_elem + io_worksheet = io_worksheet + it_related_drawings = rel_drawings. - IF lv_url IS NOT INITIAL. " because of unsupported external links + ENDDO. - zcl_excel_common=>convert_range2column_a_row( - EXPORTING - i_range = ls_hyperlink-ref - IMPORTING - e_column_start = lv_column_start - e_column_end = lv_column_end - e_row_start = lv_row_start - e_row_end = lv_row_end ). - - io_worksheet->set_area_hyperlink( - EXPORTING - ip_column_start = lv_column_start - ip_column_end = lv_column_end - ip_row = lv_row_start - ip_row_to = lv_row_end - ip_url = lv_url - ip_is_internal = lv_is_internal ). + ENDMETHOD. - ENDIF. - lo_ixml_hyperlink ?= lo_ixml_iterator->get_next( ). + METHOD load_worksheet_hyperlinks. + + DATA: lo_ixml_hyperlinks TYPE REF TO if_ixml_node_collection, + lo_ixml_hyperlink TYPE REF TO if_ixml_element, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lv_row_start TYPE zexcel_cell_row, + lv_row_end TYPE zexcel_cell_row, + lv_column_start TYPE zexcel_cell_column_alpha, + lv_column_end TYPE zexcel_cell_column_alpha, + lv_is_internal TYPE abap_bool, + lv_url TYPE string, + lv_value TYPE zexcel_cell_value. + + DATA: BEGIN OF ls_hyperlink, + ref TYPE string, + display TYPE string, + location TYPE string, + tooltip TYPE string, + r_id TYPE string, + END OF ls_hyperlink. + + FIELD-SYMBOLS: LIKE LINE OF it_external_hyperlinks. + + lo_ixml_hyperlinks = io_ixml_worksheet->get_elements_by_tag_name( name = 'hyperlink' ). + lo_ixml_iterator = lo_ixml_hyperlinks->create_iterator( ). + lo_ixml_hyperlink ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_hyperlink IS BOUND. + + CLEAR ls_hyperlink. + CLEAR lv_url. + + ls_hyperlink-ref = lo_ixml_hyperlink->get_attribute_ns( 'ref' ). + ls_hyperlink-display = lo_ixml_hyperlink->get_attribute_ns( 'display' ). + ls_hyperlink-location = lo_ixml_hyperlink->get_attribute_ns( 'location' ). + ls_hyperlink-tooltip = lo_ixml_hyperlink->get_attribute_ns( 'tooltip' ). + ls_hyperlink-r_id = lo_ixml_hyperlink->get_attribute( name = 'id' + namespace = 'r' ). + IF ls_hyperlink-r_id IS INITIAL. " Internal link + lv_is_internal = abap_true. + lv_url = ls_hyperlink-location. + ELSE. " External link + READ TABLE it_external_hyperlinks ASSIGNING WITH TABLE KEY id = ls_hyperlink-r_id. + IF sy-subrc = 0. + lv_is_internal = abap_false. + lv_url = -target. + ENDIF. + ENDIF. - ENDWHILE. + IF lv_url IS NOT INITIAL. " because of unsupported external links + + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = ls_hyperlink-ref + IMPORTING + e_column_start = lv_column_start + e_column_end = lv_column_end + e_row_start = lv_row_start + e_row_end = lv_row_end ). + + io_worksheet->set_area_hyperlink( + EXPORTING + ip_column_start = lv_column_start + ip_column_end = lv_column_end + ip_row = lv_row_start + ip_row_to = lv_row_end + ip_url = lv_url + ip_is_internal = lv_is_internal ). + ENDIF. -ENDMETHOD. + lo_ixml_hyperlink ?= lo_ixml_iterator->get_next( ). + ENDWHILE. -METHOD load_worksheet_pagebreaks. - DATA: lo_node TYPE REF TO if_ixml_element, - lo_ixml_rowbreaks TYPE REF TO if_ixml_node_collection, - lo_ixml_colbreaks TYPE REF TO if_ixml_node_collection, - lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, - lo_ixml_rowbreak TYPE REF TO if_ixml_element, - lo_ixml_colbreak TYPE REF TO if_ixml_element, - lo_style_cond TYPE REF TO zcl_excel_style_cond, - lv_count TYPE i. + ENDMETHOD. + + + METHOD load_worksheet_pagebreaks. + DATA: lo_node TYPE REF TO if_ixml_element, + lo_ixml_rowbreaks TYPE REF TO if_ixml_node_collection, + lo_ixml_colbreaks TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml_rowbreak TYPE REF TO if_ixml_element, + lo_ixml_colbreak TYPE REF TO if_ixml_element, + lo_style_cond TYPE REF TO zcl_excel_style_cond, + lv_count TYPE i. - DATA: lt_pagebreaks TYPE STANDARD TABLE OF zcl_excel_worksheet_pagebreaks=>ts_pagebreak_at, - lo_pagebreaks TYPE REF TO zcl_excel_worksheet_pagebreaks. - FIELD-SYMBOLS: LIKE LINE OF lt_pagebreaks. - FIELD-SYMBOLS: LIKE LINE OF lt_pagebreaks. + DATA: lt_pagebreaks TYPE STANDARD TABLE OF zcl_excel_worksheet_pagebreaks=>ts_pagebreak_at, + lo_pagebreaks TYPE REF TO zcl_excel_worksheet_pagebreaks. + + FIELD-SYMBOLS: LIKE LINE OF lt_pagebreaks. + FIELD-SYMBOLS: LIKE LINE OF lt_pagebreaks. *--------------------------------------------------------------------* * Get minimal number of cells where to add pagebreaks * Since rows and columns are handled in separate nodes * Build table to identify these cells *--------------------------------------------------------------------* - lo_node ?= io_ixml_worksheet->find_from_name( 'rowBreaks' ). - check lo_node is bound. - lo_ixml_rowbreaks = lo_node->get_elements_by_tag_name( name = 'brk' ). - lo_ixml_iterator = lo_ixml_rowbreaks->create_iterator( ). - lo_ixml_rowbreak ?= lo_ixml_iterator->get_next( ). - WHILE lo_ixml_rowbreak IS BOUND. - APPEND INITIAL LINE TO lt_pagebreaks ASSIGNING . - -cell_row = lo_ixml_rowbreak->get_attribute_ns( 'id' ). - + lo_node ?= io_ixml_worksheet->find_from_name( 'rowBreaks' ). + CHECK lo_node IS BOUND. + lo_ixml_rowbreaks = lo_node->get_elements_by_tag_name( name = 'brk' ). + lo_ixml_iterator = lo_ixml_rowbreaks->create_iterator( ). lo_ixml_rowbreak ?= lo_ixml_iterator->get_next( ). - ENDWHILE. - CHECK IS ASSIGNED. - - lo_node ?= io_ixml_worksheet->find_from_name( 'colBreaks' ). - check lo_node is bound. - lo_ixml_colbreaks = lo_node->get_elements_by_tag_name( name = 'brk' ). - lo_ixml_iterator = lo_ixml_colbreaks->create_iterator( ). - lo_ixml_colbreak ?= lo_ixml_iterator->get_next( ). - CLEAR lv_count. - WHILE lo_ixml_colbreak IS BOUND. - ADD 1 TO lv_count. - READ TABLE lt_pagebreaks INDEX lv_count ASSIGNING . - IF sy-subrc <> 0. - APPEND INITIAL LINE TO lt_pagebreaks ASSIGNING . - -cell_row = -cell_row. - ENDIF. - -cell_column = lo_ixml_colbreak->get_attribute_ns( 'id' ). + WHILE lo_ixml_rowbreak IS BOUND. + APPEND INITIAL LINE TO lt_pagebreaks ASSIGNING . + -cell_row = lo_ixml_rowbreak->get_attribute_ns( 'id' ). + + lo_ixml_rowbreak ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + CHECK IS ASSIGNED. + lo_node ?= io_ixml_worksheet->find_from_name( 'colBreaks' ). + CHECK lo_node IS BOUND. + lo_ixml_colbreaks = lo_node->get_elements_by_tag_name( name = 'brk' ). + lo_ixml_iterator = lo_ixml_colbreaks->create_iterator( ). lo_ixml_colbreak ?= lo_ixml_iterator->get_next( ). - ENDWHILE. + CLEAR lv_count. + WHILE lo_ixml_colbreak IS BOUND. + ADD 1 TO lv_count. + READ TABLE lt_pagebreaks INDEX lv_count ASSIGNING . + IF sy-subrc <> 0. + APPEND INITIAL LINE TO lt_pagebreaks ASSIGNING . + -cell_row = -cell_row. + ENDIF. + -cell_column = lo_ixml_colbreak->get_attribute_ns( 'id' ). + + lo_ixml_colbreak ?= lo_ixml_iterator->get_next( ). + ENDWHILE. *--------------------------------------------------------------------* * Finally add each pagebreak *--------------------------------------------------------------------* - lo_pagebreaks = io_worksheet->get_pagebreaks( ). - LOOP AT lt_pagebreaks ASSIGNING . - lo_pagebreaks->add_pagebreak( ip_column = -cell_column - ip_row = -cell_row ). - ENDLOOP. + lo_pagebreaks = io_worksheet->get_pagebreaks( ). + LOOP AT lt_pagebreaks ASSIGNING . + lo_pagebreaks->add_pagebreak( ip_column = -cell_column + ip_row = -cell_row ). + ENDLOOP. -ENDMETHOD. + ENDMETHOD. -METHOD load_worksheet_pagemargins. + METHOD load_worksheet_pagemargins. - TYPES: BEGIN OF lty_page_margins, - footer TYPE string, - header TYPE string, - bottom TYPE string, - top TYPE string, - right TYPE string, - left TYPE string, - END OF lty_page_margins. + TYPES: BEGIN OF lty_page_margins, + footer TYPE string, + header TYPE string, + bottom TYPE string, + top TYPE string, + right TYPE string, + left TYPE string, + END OF lty_page_margins. - DATA:lo_ixml_pagemargins_elem TYPE REF TO if_ixml_element, - ls_pagemargins TYPE lty_page_margins. + DATA:lo_ixml_pagemargins_elem TYPE REF TO if_ixml_element, + ls_pagemargins TYPE lty_page_margins. - lo_ixml_pagemargins_elem = io_ixml_worksheet->find_from_name( 'pageMargins' ). - IF lo_ixml_pagemargins_elem IS NOT INITIAL. - fill_struct_from_attributes( EXPORTING - ip_element = lo_ixml_pagemargins_elem - CHANGING - cp_structure = ls_pagemargins ). - io_worksheet->sheet_setup->margin_bottom = zcl_excel_common=>excel_string_to_number( ls_pagemargins-bottom ). - io_worksheet->sheet_setup->margin_footer = zcl_excel_common=>excel_string_to_number( ls_pagemargins-footer ). - io_worksheet->sheet_setup->margin_header = zcl_excel_common=>excel_string_to_number( ls_pagemargins-header ). - io_worksheet->sheet_setup->margin_left = zcl_excel_common=>excel_string_to_number( ls_pagemargins-left ). - io_worksheet->sheet_setup->margin_right = zcl_excel_common=>excel_string_to_number( ls_pagemargins-right ). - io_worksheet->sheet_setup->margin_top = zcl_excel_common=>excel_string_to_number( ls_pagemargins-top ). - ENDIF. + lo_ixml_pagemargins_elem = io_ixml_worksheet->find_from_name( 'pageMargins' ). + IF lo_ixml_pagemargins_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_pagemargins_elem + CHANGING + cp_structure = ls_pagemargins ). + io_worksheet->sheet_setup->margin_bottom = zcl_excel_common=>excel_string_to_number( ls_pagemargins-bottom ). + io_worksheet->sheet_setup->margin_footer = zcl_excel_common=>excel_string_to_number( ls_pagemargins-footer ). + io_worksheet->sheet_setup->margin_header = zcl_excel_common=>excel_string_to_number( ls_pagemargins-header ). + io_worksheet->sheet_setup->margin_left = zcl_excel_common=>excel_string_to_number( ls_pagemargins-left ). + io_worksheet->sheet_setup->margin_right = zcl_excel_common=>excel_string_to_number( ls_pagemargins-right ). + io_worksheet->sheet_setup->margin_top = zcl_excel_common=>excel_string_to_number( ls_pagemargins-top ). + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD read_from_applserver. + METHOD read_from_applserver. - DATA: lv_filelength TYPE i, - lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, - ls_binary_data LIKE LINE OF lt_binary_data, - lv_filename TYPE string, - lv_max_length_line TYPE i, - lv_actual_length_line TYPE i, - lv_errormessage TYPE string. + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_max_length_line TYPE i, + lv_actual_length_line TYPE i, + lv_errormessage TYPE string. MOVE i_filename TO lv_filename. @@ -3620,12 +3620,12 @@ METHOD read_from_applserver. ENDMETHOD. -METHOD read_from_local_file. - DATA: lv_filelength TYPE i, - lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, - ls_binary_data LIKE LINE OF lt_binary_data, - lv_filename TYPE string, - lv_errormessage TYPE string. + METHOD read_from_local_file. + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_errormessage TYPE string. MOVE i_filename TO lv_filename. @@ -3675,7 +3675,7 @@ METHOD read_from_local_file. ENDMETHOD. -method RESOLVE_PATH. + METHOD resolve_path. *--------------------------------------------------------------------* * ToDos: * 2do§1 Determine whether the replacement should be done @@ -3702,7 +3702,7 @@ method RESOLVE_PATH. * Output xl/drawings/drawing1.xml *--------------------------------------------------------------------* - rp_result = ip_path. + rp_result = ip_path. *--------------------------------------------------------------------* * §1 Remove relative pathnames *--------------------------------------------------------------------* @@ -3711,123 +3711,123 @@ method RESOLVE_PATH. * followed by /\.\./ --> the sequence /../ * ==> worksheets/../ will be found in the example *--------------------------------------------------------------------* - REPLACE REGEX '[^/]*/\.\./' IN rp_result WITH ``. + REPLACE REGEX '[^/]*/\.\./' IN rp_result WITH ``. - endmethod. + ENDMETHOD. -method RESOLVE_REFERENCED_FORMULAE. - TYPES: BEGIN OF ty_referenced_cells, - sheet TYPE REF TO zcl_excel_worksheet, - si TYPE i, - row_from TYPE i, - row_to TYPE i, - col_from TYPE i, - col_to TYPE i, - formula TYPE string, - ref_cell TYPE char10, - END OF ty_referenced_cells. + METHOD resolve_referenced_formulae. + TYPES: BEGIN OF ty_referenced_cells, + sheet TYPE REF TO zcl_excel_worksheet, + si TYPE i, + row_from TYPE i, + row_to TYPE i, + col_from TYPE i, + col_to TYPE i, + formula TYPE string, + ref_cell TYPE char10, + END OF ty_referenced_cells. - DATA: ls_ref_formula LIKE LINE OF me->mt_ref_formulae, - lts_referenced_cells TYPE SORTED TABLE OF ty_referenced_cells WITH NON-UNIQUE KEY sheet si row_from row_to col_from col_to, - ls_referenced_cell LIKE LINE OF lts_referenced_cells, - lv_col_from TYPE zexcel_cell_column_alpha, - lv_col_to TYPE zexcel_cell_column_alpha, - lv_resulting_formula TYPE string, - lv_current_cell TYPE char10. + DATA: ls_ref_formula LIKE LINE OF me->mt_ref_formulae, + lts_referenced_cells TYPE SORTED TABLE OF ty_referenced_cells WITH NON-UNIQUE KEY sheet si row_from row_to col_from col_to, + ls_referenced_cell LIKE LINE OF lts_referenced_cells, + lv_col_from TYPE zexcel_cell_column_alpha, + lv_col_to TYPE zexcel_cell_column_alpha, + lv_resulting_formula TYPE string, + lv_current_cell TYPE char10. - me->mt_ref_formulae = me->mt_ref_formulae. + me->mt_ref_formulae = me->mt_ref_formulae. *--------------------------------------------------------------------* * Get referenced Cells, Build ranges for easy lookup *--------------------------------------------------------------------* - LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref <> space. + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref <> space. - CLEAR ls_referenced_cell. - ls_referenced_cell-sheet = ls_ref_formula-sheet. - ls_referenced_cell-si = ls_ref_formula-si. - ls_referenced_cell-formula = ls_ref_formula-formula. + CLEAR ls_referenced_cell. + ls_referenced_cell-sheet = ls_ref_formula-sheet. + ls_referenced_cell-si = ls_ref_formula-si. + ls_referenced_cell-formula = ls_ref_formula-formula. - TRY. - zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = ls_ref_formula-ref - IMPORTING e_column_start = lv_col_from - e_column_end = lv_col_to - e_row_start = ls_referenced_cell-row_from - e_row_end = ls_referenced_cell-row_to ). - ls_referenced_cell-col_from = zcl_excel_common=>convert_column2int( lv_col_from ). - ls_referenced_cell-col_to = zcl_excel_common=>convert_column2int( lv_col_to ). + TRY. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = ls_ref_formula-ref + IMPORTING e_column_start = lv_col_from + e_column_end = lv_col_to + e_row_start = ls_referenced_cell-row_from + e_row_end = ls_referenced_cell-row_to ). + ls_referenced_cell-col_from = zcl_excel_common=>convert_column2int( lv_col_from ). + ls_referenced_cell-col_to = zcl_excel_common=>convert_column2int( lv_col_to ). - CLEAR ls_referenced_cell-ref_cell. - TRY. - ls_referenced_cell-ref_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). - ls_referenced_cell-ref_cell+3 = ls_ref_formula-row. - CONDENSE ls_referenced_cell-ref_cell NO-GAPS. - CATCH zcx_excel. - ENDTRY. + CLEAR ls_referenced_cell-ref_cell. + TRY. + ls_referenced_cell-ref_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). + ls_referenced_cell-ref_cell+3 = ls_ref_formula-row. + CONDENSE ls_referenced_cell-ref_cell NO-GAPS. + CATCH zcx_excel. + ENDTRY. - INSERT ls_referenced_cell INTO TABLE lts_referenced_cells. - CATCH zcx_excel. - ENDTRY. + INSERT ls_referenced_cell INTO TABLE lts_referenced_cells. + CATCH zcx_excel. + ENDTRY. - ENDLOOP. + ENDLOOP. * break x0009004. *--------------------------------------------------------------------* * For each referencing cell determine the referenced cell * and resolve the formula *--------------------------------------------------------------------* - LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref = space. + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref = space. - CLEAR lv_current_cell. - TRY. - lv_current_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). - lv_current_cell+3 = ls_ref_formula-row. - CONDENSE lv_current_cell NO-GAPS. - CATCH zcx_excel. - ENDTRY. + CLEAR lv_current_cell. + TRY. + lv_current_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). + lv_current_cell+3 = ls_ref_formula-row. + CONDENSE lv_current_cell NO-GAPS. + CATCH zcx_excel. + ENDTRY. - LOOP AT lts_referenced_cells INTO ls_referenced_cell WHERE sheet = ls_ref_formula-sheet - AND si = ls_ref_formula-si - AND row_from <= ls_ref_formula-row - AND row_to >= ls_ref_formula-row - AND col_from <= ls_ref_formula-column - AND col_to >= ls_ref_formula-column. + LOOP AT lts_referenced_cells INTO ls_referenced_cell WHERE sheet = ls_ref_formula-sheet + AND si = ls_ref_formula-si + AND row_from <= ls_ref_formula-row + AND row_to >= ls_ref_formula-row + AND col_from <= ls_ref_formula-column + AND col_to >= ls_ref_formula-column. - TRY. + TRY. - lv_resulting_formula = zcl_excel_common=>determine_resulting_formula( iv_reference_cell = ls_referenced_cell-ref_cell - iv_reference_formula = ls_referenced_cell-formula - iv_current_cell = lv_current_cell ). + lv_resulting_formula = zcl_excel_common=>determine_resulting_formula( iv_reference_cell = ls_referenced_cell-ref_cell + iv_reference_formula = ls_referenced_cell-formula + iv_current_cell = lv_current_cell ). - ls_referenced_cell-sheet->set_cell_formula( ip_column = ls_ref_formula-column - ip_row = ls_ref_formula-row - ip_formula = lv_resulting_formula ). - CATCH zcx_excel. - ENDTRY. - EXIT. + ls_referenced_cell-sheet->set_cell_formula( ip_column = ls_ref_formula-column + ip_row = ls_ref_formula-row + ip_formula = lv_resulting_formula ). + CATCH zcx_excel. + ENDTRY. + EXIT. - ENDLOOP. + ENDLOOP. - ENDLOOP. - endmethod. + ENDLOOP. + ENDMETHOD. -METHOD zif_excel_reader~load. + METHOD zif_excel_reader~load. *--------------------------------------------------------------------* * ToDos: * 2do§1 Map Document Properties to ZCL_EXCEL *--------------------------------------------------------------------* - CONSTANTS: lcv_core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', - lcv_office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument'. + CONSTANTS: lcv_core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + lcv_office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument'. - DATA: lo_rels TYPE REF TO if_ixml_document, - lo_node TYPE REF TO if_ixml_element, - ls_relationship TYPE t_relationship. + DATA: lo_rels TYPE REF TO if_ixml_document, + lo_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship. *--------------------------------------------------------------------* * §1 Create EXCEL-Object we want to return to caller @@ -3859,72 +3859,72 @@ METHOD zif_excel_reader~load. *--------------------------------------------------------------------* * §1 Create EXCEL-Object we want to return to caller *--------------------------------------------------------------------* - IF iv_zcl_excel_classname IS INITIAL. - CREATE OBJECT r_excel. - ELSE. - CREATE OBJECT r_excel TYPE (iv_zcl_excel_classname). - ENDIF. + IF iv_zcl_excel_classname IS INITIAL. + CREATE OBJECT r_excel. + ELSE. + CREATE OBJECT r_excel TYPE (iv_zcl_excel_classname). + ENDIF. - zip = create_zip_archive( i_xlsx_binary = i_excel2007 - i_use_alternate_zip = i_use_alternate_zip ). + zip = create_zip_archive( i_xlsx_binary = i_excel2007 + i_use_alternate_zip = i_use_alternate_zip ). *--------------------------------------------------------------------* * §2 Get file in folderstructure *--------------------------------------------------------------------* - lo_rels = get_ixml_from_zip_archive( '_rels/.rels' ). + lo_rels = get_ixml_from_zip_archive( '_rels/.rels' ). *--------------------------------------------------------------------* * §3 Cycle through the Relationship Tags and use the ones we need *--------------------------------------------------------------------* - lo_node ?= lo_rels->find_from_name( 'Relationship' ). "#EC NOTEXT - WHILE lo_node IS BOUND. + lo_node ?= lo_rels->find_from_name( 'Relationship' ). "#EC NOTEXT + WHILE lo_node IS BOUND. - fill_struct_from_attributes( EXPORTING - ip_element = lo_node - CHANGING - cp_structure = ls_relationship ). - CASE ls_relationship-type. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_relationship ). + CASE ls_relationship-type. - WHEN lcv_office_document. + WHEN lcv_office_document. *--------------------------------------------------------------------* * Parse workbook - main part here *--------------------------------------------------------------------* - load_workbook( iv_workbook_full_filename = ls_relationship-target - io_excel = r_excel ). + load_workbook( iv_workbook_full_filename = ls_relationship-target + io_excel = r_excel ). - WHEN lcv_core_properties. - " 2do§1 Map Document Properties to ZCL_EXCEL + WHEN lcv_core_properties. + " 2do§1 Map Document Properties to ZCL_EXCEL - WHEN OTHERS. + WHEN OTHERS. - ENDCASE. - lo_node ?= lo_node->get_next( ). + ENDCASE. + lo_node ?= lo_node->get_next( ). - ENDWHILE. + ENDWHILE. -ENDMETHOD. + ENDMETHOD. -METHOD zif_excel_reader~load_file. + METHOD zif_excel_reader~load_file. - DATA: lv_excel_data TYPE xstring. + DATA: lv_excel_data TYPE xstring. *--------------------------------------------------------------------* * Read file into binary string *--------------------------------------------------------------------* - IF i_from_applserver = abap_true. - lv_excel_data = read_from_applserver( i_filename ). - ELSE. - lv_excel_data = read_from_local_file( i_filename ). - ENDIF. + IF i_from_applserver = abap_true. + lv_excel_data = read_from_applserver( i_filename ). + ELSE. + lv_excel_data = read_from_local_file( i_filename ). + ENDIF. *--------------------------------------------------------------------* * Parse Excel data into ZCL_EXCEL object from binary string *--------------------------------------------------------------------* - r_excel = zif_excel_reader~load( i_excel2007 = lv_excel_data - i_use_alternate_zip = i_use_alternate_zip - iv_zcl_excel_classname = iv_zcl_excel_classname ). + r_excel = zif_excel_reader~load( i_excel2007 = lv_excel_data + i_use_alternate_zip = i_use_alternate_zip + iv_zcl_excel_classname = iv_zcl_excel_classname ). -ENDMETHOD. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_reader_huge_file.clas.abap b/src/zcl_excel_reader_huge_file.clas.abap index f3fd9d6b5..ba411f3ae 100644 --- a/src/zcl_excel_reader_huge_file.clas.abap +++ b/src/zcl_excel_reader_huge_file.clas.abap @@ -1,314 +1,314 @@ -class ZCL_EXCEL_READER_HUGE_FILE definition - public - inheriting from ZCL_EXCEL_READER_2007 - create public . - -public section. -protected section. - - methods LOAD_SHARED_STRINGS - redefinition . - methods LOAD_WORKSHEET - redefinition . -private section. - - types: - begin of t_cell_content, - datatype type zexcel_cell_data_type, - value type zexcel_cell_value, - formula type zexcel_cell_formula, - style type zexcel_cell_style, - end of t_cell_content . - types: - begin of t_cell_coord, - row type zexcel_cell_row, - column type zexcel_cell_column_alpha, - end of t_cell_coord . - types: - begin of t_cell. - include type t_cell_coord as coord. - include type t_cell_content as content. - types: end of t_cell . - - interface IF_SXML_NODE load . - constants C_END_OF_STREAM type IF_SXML_NODE=>NODE_TYPE value IF_SXML_NODE=>CO_NT_FINAL. "#EC NOTEXT - constants C_ELEMENT_OPEN type IF_SXML_NODE=>NODE_TYPE value IF_SXML_NODE=>CO_NT_ELEMENT_OPEN. "#EC NOTEXT - constants C_ELEMENT_CLOSE type IF_SXML_NODE=>NODE_TYPE value IF_SXML_NODE=>CO_NT_ELEMENT_CLOSE. "#EC NOTEXT - data: - begin of gs_buffer_style, - index type i value -1, - guid type zexcel_cell_style, - end of gs_buffer_style . - constants C_ATTRIBUTE type IF_SXML_NODE=>NODE_TYPE value IF_SXML_NODE=>CO_NT_ATTRIBUTE. "#EC NOTEXT - constants C_NODE_VALUE type IF_SXML_NODE=>NODE_TYPE value IF_SXML_NODE=>CO_NT_VALUE. "#EC NOTEXT - - methods SKIP_TO - importing - !IV_ELEMENT_NAME type STRING - !IO_READER type ref to IF_SXML_READER - raising - LCX_NOT_FOUND . - methods FILL_CELL_FROM_ATTRIBUTES - importing - !IO_READER type ref to IF_SXML_READER - returning - value(ES_CELL) type T_CELL - raising - LCX_NOT_FOUND . - methods READ_SHARED_STRINGS - importing - !IO_READER type ref to IF_SXML_READER - returning - value(ET_SHARED_STRINGS) type STRINGTAB . - methods GET_CELL_COORD - importing - !IV_COORD type STRING - returning - value(ES_COORD) type T_CELL_COORD . - methods PUT_CELL_TO_WORKSHEET - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - !IS_CELL type T_CELL . - methods GET_SHARED_STRING - importing - !IV_INDEX type ANY - returning - value(EV_VALUE) type STRING - raising - LCX_NOT_FOUND . - methods GET_STYLE - importing - !IV_INDEX type ANY - returning - value(EV_STYLE_GUID) type ZEXCEL_CELL_STYLE - raising - LCX_NOT_FOUND . - methods READ_WORKSHEET_DATA - importing - !IO_READER type ref to IF_SXML_READER - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - LCX_NOT_FOUND . - methods GET_SXML_READER - importing - !IV_PATH type STRING - returning - value(EO_READER) type ref to IF_SXML_READER - raising - ZCX_EXCEL . +CLASS zcl_excel_reader_huge_file DEFINITION + PUBLIC + INHERITING FROM zcl_excel_reader_2007 + CREATE PUBLIC . + + PUBLIC SECTION. + PROTECTED SECTION. + + METHODS load_shared_strings + REDEFINITION . + METHODS load_worksheet + REDEFINITION . + PRIVATE SECTION. + + TYPES: + BEGIN OF t_cell_content, + datatype TYPE zexcel_cell_data_type, + value TYPE zexcel_cell_value, + formula TYPE zexcel_cell_formula, + style TYPE zexcel_cell_style, + END OF t_cell_content . + TYPES: + BEGIN OF t_cell_coord, + row TYPE zexcel_cell_row, + column TYPE zexcel_cell_column_alpha, + END OF t_cell_coord . + TYPES: + BEGIN OF t_cell. + INCLUDE TYPE t_cell_coord AS coord. + INCLUDE TYPE t_cell_content AS content. + TYPES: END OF t_cell . + + INTERFACE if_sxml_node LOAD . + CONSTANTS c_end_of_stream TYPE if_sxml_node=>node_type VALUE if_sxml_node=>co_nt_final. "#EC NOTEXT + CONSTANTS c_element_open TYPE if_sxml_node=>node_type VALUE if_sxml_node=>co_nt_element_open. "#EC NOTEXT + CONSTANTS c_element_close TYPE if_sxml_node=>node_type VALUE if_sxml_node=>co_nt_element_close. "#EC NOTEXT + DATA: + BEGIN OF gs_buffer_style, + index TYPE i VALUE -1, + guid TYPE zexcel_cell_style, + END OF gs_buffer_style . + CONSTANTS c_attribute TYPE if_sxml_node=>node_type VALUE if_sxml_node=>co_nt_attribute. "#EC NOTEXT + CONSTANTS c_node_value TYPE if_sxml_node=>node_type VALUE if_sxml_node=>co_nt_value. "#EC NOTEXT + + METHODS skip_to + IMPORTING + !iv_element_name TYPE string + !io_reader TYPE REF TO if_sxml_reader + RAISING + lcx_not_found . + METHODS fill_cell_from_attributes + IMPORTING + !io_reader TYPE REF TO if_sxml_reader + RETURNING + VALUE(es_cell) TYPE t_cell + RAISING + lcx_not_found . + METHODS read_shared_strings + IMPORTING + !io_reader TYPE REF TO if_sxml_reader + RETURNING + VALUE(et_shared_strings) TYPE stringtab . + METHODS get_cell_coord + IMPORTING + !iv_coord TYPE string + RETURNING + VALUE(es_coord) TYPE t_cell_coord . + METHODS put_cell_to_worksheet + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + !is_cell TYPE t_cell . + METHODS get_shared_string + IMPORTING + !iv_index TYPE any + RETURNING + VALUE(ev_value) TYPE string + RAISING + lcx_not_found . + METHODS get_style + IMPORTING + !iv_index TYPE any + RETURNING + VALUE(ev_style_guid) TYPE zexcel_cell_style + RAISING + lcx_not_found . + METHODS read_worksheet_data + IMPORTING + !io_reader TYPE REF TO if_sxml_reader + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + lcx_not_found . + METHODS get_sxml_reader + IMPORTING + !iv_path TYPE string + RETURNING + VALUE(eo_reader) TYPE REF TO if_sxml_reader + RAISING + zcx_excel . ENDCLASS. -CLASS ZCL_EXCEL_READER_HUGE_FILE IMPLEMENTATION. +CLASS zcl_excel_reader_huge_file IMPLEMENTATION. -method FILL_CELL_FROM_ATTRIBUTES. + METHOD fill_cell_from_attributes. - while io_reader->node_type ne c_end_of_stream. - io_reader->next_attribute( ). - if io_reader->node_type ne c_attribute. - exit. - endif. - case io_reader->name. - when `t`. - es_cell-datatype = io_reader->value. - when `s`. - if io_reader->value is not initial. - es_cell-style = get_style( io_reader->value ). - endif. - when `r`. - es_cell-coord = get_cell_coord( io_reader->value ). - endcase. - endwhile. + WHILE io_reader->node_type NE c_end_of_stream. + io_reader->next_attribute( ). + IF io_reader->node_type NE c_attribute. + EXIT. + ENDIF. + CASE io_reader->name. + WHEN `t`. + es_cell-datatype = io_reader->value. + WHEN `s`. + IF io_reader->value IS NOT INITIAL. + es_cell-style = get_style( io_reader->value ). + ENDIF. + WHEN `r`. + es_cell-coord = get_cell_coord( io_reader->value ). + ENDCASE. + ENDWHILE. -endmethod. + ENDMETHOD. -method GET_CELL_COORD. + METHOD get_cell_coord. - zcl_excel_common=>convert_columnrow2column_a_row( - exporting - i_columnrow = iv_coord - importing - e_column = es_coord-column - e_row = es_coord-row - ). + zcl_excel_common=>convert_columnrow2column_a_row( + EXPORTING + i_columnrow = iv_coord + IMPORTING + e_column = es_coord-column + e_row = es_coord-row + ). -endmethod. + ENDMETHOD. -method GET_SHARED_STRING. - data: lv_tabix type i, - lv_error type string. - lv_tabix = iv_index + 1. - read table shared_strings into ev_value index lv_tabix. - if sy-subrc ne 0. - concatenate 'Entry ' iv_index ' not found in Shared String Table' into lv_error. - raise exception type lcx_not_found - exporting - error = lv_error. - endif. -endmethod. + METHOD get_shared_string. + DATA: lv_tabix TYPE i, + lv_error TYPE string. + lv_tabix = iv_index + 1. + READ TABLE shared_strings INTO ev_value INDEX lv_tabix. + IF sy-subrc NE 0. + CONCATENATE 'Entry ' iv_index ' not found in Shared String Table' INTO lv_error. + RAISE EXCEPTION TYPE lcx_not_found + EXPORTING + error = lv_error. + ENDIF. + ENDMETHOD. -method GET_STYLE. + METHOD get_style. - data: lv_tabix type i, - lo_style type ref to zcl_excel_style, - lv_error type string. + DATA: lv_tabix TYPE i, + lo_style TYPE REF TO zcl_excel_style, + lv_error TYPE string. - if gs_buffer_style-index ne iv_index. - lv_tabix = iv_index + 1. - read table styles into lo_style index lv_tabix. - if sy-subrc ne 0. - concatenate 'Entry ' iv_index ' not found in Style Table' into lv_error. - raise exception type lcx_not_found - exporting - error = lv_error. - else. - gs_buffer_style-index = iv_index. - gs_buffer_style-guid = lo_style->get_guid( ). - endif. - endif. + IF gs_buffer_style-index NE iv_index. + lv_tabix = iv_index + 1. + READ TABLE styles INTO lo_style INDEX lv_tabix. + IF sy-subrc NE 0. + CONCATENATE 'Entry ' iv_index ' not found in Style Table' INTO lv_error. + RAISE EXCEPTION TYPE lcx_not_found + EXPORTING + error = lv_error. + ELSE. + gs_buffer_style-index = iv_index. + gs_buffer_style-guid = lo_style->get_guid( ). + ENDIF. + ENDIF. - ev_style_guid = gs_buffer_style-guid. + ev_style_guid = gs_buffer_style-guid. -endmethod. + ENDMETHOD. -method GET_SXML_READER. + METHOD get_sxml_reader. - data: lv_xml type xstring. + DATA: lv_xml TYPE xstring. - lv_xml = get_from_zip_archive( iv_path ). - eo_reader = cl_sxml_string_reader=>create( lv_xml ). + lv_xml = get_from_zip_archive( iv_path ). + eo_reader = cl_sxml_string_reader=>create( lv_xml ). -endmethod. + ENDMETHOD. -method LOAD_SHARED_STRINGS. + METHOD load_shared_strings. - data: lo_reader type ref to if_sxml_reader. + DATA: lo_reader TYPE REF TO if_sxml_reader. - lo_reader = get_sxml_reader( ip_path ). + lo_reader = get_sxml_reader( ip_path ). - shared_strings = read_shared_strings( lo_reader ). + shared_strings = read_shared_strings( lo_reader ). -endmethod. + ENDMETHOD. -method LOAD_WORKSHEET. + METHOD load_worksheet. - data: lo_reader type ref to if_sxml_reader. - data: lx_not_found type ref to lcx_not_found. + DATA: lo_reader TYPE REF TO if_sxml_reader. + DATA: lx_not_found TYPE REF TO lcx_not_found. - lo_reader = get_sxml_reader( ip_path ). + lo_reader = get_sxml_reader( ip_path ). - try. + TRY. - read_worksheet_data( io_reader = lo_reader - io_worksheet = io_worksheet ). + read_worksheet_data( io_reader = lo_reader + io_worksheet = io_worksheet ). - catch lcx_not_found into lx_not_found. - zcx_excel=>raise_text( lx_not_found->error ). - endtry. -endmethod. + CATCH lcx_not_found INTO lx_not_found. + zcx_excel=>raise_text( lx_not_found->error ). + ENDTRY. + ENDMETHOD. -method PUT_CELL_TO_WORKSHEET. - check is_cell-value is not initial - or is_cell-formula is not initial - or is_cell-style is not initial. - call method io_worksheet->set_cell - exporting - ip_column = is_cell-column - ip_row = is_cell-row - ip_value = is_cell-value - ip_formula = is_cell-formula - ip_data_type = is_cell-datatype - ip_style = is_cell-style. -endmethod. + METHOD put_cell_to_worksheet. + CHECK is_cell-value IS NOT INITIAL + OR is_cell-formula IS NOT INITIAL + OR is_cell-style IS NOT INITIAL. + CALL METHOD io_worksheet->set_cell + EXPORTING + ip_column = is_cell-column + ip_row = is_cell-row + ip_value = is_cell-value + ip_formula = is_cell-formula + ip_data_type = is_cell-datatype + ip_style = is_cell-style. + ENDMETHOD. -method read_shared_strings. + METHOD read_shared_strings. - data lv_value type string. + DATA lv_value TYPE string. - while io_reader->node_type ne c_end_of_stream. - io_reader->next_node( ). - if io_reader->name eq `t`. - case io_reader->node_type . - when c_element_open . - clear lv_value . - when c_node_value . - lv_value = lv_value && io_reader->value . - when c_element_close . - append lv_value to et_shared_strings. - endcase . - endif. - endwhile. + WHILE io_reader->node_type NE c_end_of_stream. + io_reader->next_node( ). + IF io_reader->name EQ `t`. + CASE io_reader->node_type . + WHEN c_element_open . + CLEAR lv_value . + WHEN c_node_value . + lv_value = lv_value && io_reader->value . + WHEN c_element_close . + APPEND lv_value TO et_shared_strings. + ENDCASE . + ENDIF. + ENDWHILE. -endmethod. + ENDMETHOD. -method READ_WORKSHEET_DATA. + METHOD read_worksheet_data. - data: ls_cell type t_cell. + DATA: ls_cell TYPE t_cell. * Skip to element - skip_to( iv_element_name = `sheetData` io_reader = io_reader ). + skip_to( iv_element_name = `sheetData` io_reader = io_reader ). * Main loop: Evaluate the elements and its children - while io_reader->node_type ne c_end_of_stream. - io_reader->next_node( ). - case io_reader->node_type. - when c_element_open. - if io_reader->name eq `c`. - ls_cell = fill_cell_from_attributes( io_reader ). - endif. - when c_node_value. - case io_reader->name. - when `f`. - ls_cell-formula = io_reader->value. - when `v`. - if ls_cell-datatype eq `s`. - ls_cell-value = get_shared_string( io_reader->value ). - else. + WHILE io_reader->node_type NE c_end_of_stream. + io_reader->next_node( ). + CASE io_reader->node_type. + WHEN c_element_open. + IF io_reader->name EQ `c`. + ls_cell = fill_cell_from_attributes( io_reader ). + ENDIF. + WHEN c_node_value. + CASE io_reader->name. + WHEN `f`. + ls_cell-formula = io_reader->value. + WHEN `v`. + IF ls_cell-datatype EQ `s`. + ls_cell-value = get_shared_string( io_reader->value ). + ELSE. + ls_cell-value = io_reader->value. + ENDIF. + WHEN `t` OR `is`. ls_cell-value = io_reader->value. - endif. - when `t` or `is`. - ls_cell-value = io_reader->value. - endcase. - when c_element_close. - case io_reader->name. - when `c`. - put_cell_to_worksheet( is_cell = ls_cell io_worksheet = io_worksheet ). - when `sheetData`. - exit. - endcase. - endcase. - endwhile. + ENDCASE. + WHEN c_element_close. + CASE io_reader->name. + WHEN `c`. + put_cell_to_worksheet( is_cell = ls_cell io_worksheet = io_worksheet ). + WHEN `sheetData`. + EXIT. + ENDCASE. + ENDCASE. + ENDWHILE. -endmethod. + ENDMETHOD. -method SKIP_TO. + METHOD skip_to. - data: lv_error type string. + DATA: lv_error TYPE string. * Skip forward to given element - while io_reader->name ne iv_element_name or - io_reader->node_type ne c_element_open. - io_reader->next_node( ). - if io_reader->node_type = c_end_of_stream. - concatenate 'XML error: Didn''t find element <' iv_element_name '>' into lv_error. - raise exception type lcx_not_found - exporting - error = lv_error. - endif. - endwhile. - - -endmethod. + WHILE io_reader->name NE iv_element_name OR + io_reader->node_type NE c_element_open. + io_reader->next_node( ). + IF io_reader->node_type = c_end_of_stream. + CONCATENATE 'XML error: Didn''t find element <' iv_element_name '>' INTO lv_error. + RAISE EXCEPTION TYPE lcx_not_found + EXPORTING + error = lv_error. + ENDIF. + ENDWHILE. + + + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_reader_xlsm.clas.abap b/src/zcl_excel_reader_xlsm.clas.abap index d3f9e1f08..886b571a1 100644 --- a/src/zcl_excel_reader_xlsm.clas.abap +++ b/src/zcl_excel_reader_xlsm.clas.abap @@ -1,38 +1,38 @@ -class ZCL_EXCEL_READER_XLSM definition - public - inheriting from ZCL_EXCEL_READER_2007 - final - create public . +CLASS zcl_excel_reader_xlsm DEFINITION + PUBLIC + INHERITING FROM zcl_excel_reader_2007 + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_READER_XLSM *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_READER_XLSM *"* do not include other source files here!!! - methods LOAD_WORKBOOK - redefinition . - methods LOAD_WORKSHEET - redefinition . -private section. + METHODS load_workbook + REDEFINITION . + METHODS load_worksheet + REDEFINITION . + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_READER_XLSM *"* do not include other source files here!!! - methods LOAD_VBAPROJECT - importing - !IP_PATH type STRING - !IP_EXCEL type ref to ZCL_EXCEL - raising - ZCX_EXCEL . + METHODS load_vbaproject + IMPORTING + !ip_path TYPE string + !ip_excel TYPE REF TO zcl_excel + RAISING + zcx_excel . ENDCLASS. -CLASS ZCL_EXCEL_READER_XLSM IMPLEMENTATION. +CLASS zcl_excel_reader_xlsm IMPLEMENTATION. -METHOD load_vbaproject. + METHOD load_vbaproject. DATA lv_content TYPE xstring. @@ -43,96 +43,96 @@ METHOD load_vbaproject. ENDMETHOD. -method LOAD_WORKBOOK. - super->load_workbook( EXPORTING iv_workbook_full_filename = iv_workbook_full_filename - io_excel = io_excel ). - - CONSTANTS: lc_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject'. - - DATA: rels_workbook_path TYPE string, - rels_workbook TYPE REF TO if_ixml_document, - path TYPE string, - node TYPE REF TO if_ixml_element, - workbook TYPE REF TO if_ixml_document, - stripped_name TYPE chkfile, - dirname TYPE string, - relationship TYPE t_relationship, - fileversion TYPE t_fileversion, - workbookpr TYPE t_workbookpr. - - CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' - EXPORTING - full_name = iv_workbook_full_filename - IMPORTING - stripped_name = stripped_name - file_path = dirname. - - " Read Workbook Relationships - CONCATENATE dirname '_rels/' stripped_name '.rels' - INTO rels_workbook_path. - - rels_workbook = me->get_ixml_from_zip_archive( rels_workbook_path ). - - node ?= rels_workbook->find_from_name( 'Relationship' ). - WHILE node IS BOUND. - me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). - - CASE relationship-type. - WHEN lc_vba_project. - " Read VBA binary - CONCATENATE dirname relationship-target INTO path. - me->load_vbaproject( ip_path = path - ip_excel = io_excel ). - WHEN OTHERS. - ENDCASE. - - node ?= node->get_next( ). - ENDWHILE. - - " Read Workbook codeName - workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). - node ?= workbook->find_from_name( 'fileVersion' ). - IF node IS BOUND. - - fill_struct_from_attributes( EXPORTING ip_element = node - CHANGING cp_structure = fileversion ). - - io_excel->zif_excel_book_vba_project~set_codename( fileversion-codename ). - ENDIF. + METHOD load_workbook. + super->load_workbook( EXPORTING iv_workbook_full_filename = iv_workbook_full_filename + io_excel = io_excel ). + + CONSTANTS: lc_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject'. + + DATA: rels_workbook_path TYPE string, + rels_workbook TYPE REF TO if_ixml_document, + path TYPE string, + node TYPE REF TO if_ixml_element, + workbook TYPE REF TO if_ixml_document, + stripped_name TYPE chkfile, + dirname TYPE string, + relationship TYPE t_relationship, + fileversion TYPE t_fileversion, + workbookpr TYPE t_workbookpr. + + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = iv_workbook_full_filename + IMPORTING + stripped_name = stripped_name + file_path = dirname. + + " Read Workbook Relationships + CONCATENATE dirname '_rels/' stripped_name '.rels' + INTO rels_workbook_path. + + rels_workbook = me->get_ixml_from_zip_archive( rels_workbook_path ). + + node ?= rels_workbook->find_from_name( 'Relationship' ). + WHILE node IS BOUND. + me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). + + CASE relationship-type. + WHEN lc_vba_project. + " Read VBA binary + CONCATENATE dirname relationship-target INTO path. + me->load_vbaproject( ip_path = path + ip_excel = io_excel ). + WHEN OTHERS. + ENDCASE. + + node ?= node->get_next( ). + ENDWHILE. + + " Read Workbook codeName + workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + node ?= workbook->find_from_name( 'fileVersion' ). + IF node IS BOUND. + + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = fileversion ). + + io_excel->zif_excel_book_vba_project~set_codename( fileversion-codename ). + ENDIF. - " Read Workbook codeName - workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). - node ?= workbook->find_from_name( 'workbookPr' ). - IF node IS BOUND. + " Read Workbook codeName + workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + node ?= workbook->find_from_name( 'workbookPr' ). + IF node IS BOUND. - fill_struct_from_attributes( EXPORTING ip_element = node - CHANGING cp_structure = workbookpr ). + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = workbookpr ). - io_excel->zif_excel_book_vba_project~set_codename_pr( workbookpr-codename ). - ENDIF. + io_excel->zif_excel_book_vba_project~set_codename_pr( workbookpr-codename ). + ENDIF. - endmethod. + ENDMETHOD. -METHOD load_worksheet. + METHOD load_worksheet. - super->load_worksheet( EXPORTING ip_path = ip_path - io_worksheet = io_worksheet ). + super->load_worksheet( EXPORTING ip_path = ip_path + io_worksheet = io_worksheet ). - DATA: node TYPE REF TO if_ixml_element, - worksheet TYPE REF TO if_ixml_document, - sheetpr TYPE t_sheetpr. + DATA: node TYPE REF TO if_ixml_element, + worksheet TYPE REF TO if_ixml_document, + sheetpr TYPE t_sheetpr. - " Read Workbook codeName - worksheet = me->get_ixml_from_zip_archive( ip_path ). - node ?= worksheet->find_from_name( 'sheetPr' ). - IF node IS BOUND. + " Read Workbook codeName + worksheet = me->get_ixml_from_zip_archive( ip_path ). + node ?= worksheet->find_from_name( 'sheetPr' ). + IF node IS BOUND. - fill_struct_from_attributes( EXPORTING ip_element = node - CHANGING cp_structure = sheetpr ). - IF sheetpr-codename IS NOT INITIAL. - io_worksheet->zif_excel_sheet_vba_project~set_codename_pr( sheetpr-codename ). + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = sheetpr ). + IF sheetpr-codename IS NOT INITIAL. + io_worksheet->zif_excel_sheet_vba_project~set_codename_pr( sheetpr-codename ). + ENDIF. ENDIF. - ENDIF. -ENDMETHOD. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_row.clas.abap b/src/zcl_excel_row.clas.abap index f194f5548..af655b64c 100644 --- a/src/zcl_excel_row.clas.abap +++ b/src/zcl_excel_row.clas.abap @@ -1,234 +1,234 @@ -class ZCL_EXCEL_ROW definition - public - final - create public . +CLASS zcl_excel_row DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_ROW *"* do not include other source files here!!! -public section. - type-pools ABAP . - - methods CONSTRUCTOR - importing - !IP_INDEX type INT4 default 0 . - methods GET_COLLAPSED - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional - returning - value(R_COLLAPSED) type abap_bool . - methods GET_OUTLINE_LEVEL - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional - returning - value(R_OUTLINE_LEVEL) type INT4 . - methods GET_ROW_HEIGHT - returning - value(R_ROW_HEIGHT) type FLOAT . - methods GET_CUSTOM_HEIGHT - returning - value(R_CUSTOM_HEIGHT) type ABAP_BOOL . - methods GET_ROW_INDEX - returning - value(R_ROW_INDEX) type INT4 . - methods GET_VISIBLE - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional - returning - value(R_VISIBLE) type abap_bool . - methods GET_XF_INDEX - returning - value(R_XF_INDEX) type INT4 . - methods SET_COLLAPSED - importing - !IP_COLLAPSED type abap_bool . - methods SET_OUTLINE_LEVEL - importing - !IP_OUTLINE_LEVEL type INT4 - raising - ZCX_EXCEL . - methods SET_ROW_HEIGHT - importing - !IP_ROW_HEIGHT type SIMPLE - !IP_CUSTOM_HEIGHT type abap_bool default abap_true - raising - ZCX_EXCEL . - methods SET_ROW_INDEX - importing - !IP_INDEX type INT4 . - methods SET_VISIBLE - importing - !IP_VISIBLE type abap_bool . - methods SET_XF_INDEX - importing - !IP_XF_INDEX type INT4 . + PUBLIC SECTION. + TYPE-POOLS abap . + + METHODS constructor + IMPORTING + !ip_index TYPE int4 DEFAULT 0 . + METHODS get_collapsed + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet OPTIONAL + RETURNING + VALUE(r_collapsed) TYPE abap_bool . + METHODS get_outline_level + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet OPTIONAL + RETURNING + VALUE(r_outline_level) TYPE int4 . + METHODS get_row_height + RETURNING + VALUE(r_row_height) TYPE float . + METHODS get_custom_height + RETURNING + VALUE(r_custom_height) TYPE abap_bool . + METHODS get_row_index + RETURNING + VALUE(r_row_index) TYPE int4 . + METHODS get_visible + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet OPTIONAL + RETURNING + VALUE(r_visible) TYPE abap_bool . + METHODS get_xf_index + RETURNING + VALUE(r_xf_index) TYPE int4 . + METHODS set_collapsed + IMPORTING + !ip_collapsed TYPE abap_bool . + METHODS set_outline_level + IMPORTING + !ip_outline_level TYPE int4 + RAISING + zcx_excel . + METHODS set_row_height + IMPORTING + !ip_row_height TYPE simple + !ip_custom_height TYPE abap_bool DEFAULT abap_true + RAISING + zcx_excel . + METHODS set_row_index + IMPORTING + !ip_index TYPE int4 . + METHODS set_visible + IMPORTING + !ip_visible TYPE abap_bool . + METHODS set_xf_index + IMPORTING + !ip_xf_index TYPE int4 . *"* protected components of class ZCL_EXCEL_ROW *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_ROW *"* do not include other source files here!!! -private section. - - data ROW_INDEX type INT4 . - data ROW_HEIGHT type FLOAT . - data VISIBLE type abap_bool . - data OUTLINE_LEVEL type INT4 value 0. "#EC NOTEXT . . . . . . . . . " . - data COLLAPSED type abap_bool . - data XF_INDEX type INT4 . - data CUSTOM_HEIGHT type abap_bool . + PRIVATE SECTION. + + DATA row_index TYPE int4 . + DATA row_height TYPE float . + DATA visible TYPE abap_bool . + DATA outline_level TYPE int4 VALUE 0. "#EC NOTEXT . . . . . . . . . " . + DATA collapsed TYPE abap_bool . + DATA xf_index TYPE int4 . + DATA custom_height TYPE abap_bool . ENDCLASS. -CLASS ZCL_EXCEL_ROW IMPLEMENTATION. +CLASS zcl_excel_row IMPLEMENTATION. -method CONSTRUCTOR. - " Initialise values - me->row_index = ip_index. - me->row_height = -1. - me->visible = abap_true. - me->outline_level = 0. - me->collapsed = abap_false. + METHOD constructor. + " Initialise values + me->row_index = ip_index. + me->row_height = -1. + me->visible = abap_true. + me->outline_level = 0. + me->collapsed = abap_false. - " set row dimension as unformatted by default - me->xf_index = 0. - me->custom_height = abap_false. - endmethod. + " set row dimension as unformatted by default + me->xf_index = 0. + me->custom_height = abap_false. + ENDMETHOD. -METHOD GET_COLLAPSED. + METHOD get_collapsed. - DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row, - lv_previous_row TYPE i, - lv_following_row TYPE i. + DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row, + lv_previous_row TYPE i, + lv_following_row TYPE i. - r_collapsed = me->collapsed. + r_collapsed = me->collapsed. - CHECK r_collapsed = abap_false. " Maybe new method for outlines is being used - CHECK io_worksheet IS BOUND. + CHECK r_collapsed = abap_false. " Maybe new method for outlines is being used + CHECK io_worksheet IS BOUND. * If an outline is collapsed ( even inside an outer outline ) the line following the last line * of the group gets the flag "collapsed" - IF io_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_off. - lv_following_row = me->row_index + 1. - lt_row_outlines = io_worksheet->get_row_outlines( ). - READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_from = lv_following_row " first line of an outline - collapsed = abap_true. " that is collapsed - ELSE. - lv_previous_row = me->row_index - 1. - lt_row_outlines = io_worksheet->get_row_outlines( ). - READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_to = lv_previous_row " last line of an outline - collapsed = abap_true. " that is collapsed - ENDIF. - CHECK sy-subrc = 0. " ok - we found it - r_collapsed = abap_true. + IF io_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_off. + lv_following_row = me->row_index + 1. + lt_row_outlines = io_worksheet->get_row_outlines( ). + READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_from = lv_following_row " first line of an outline + collapsed = abap_true. " that is collapsed + ELSE. + lv_previous_row = me->row_index - 1. + lt_row_outlines = io_worksheet->get_row_outlines( ). + READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_to = lv_previous_row " last line of an outline + collapsed = abap_true. " that is collapsed + ENDIF. + CHECK sy-subrc = 0. " ok - we found it + r_collapsed = abap_true. -ENDMETHOD. + ENDMETHOD. -METHOD GET_OUTLINE_LEVEL. + METHOD get_outline_level. - DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row. - FIELD-SYMBOLS: LIKE LINE OF lt_row_outlines. + DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row. + FIELD-SYMBOLS: LIKE LINE OF lt_row_outlines. * if someone has set the outline level explicitly - just use that - IF me->outline_level IS NOT INITIAL. - r_outline_level = me->outline_level. - RETURN. - ENDIF. + IF me->outline_level IS NOT INITIAL. + r_outline_level = me->outline_level. + RETURN. + ENDIF. * Maybe we can use the outline information in the worksheet - CHECK io_worksheet IS BOUND. + CHECK io_worksheet IS BOUND. - lt_row_outlines = io_worksheet->get_row_outlines( ). - LOOP AT lt_row_outlines ASSIGNING WHERE row_from <= me->row_index - AND row_to >= me->row_index. + lt_row_outlines = io_worksheet->get_row_outlines( ). + LOOP AT lt_row_outlines ASSIGNING WHERE row_from <= me->row_index + AND row_to >= me->row_index. - ADD 1 TO r_outline_level. + ADD 1 TO r_outline_level. - ENDLOOP. + ENDLOOP. -ENDMETHOD. + ENDMETHOD. -method GET_ROW_HEIGHT. - r_row_height = me->row_height. - endmethod. + METHOD get_row_height. + r_row_height = me->row_height. + ENDMETHOD. - METHOD GET_CUSTOM_HEIGHT. + METHOD get_custom_height. r_custom_height = me->custom_height. ENDMETHOD. -method GET_ROW_INDEX. - r_row_index = me->row_index. - endmethod. + METHOD get_row_index. + r_row_index = me->row_index. + ENDMETHOD. -METHOD GET_VISIBLE. + METHOD get_visible. - DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row. - FIELD-SYMBOLS: LIKE LINE OF lt_row_outlines. + DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row. + FIELD-SYMBOLS: LIKE LINE OF lt_row_outlines. - r_visible = me->visible. - CHECK r_visible = abap_true. " Currently visible --> but maybe the new outline methodology will hide it implicitly - CHECK io_worksheet IS BOUND. " But we have to see the worksheet to make sure + r_visible = me->visible. + CHECK r_visible = abap_true. " Currently visible --> but maybe the new outline methodology will hide it implicitly + CHECK io_worksheet IS BOUND. " But we have to see the worksheet to make sure - lt_row_outlines = io_worksheet->get_row_outlines( ). - LOOP AT lt_row_outlines ASSIGNING WHERE row_from <= me->row_index - AND row_to >= me->row_index - AND collapsed = abap_true. " row is in a collapsed outline --> not visible - CLEAR r_visible. - RETURN. " one hit is enough to ensure invisibility + lt_row_outlines = io_worksheet->get_row_outlines( ). + LOOP AT lt_row_outlines ASSIGNING WHERE row_from <= me->row_index + AND row_to >= me->row_index + AND collapsed = abap_true. " row is in a collapsed outline --> not visible + CLEAR r_visible. + RETURN. " one hit is enough to ensure invisibility - ENDLOOP. + ENDLOOP. -ENDMETHOD. + ENDMETHOD. -method GET_XF_INDEX. - r_xf_index = me->xf_index. - endmethod. + METHOD get_xf_index. + r_xf_index = me->xf_index. + ENDMETHOD. -method SET_COLLAPSED. - me->collapsed = ip_collapsed. - endmethod. + METHOD set_collapsed. + me->collapsed = ip_collapsed. + ENDMETHOD. -method SET_OUTLINE_LEVEL. - IF ip_outline_level < 0 - OR ip_outline_level > 7. + METHOD set_outline_level. + IF ip_outline_level < 0 + OR ip_outline_level > 7. - zcx_excel=>raise_text( 'Outline level must range between 0 and 7.' ). + zcx_excel=>raise_text( 'Outline level must range between 0 and 7.' ). - ENDIF. - me->outline_level = ip_outline_level. - endmethod. + ENDIF. + me->outline_level = ip_outline_level. + ENDMETHOD. -method SET_ROW_HEIGHT. - TRY. - me->row_height = ip_row_height. - CATCH cx_sy_conversion_no_number. - zcx_excel=>raise_text( 'Unable to interpret ip_row_height as number' ). - ENDTRY. - me->custom_height = ip_custom_height. - endmethod. + METHOD set_row_height. + TRY. + me->row_height = ip_row_height. + CATCH cx_sy_conversion_no_number. + zcx_excel=>raise_text( 'Unable to interpret ip_row_height as number' ). + ENDTRY. + me->custom_height = ip_custom_height. + ENDMETHOD. -method SET_ROW_INDEX. - me->row_index = ip_index. - endmethod. + METHOD set_row_index. + me->row_index = ip_index. + ENDMETHOD. -method SET_VISIBLE. - me->visible = ip_visible. - endmethod. + METHOD set_visible. + me->visible = ip_visible. + ENDMETHOD. -method SET_XF_INDEX. - me->XF_INDEX = ip_XF_INDEX. - endmethod. + METHOD set_xf_index. + me->xf_index = ip_xf_index. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_rows.clas.abap b/src/zcl_excel_rows.clas.abap index 4bc008593..28f693850 100644 --- a/src/zcl_excel_rows.clas.abap +++ b/src/zcl_excel_rows.clas.abap @@ -3,120 +3,120 @@ *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -class ZCL_EXCEL_ROWS definition - public - final - create public . +CLASS zcl_excel_rows DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_ROWS *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! - public section. - types: - begin of MTY_S_HASHED_ROW, - ROW_INDEX type INT4, - ROW type ref to ZCL_EXCEL_ROW, - end of MTY_S_HASHED_ROW , - MTY_TS_HASEHD_ROW type hashed table of MTY_S_HASHED_ROW with unique key ROW_INDEX. - - methods ADD - importing - !IO_ROW type ref to ZCL_EXCEL_ROW . - methods CLEAR . - methods CONSTRUCTOR . - methods GET - importing - !IP_INDEX type I - returning - value(EO_ROW) type ref to ZCL_EXCEL_ROW . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IO_ROW type ref to ZCL_EXCEL_ROW . - methods SIZE - returning - value(EP_SIZE) type I . - methods GET_MIN_INDEX - returning - value(EP_INDEX) type I . - methods GET_MAX_INDEX - returning - value(EP_INDEX) type I . - protected section. + PUBLIC SECTION. + TYPES: + BEGIN OF mty_s_hashed_row, + row_index TYPE int4, + row TYPE REF TO zcl_excel_row, + END OF mty_s_hashed_row , + mty_ts_hasehd_row TYPE HASHED TABLE OF mty_s_hashed_row WITH UNIQUE KEY row_index. + + METHODS add + IMPORTING + !io_row TYPE REF TO zcl_excel_row . + METHODS clear . + METHODS constructor . + METHODS get + IMPORTING + !ip_index TYPE i + RETURNING + VALUE(eo_row) TYPE REF TO zcl_excel_row . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !io_row TYPE REF TO zcl_excel_row . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . + METHODS get_min_index + RETURNING + VALUE(ep_index) TYPE i . + METHODS get_max_index + RETURNING + VALUE(ep_index) TYPE i . + PROTECTED SECTION. *"* private components of class ZABAP_EXCEL_RANGES *"* do not include other source files here!!! - private section. + PRIVATE SECTION. - data ROWS type ref to CL_OBJECT_COLLECTION . - data ROWS_HASEHD type MTY_TS_HASEHD_ROW . + DATA rows TYPE REF TO cl_object_collection . + DATA rows_hasehd TYPE mty_ts_hasehd_row . ENDCLASS. -CLASS ZCL_EXCEL_ROWS IMPLEMENTATION. +CLASS zcl_excel_rows IMPLEMENTATION. - method ADD. - data: LS_HASHED_ROW type MTY_S_HASHED_ROW. + METHOD add. + DATA: ls_hashed_row TYPE mty_s_hashed_row. - LS_HASHED_ROW-ROW_INDEX = IO_ROW->GET_ROW_INDEX( ). - LS_HASHED_ROW-ROW = IO_ROW. + ls_hashed_row-row_index = io_row->get_row_index( ). + ls_hashed_row-row = io_row. - insert LS_HASHED_ROW into table ROWS_HASEHD. + INSERT ls_hashed_row INTO TABLE rows_hasehd. - ROWS->ADD( IO_ROW ). - endmethod. "ADD + rows->add( io_row ). + ENDMETHOD. "ADD - method CLEAR. - clear ROWS_HASEHD. - ROWS->CLEAR( ). - endmethod. "CLEAR + METHOD clear. + CLEAR rows_hasehd. + rows->clear( ). + ENDMETHOD. "CLEAR - method CONSTRUCTOR. + METHOD constructor. - create object ROWS. + CREATE OBJECT rows. - endmethod. "CONSTRUCTOR + ENDMETHOD. "CONSTRUCTOR - method GET. - field-symbols: type MTY_S_HASHED_ROW. + METHOD get. + FIELD-SYMBOLS: TYPE mty_s_hashed_row. - read table ROWS_HASEHD with key ROW_INDEX = IP_INDEX assigning . - if SY-SUBRC = 0. - EO_ROW = -ROW. - endif. - endmethod. "GET + READ TABLE rows_hasehd WITH KEY row_index = ip_index ASSIGNING . + IF sy-subrc = 0. + eo_row = -row. + ENDIF. + ENDMETHOD. "GET - method GET_ITERATOR. - EO_ITERATOR ?= ROWS->GET_ITERATOR( ). - endmethod. "GET_ITERATOR + METHOD get_iterator. + eo_iterator ?= rows->get_iterator( ). + ENDMETHOD. "GET_ITERATOR - method IS_EMPTY. - IS_EMPTY = ROWS->IS_EMPTY( ). - endmethod. "IS_EMPTY + METHOD is_empty. + is_empty = rows->is_empty( ). + ENDMETHOD. "IS_EMPTY - method REMOVE. - delete table ROWS_HASEHD with table key ROW_INDEX = IO_ROW->GET_ROW_INDEX( ) . - ROWS->REMOVE( IO_ROW ). - endmethod. "REMOVE + METHOD remove. + DELETE TABLE rows_hasehd WITH TABLE KEY row_index = io_row->get_row_index( ) . + rows->remove( io_row ). + ENDMETHOD. "REMOVE - method SIZE. - EP_SIZE = ROWS->SIZE( ). - endmethod. "SIZE + METHOD size. + ep_size = rows->size( ). + ENDMETHOD. "SIZE METHOD get_min_index. FIELD-SYMBOLS: TYPE mty_s_hashed_row. diff --git a/src/zcl_excel_security.clas.abap b/src/zcl_excel_security.clas.abap index bc5bf7824..1d6997d51 100644 --- a/src/zcl_excel_security.clas.abap +++ b/src/zcl_excel_security.clas.abap @@ -1,40 +1,40 @@ -class ZCL_EXCEL_SECURITY definition - public - final - create public . +CLASS zcl_excel_security DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_SECURITY *"* do not include other source files here!!! -public section. - type-pools ABAP . - - data LOCKREVISION type FLAG . - data LOCKSTRUCTURE type FLAG . - data LOCKWINDOWS type FLAG . - data REVISIONSPASSWORD type ZEXCEL_REVISIONSPASSWORD . - data WORKBOOKPASSWORD type ZEXCEL_WORKBOOKPASSWORD . - - methods IS_SECURITY_ENABLED - returning - value(EP_SECURITY_ENABLED) type FLAG . + PUBLIC SECTION. + TYPE-POOLS abap . + + DATA lockrevision TYPE flag . + DATA lockstructure TYPE flag . + DATA lockwindows TYPE flag . + DATA revisionspassword TYPE zexcel_revisionspassword . + DATA workbookpassword TYPE zexcel_workbookpassword . + + METHODS is_security_enabled + RETURNING + VALUE(ep_security_enabled) TYPE flag . *"* protected components of class ZABAP_EXCEL_SECURITY *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_SECURITY *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZABAP_EXCEL_SECURITY *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_SECURITY IMPLEMENTATION. +CLASS zcl_excel_security IMPLEMENTATION. -METHOD is_security_enabled. - IF lockrevision EQ abap_true OR lockstructure EQ abap_true OR lockwindows EQ abap_true. - ep_security_enabled = abap_true. - ENDIF. -ENDMETHOD. + METHOD is_security_enabled. + IF lockrevision EQ abap_true OR lockstructure EQ abap_true OR lockwindows EQ abap_true. + ep_security_enabled = abap_true. + ENDIF. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_sheet_setup.clas.abap b/src/zcl_excel_sheet_setup.clas.abap index 99b775722..1cf701471 100644 --- a/src/zcl_excel_sheet_setup.clas.abap +++ b/src/zcl_excel_sheet_setup.clas.abap @@ -1,210 +1,210 @@ -class ZCL_EXCEL_SHEET_SETUP definition - public - final - create public . +CLASS zcl_excel_sheet_setup DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_SHEET_SETUP *"* do not include other source files here!!! - type-pools ABAP . - - data BLACK_AND_WHITE type FLAG . - data CELL_COMMENTS type STRINGVAL . - data COPIES type INT2 . - constants C_BREAK_COLUMN type ZEXCEL_BREAK value 2. "#EC NOTEXT - constants C_BREAK_NONE type ZEXCEL_BREAK value 0. "#EC NOTEXT - constants C_BREAK_ROW type ZEXCEL_BREAK value 1. "#EC NOTEXT - constants C_CC_AS_DISPLAYED type STRING value 'asDisplayed'. "#EC NOTEXT - constants C_CC_AT_END type STRING value 'atEnd'. "#EC NOTEXT - constants C_CC_NONE type STRING value 'none'. "#EC NOTEXT - constants C_ORD_DOWNTHENOVER type STRING value 'downThenOver'. "#EC NOTEXT - constants C_ORD_OVERTHENDOWN type STRING value 'overThenDown'. "#EC NOTEXT - constants C_ORIENTATION_DEFAULT type ZEXCEL_SHEET_ORIENATATION value 'default'. "#EC NOTEXT - constants C_ORIENTATION_LANDSCAPE type ZEXCEL_SHEET_ORIENATATION value 'landscape'. "#EC NOTEXT - constants C_ORIENTATION_PORTRAIT type ZEXCEL_SHEET_ORIENATATION value 'portrait'. "#EC NOTEXT - constants C_PAPERSIZE_6_3_4_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 38. "#EC NOTEXT - constants C_PAPERSIZE_A2_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 64. "#EC NOTEXT - constants C_PAPERSIZE_A3 type ZEXCEL_SHEET_PAPER_SIZE value 8. "#EC NOTEXT - constants C_PAPERSIZE_A3_EXTRA_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 61. "#EC NOTEXT - constants C_PAPERSIZE_A3_EXTRA_TV_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 66. "#EC NOTEXT - constants C_PAPERSIZE_A3_TV_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 65. "#EC NOTEXT - constants C_PAPERSIZE_A4 type ZEXCEL_SHEET_PAPER_SIZE value 9. "#EC NOTEXT - constants C_PAPERSIZE_A4_EXTRA_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 51. "#EC NOTEXT - constants C_PAPERSIZE_A4_PLUS_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 58. "#EC NOTEXT - constants C_PAPERSIZE_A4_SMALL type ZEXCEL_SHEET_PAPER_SIZE value 10. "#EC NOTEXT - constants C_PAPERSIZE_A4_TV_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 53. "#EC NOTEXT - constants C_PAPERSIZE_A5 type ZEXCEL_SHEET_PAPER_SIZE value 11. "#EC NOTEXT - constants C_PAPERSIZE_A5_EXTRA_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 62. "#EC NOTEXT - constants C_PAPERSIZE_A5_TV_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 59. "#EC NOTEXT - constants C_PAPERSIZE_B4 type ZEXCEL_SHEET_PAPER_SIZE value 12. "#EC NOTEXT - constants C_PAPERSIZE_B4_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 33. "#EC NOTEXT - constants C_PAPERSIZE_B5 type ZEXCEL_SHEET_PAPER_SIZE value 13. "#EC NOTEXT - constants C_PAPERSIZE_B5_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 34. "#EC NOTEXT - constants C_PAPERSIZE_B6_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 35. "#EC NOTEXT - constants C_PAPERSIZE_C type ZEXCEL_SHEET_PAPER_SIZE value 24. "#EC NOTEXT - constants C_PAPERSIZE_C3_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 29. "#EC NOTEXT - constants C_PAPERSIZE_C4_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 30. "#EC NOTEXT - constants C_PAPERSIZE_C5_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 28. "#EC NOTEXT - constants C_PAPERSIZE_C65_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 32. "#EC NOTEXT - constants C_PAPERSIZE_C6_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 31. "#EC NOTEXT - constants C_PAPERSIZE_D type ZEXCEL_SHEET_PAPER_SIZE value 25. "#EC NOTEXT - constants C_PAPERSIZE_DE_LEG_FANFOLD type ZEXCEL_SHEET_PAPER_SIZE value 41. "#EC NOTEXT - constants C_PAPERSIZE_DE_STD_FANFOLD type ZEXCEL_SHEET_PAPER_SIZE value 40. "#EC NOTEXT - constants C_PAPERSIZE_DL_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 27. "#EC NOTEXT - constants C_PAPERSIZE_E type ZEXCEL_SHEET_PAPER_SIZE value 26. "#EC NOTEXT - constants C_PAPERSIZE_EXECUTIVE type ZEXCEL_SHEET_PAPER_SIZE value 7. "#EC NOTEXT - constants C_PAPERSIZE_FOLIO type ZEXCEL_SHEET_PAPER_SIZE value 14. "#EC NOTEXT - constants C_PAPERSIZE_INVITE_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 47. "#EC NOTEXT - constants C_PAPERSIZE_ISO_B4 type ZEXCEL_SHEET_PAPER_SIZE value 42. "#EC NOTEXT - constants C_PAPERSIZE_ISO_B5_EXTRA_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 63. "#EC NOTEXT - constants C_PAPERSIZE_ITALY_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 36. "#EC NOTEXT - constants C_PAPERSIZE_JIS_B5_TV_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 60. "#EC NOTEXT - constants C_PAPERSIZE_JPN_DBL_POSTCARD type ZEXCEL_SHEET_PAPER_SIZE value 43. "#EC NOTEXT - constants C_PAPERSIZE_LEDGER type ZEXCEL_SHEET_PAPER_SIZE value 4. "#EC NOTEXT - constants C_PAPERSIZE_LEGAL type ZEXCEL_SHEET_PAPER_SIZE value 5. "#EC NOTEXT - constants C_PAPERSIZE_LEGAL_EXTRA_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 49. "#EC NOTEXT - constants C_PAPERSIZE_LETTER type ZEXCEL_SHEET_PAPER_SIZE value 1. "#EC NOTEXT - constants C_PAPERSIZE_LETTER_EXTRA_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 48. "#EC NOTEXT - constants C_PAPERSIZE_LETTER_EXTV_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 54. "#EC NOTEXT - constants C_PAPERSIZE_LETTER_PLUS_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 57. "#EC NOTEXT - constants C_PAPERSIZE_LETTER_SMALL type ZEXCEL_SHEET_PAPER_SIZE value 2. "#EC NOTEXT - constants C_PAPERSIZE_LETTER_TV_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 52. "#EC NOTEXT - constants C_PAPERSIZE_MONARCH_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 37. "#EC NOTEXT - constants C_PAPERSIZE_NO10_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 20. "#EC NOTEXT - constants C_PAPERSIZE_NO11_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 21. "#EC NOTEXT - constants C_PAPERSIZE_NO12_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 22. "#EC NOTEXT - constants C_PAPERSIZE_NO14_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 23. "#EC NOTEXT - constants C_PAPERSIZE_NO9_ENVELOPE type ZEXCEL_SHEET_PAPER_SIZE value 19. "#EC NOTEXT - constants C_PAPERSIZE_NOTE type ZEXCEL_SHEET_PAPER_SIZE value 18. "#EC NOTEXT - constants C_PAPERSIZE_QUARTO type ZEXCEL_SHEET_PAPER_SIZE value 15. "#EC NOTEXT - constants C_PAPERSIZE_STANDARD_1 type ZEXCEL_SHEET_PAPER_SIZE value 16. "#EC NOTEXT - constants C_PAPERSIZE_STANDARD_2 type ZEXCEL_SHEET_PAPER_SIZE value 17. "#EC NOTEXT - constants C_PAPERSIZE_STANDARD_PAPER_1 type ZEXCEL_SHEET_PAPER_SIZE value 44. "#EC NOTEXT - constants C_PAPERSIZE_STANDARD_PAPER_2 type ZEXCEL_SHEET_PAPER_SIZE value 45. "#EC NOTEXT - constants C_PAPERSIZE_STANDARD_PAPER_3 type ZEXCEL_SHEET_PAPER_SIZE value 46. "#EC NOTEXT - constants C_PAPERSIZE_STATEMENT type ZEXCEL_SHEET_PAPER_SIZE value 6. "#EC NOTEXT - constants C_PAPERSIZE_SUPERA_A4_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 55. "#EC NOTEXT - constants C_PAPERSIZE_SUPERB_A3_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 56. "#EC NOTEXT - constants C_PAPERSIZE_TABLOID type ZEXCEL_SHEET_PAPER_SIZE value 3. "#EC NOTEXT - constants C_PAPERSIZE_TABL_EXTRA_PAPER type ZEXCEL_SHEET_PAPER_SIZE value 50. "#EC NOTEXT - constants C_PAPERSIZE_US_STD_FANFOLD type ZEXCEL_SHEET_PAPER_SIZE value 39. "#EC NOTEXT - constants C_PE_BLANK type STRING value 'blank'. "#EC NOTEXT - constants C_PE_DASH type STRING value 'dash'. "#EC NOTEXT - constants C_PE_DISPLAYED type STRING value 'displayed'. "#EC NOTEXT - constants C_PE_NA type STRING value 'NA'. "#EC NOTEXT - data DIFF_ODDEVEN_HEADERFOOTER type FLAG . - data DRAFT type FLAG . - data ERRORS type STRINGVAL . - data EVEN_FOOTER type ZEXCEL_S_WORKSHEET_HEAD_FOOT . - data EVEN_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT . - data FIRST_PAGE_NUMBER type INT2 . - data FIT_TO_HEIGHT type INT2 . - data FIT_TO_PAGE type FLAG . - data FIT_TO_WIDTH type INT2 . - data HORIZONTAL_CENTERED type FLAG . - data HORIZONTAL_DPI type INT2 . - data MARGIN_BOTTOM type ZEXCEL_DEC_8_2 . - data MARGIN_FOOTER type ZEXCEL_DEC_8_2 . - data MARGIN_HEADER type ZEXCEL_DEC_8_2 . - data MARGIN_LEFT type ZEXCEL_DEC_8_2 . - data MARGIN_RIGHT type ZEXCEL_DEC_8_2 . - data MARGIN_TOP type ZEXCEL_DEC_8_2 . - data ODD_FOOTER type ZEXCEL_S_WORKSHEET_HEAD_FOOT . - data ODD_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT . - data ORIENTATION type ZEXCEL_SHEET_ORIENATATION . - data PAGE_ORDER type STRING . - data PAPER_HEIGHT type STRING . - data PAPER_SIZE type INT2 . - data PAPER_WIDTH type STRING . - data SCALE type INT2 . - data USE_FIRST_PAGE_NUM type FLAG . - data USE_PRINTER_DEFAULTS type FLAG . - data VERTICAL_CENTERED type FLAG . - data VERTICAL_DPI type INT2 . - - methods CONSTRUCTOR . - methods SET_PAGE_MARGINS - importing - !IP_BOTTOM type FLOAT optional - !IP_FOOTER type FLOAT optional - !IP_HEADER type FLOAT optional - !IP_LEFT type FLOAT optional - !IP_RIGHT type FLOAT optional - !IP_TOP type FLOAT optional - !IP_UNIT type CSEQUENCE default 'in' . - methods SET_HEADER_FOOTER - importing - !IP_ODD_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT optional - !IP_ODD_FOOTER type ZEXCEL_S_WORKSHEET_HEAD_FOOT optional - !IP_EVEN_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT optional - !IP_EVEN_FOOTER type ZEXCEL_S_WORKSHEET_HEAD_FOOT optional . - methods GET_HEADER_FOOTER_STRING - exporting - !EP_ODD_HEADER type STRING - !EP_ODD_FOOTER type STRING - !EP_EVEN_HEADER type STRING - !EP_EVEN_FOOTER type STRING . - methods GET_HEADER_FOOTER - exporting - !EP_ODD_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT - !EP_ODD_FOOTER type ZEXCEL_S_WORKSHEET_HEAD_FOOT - !EP_EVEN_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT - !EP_EVEN_FOOTER type ZEXCEL_S_WORKSHEET_HEAD_FOOT . -protected section. + TYPE-POOLS abap . + + DATA black_and_white TYPE flag . + DATA cell_comments TYPE stringval . + DATA copies TYPE int2 . + CONSTANTS c_break_column TYPE zexcel_break VALUE 2. "#EC NOTEXT + CONSTANTS c_break_none TYPE zexcel_break VALUE 0. "#EC NOTEXT + CONSTANTS c_break_row TYPE zexcel_break VALUE 1. "#EC NOTEXT + CONSTANTS c_cc_as_displayed TYPE string VALUE 'asDisplayed'. "#EC NOTEXT + CONSTANTS c_cc_at_end TYPE string VALUE 'atEnd'. "#EC NOTEXT + CONSTANTS c_cc_none TYPE string VALUE 'none'. "#EC NOTEXT + CONSTANTS c_ord_downthenover TYPE string VALUE 'downThenOver'. "#EC NOTEXT + CONSTANTS c_ord_overthendown TYPE string VALUE 'overThenDown'. "#EC NOTEXT + CONSTANTS c_orientation_default TYPE zexcel_sheet_orienatation VALUE 'default'. "#EC NOTEXT + CONSTANTS c_orientation_landscape TYPE zexcel_sheet_orienatation VALUE 'landscape'. "#EC NOTEXT + CONSTANTS c_orientation_portrait TYPE zexcel_sheet_orienatation VALUE 'portrait'. "#EC NOTEXT + CONSTANTS c_papersize_6_3_4_envelope TYPE zexcel_sheet_paper_size VALUE 38. "#EC NOTEXT + CONSTANTS c_papersize_a2_paper TYPE zexcel_sheet_paper_size VALUE 64. "#EC NOTEXT + CONSTANTS c_papersize_a3 TYPE zexcel_sheet_paper_size VALUE 8. "#EC NOTEXT + CONSTANTS c_papersize_a3_extra_paper TYPE zexcel_sheet_paper_size VALUE 61. "#EC NOTEXT + CONSTANTS c_papersize_a3_extra_tv_paper TYPE zexcel_sheet_paper_size VALUE 66. "#EC NOTEXT + CONSTANTS c_papersize_a3_tv_paper TYPE zexcel_sheet_paper_size VALUE 65. "#EC NOTEXT + CONSTANTS c_papersize_a4 TYPE zexcel_sheet_paper_size VALUE 9. "#EC NOTEXT + CONSTANTS c_papersize_a4_extra_paper TYPE zexcel_sheet_paper_size VALUE 51. "#EC NOTEXT + CONSTANTS c_papersize_a4_plus_paper TYPE zexcel_sheet_paper_size VALUE 58. "#EC NOTEXT + CONSTANTS c_papersize_a4_small TYPE zexcel_sheet_paper_size VALUE 10. "#EC NOTEXT + CONSTANTS c_papersize_a4_tv_paper TYPE zexcel_sheet_paper_size VALUE 53. "#EC NOTEXT + CONSTANTS c_papersize_a5 TYPE zexcel_sheet_paper_size VALUE 11. "#EC NOTEXT + CONSTANTS c_papersize_a5_extra_paper TYPE zexcel_sheet_paper_size VALUE 62. "#EC NOTEXT + CONSTANTS c_papersize_a5_tv_paper TYPE zexcel_sheet_paper_size VALUE 59. "#EC NOTEXT + CONSTANTS c_papersize_b4 TYPE zexcel_sheet_paper_size VALUE 12. "#EC NOTEXT + CONSTANTS c_papersize_b4_envelope TYPE zexcel_sheet_paper_size VALUE 33. "#EC NOTEXT + CONSTANTS c_papersize_b5 TYPE zexcel_sheet_paper_size VALUE 13. "#EC NOTEXT + CONSTANTS c_papersize_b5_envelope TYPE zexcel_sheet_paper_size VALUE 34. "#EC NOTEXT + CONSTANTS c_papersize_b6_envelope TYPE zexcel_sheet_paper_size VALUE 35. "#EC NOTEXT + CONSTANTS c_papersize_c TYPE zexcel_sheet_paper_size VALUE 24. "#EC NOTEXT + CONSTANTS c_papersize_c3_envelope TYPE zexcel_sheet_paper_size VALUE 29. "#EC NOTEXT + CONSTANTS c_papersize_c4_envelope TYPE zexcel_sheet_paper_size VALUE 30. "#EC NOTEXT + CONSTANTS c_papersize_c5_envelope TYPE zexcel_sheet_paper_size VALUE 28. "#EC NOTEXT + CONSTANTS c_papersize_c65_envelope TYPE zexcel_sheet_paper_size VALUE 32. "#EC NOTEXT + CONSTANTS c_papersize_c6_envelope TYPE zexcel_sheet_paper_size VALUE 31. "#EC NOTEXT + CONSTANTS c_papersize_d TYPE zexcel_sheet_paper_size VALUE 25. "#EC NOTEXT + CONSTANTS c_papersize_de_leg_fanfold TYPE zexcel_sheet_paper_size VALUE 41. "#EC NOTEXT + CONSTANTS c_papersize_de_std_fanfold TYPE zexcel_sheet_paper_size VALUE 40. "#EC NOTEXT + CONSTANTS c_papersize_dl_envelope TYPE zexcel_sheet_paper_size VALUE 27. "#EC NOTEXT + CONSTANTS c_papersize_e TYPE zexcel_sheet_paper_size VALUE 26. "#EC NOTEXT + CONSTANTS c_papersize_executive TYPE zexcel_sheet_paper_size VALUE 7. "#EC NOTEXT + CONSTANTS c_papersize_folio TYPE zexcel_sheet_paper_size VALUE 14. "#EC NOTEXT + CONSTANTS c_papersize_invite_envelope TYPE zexcel_sheet_paper_size VALUE 47. "#EC NOTEXT + CONSTANTS c_papersize_iso_b4 TYPE zexcel_sheet_paper_size VALUE 42. "#EC NOTEXT + CONSTANTS c_papersize_iso_b5_extra_paper TYPE zexcel_sheet_paper_size VALUE 63. "#EC NOTEXT + CONSTANTS c_papersize_italy_envelope TYPE zexcel_sheet_paper_size VALUE 36. "#EC NOTEXT + CONSTANTS c_papersize_jis_b5_tv_paper TYPE zexcel_sheet_paper_size VALUE 60. "#EC NOTEXT + CONSTANTS c_papersize_jpn_dbl_postcard TYPE zexcel_sheet_paper_size VALUE 43. "#EC NOTEXT + CONSTANTS c_papersize_ledger TYPE zexcel_sheet_paper_size VALUE 4. "#EC NOTEXT + CONSTANTS c_papersize_legal TYPE zexcel_sheet_paper_size VALUE 5. "#EC NOTEXT + CONSTANTS c_papersize_legal_extra_paper TYPE zexcel_sheet_paper_size VALUE 49. "#EC NOTEXT + CONSTANTS c_papersize_letter TYPE zexcel_sheet_paper_size VALUE 1. "#EC NOTEXT + CONSTANTS c_papersize_letter_extra_paper TYPE zexcel_sheet_paper_size VALUE 48. "#EC NOTEXT + CONSTANTS c_papersize_letter_extv_paper TYPE zexcel_sheet_paper_size VALUE 54. "#EC NOTEXT + CONSTANTS c_papersize_letter_plus_paper TYPE zexcel_sheet_paper_size VALUE 57. "#EC NOTEXT + CONSTANTS c_papersize_letter_small TYPE zexcel_sheet_paper_size VALUE 2. "#EC NOTEXT + CONSTANTS c_papersize_letter_tv_paper TYPE zexcel_sheet_paper_size VALUE 52. "#EC NOTEXT + CONSTANTS c_papersize_monarch_envelope TYPE zexcel_sheet_paper_size VALUE 37. "#EC NOTEXT + CONSTANTS c_papersize_no10_envelope TYPE zexcel_sheet_paper_size VALUE 20. "#EC NOTEXT + CONSTANTS c_papersize_no11_envelope TYPE zexcel_sheet_paper_size VALUE 21. "#EC NOTEXT + CONSTANTS c_papersize_no12_envelope TYPE zexcel_sheet_paper_size VALUE 22. "#EC NOTEXT + CONSTANTS c_papersize_no14_envelope TYPE zexcel_sheet_paper_size VALUE 23. "#EC NOTEXT + CONSTANTS c_papersize_no9_envelope TYPE zexcel_sheet_paper_size VALUE 19. "#EC NOTEXT + CONSTANTS c_papersize_note TYPE zexcel_sheet_paper_size VALUE 18. "#EC NOTEXT + CONSTANTS c_papersize_quarto TYPE zexcel_sheet_paper_size VALUE 15. "#EC NOTEXT + CONSTANTS c_papersize_standard_1 TYPE zexcel_sheet_paper_size VALUE 16. "#EC NOTEXT + CONSTANTS c_papersize_standard_2 TYPE zexcel_sheet_paper_size VALUE 17. "#EC NOTEXT + CONSTANTS c_papersize_standard_paper_1 TYPE zexcel_sheet_paper_size VALUE 44. "#EC NOTEXT + CONSTANTS c_papersize_standard_paper_2 TYPE zexcel_sheet_paper_size VALUE 45. "#EC NOTEXT + CONSTANTS c_papersize_standard_paper_3 TYPE zexcel_sheet_paper_size VALUE 46. "#EC NOTEXT + CONSTANTS c_papersize_statement TYPE zexcel_sheet_paper_size VALUE 6. "#EC NOTEXT + CONSTANTS c_papersize_supera_a4_paper TYPE zexcel_sheet_paper_size VALUE 55. "#EC NOTEXT + CONSTANTS c_papersize_superb_a3_paper TYPE zexcel_sheet_paper_size VALUE 56. "#EC NOTEXT + CONSTANTS c_papersize_tabloid TYPE zexcel_sheet_paper_size VALUE 3. "#EC NOTEXT + CONSTANTS c_papersize_tabl_extra_paper TYPE zexcel_sheet_paper_size VALUE 50. "#EC NOTEXT + CONSTANTS c_papersize_us_std_fanfold TYPE zexcel_sheet_paper_size VALUE 39. "#EC NOTEXT + CONSTANTS c_pe_blank TYPE string VALUE 'blank'. "#EC NOTEXT + CONSTANTS c_pe_dash TYPE string VALUE 'dash'. "#EC NOTEXT + CONSTANTS c_pe_displayed TYPE string VALUE 'displayed'. "#EC NOTEXT + CONSTANTS c_pe_na TYPE string VALUE 'NA'. "#EC NOTEXT + DATA diff_oddeven_headerfooter TYPE flag . + DATA draft TYPE flag . + DATA errors TYPE stringval . + DATA even_footer TYPE zexcel_s_worksheet_head_foot . + DATA even_header TYPE zexcel_s_worksheet_head_foot . + DATA first_page_number TYPE int2 . + DATA fit_to_height TYPE int2 . + DATA fit_to_page TYPE flag . + DATA fit_to_width TYPE int2 . + DATA horizontal_centered TYPE flag . + DATA horizontal_dpi TYPE int2 . + DATA margin_bottom TYPE zexcel_dec_8_2 . + DATA margin_footer TYPE zexcel_dec_8_2 . + DATA margin_header TYPE zexcel_dec_8_2 . + DATA margin_left TYPE zexcel_dec_8_2 . + DATA margin_right TYPE zexcel_dec_8_2 . + DATA margin_top TYPE zexcel_dec_8_2 . + DATA odd_footer TYPE zexcel_s_worksheet_head_foot . + DATA odd_header TYPE zexcel_s_worksheet_head_foot . + DATA orientation TYPE zexcel_sheet_orienatation . + DATA page_order TYPE string . + DATA paper_height TYPE string . + DATA paper_size TYPE int2 . + DATA paper_width TYPE string . + DATA scale TYPE int2 . + DATA use_first_page_num TYPE flag . + DATA use_printer_defaults TYPE flag . + DATA vertical_centered TYPE flag . + DATA vertical_dpi TYPE int2 . + + METHODS constructor . + METHODS set_page_margins + IMPORTING + !ip_bottom TYPE float OPTIONAL + !ip_footer TYPE float OPTIONAL + !ip_header TYPE float OPTIONAL + !ip_left TYPE float OPTIONAL + !ip_right TYPE float OPTIONAL + !ip_top TYPE float OPTIONAL + !ip_unit TYPE csequence DEFAULT 'in' . + METHODS set_header_footer + IMPORTING + !ip_odd_header TYPE zexcel_s_worksheet_head_foot OPTIONAL + !ip_odd_footer TYPE zexcel_s_worksheet_head_foot OPTIONAL + !ip_even_header TYPE zexcel_s_worksheet_head_foot OPTIONAL + !ip_even_footer TYPE zexcel_s_worksheet_head_foot OPTIONAL . + METHODS get_header_footer_string + EXPORTING + !ep_odd_header TYPE string + !ep_odd_footer TYPE string + !ep_even_header TYPE string + !ep_even_footer TYPE string . + METHODS get_header_footer + EXPORTING + !ep_odd_header TYPE zexcel_s_worksheet_head_foot + !ep_odd_footer TYPE zexcel_s_worksheet_head_foot + !ep_even_header TYPE zexcel_s_worksheet_head_foot + !ep_even_footer TYPE zexcel_s_worksheet_head_foot . + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_SHEET_SETUP *"* do not include other source files here!!! - methods PROCESS_HEADER_FOOTER - importing - !IP_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT - !IP_SIDE type STRING - returning - value(RV_PROCESSED_STRING) type STRING . -private section. + METHODS process_header_footer + IMPORTING + !ip_header TYPE zexcel_s_worksheet_head_foot + !ip_side TYPE string + RETURNING + VALUE(rv_processed_string) TYPE string . + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_SHEET_SETUP *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_SHEET_SETUP IMPLEMENTATION. +CLASS zcl_excel_sheet_setup IMPLEMENTATION. -method CONSTRUCTOR. - orientation = me->c_orientation_default. + METHOD constructor. + orientation = me->c_orientation_default. * default margins - margin_bottom = '0.75'. - margin_footer = '0.3'. - margin_header = '0.3'. - margin_left = '0.7'. - margin_right = '0.7'. - margin_top = '0.75'. + margin_bottom = '0.75'. + margin_footer = '0.3'. + margin_header = '0.3'. + margin_left = '0.7'. + margin_right = '0.7'. + margin_top = '0.75'. * clear page settings - CLEAR: black_and_white, - cell_comments, - copies, - draft, - errors, - first_page_number, - fit_to_page, - fit_to_height, - fit_to_width, - horizontal_dpi, - orientation, - page_order, - paper_height, - paper_size, - paper_width, - scale, - use_first_page_num, - use_printer_defaults, - vertical_dpi. - endmethod. - - -METHOD get_header_footer. + CLEAR: black_and_white, + cell_comments, + copies, + draft, + errors, + first_page_number, + fit_to_page, + fit_to_height, + fit_to_width, + horizontal_dpi, + orientation, + page_order, + paper_height, + paper_size, + paper_width, + scale, + use_first_page_num, + use_printer_defaults, + vertical_dpi. + ENDMETHOD. + + + METHOD get_header_footer. * Only Basic font/text formatting possible: * Bold (yes / no), Font Type, Font Size @@ -223,207 +223,207 @@ METHOD get_header_footer. * * DO NOT USE &L , &C or &R which automatically created as position markers - ep_odd_header = me->odd_header. - ep_odd_footer = me->odd_footer. - ep_even_header = me->even_header. - ep_even_footer = me->even_footer. + ep_odd_header = me->odd_header. + ep_odd_footer = me->odd_footer. + ep_even_header = me->even_header. + ep_even_footer = me->even_footer. -ENDMETHOD. + ENDMETHOD. -METHOD get_header_footer_string. + METHOD get_header_footer_string. * ---------------------------------------------------------------------- - DATA: lc_marker_left(2) TYPE c VALUE '&L' - , lc_marker_right(2) TYPE c VALUE '&R' - , lc_marker_center(2) TYPE c VALUE '&C' - , lv_value TYPE string - . + DATA: lc_marker_left(2) TYPE c VALUE '&L' + , lc_marker_right(2) TYPE c VALUE '&R' + , lc_marker_center(2) TYPE c VALUE '&C' + , lv_value TYPE string + . * ---------------------------------------------------------------------- - IF ep_odd_header IS SUPPLIED. + IF ep_odd_header IS SUPPLIED. - IF me->odd_header-left_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'LEFT' ). - CONCATENATE lc_marker_left lv_value INTO ep_odd_header. - ENDIF. + IF me->odd_header-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_odd_header. + ENDIF. - IF me->odd_header-center_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'CENTER' ). - CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_header. - ENDIF. + IF me->odd_header-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'CENTER' ). + CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_header. + ENDIF. - IF me->odd_header-right_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'RIGHT' ). - CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_header. - ENDIF. + IF me->odd_header-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'RIGHT' ). + CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_header. + ENDIF. - IF me->odd_header-left_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_odd_header. - ENDIF. - IF me->odd_header-center_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_header. - ENDIF. - IF me->odd_header-right_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_header. - ENDIF. + IF me->odd_header-left_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_odd_header. + ENDIF. + IF me->odd_header-center_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_header. + ENDIF. + IF me->odd_header-right_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_header. + ENDIF. - ENDIF. + ENDIF. * ---------------------------------------------------------------------- - IF ep_odd_footer IS SUPPLIED. + IF ep_odd_footer IS SUPPLIED. - IF me->odd_footer-left_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'LEFT' ). - CONCATENATE lc_marker_left lv_value INTO ep_odd_footer. - ENDIF. + IF me->odd_footer-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_odd_footer. + ENDIF. - IF me->odd_footer-center_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'CENTER' ). - CONCATENATE ep_odd_footer lc_marker_center lv_value INTO ep_odd_footer. - ENDIF. + IF me->odd_footer-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'CENTER' ). + CONCATENATE ep_odd_footer lc_marker_center lv_value INTO ep_odd_footer. + ENDIF. - IF me->odd_footer-right_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'RIGHT' ). - CONCATENATE ep_odd_footer lc_marker_right lv_value INTO ep_odd_footer. - ENDIF. + IF me->odd_footer-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'RIGHT' ). + CONCATENATE ep_odd_footer lc_marker_right lv_value INTO ep_odd_footer. + ENDIF. - IF me->odd_footer-left_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_odd_footer. - ENDIF. - IF me->odd_footer-center_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_footer. - ENDIF. - IF me->odd_footer-right_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_footer. - ENDIF. + IF me->odd_footer-left_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_odd_footer. + ENDIF. + IF me->odd_footer-center_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_footer. + ENDIF. + IF me->odd_footer-right_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_footer. + ENDIF. - ENDIF. + ENDIF. * ---------------------------------------------------------------------- - IF ep_even_header IS SUPPLIED. + IF ep_even_header IS SUPPLIED. - IF me->even_header-left_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'LEFT' ). - CONCATENATE lc_marker_left lv_value INTO ep_even_header. - ENDIF. + IF me->even_header-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_even_header. + ENDIF. - IF me->even_header-center_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'CENTER' ). - CONCATENATE ep_even_header lc_marker_center lv_value INTO ep_even_header. - ENDIF. + IF me->even_header-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'CENTER' ). + CONCATENATE ep_even_header lc_marker_center lv_value INTO ep_even_header. + ENDIF. - IF me->even_header-right_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'RIGHT' ). - CONCATENATE ep_even_header lc_marker_right lv_value INTO ep_even_header. - ENDIF. + IF me->even_header-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'RIGHT' ). + CONCATENATE ep_even_header lc_marker_right lv_value INTO ep_even_header. + ENDIF. - IF me->even_header-left_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_even_header. - ENDIF. - IF me->even_header-center_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_even_header. - ENDIF. - IF me->even_header-right_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_even_header. - ENDIF. + IF me->even_header-left_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_even_header. + ENDIF. + IF me->even_header-center_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_even_header. + ENDIF. + IF me->even_header-right_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_even_header. + ENDIF. - ENDIF. + ENDIF. * ---------------------------------------------------------------------- - IF ep_even_footer IS SUPPLIED. + IF ep_even_footer IS SUPPLIED. - IF me->even_footer-left_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'LEFT' ). - CONCATENATE lc_marker_left lv_value INTO ep_even_footer. - ENDIF. + IF me->even_footer-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_even_footer. + ENDIF. - IF me->even_footer-center_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'CENTER' ). - CONCATENATE ep_even_footer lc_marker_center lv_value INTO ep_even_footer. - ENDIF. + IF me->even_footer-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'CENTER' ). + CONCATENATE ep_even_footer lc_marker_center lv_value INTO ep_even_footer. + ENDIF. - IF me->even_footer-right_value IS NOT INITIAL. - lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'RIGHT' ). - CONCATENATE ep_even_footer lc_marker_right lv_value INTO ep_even_footer. - ENDIF. + IF me->even_footer-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'RIGHT' ). + CONCATENATE ep_even_footer lc_marker_right lv_value INTO ep_even_footer. + ENDIF. - IF me->even_footer-left_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_even_footer. - ENDIF. - IF me->even_footer-center_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_even_footer. - ENDIF. - IF me->even_footer-right_image IS NOT INITIAL. - lv_value = '&G'. - CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_even_footer. - ENDIF. + IF me->even_footer-left_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_left lv_value INTO ep_even_footer. + ENDIF. + IF me->even_footer-center_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_even_footer. + ENDIF. + IF me->even_footer-right_image IS NOT INITIAL. + lv_value = '&G'. + CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_even_footer. + ENDIF. - ENDIF. + ENDIF. * ---------------------------------------------------------------------- -ENDMETHOD. + ENDMETHOD. -METHOD process_header_footer. + METHOD process_header_footer. * ---------------------------------------------------------------------- * Only Basic font/text formatting possible: * Bold (yes / no), Font Type, Font Size - DATA: lv_fname(12) TYPE c - , lv_string TYPE string - . + DATA: lv_fname(12) TYPE c + , lv_string TYPE string + . - FIELD-SYMBOLS: TYPE string - , TYPE zexcel_s_style_font - . + FIELD-SYMBOLS: TYPE string + , TYPE zexcel_s_style_font + . * ---------------------------------------------------------------------- - CONCATENATE ip_side '_VALUE' INTO lv_fname. - ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO . + CONCATENATE ip_side '_VALUE' INTO lv_fname. + ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO . - CONCATENATE ip_side '_FONT' INTO lv_fname. - ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO . + CONCATENATE ip_side '_FONT' INTO lv_fname. + ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO . - IF IS ASSIGNED AND IS ASSIGNED. + IF IS ASSIGNED AND IS ASSIGNED. - IF = '&G'. "image header - rv_processed_string = . - ELSE. - - IF -name IS NOT INITIAL. - CONCATENATE '&"' -name ',' INTO rv_processed_string. + IF = '&G'. "image header + rv_processed_string = . ELSE. - rv_processed_string = '&"-,'. - ENDIF. - IF -bold = abap_true. - CONCATENATE rv_processed_string 'Bold"' INTO rv_processed_string. - ELSE. - CONCATENATE rv_processed_string 'Standard"' INTO rv_processed_string. + IF -name IS NOT INITIAL. + CONCATENATE '&"' -name ',' INTO rv_processed_string. + ELSE. + rv_processed_string = '&"-,'. + ENDIF. + + IF -bold = abap_true. + CONCATENATE rv_processed_string 'Bold"' INTO rv_processed_string. + ELSE. + CONCATENATE rv_processed_string 'Standard"' INTO rv_processed_string. + ENDIF. + + IF -size IS NOT INITIAL. + lv_string = -size. + CONCATENATE rv_processed_string '&' lv_string INTO rv_processed_string. + CONDENSE rv_processed_string NO-GAPS. + ENDIF. + + CONCATENATE rv_processed_string INTO rv_processed_string. ENDIF. - - IF -size IS NOT INITIAL. - lv_string = -size. - CONCATENATE rv_processed_string '&' lv_string INTO rv_processed_string. - CONDENSE rv_processed_string NO-GAPS. - ENDIF. - - CONCATENATE rv_processed_string INTO rv_processed_string. ENDIF. - ENDIF. * ---------------------------------------------------------------------- -ENDMETHOD. + ENDMETHOD. -method SET_HEADER_FOOTER. + METHOD set_header_footer. * Only Basic font/text formatting possible: * Bold (yes / no), Font Type, Font Size @@ -442,38 +442,38 @@ method SET_HEADER_FOOTER. * * DO NOT USE &L , &C or &R which automatically created as position markers - me->odd_header = ip_odd_header. - me->odd_footer = ip_odd_footer. - me->even_header = ip_even_header. - me->even_footer = ip_even_footer. + me->odd_header = ip_odd_header. + me->odd_footer = ip_odd_footer. + me->even_header = ip_even_header. + me->even_footer = ip_even_footer. - IF me->even_header IS NOT INITIAL OR me->even_footer IS NOT INITIAL. - me->diff_oddeven_headerfooter = abap_true. - ENDIF. + IF me->even_header IS NOT INITIAL OR me->even_footer IS NOT INITIAL. + me->diff_oddeven_headerfooter = abap_true. + ENDIF. - endmethod. + ENDMETHOD. -method SET_PAGE_MARGINS. - DATA: lv_coef TYPE f, - lv_unit TYPE string. + METHOD set_page_margins. + DATA: lv_coef TYPE f, + lv_unit TYPE string. - lv_unit = ip_unit. - TRANSLATE lv_unit TO UPPER CASE. + lv_unit = ip_unit. + TRANSLATE lv_unit TO UPPER CASE. - CASE lv_unit. - WHEN 'IN'. lv_coef = 1. - WHEN 'CM'. lv_coef = '0.393700787'. - WHEN 'MM'. lv_coef = '0.0393700787'. - ENDCASE. + CASE lv_unit. + WHEN 'IN'. lv_coef = 1. + WHEN 'CM'. lv_coef = '0.393700787'. + WHEN 'MM'. lv_coef = '0.0393700787'. + ENDCASE. - IF ip_bottom IS SUPPLIED. margin_bottom = lv_coef * ip_bottom. ENDIF. - IF ip_footer IS SUPPLIED. margin_footer = lv_coef * ip_footer. ENDIF. - IF ip_header IS SUPPLIED. margin_header = lv_coef * ip_header. ENDIF. - IF ip_left IS SUPPLIED. margin_left = lv_coef * ip_left. ENDIF. - IF ip_right IS SUPPLIED. margin_right = lv_coef * ip_right. ENDIF. - IF ip_top IS SUPPLIED. margin_top = lv_coef * ip_top. ENDIF. + IF ip_bottom IS SUPPLIED. margin_bottom = lv_coef * ip_bottom. ENDIF. + IF ip_footer IS SUPPLIED. margin_footer = lv_coef * ip_footer. ENDIF. + IF ip_header IS SUPPLIED. margin_header = lv_coef * ip_header. ENDIF. + IF ip_left IS SUPPLIED. margin_left = lv_coef * ip_left. ENDIF. + IF ip_right IS SUPPLIED. margin_right = lv_coef * ip_right. ENDIF. + IF ip_top IS SUPPLIED. margin_top = lv_coef * ip_top. ENDIF. - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style.clas.abap b/src/zcl_excel_style.clas.abap index 438192665..1a3947810 100644 --- a/src/zcl_excel_style.clas.abap +++ b/src/zcl_excel_style.clas.abap @@ -1,62 +1,62 @@ -class ZCL_EXCEL_STYLE definition - public - final - create public . +CLASS zcl_excel_style DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_STYLE *"* do not include other source files here!!! -public section. - - data FONT type ref to ZCL_EXCEL_STYLE_FONT . - data FILL type ref to ZCL_EXCEL_STYLE_FILL . - data BORDERS type ref to ZCL_EXCEL_STYLE_BORDERS . - data ALIGNMENT type ref to ZCL_EXCEL_STYLE_ALIGNMENT . - data NUMBER_FORMAT type ref to ZCL_EXCEL_STYLE_NUMBER_FORMAT . - data PROTECTION type ref to ZCL_EXCEL_STYLE_PROTECTION . - - methods CONSTRUCTOR - importing - !IP_GUID type ZEXCEL_CELL_STYLE optional . - methods GET_GUID - returning - value(EP_GUID) type ZEXCEL_CELL_STYLE . + PUBLIC SECTION. + + DATA font TYPE REF TO zcl_excel_style_font . + DATA fill TYPE REF TO zcl_excel_style_fill . + DATA borders TYPE REF TO zcl_excel_style_borders . + DATA alignment TYPE REF TO zcl_excel_style_alignment . + DATA number_format TYPE REF TO zcl_excel_style_number_format . + DATA protection TYPE REF TO zcl_excel_style_protection . + + METHODS constructor + IMPORTING + !ip_guid TYPE zexcel_cell_style OPTIONAL . + METHODS get_guid + RETURNING + VALUE(ep_guid) TYPE zexcel_cell_style . *"* protected components of class ZABAP_EXCEL_STYLE *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_STYLE *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - data GUID type ZEXCEL_CELL_STYLE . + DATA guid TYPE zexcel_cell_style . ENDCLASS. -CLASS ZCL_EXCEL_STYLE IMPLEMENTATION. +CLASS zcl_excel_style IMPLEMENTATION. -METHOD constructor. + METHOD constructor. - CREATE OBJECT font. - CREATE OBJECT fill. - CREATE OBJECT borders. - CREATE OBJECT alignment. - CREATE OBJECT number_format. - CREATE OBJECT protection. + CREATE OBJECT font. + CREATE OBJECT fill. + CREATE OBJECT borders. + CREATE OBJECT alignment. + CREATE OBJECT number_format. + CREATE OBJECT protection. - IF ip_guid IS NOT INITIAL. - me->guid = ip_guid. - ELSE. - me->guid = zcl_excel_obsolete_func_wrap=>guid_create( ). - ENDIF. + IF ip_guid IS NOT INITIAL. + me->guid = ip_guid. + ELSE. + me->guid = zcl_excel_obsolete_func_wrap=>guid_create( ). + ENDIF. -ENDMETHOD. + ENDMETHOD. -method GET_GUID. + METHOD get_guid. - ep_guid = me->guid. - endmethod. + ep_guid = me->guid. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_alignment.clas.abap b/src/zcl_excel_style_alignment.clas.abap index 6f618d974..94e39edcb 100644 --- a/src/zcl_excel_style_alignment.clas.abap +++ b/src/zcl_excel_style_alignment.clas.abap @@ -1,65 +1,65 @@ -class ZCL_EXCEL_STYLE_ALIGNMENT definition - public - final - create public . +CLASS zcl_excel_style_alignment DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_STYLE_ALIGNMENT *"* do not include other source files here!!! -public section. - type-pools ABAP . + PUBLIC SECTION. + TYPE-POOLS abap . - constants C_HORIZONTAL_GENERAL type ZEXCEL_ALIGNMENT value 'general'. "#EC NOTEXT - constants C_HORIZONTAL_LEFT type ZEXCEL_ALIGNMENT value 'left'. "#EC NOTEXT - constants C_HORIZONTAL_RIGHT type ZEXCEL_ALIGNMENT value 'right'. "#EC NOTEXT - constants C_HORIZONTAL_CENTER type ZEXCEL_ALIGNMENT value 'center'. "#EC NOTEXT - constants C_HORIZONTAL_CENTER_CONTINUOUS type ZEXCEL_ALIGNMENT value 'centerContinuous'. "#EC NOTEXT - constants C_HORIZONTAL_JUSTIFY type ZEXCEL_ALIGNMENT value 'justify'. "#EC NOTEXT - constants C_VERTICAL_BOTTOM type ZEXCEL_ALIGNMENT value 'bottom'. "#EC NOTEXT - constants C_VERTICAL_TOP type ZEXCEL_ALIGNMENT value 'top'. "#EC NOTEXT - constants C_VERTICAL_CENTER type ZEXCEL_ALIGNMENT value 'center'. "#EC NOTEXT - constants C_VERTICAL_JUSTIFY type ZEXCEL_ALIGNMENT value 'justify'. "#EC NOTEXT - data HORIZONTAL type ZEXCEL_ALIGNMENT . - data VERTICAL type ZEXCEL_ALIGNMENT . - data TEXTROTATION type ZEXCEL_TEXT_ROTATION value 0. "#EC NOTEXT . . . . . . . . . . " . - data WRAPTEXT type FLAG . - data SHRINKTOFIT type FLAG . - data INDENT type ZEXCEL_INDENT value 0. "#EC NOTEXT . . . . . . . . . . " . + CONSTANTS c_horizontal_general TYPE zexcel_alignment VALUE 'general'. "#EC NOTEXT + CONSTANTS c_horizontal_left TYPE zexcel_alignment VALUE 'left'. "#EC NOTEXT + CONSTANTS c_horizontal_right TYPE zexcel_alignment VALUE 'right'. "#EC NOTEXT + CONSTANTS c_horizontal_center TYPE zexcel_alignment VALUE 'center'. "#EC NOTEXT + CONSTANTS c_horizontal_center_continuous TYPE zexcel_alignment VALUE 'centerContinuous'. "#EC NOTEXT + CONSTANTS c_horizontal_justify TYPE zexcel_alignment VALUE 'justify'. "#EC NOTEXT + CONSTANTS c_vertical_bottom TYPE zexcel_alignment VALUE 'bottom'. "#EC NOTEXT + CONSTANTS c_vertical_top TYPE zexcel_alignment VALUE 'top'. "#EC NOTEXT + CONSTANTS c_vertical_center TYPE zexcel_alignment VALUE 'center'. "#EC NOTEXT + CONSTANTS c_vertical_justify TYPE zexcel_alignment VALUE 'justify'. "#EC NOTEXT + DATA horizontal TYPE zexcel_alignment . + DATA vertical TYPE zexcel_alignment . + DATA textrotation TYPE zexcel_text_rotation VALUE 0. "#EC NOTEXT . . . . . . . . . . " . + DATA wraptext TYPE flag . + DATA shrinktofit TYPE flag . + DATA indent TYPE zexcel_indent VALUE 0. "#EC NOTEXT . . . . . . . . . . " . - methods CONSTRUCTOR . - methods GET_STRUCTURE - returning - value(ES_ALIGNMENT) type ZEXCEL_S_STYLE_ALIGNMENT . + METHODS constructor . + METHODS get_structure + RETURNING + VALUE(es_alignment) TYPE zexcel_s_style_alignment . *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_STYLE_ALIGNMENT *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_STYLE_ALIGNMENT IMPLEMENTATION. +CLASS zcl_excel_style_alignment IMPLEMENTATION. -method CONSTRUCTOR. - horizontal = me->c_horizontal_general. - vertical = me->c_vertical_bottom. - wrapText = abap_false. - shrinkToFit = abap_false. - endmethod. + METHOD constructor. + horizontal = me->c_horizontal_general. + vertical = me->c_vertical_bottom. + wraptext = abap_false. + shrinktofit = abap_false. + ENDMETHOD. -method GET_STRUCTURE. + METHOD get_structure. - es_alignment-horizontal = me->horizontal. - es_alignment-vertical = me->vertical. - es_alignment-textrotation = me->textrotation. - es_alignment-wraptext = me->wraptext. - es_alignment-shrinktofit = me->shrinktofit. - es_alignment-indent = me->indent. + es_alignment-horizontal = me->horizontal. + es_alignment-vertical = me->vertical. + es_alignment-textrotation = me->textrotation. + es_alignment-wraptext = me->wraptext. + es_alignment-shrinktofit = me->shrinktofit. + es_alignment-indent = me->indent. - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_border.clas.abap b/src/zcl_excel_style_border.clas.abap index ee0e12dd3..fb6505813 100644 --- a/src/zcl_excel_style_border.clas.abap +++ b/src/zcl_excel_style_border.clas.abap @@ -1,48 +1,48 @@ -class ZCL_EXCEL_STYLE_BORDER definition - public - final - create public . +CLASS zcl_excel_style_border DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_STYLE_BORDER *"* do not include other source files here!!! - data BORDER_STYLE type ZEXCEL_BORDER . - data BORDER_COLOR type ZEXCEL_S_STYLE_COLOR . - constants C_BORDER_NONE type ZEXCEL_BORDER value 'none'. "#EC NOTEXT - constants C_BORDER_DASHDOT type ZEXCEL_BORDER value 'dashDot'. "#EC NOTEXT - constants C_BORDER_DASHDOTDOT type ZEXCEL_BORDER value 'dashDotDot'. "#EC NOTEXT - constants C_BORDER_DASHED type ZEXCEL_BORDER value 'dashed'. "#EC NOTEXT - constants C_BORDER_DOTTED type ZEXCEL_BORDER value 'dotted'. "#EC NOTEXT - constants C_BORDER_DOUBLE type ZEXCEL_BORDER value 'double'. "#EC NOTEXT - constants C_BORDER_HAIR type ZEXCEL_BORDER value 'hair'. "#EC NOTEXT - constants C_BORDER_MEDIUM type ZEXCEL_BORDER value 'medium'. "#EC NOTEXT - constants C_BORDER_MEDIUMDASHDOT type ZEXCEL_BORDER value 'mediumDashDot'. "#EC NOTEXT - constants C_BORDER_MEDIUMDASHDOTDOT type ZEXCEL_BORDER value 'mediumDashDotDot'. "#EC NOTEXT - constants C_BORDER_MEDIUMDASHED type ZEXCEL_BORDER value 'mediumDashed'. "#EC NOTEXT - constants C_BORDER_SLANTDASHDOT type ZEXCEL_BORDER value 'slantDashDot'. "#EC NOTEXT - constants C_BORDER_THICK type ZEXCEL_BORDER value 'thick'. "#EC NOTEXT - constants C_BORDER_THIN type ZEXCEL_BORDER value 'thin'. "#EC NOTEXT - - methods CONSTRUCTOR . + DATA border_style TYPE zexcel_border . + DATA border_color TYPE zexcel_s_style_color . + CONSTANTS c_border_none TYPE zexcel_border VALUE 'none'. "#EC NOTEXT + CONSTANTS c_border_dashdot TYPE zexcel_border VALUE 'dashDot'. "#EC NOTEXT + CONSTANTS c_border_dashdotdot TYPE zexcel_border VALUE 'dashDotDot'. "#EC NOTEXT + CONSTANTS c_border_dashed TYPE zexcel_border VALUE 'dashed'. "#EC NOTEXT + CONSTANTS c_border_dotted TYPE zexcel_border VALUE 'dotted'. "#EC NOTEXT + CONSTANTS c_border_double TYPE zexcel_border VALUE 'double'. "#EC NOTEXT + CONSTANTS c_border_hair TYPE zexcel_border VALUE 'hair'. "#EC NOTEXT + CONSTANTS c_border_medium TYPE zexcel_border VALUE 'medium'. "#EC NOTEXT + CONSTANTS c_border_mediumdashdot TYPE zexcel_border VALUE 'mediumDashDot'. "#EC NOTEXT + CONSTANTS c_border_mediumdashdotdot TYPE zexcel_border VALUE 'mediumDashDotDot'. "#EC NOTEXT + CONSTANTS c_border_mediumdashed TYPE zexcel_border VALUE 'mediumDashed'. "#EC NOTEXT + CONSTANTS c_border_slantdashdot TYPE zexcel_border VALUE 'slantDashDot'. "#EC NOTEXT + CONSTANTS c_border_thick TYPE zexcel_border VALUE 'thick'. "#EC NOTEXT + CONSTANTS c_border_thin TYPE zexcel_border VALUE 'thin'. "#EC NOTEXT + + METHODS constructor . *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_STYLE_BORDER *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_STYLE_BORDER IMPLEMENTATION. +CLASS zcl_excel_style_border IMPLEMENTATION. -method CONSTRUCTOR. - border_style = zcl_excel_style_border=>c_border_none. - border_color-theme = zcl_excel_style_color=>c_theme_not_set. - border_color-indexed = zcl_excel_style_color=>c_indexed_not_set. - endmethod. + METHOD constructor. + border_style = zcl_excel_style_border=>c_border_none. + border_color-theme = zcl_excel_style_color=>c_theme_not_set. + border_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_borders.clas.abap b/src/zcl_excel_style_borders.clas.abap index f0c29618c..aa62adbfd 100644 --- a/src/zcl_excel_style_borders.clas.abap +++ b/src/zcl_excel_style_borders.clas.abap @@ -1,103 +1,103 @@ -class ZCL_EXCEL_STYLE_BORDERS definition - public - final - create public . +CLASS zcl_excel_style_borders DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_STYLE_BORDERS *"* do not include other source files here!!! -public section. + PUBLIC SECTION. - data ALLBORDERS type ref to ZCL_EXCEL_STYLE_BORDER . - constants C_DIAGONAL_BOTH type ZEXCEL_DIAGONAL value 3. "#EC NOTEXT - constants C_DIAGONAL_DOWN type ZEXCEL_DIAGONAL value 2. "#EC NOTEXT - constants C_DIAGONAL_NONE type ZEXCEL_DIAGONAL value 0. "#EC NOTEXT - constants C_DIAGONAL_UP type ZEXCEL_DIAGONAL value 1. "#EC NOTEXT - data DIAGONAL type ref to ZCL_EXCEL_STYLE_BORDER . - data DIAGONAL_MODE type ZEXCEL_DIAGONAL . - data DOWN type ref to ZCL_EXCEL_STYLE_BORDER . - data LEFT type ref to ZCL_EXCEL_STYLE_BORDER . - data RIGHT type ref to ZCL_EXCEL_STYLE_BORDER . - data TOP type ref to ZCL_EXCEL_STYLE_BORDER . + DATA allborders TYPE REF TO zcl_excel_style_border . + CONSTANTS c_diagonal_both TYPE zexcel_diagonal VALUE 3. "#EC NOTEXT + CONSTANTS c_diagonal_down TYPE zexcel_diagonal VALUE 2. "#EC NOTEXT + CONSTANTS c_diagonal_none TYPE zexcel_diagonal VALUE 0. "#EC NOTEXT + CONSTANTS c_diagonal_up TYPE zexcel_diagonal VALUE 1. "#EC NOTEXT + DATA diagonal TYPE REF TO zcl_excel_style_border . + DATA diagonal_mode TYPE zexcel_diagonal . + DATA down TYPE REF TO zcl_excel_style_border . + DATA left TYPE REF TO zcl_excel_style_border . + DATA right TYPE REF TO zcl_excel_style_border . + DATA top TYPE REF TO zcl_excel_style_border . - methods GET_STRUCTURE - returning - value(ES_FILL) type ZEXCEL_S_STYLE_BORDER . + METHODS get_structure + RETURNING + VALUE(es_fill) TYPE zexcel_s_style_border . *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_STYLE_BORDERS *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_STYLE_BORDERS IMPLEMENTATION. +CLASS zcl_excel_style_borders IMPLEMENTATION. -method GET_STRUCTURE. + METHOD get_structure. *initialize colors to 'not set' - es_fill-left_color-indexed = zcl_excel_style_color=>c_indexed_not_set. - es_fill-left_color-theme = zcl_excel_style_color=>c_theme_not_set. - es_fill-right_color-indexed = zcl_excel_style_color=>c_indexed_not_set. - es_fill-right_color-theme = zcl_excel_style_color=>c_theme_not_set. - es_fill-top_color-indexed = zcl_excel_style_color=>c_indexed_not_set. - es_fill-top_color-theme = zcl_excel_style_color=>c_theme_not_set. - es_fill-bottom_color-indexed = zcl_excel_style_color=>c_indexed_not_set. - es_fill-bottom_color-theme = zcl_excel_style_color=>c_theme_not_set. - es_fill-diagonal_color-indexed = zcl_excel_style_color=>c_indexed_not_set. - es_fill-diagonal_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-left_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-left_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-right_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-right_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-top_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-top_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-bottom_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-bottom_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-diagonal_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-diagonal_color-theme = zcl_excel_style_color=>c_theme_not_set. * Check if all borders is set otherwise check single border - IF me->allborders IS BOUND. - es_fill-left_color = me->allborders->border_color. - es_fill-left_style = me->allborders->border_style. - es_fill-right_color = me->allborders->border_color. - es_fill-right_style = me->allborders->border_style. - es_fill-top_color = me->allborders->border_color. - es_fill-top_style = me->allborders->border_style. - es_fill-bottom_color = me->allborders->border_color. - es_fill-bottom_style = me->allborders->border_style. - ELSE. - IF me->left IS BOUND. - es_fill-left_color = me->left->border_color. - es_fill-left_style = me->left->border_style. + IF me->allborders IS BOUND. + es_fill-left_color = me->allborders->border_color. + es_fill-left_style = me->allborders->border_style. + es_fill-right_color = me->allborders->border_color. + es_fill-right_style = me->allborders->border_style. + es_fill-top_color = me->allborders->border_color. + es_fill-top_style = me->allborders->border_style. + es_fill-bottom_color = me->allborders->border_color. + es_fill-bottom_style = me->allborders->border_style. + ELSE. + IF me->left IS BOUND. + es_fill-left_color = me->left->border_color. + es_fill-left_style = me->left->border_style. + ENDIF. + IF me->right IS BOUND. + es_fill-right_color = me->right->border_color. + es_fill-right_style = me->right->border_style. + ENDIF. + IF me->top IS BOUND. + es_fill-top_color = me->top->border_color. + es_fill-top_style = me->top->border_style. + ENDIF. + IF me->down IS BOUND. + es_fill-bottom_color = me->down->border_color. + es_fill-bottom_style = me->down->border_style. + ENDIF. ENDIF. - IF me->right IS BOUND. - es_fill-right_color = me->right->border_color. - es_fill-right_style = me->right->border_style. - ENDIF. - IF me->top IS BOUND. - es_fill-top_color = me->top->border_color. - es_fill-top_style = me->top->border_style. - ENDIF. - IF me->down IS BOUND. - es_fill-bottom_color = me->down->border_color. - es_fill-bottom_style = me->down->border_style. - ENDIF. - ENDIF. * Check if diagonal is set - IF me->diagonal IS BOUND. - es_fill-diagonal_color = me->diagonal->border_color. - es_fill-diagonal_style = me->diagonal->border_style. - CASE me->diagonal_mode. - WHEN 1. - es_fill-diagonalup = 1. - es_fill-diagonaldown = 0. - WHEN 2. - es_fill-diagonalup = 0. - es_fill-diagonaldown = 1. - WHEN 3. - es_fill-diagonalup = 1. - es_fill-diagonaldown = 1. - WHEN OTHERS. - es_fill-diagonalup = 0. - es_fill-diagonaldown = 0. - ENDCASE. - ENDIF. + IF me->diagonal IS BOUND. + es_fill-diagonal_color = me->diagonal->border_color. + es_fill-diagonal_style = me->diagonal->border_style. + CASE me->diagonal_mode. + WHEN 1. + es_fill-diagonalup = 1. + es_fill-diagonaldown = 0. + WHEN 2. + es_fill-diagonalup = 0. + es_fill-diagonaldown = 1. + WHEN 3. + es_fill-diagonalup = 1. + es_fill-diagonaldown = 1. + WHEN OTHERS. + es_fill-diagonalup = 0. + es_fill-diagonaldown = 0. + ENDCASE. + ENDIF. - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_color.clas.abap b/src/zcl_excel_style_color.clas.abap index 647069062..0cebc0690 100644 --- a/src/zcl_excel_style_color.clas.abap +++ b/src/zcl_excel_style_color.clas.abap @@ -1,102 +1,102 @@ -class ZCL_EXCEL_STYLE_COLOR definition - public - final - create public . +CLASS zcl_excel_style_color DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_STYLE_COLOR *"* do not include other source files here!!! - constants C_BLACK type ZEXCEL_STYLE_COLOR_ARGB value 'FF000000'. "#EC NOTEXT - constants C_BLUE type ZEXCEL_STYLE_COLOR_ARGB value 'FF0000FF'. "#EC NOTEXT - constants C_DARKBLUE type ZEXCEL_STYLE_COLOR_ARGB value 'FF000080'. "#EC NOTEXT - constants C_DARKGREEN type ZEXCEL_STYLE_COLOR_ARGB value 'FF008000'. "#EC NOTEXT - constants C_DARKRED type ZEXCEL_STYLE_COLOR_ARGB value 'FF800000'. "#EC NOTEXT - constants C_DARKYELLOW type ZEXCEL_STYLE_COLOR_ARGB value 'FF808000'. "#EC NOTEXT - constants C_GRAY type ZEXCEL_STYLE_COLOR_ARGB value 'FFCCCCCC'. "#EC NOTEXT - constants C_GREEN type ZEXCEL_STYLE_COLOR_ARGB value 'FF00FF00'. "#EC NOTEXT - constants C_RED type ZEXCEL_STYLE_COLOR_ARGB value 'FFFF0000'. "#EC NOTEXT - constants C_WHITE type ZEXCEL_STYLE_COLOR_ARGB value 'FFFFFFFF'. "#EC NOTEXT - constants C_YELLOW type ZEXCEL_STYLE_COLOR_ARGB value 'FFFFFF00'. "#EC NOTEXT - constants C_THEME_DARK1 type ZEXCEL_STYLE_COLOR_THEME value 0. "#EC NOTEXT - constants C_THEME_LIGHT1 type ZEXCEL_STYLE_COLOR_THEME value 1. "#EC NOTEXT - constants C_THEME_DARK2 type ZEXCEL_STYLE_COLOR_THEME value 2. "#EC NOTEXT - constants C_THEME_LIGHT2 type ZEXCEL_STYLE_COLOR_THEME value 3. "#EC NOTEXT - constants C_THEME_ACCENT1 type ZEXCEL_STYLE_COLOR_THEME value 4. "#EC NOTEXT - constants C_THEME_ACCENT2 type ZEXCEL_STYLE_COLOR_THEME value 5. "#EC NOTEXT - constants C_THEME_ACCENT3 type ZEXCEL_STYLE_COLOR_THEME value 6. "#EC NOTEXT - constants C_THEME_ACCENT4 type ZEXCEL_STYLE_COLOR_THEME value 7. "#EC NOTEXT - constants C_THEME_ACCENT5 type ZEXCEL_STYLE_COLOR_THEME value 8. "#EC NOTEXT - constants C_THEME_ACCENT6 type ZEXCEL_STYLE_COLOR_THEME value 9. "#EC NOTEXT - constants C_THEME_HYPERLINK type ZEXCEL_STYLE_COLOR_THEME value 10. "#EC NOTEXT - constants C_THEME_HYPERLINK_FOLLOWED type ZEXCEL_STYLE_COLOR_THEME value 11. "#EC NOTEXT - constants C_THEME_NOT_SET type ZEXCEL_STYLE_COLOR_THEME value -1. "#EC NOTEXT - constants C_INDEXED_NOT_SET type ZEXCEL_STYLE_COLOR_INDEXED value -1. "#EC NOTEXT - constants C_INDEXED_SYS_FOREGROUND type ZEXCEL_STYLE_COLOR_INDEXED value 64. "#EC NOTEXT - - class-methods CREATE_NEW_ARGB - importing - !IP_RED type ZEXCEL_STYLE_COLOR_COMPONENT - !IP_GREEN type ZEXCEL_STYLE_COLOR_COMPONENT - !IP_BLU type ZEXCEL_STYLE_COLOR_COMPONENT - returning - value(EP_COLOR_ARGB) type ZEXCEL_STYLE_COLOR_ARGB . - class-methods CREATE_NEW_ARBG_INT - importing - !IV_RED type NUMERIC - !IV_GREEN type NUMERIC - !IV_BLUE type NUMERIC - returning - value(RV_COLOR_ARGB) type ZEXCEL_STYLE_COLOR_ARGB . + CONSTANTS c_black TYPE zexcel_style_color_argb VALUE 'FF000000'. "#EC NOTEXT + CONSTANTS c_blue TYPE zexcel_style_color_argb VALUE 'FF0000FF'. "#EC NOTEXT + CONSTANTS c_darkblue TYPE zexcel_style_color_argb VALUE 'FF000080'. "#EC NOTEXT + CONSTANTS c_darkgreen TYPE zexcel_style_color_argb VALUE 'FF008000'. "#EC NOTEXT + CONSTANTS c_darkred TYPE zexcel_style_color_argb VALUE 'FF800000'. "#EC NOTEXT + CONSTANTS c_darkyellow TYPE zexcel_style_color_argb VALUE 'FF808000'. "#EC NOTEXT + CONSTANTS c_gray TYPE zexcel_style_color_argb VALUE 'FFCCCCCC'. "#EC NOTEXT + CONSTANTS c_green TYPE zexcel_style_color_argb VALUE 'FF00FF00'. "#EC NOTEXT + CONSTANTS c_red TYPE zexcel_style_color_argb VALUE 'FFFF0000'. "#EC NOTEXT + CONSTANTS c_white TYPE zexcel_style_color_argb VALUE 'FFFFFFFF'. "#EC NOTEXT + CONSTANTS c_yellow TYPE zexcel_style_color_argb VALUE 'FFFFFF00'. "#EC NOTEXT + CONSTANTS c_theme_dark1 TYPE zexcel_style_color_theme VALUE 0. "#EC NOTEXT + CONSTANTS c_theme_light1 TYPE zexcel_style_color_theme VALUE 1. "#EC NOTEXT + CONSTANTS c_theme_dark2 TYPE zexcel_style_color_theme VALUE 2. "#EC NOTEXT + CONSTANTS c_theme_light2 TYPE zexcel_style_color_theme VALUE 3. "#EC NOTEXT + CONSTANTS c_theme_accent1 TYPE zexcel_style_color_theme VALUE 4. "#EC NOTEXT + CONSTANTS c_theme_accent2 TYPE zexcel_style_color_theme VALUE 5. "#EC NOTEXT + CONSTANTS c_theme_accent3 TYPE zexcel_style_color_theme VALUE 6. "#EC NOTEXT + CONSTANTS c_theme_accent4 TYPE zexcel_style_color_theme VALUE 7. "#EC NOTEXT + CONSTANTS c_theme_accent5 TYPE zexcel_style_color_theme VALUE 8. "#EC NOTEXT + CONSTANTS c_theme_accent6 TYPE zexcel_style_color_theme VALUE 9. "#EC NOTEXT + CONSTANTS c_theme_hyperlink TYPE zexcel_style_color_theme VALUE 10. "#EC NOTEXT + CONSTANTS c_theme_hyperlink_followed TYPE zexcel_style_color_theme VALUE 11. "#EC NOTEXT + CONSTANTS c_theme_not_set TYPE zexcel_style_color_theme VALUE -1. "#EC NOTEXT + CONSTANTS c_indexed_not_set TYPE zexcel_style_color_indexed VALUE -1. "#EC NOTEXT + CONSTANTS c_indexed_sys_foreground TYPE zexcel_style_color_indexed VALUE 64. "#EC NOTEXT + + CLASS-METHODS create_new_argb + IMPORTING + !ip_red TYPE zexcel_style_color_component + !ip_green TYPE zexcel_style_color_component + !ip_blu TYPE zexcel_style_color_component + RETURNING + VALUE(ep_color_argb) TYPE zexcel_style_color_argb . + CLASS-METHODS create_new_arbg_int + IMPORTING + !iv_red TYPE numeric + !iv_green TYPE numeric + !iv_blue TYPE numeric + RETURNING + VALUE(rv_color_argb) TYPE zexcel_style_color_argb . *"* protected components of class ZCL_EXCEL_STYLE_COLOR *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_STYLE_COLOR *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_STYLE_COLOR *"* do not include other source files here!!! - constants C_ALPHA type CHAR2 value 'FF'. "#EC NOTEXT + CONSTANTS c_alpha TYPE char2 VALUE 'FF'. "#EC NOTEXT ENDCLASS. -CLASS ZCL_EXCEL_STYLE_COLOR IMPLEMENTATION. +CLASS zcl_excel_style_color IMPLEMENTATION. -METHOD create_new_arbg_int. - DATA: lv_red TYPE int1, - lv_green TYPE int1, - lv_blue TYPE int1, - lv_hex TYPE x, - lv_char_red TYPE zexcel_style_color_component, - lv_char_green TYPE zexcel_style_color_component, - lv_char_blue TYPE zexcel_style_color_component. + METHOD create_new_arbg_int. + DATA: lv_red TYPE int1, + lv_green TYPE int1, + lv_blue TYPE int1, + lv_hex TYPE x, + lv_char_red TYPE zexcel_style_color_component, + lv_char_green TYPE zexcel_style_color_component, + lv_char_blue TYPE zexcel_style_color_component. - lv_red = iv_red MOD 256. - lv_green = iv_green MOD 256. - lv_blue = iv_blue MOD 256. + lv_red = iv_red MOD 256. + lv_green = iv_green MOD 256. + lv_blue = iv_blue MOD 256. - lv_hex = lv_red. - lv_char_red = lv_hex. + lv_hex = lv_red. + lv_char_red = lv_hex. - lv_hex = lv_green. - lv_char_green = lv_hex. + lv_hex = lv_green. + lv_char_green = lv_hex. - lv_hex = lv_blue. - lv_char_blue = lv_hex. + lv_hex = lv_blue. + lv_char_blue = lv_hex. - concatenate zcl_excel_style_color=>c_alpha lv_char_red lv_char_green lv_char_blue into rv_color_argb. + CONCATENATE zcl_excel_style_color=>c_alpha lv_char_red lv_char_green lv_char_blue INTO rv_color_argb. -ENDMETHOD. + ENDMETHOD. -METHOD create_new_argb. + METHOD create_new_argb. - CONCATENATE zcl_excel_style_color=>c_alpha ip_red ip_green ip_blu INTO ep_color_argb. + CONCATENATE zcl_excel_style_color=>c_alpha ip_red ip_green ip_blu INTO ep_color_argb. -ENDMETHOD. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_cond.clas.abap b/src/zcl_excel_style_cond.clas.abap index bd4a66365..47c5e4717 100644 --- a/src/zcl_excel_style_cond.clas.abap +++ b/src/zcl_excel_style_cond.clas.abap @@ -1,210 +1,210 @@ -class ZCL_EXCEL_STYLE_COND definition - public - final - create public . +CLASS zcl_excel_style_cond DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. - class ZCL_EXCEL_STYLE_CONDITIONAL definition load . + PUBLIC SECTION. + CLASS zcl_excel_style_conditional DEFINITION LOAD . *"* public components of class ZCL_EXCEL_STYLE_COND *"* do not include other source files here!!! - types tv_conditional_show_value type c length 1. - constants C_CFVO_TYPE_FORMULA type ZEXCEL_CONDITIONAL_TYPE value 'formula'. "#EC NOTEXT - constants C_CFVO_TYPE_MAX type ZEXCEL_CONDITIONAL_TYPE value 'max'. "#EC NOTEXT - constants C_CFVO_TYPE_MIN type ZEXCEL_CONDITIONAL_TYPE value 'min'. "#EC NOTEXT - constants C_CFVO_TYPE_NUMBER type ZEXCEL_CONDITIONAL_TYPE value 'num'. "#EC NOTEXT - constants C_CFVO_TYPE_PERCENT type ZEXCEL_CONDITIONAL_TYPE value 'percent'. "#EC NOTEXT - constants C_CFVO_TYPE_PERCENTILE type ZEXCEL_CONDITIONAL_TYPE value 'percentile'. "#EC NOTEXT - constants C_ICONSET_3ARROWS type ZEXCEL_CONDITION_RULE_ICONSET value '3Arrows'. "#EC NOTEXT - constants C_ICONSET_3ARROWSGRAY type ZEXCEL_CONDITION_RULE_ICONSET value '3ArrowsGray'. "#EC NOTEXT - constants C_ICONSET_3FLAGS type ZEXCEL_CONDITION_RULE_ICONSET value '3Flags'. "#EC NOTEXT - constants C_ICONSET_3SIGNS type ZEXCEL_CONDITION_RULE_ICONSET value '3Signs'. "#EC NOTEXT - constants C_ICONSET_3SYMBOLS type ZEXCEL_CONDITION_RULE_ICONSET value '3Symbols'. "#EC NOTEXT - constants C_ICONSET_3SYMBOLS2 type ZEXCEL_CONDITION_RULE_ICONSET value '3Symbols2'. "#EC NOTEXT - constants C_ICONSET_3TRAFFICLIGHTS type ZEXCEL_CONDITION_RULE_ICONSET value ''. "#EC NOTEXT - constants C_ICONSET_3TRAFFICLIGHTS2 type ZEXCEL_CONDITION_RULE_ICONSET value '3TrafficLights2'. "#EC NOTEXT - constants C_ICONSET_4ARROWS type ZEXCEL_CONDITION_RULE_ICONSET value '4Arrows'. "#EC NOTEXT - constants C_ICONSET_4ARROWSGRAY type ZEXCEL_CONDITION_RULE_ICONSET value '4ArrowsGray'. "#EC NOTEXT - constants C_ICONSET_4RATING type ZEXCEL_CONDITION_RULE_ICONSET value '4Rating'. "#EC NOTEXT - constants C_ICONSET_4REDTOBLACK type ZEXCEL_CONDITION_RULE_ICONSET value '4RedToBlack'. "#EC NOTEXT - constants C_ICONSET_4TRAFFICLIGHTS type ZEXCEL_CONDITION_RULE_ICONSET value '4TrafficLights'. "#EC NOTEXT - constants C_ICONSET_5ARROWS type ZEXCEL_CONDITION_RULE_ICONSET value '5Arrows'. "#EC NOTEXT - constants C_ICONSET_5ARROWSGRAY type ZEXCEL_CONDITION_RULE_ICONSET value '5ArrowsGray'. "#EC NOTEXT - constants C_ICONSET_5QUARTERS type ZEXCEL_CONDITION_RULE_ICONSET value '5Quarters'. "#EC NOTEXT - constants C_ICONSET_5RATING type ZEXCEL_CONDITION_RULE_ICONSET value '5Rating'. "#EC NOTEXT - constants C_OPERATOR_BEGINSWITH type ZEXCEL_CONDITION_OPERATOR value 'beginsWith'. "#EC NOTEXT - constants C_OPERATOR_BETWEEN type ZEXCEL_CONDITION_OPERATOR value 'between'. "#EC NOTEXT - constants C_OPERATOR_CONTAINSTEXT type ZEXCEL_CONDITION_OPERATOR value 'containsText'. "#EC NOTEXT - constants C_OPERATOR_ENDSWITH type ZEXCEL_CONDITION_OPERATOR value 'endsWith'. "#EC NOTEXT - constants C_OPERATOR_EQUAL type ZEXCEL_CONDITION_OPERATOR value 'equal'. "#EC NOTEXT - constants C_OPERATOR_GREATERTHAN type ZEXCEL_CONDITION_OPERATOR value 'greaterThan'. "#EC NOTEXT - constants C_OPERATOR_GREATERTHANOREQUAL type ZEXCEL_CONDITION_OPERATOR value 'greaterThanOrEqual'. "#EC NOTEXT - constants C_OPERATOR_LESSTHAN type ZEXCEL_CONDITION_OPERATOR value 'lessThan'. "#EC NOTEXT - constants C_OPERATOR_LESSTHANOREQUAL type ZEXCEL_CONDITION_OPERATOR value 'lessThanOrEqual'. "#EC NOTEXT - constants C_OPERATOR_NONE type ZEXCEL_CONDITION_OPERATOR value ''. "#EC NOTEXT - constants C_OPERATOR_NOTCONTAINS type ZEXCEL_CONDITION_OPERATOR value 'notContains'. "#EC NOTEXT - constants C_OPERATOR_NOTEQUAL type ZEXCEL_CONDITION_OPERATOR value 'notEqual'. "#EC NOTEXT - constants C_RULE_CELLIS type ZEXCEL_CONDITION_RULE value 'cellIs'. "#EC NOTEXT - constants C_RULE_CONTAINSTEXT type ZEXCEL_CONDITION_RULE value 'containsText'. "#EC NOTEXT - constants C_RULE_DATABAR type ZEXCEL_CONDITION_RULE value 'dataBar'. "#EC NOTEXT - constants C_RULE_EXPRESSION type ZEXCEL_CONDITION_RULE value 'expression'. "#EC NOTEXT - constants C_RULE_ICONSET type ZEXCEL_CONDITION_RULE value 'iconSet'. "#EC NOTEXT - constants C_RULE_COLORSCALE type ZEXCEL_CONDITION_RULE value 'colorScale'. "#EC NOTEXT - constants C_RULE_NONE type ZEXCEL_CONDITION_RULE value 'none'. "#EC NOTEXT - constants C_RULE_TOP10 type ZEXCEL_CONDITION_RULE value 'top10'. "#EC NOTEXT - constants C_RULE_ABOVE_AVERAGE type ZEXCEL_CONDITION_RULE value 'aboveAverage'. "#EC NOTEXT - constants C_SHOWVALUE_FALSE type TV_CONDITIONAL_SHOW_VALUE value 0. "#EC NOTEXT - constants C_SHOWVALUE_TRUE type TV_CONDITIONAL_SHOW_VALUE value 1. "#EC NOTEXT - data MODE_CELLIS type ZEXCEL_CONDITIONAL_CELLIS . - data MODE_COLORSCALE type ZEXCEL_CONDITIONAL_COLORSCALE . - data MODE_DATABAR type ZEXCEL_CONDITIONAL_DATABAR . - data MODE_EXPRESSION type ZEXCEL_CONDITIONAL_EXPRESSION . - data MODE_ICONSET type ZEXCEL_CONDITIONAL_ICONSET . - data MODE_TOP10 type ZEXCEL_CONDITIONAL_TOP10 . - data MODE_ABOVE_AVERAGE type ZEXCEL_CONDITIONAL_ABOVE_AVG . - data PRIORITY type ZEXCEL_STYLE_PRIORITY value 1. "#EC NOTEXT . . . . . . . . . . . . . . . . . . . . " . - data RULE type ZEXCEL_CONDITION_RULE . - - METHODS constructor - IMPORTING - !ip_guid TYPE zexcel_cell_style OPTIONAL - !ip_dimension_range TYPE string. - methods GET_DIMENSION_RANGE - returning - value(EP_DIMENSION_RANGE) type STRING . - methods SET_RANGE - importing - !IP_START_ROW type ZEXCEL_CELL_ROW - !IP_START_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - !IP_STOP_ROW type ZEXCEL_CELL_ROW - !IP_STOP_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - raising - ZCX_EXCEL . - methods ADD_RANGE - importing - !IP_START_ROW type ZEXCEL_CELL_ROW - !IP_START_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - !IP_STOP_ROW type ZEXCEL_CELL_ROW - !IP_STOP_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA - raising - ZCX_EXCEL . - class-methods FACTORY_COND_STYLE_ICONSET - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - !IV_ICON_TYPE type ZEXCEL_CONDITION_RULE_ICONSET default C_ICONSET_3TRAFFICLIGHTS2 - !IV_CFVO1_TYPE type ZEXCEL_CONDITIONAL_TYPE default C_CFVO_TYPE_PERCENT - !IV_CFVO1_VALUE type ZEXCEL_CONDITIONAL_VALUE optional - !IV_CFVO2_TYPE type ZEXCEL_CONDITIONAL_TYPE default C_CFVO_TYPE_PERCENT - !IV_CFVO2_VALUE type ZEXCEL_CONDITIONAL_VALUE optional - !IV_CFVO3_TYPE type ZEXCEL_CONDITIONAL_TYPE default C_CFVO_TYPE_PERCENT - !IV_CFVO3_VALUE type ZEXCEL_CONDITIONAL_VALUE optional - !IV_CFVO4_TYPE type ZEXCEL_CONDITIONAL_TYPE default C_CFVO_TYPE_PERCENT - !IV_CFVO4_VALUE type ZEXCEL_CONDITIONAL_VALUE optional - !IV_CFVO5_TYPE type ZEXCEL_CONDITIONAL_TYPE default C_CFVO_TYPE_PERCENT - !IV_CFVO5_VALUE type ZEXCEL_CONDITIONAL_VALUE optional - !IV_SHOWVALUE type TV_CONDITIONAL_SHOW_VALUE default ZCL_EXCEL_STYLE_COND=>C_SHOWVALUE_TRUE - returning - value(EO_STYLE_COND) type ref to ZCL_EXCEL_STYLE_COND . - methods GET_GUID - returning - value(EP_GUID) type ZEXCEL_CELL_STYLE . + TYPES tv_conditional_show_value TYPE c LENGTH 1. + CONSTANTS c_cfvo_type_formula TYPE zexcel_conditional_type VALUE 'formula'. "#EC NOTEXT + CONSTANTS c_cfvo_type_max TYPE zexcel_conditional_type VALUE 'max'. "#EC NOTEXT + CONSTANTS c_cfvo_type_min TYPE zexcel_conditional_type VALUE 'min'. "#EC NOTEXT + CONSTANTS c_cfvo_type_number TYPE zexcel_conditional_type VALUE 'num'. "#EC NOTEXT + CONSTANTS c_cfvo_type_percent TYPE zexcel_conditional_type VALUE 'percent'. "#EC NOTEXT + CONSTANTS c_cfvo_type_percentile TYPE zexcel_conditional_type VALUE 'percentile'. "#EC NOTEXT + CONSTANTS c_iconset_3arrows TYPE zexcel_condition_rule_iconset VALUE '3Arrows'. "#EC NOTEXT + CONSTANTS c_iconset_3arrowsgray TYPE zexcel_condition_rule_iconset VALUE '3ArrowsGray'. "#EC NOTEXT + CONSTANTS c_iconset_3flags TYPE zexcel_condition_rule_iconset VALUE '3Flags'. "#EC NOTEXT + CONSTANTS c_iconset_3signs TYPE zexcel_condition_rule_iconset VALUE '3Signs'. "#EC NOTEXT + CONSTANTS c_iconset_3symbols TYPE zexcel_condition_rule_iconset VALUE '3Symbols'. "#EC NOTEXT + CONSTANTS c_iconset_3symbols2 TYPE zexcel_condition_rule_iconset VALUE '3Symbols2'. "#EC NOTEXT + CONSTANTS c_iconset_3trafficlights TYPE zexcel_condition_rule_iconset VALUE ''. "#EC NOTEXT + CONSTANTS c_iconset_3trafficlights2 TYPE zexcel_condition_rule_iconset VALUE '3TrafficLights2'. "#EC NOTEXT + CONSTANTS c_iconset_4arrows TYPE zexcel_condition_rule_iconset VALUE '4Arrows'. "#EC NOTEXT + CONSTANTS c_iconset_4arrowsgray TYPE zexcel_condition_rule_iconset VALUE '4ArrowsGray'. "#EC NOTEXT + CONSTANTS c_iconset_4rating TYPE zexcel_condition_rule_iconset VALUE '4Rating'. "#EC NOTEXT + CONSTANTS c_iconset_4redtoblack TYPE zexcel_condition_rule_iconset VALUE '4RedToBlack'. "#EC NOTEXT + CONSTANTS c_iconset_4trafficlights TYPE zexcel_condition_rule_iconset VALUE '4TrafficLights'. "#EC NOTEXT + CONSTANTS c_iconset_5arrows TYPE zexcel_condition_rule_iconset VALUE '5Arrows'. "#EC NOTEXT + CONSTANTS c_iconset_5arrowsgray TYPE zexcel_condition_rule_iconset VALUE '5ArrowsGray'. "#EC NOTEXT + CONSTANTS c_iconset_5quarters TYPE zexcel_condition_rule_iconset VALUE '5Quarters'. "#EC NOTEXT + CONSTANTS c_iconset_5rating TYPE zexcel_condition_rule_iconset VALUE '5Rating'. "#EC NOTEXT + CONSTANTS c_operator_beginswith TYPE zexcel_condition_operator VALUE 'beginsWith'. "#EC NOTEXT + CONSTANTS c_operator_between TYPE zexcel_condition_operator VALUE 'between'. "#EC NOTEXT + CONSTANTS c_operator_containstext TYPE zexcel_condition_operator VALUE 'containsText'. "#EC NOTEXT + CONSTANTS c_operator_endswith TYPE zexcel_condition_operator VALUE 'endsWith'. "#EC NOTEXT + CONSTANTS c_operator_equal TYPE zexcel_condition_operator VALUE 'equal'. "#EC NOTEXT + CONSTANTS c_operator_greaterthan TYPE zexcel_condition_operator VALUE 'greaterThan'. "#EC NOTEXT + CONSTANTS c_operator_greaterthanorequal TYPE zexcel_condition_operator VALUE 'greaterThanOrEqual'. "#EC NOTEXT + CONSTANTS c_operator_lessthan TYPE zexcel_condition_operator VALUE 'lessThan'. "#EC NOTEXT + CONSTANTS c_operator_lessthanorequal TYPE zexcel_condition_operator VALUE 'lessThanOrEqual'. "#EC NOTEXT + CONSTANTS c_operator_none TYPE zexcel_condition_operator VALUE ''. "#EC NOTEXT + CONSTANTS c_operator_notcontains TYPE zexcel_condition_operator VALUE 'notContains'. "#EC NOTEXT + CONSTANTS c_operator_notequal TYPE zexcel_condition_operator VALUE 'notEqual'. "#EC NOTEXT + CONSTANTS c_rule_cellis TYPE zexcel_condition_rule VALUE 'cellIs'. "#EC NOTEXT + CONSTANTS c_rule_containstext TYPE zexcel_condition_rule VALUE 'containsText'. "#EC NOTEXT + CONSTANTS c_rule_databar TYPE zexcel_condition_rule VALUE 'dataBar'. "#EC NOTEXT + CONSTANTS c_rule_expression TYPE zexcel_condition_rule VALUE 'expression'. "#EC NOTEXT + CONSTANTS c_rule_iconset TYPE zexcel_condition_rule VALUE 'iconSet'. "#EC NOTEXT + CONSTANTS c_rule_colorscale TYPE zexcel_condition_rule VALUE 'colorScale'. "#EC NOTEXT + CONSTANTS c_rule_none TYPE zexcel_condition_rule VALUE 'none'. "#EC NOTEXT + CONSTANTS c_rule_top10 TYPE zexcel_condition_rule VALUE 'top10'. "#EC NOTEXT + CONSTANTS c_rule_above_average TYPE zexcel_condition_rule VALUE 'aboveAverage'. "#EC NOTEXT + CONSTANTS c_showvalue_false TYPE tv_conditional_show_value VALUE 0. "#EC NOTEXT + CONSTANTS c_showvalue_true TYPE tv_conditional_show_value VALUE 1. "#EC NOTEXT + DATA mode_cellis TYPE zexcel_conditional_cellis . + DATA mode_colorscale TYPE zexcel_conditional_colorscale . + DATA mode_databar TYPE zexcel_conditional_databar . + DATA mode_expression TYPE zexcel_conditional_expression . + DATA mode_iconset TYPE zexcel_conditional_iconset . + DATA mode_top10 TYPE zexcel_conditional_top10 . + DATA mode_above_average TYPE zexcel_conditional_above_avg . + DATA priority TYPE zexcel_style_priority VALUE 1. "#EC NOTEXT . . . . . . . . . . . . . . . . . . . . " . + DATA rule TYPE zexcel_condition_rule . + + METHODS constructor + IMPORTING + !ip_guid TYPE zexcel_cell_style OPTIONAL + !ip_dimension_range TYPE string. + METHODS get_dimension_range + RETURNING + VALUE(ep_dimension_range) TYPE string . + METHODS set_range + IMPORTING + !ip_start_row TYPE zexcel_cell_row + !ip_start_column TYPE zexcel_cell_column_alpha + !ip_stop_row TYPE zexcel_cell_row + !ip_stop_column TYPE zexcel_cell_column_alpha + RAISING + zcx_excel . + METHODS add_range + IMPORTING + !ip_start_row TYPE zexcel_cell_row + !ip_start_column TYPE zexcel_cell_column_alpha + !ip_stop_row TYPE zexcel_cell_row + !ip_stop_column TYPE zexcel_cell_column_alpha + RAISING + zcx_excel . + CLASS-METHODS factory_cond_style_iconset + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + !iv_icon_type TYPE zexcel_condition_rule_iconset DEFAULT c_iconset_3trafficlights2 + !iv_cfvo1_type TYPE zexcel_conditional_type DEFAULT c_cfvo_type_percent + !iv_cfvo1_value TYPE zexcel_conditional_value OPTIONAL + !iv_cfvo2_type TYPE zexcel_conditional_type DEFAULT c_cfvo_type_percent + !iv_cfvo2_value TYPE zexcel_conditional_value OPTIONAL + !iv_cfvo3_type TYPE zexcel_conditional_type DEFAULT c_cfvo_type_percent + !iv_cfvo3_value TYPE zexcel_conditional_value OPTIONAL + !iv_cfvo4_type TYPE zexcel_conditional_type DEFAULT c_cfvo_type_percent + !iv_cfvo4_value TYPE zexcel_conditional_value OPTIONAL + !iv_cfvo5_type TYPE zexcel_conditional_type DEFAULT c_cfvo_type_percent + !iv_cfvo5_value TYPE zexcel_conditional_value OPTIONAL + !iv_showvalue TYPE tv_conditional_show_value DEFAULT zcl_excel_style_cond=>c_showvalue_true + RETURNING + VALUE(eo_style_cond) TYPE REF TO zcl_excel_style_cond . + METHODS get_guid + RETURNING + VALUE(ep_guid) TYPE zexcel_cell_style . *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. - data MV_RULE_RANGE type STRING . - data GUID type ZEXCEL_CELL_STYLE . + DATA mv_rule_range TYPE string . + DATA guid TYPE zexcel_cell_style . ENDCLASS. -CLASS ZCL_EXCEL_STYLE_COND IMPLEMENTATION. +CLASS zcl_excel_style_cond IMPLEMENTATION. -METHOD ADD_RANGE. - DATA: lv_column TYPE zexcel_cell_column, - lv_row_alpha TYPE string, - lv_col_alpha TYPE string, - lv_coords1 TYPE string, - lv_coords2 TYPE string. + METHOD add_range. + DATA: lv_column TYPE zexcel_cell_column, + lv_row_alpha TYPE string, + lv_col_alpha TYPE string, + lv_coords1 TYPE string, + lv_coords2 TYPE string. - lv_column = zcl_excel_common=>convert_column2int( ip_start_column ). + lv_column = zcl_excel_common=>convert_column2int( ip_start_column ). * me->mv_cell_data-cell_row = 1. * me->mv_cell_data-cell_column = lv_column. * - lv_col_alpha = ip_start_column. - lv_row_alpha = ip_start_row. - SHIFT lv_row_alpha RIGHT DELETING TRAILING space. - SHIFT lv_row_alpha LEFT DELETING LEADING space. - CONCATENATE lv_col_alpha lv_row_alpha INTO lv_coords1. - - IF ip_stop_column IS NOT INITIAL. - lv_column = zcl_excel_common=>convert_column2int( ip_stop_column ). - ELSE. - lv_column = zcl_excel_common=>convert_column2int( ip_start_column ). - ENDIF. - - IF ip_stop_row IS NOT INITIAL. " If we don't get explicitly a stop column use start column - lv_row_alpha = ip_stop_row. - ELSE. - lv_row_alpha = ip_start_row. - ENDIF. - IF ip_stop_column IS NOT INITIAL. " If we don't get explicitly a stop column use start column - lv_col_alpha = ip_stop_column. - ELSE. lv_col_alpha = ip_start_column. - ENDIF. - SHIFT lv_row_alpha RIGHT DELETING TRAILING space. - SHIFT lv_row_alpha LEFT DELETING LEADING space. - CONCATENATE lv_col_alpha lv_row_alpha INTO lv_coords2. - IF lv_coords2 IS NOT INITIAL AND lv_coords2 <> lv_coords1. - CONCATENATE me->mv_rule_range ` ` lv_coords1 ':' lv_coords2 INTO me->mv_rule_range. - ELSE. - CONCATENATE me->mv_rule_range ` ` lv_coords1 INTO me->mv_rule_range. - ENDIF. - SHIFT me->mv_rule_range LEFT DELETING LEADING space. - -ENDMETHOD. - - -METHOD constructor. - - DATA: ls_iconset TYPE zexcel_conditional_iconset. - ls_iconset-iconset = zcl_excel_style_cond=>c_iconset_3trafficlights. - ls_iconset-cfvo1_type = zcl_excel_style_cond=>c_cfvo_type_percent. - ls_iconset-cfvo1_value = '0'. - ls_iconset-cfvo2_type = zcl_excel_style_cond=>c_cfvo_type_percent. - ls_iconset-cfvo2_value = '20'. - ls_iconset-cfvo3_type = zcl_excel_style_cond=>c_cfvo_type_percent. - ls_iconset-cfvo3_value = '40'. - ls_iconset-cfvo4_type = zcl_excel_style_cond=>c_cfvo_type_percent. - ls_iconset-cfvo4_value = '60'. - ls_iconset-cfvo5_type = zcl_excel_style_cond=>c_cfvo_type_percent. - ls_iconset-cfvo5_value = '80'. - - - me->rule = zcl_excel_style_cond=>c_rule_none. + lv_row_alpha = ip_start_row. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE lv_col_alpha lv_row_alpha INTO lv_coords1. + + IF ip_stop_column IS NOT INITIAL. + lv_column = zcl_excel_common=>convert_column2int( ip_stop_column ). + ELSE. + lv_column = zcl_excel_common=>convert_column2int( ip_start_column ). + ENDIF. + + IF ip_stop_row IS NOT INITIAL. " If we don't get explicitly a stop column use start column + lv_row_alpha = ip_stop_row. + ELSE. + lv_row_alpha = ip_start_row. + ENDIF. + IF ip_stop_column IS NOT INITIAL. " If we don't get explicitly a stop column use start column + lv_col_alpha = ip_stop_column. + ELSE. + lv_col_alpha = ip_start_column. + ENDIF. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE lv_col_alpha lv_row_alpha INTO lv_coords2. + IF lv_coords2 IS NOT INITIAL AND lv_coords2 <> lv_coords1. + CONCATENATE me->mv_rule_range ` ` lv_coords1 ':' lv_coords2 INTO me->mv_rule_range. + ELSE. + CONCATENATE me->mv_rule_range ` ` lv_coords1 INTO me->mv_rule_range. + ENDIF. + SHIFT me->mv_rule_range LEFT DELETING LEADING space. + + ENDMETHOD. + + + METHOD constructor. + + DATA: ls_iconset TYPE zexcel_conditional_iconset. + ls_iconset-iconset = zcl_excel_style_cond=>c_iconset_3trafficlights. + ls_iconset-cfvo1_type = zcl_excel_style_cond=>c_cfvo_type_percent. + ls_iconset-cfvo1_value = '0'. + ls_iconset-cfvo2_type = zcl_excel_style_cond=>c_cfvo_type_percent. + ls_iconset-cfvo2_value = '20'. + ls_iconset-cfvo3_type = zcl_excel_style_cond=>c_cfvo_type_percent. + ls_iconset-cfvo3_value = '40'. + ls_iconset-cfvo4_type = zcl_excel_style_cond=>c_cfvo_type_percent. + ls_iconset-cfvo4_value = '60'. + ls_iconset-cfvo5_type = zcl_excel_style_cond=>c_cfvo_type_percent. + ls_iconset-cfvo5_value = '80'. + + + me->rule = zcl_excel_style_cond=>c_rule_none. * me->iconset->operator = zcl_excel_style_conditional=>c_operator_none. - me->mode_iconset = ls_iconset. - me->priority = 1. + me->mode_iconset = ls_iconset. + me->priority = 1. * inizialize dimension range - me->mv_rule_range = ip_dimension_range. + me->mv_rule_range = ip_dimension_range. - IF ip_guid IS NOT INITIAL. - me->guid = ip_guid. - ELSE. - me->guid = zcl_excel_obsolete_func_wrap=>guid_create( ). - ENDIF. + IF ip_guid IS NOT INITIAL. + me->guid = ip_guid. + ELSE. + me->guid = zcl_excel_obsolete_func_wrap=>guid_create( ). + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD FACTORY_COND_STYLE_ICONSET. + METHOD factory_cond_style_iconset. *--------------------------------------------------------------------* * Work in progress @@ -241,29 +241,29 @@ METHOD FACTORY_COND_STYLE_ICONSET. * RETURN. * ENDCASE. -ENDMETHOD. + ENDMETHOD. -METHOD GET_DIMENSION_RANGE. + METHOD get_dimension_range. - ep_dimension_range = me->mv_rule_range. + ep_dimension_range = me->mv_rule_range. -ENDMETHOD. + ENDMETHOD. -METHOD GET_GUID. - ep_guid = me->guid. -ENDMETHOD. + METHOD get_guid. + ep_guid = me->guid. + ENDMETHOD. -METHOD SET_RANGE. + METHOD set_range. - CLEAR: me->mv_rule_range. + CLEAR: me->mv_rule_range. - me->add_range( ip_start_row = ip_start_row - ip_start_column = ip_start_column - ip_stop_row = ip_stop_row - ip_stop_column = ip_stop_column ). + me->add_range( ip_start_row = ip_start_row + ip_start_column = ip_start_column + ip_stop_row = ip_stop_row + ip_stop_column = ip_stop_column ). -ENDMETHOD. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_fill.clas.abap b/src/zcl_excel_style_fill.clas.abap index 2928a642f..39c9edc35 100644 --- a/src/zcl_excel_style_fill.clas.abap +++ b/src/zcl_excel_style_fill.clas.abap @@ -1,96 +1,96 @@ -class ZCL_EXCEL_STYLE_FILL definition - public - final - create public . +CLASS zcl_excel_style_fill DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. - type-pools ABAP . + PUBLIC SECTION. + TYPE-POOLS abap . *"* public components of class ZCL_EXCEL_STYLE_FILL *"* do not include other source files here!!! - constants C_FILL_NONE type ZEXCEL_FILL_TYPE value 'none'. "#EC NOTEXT - constants C_FILL_SOLID type ZEXCEL_FILL_TYPE value 'solid'. "#EC NOTEXT - constants C_FILL_GRADIENT_LINEAR type ZEXCEL_FILL_TYPE value 'linear'. "#EC NOTEXT - constants C_FILL_GRADIENT_PATH type ZEXCEL_FILL_TYPE value 'path'. "#EC NOTEXT - constants C_FILL_PATTERN_DARKDOWN type ZEXCEL_FILL_TYPE value 'darkDown'. "#EC NOTEXT - constants C_FILL_PATTERN_DARKGRAY type ZEXCEL_FILL_TYPE value 'darkGray'. "#EC NOTEXT - constants C_FILL_PATTERN_DARKGRID type ZEXCEL_FILL_TYPE value 'darkGrid'. "#EC NOTEXT - constants C_FILL_PATTERN_DARKHORIZONTAL type ZEXCEL_FILL_TYPE value 'darkHorizontal'. "#EC NOTEXT - constants C_FILL_PATTERN_DARKTRELLIS type ZEXCEL_FILL_TYPE value 'darkTrellis'. "#EC NOTEXT - constants C_FILL_PATTERN_DARKUP type ZEXCEL_FILL_TYPE value 'darkUp'. "#EC NOTEXT - constants C_FILL_PATTERN_DARKVERTICAL type ZEXCEL_FILL_TYPE value 'darkVertical'. "#EC NOTEXT - constants C_FILL_PATTERN_GRAY0625 type ZEXCEL_FILL_TYPE value 'gray0625'. "#EC NOTEXT - constants C_FILL_PATTERN_GRAY125 type ZEXCEL_FILL_TYPE value 'gray125'. "#EC NOTEXT - constants C_FILL_PATTERN_LIGHTDOWN type ZEXCEL_FILL_TYPE value 'lightDown'. "#EC NOTEXT - constants C_FILL_PATTERN_LIGHTGRAY type ZEXCEL_FILL_TYPE value 'lightGray'. "#EC NOTEXT - constants C_FILL_PATTERN_LIGHTGRID type ZEXCEL_FILL_TYPE value 'lightGrid'. "#EC NOTEXT - constants C_FILL_PATTERN_LIGHTHORIZONTAL type ZEXCEL_FILL_TYPE value 'lightHorizontal'. "#EC NOTEXT - constants C_FILL_PATTERN_LIGHTTRELLIS type ZEXCEL_FILL_TYPE value 'lightTrellis'. "#EC NOTEXT - constants C_FILL_PATTERN_LIGHTUP type ZEXCEL_FILL_TYPE value 'lightUp'. "#EC NOTEXT - constants C_FILL_PATTERN_LIGHTVERTICAL type ZEXCEL_FILL_TYPE value 'lightVertical'. "#EC NOTEXT - constants C_FILL_PATTERN_MEDIUMGRAY type ZEXCEL_FILL_TYPE value 'mediumGray'. "#EC NOTEXT - constants C_FILL_GRADIENT_HORIZONTAL90 type ZEXCEL_FILL_TYPE value 'horizontal90'. "#EC NOTEXT - constants C_FILL_GRADIENT_HORIZONTAL270 type ZEXCEL_FILL_TYPE value 'horizontal270'. "#EC NOTEXT - constants C_FILL_GRADIENT_HORIZONTALB type ZEXCEL_FILL_TYPE value 'horizontalb'. "#EC NOTEXT - constants C_FILL_GRADIENT_VERTICAL type ZEXCEL_FILL_TYPE value 'vertical'. "#EC NOTEXT - constants C_FILL_GRADIENT_FROMCENTER type ZEXCEL_FILL_TYPE value 'fromCenter'. "#EC NOTEXT - constants C_FILL_GRADIENT_DIAGONAL45 type ZEXCEL_FILL_TYPE value 'diagonal45'. "#EC NOTEXT - constants C_FILL_GRADIENT_DIAGONAL45B type ZEXCEL_FILL_TYPE value 'diagonal45b'. "#EC NOTEXT - constants C_FILL_GRADIENT_DIAGONAL135 type ZEXCEL_FILL_TYPE value 'diagonal135'. "#EC NOTEXT - constants C_FILL_GRADIENT_DIAGONAL135B type ZEXCEL_FILL_TYPE value 'diagonal135b'. "#EC NOTEXT - constants C_FILL_GRADIENT_CORNERLT type ZEXCEL_FILL_TYPE value 'cornerLT'. "#EC NOTEXT - constants C_FILL_GRADIENT_CORNERLB type ZEXCEL_FILL_TYPE value 'cornerLB'. "#EC NOTEXT - constants C_FILL_GRADIENT_CORNERRT type ZEXCEL_FILL_TYPE value 'cornerRT'. "#EC NOTEXT - constants C_FILL_GRADIENT_CORNERRB type ZEXCEL_FILL_TYPE value 'cornerRB'. "#EC NOTEXT - data GRADTYPE type ZEXCEL_S_GRADIENT_TYPE . - data FILLTYPE type ZEXCEL_FILL_TYPE . - data ROTATION type ZEXCEL_ROTATION . - data FGCOLOR type ZEXCEL_S_STYLE_COLOR . - data BGCOLOR type ZEXCEL_S_STYLE_COLOR . - - methods CONSTRUCTOR . - methods GET_STRUCTURE - returning - value(ES_FILL) type ZEXCEL_S_STYLE_FILL . + CONSTANTS c_fill_none TYPE zexcel_fill_type VALUE 'none'. "#EC NOTEXT + CONSTANTS c_fill_solid TYPE zexcel_fill_type VALUE 'solid'. "#EC NOTEXT + CONSTANTS c_fill_gradient_linear TYPE zexcel_fill_type VALUE 'linear'. "#EC NOTEXT + CONSTANTS c_fill_gradient_path TYPE zexcel_fill_type VALUE 'path'. "#EC NOTEXT + CONSTANTS c_fill_pattern_darkdown TYPE zexcel_fill_type VALUE 'darkDown'. "#EC NOTEXT + CONSTANTS c_fill_pattern_darkgray TYPE zexcel_fill_type VALUE 'darkGray'. "#EC NOTEXT + CONSTANTS c_fill_pattern_darkgrid TYPE zexcel_fill_type VALUE 'darkGrid'. "#EC NOTEXT + CONSTANTS c_fill_pattern_darkhorizontal TYPE zexcel_fill_type VALUE 'darkHorizontal'. "#EC NOTEXT + CONSTANTS c_fill_pattern_darktrellis TYPE zexcel_fill_type VALUE 'darkTrellis'. "#EC NOTEXT + CONSTANTS c_fill_pattern_darkup TYPE zexcel_fill_type VALUE 'darkUp'. "#EC NOTEXT + CONSTANTS c_fill_pattern_darkvertical TYPE zexcel_fill_type VALUE 'darkVertical'. "#EC NOTEXT + CONSTANTS c_fill_pattern_gray0625 TYPE zexcel_fill_type VALUE 'gray0625'. "#EC NOTEXT + CONSTANTS c_fill_pattern_gray125 TYPE zexcel_fill_type VALUE 'gray125'. "#EC NOTEXT + CONSTANTS c_fill_pattern_lightdown TYPE zexcel_fill_type VALUE 'lightDown'. "#EC NOTEXT + CONSTANTS c_fill_pattern_lightgray TYPE zexcel_fill_type VALUE 'lightGray'. "#EC NOTEXT + CONSTANTS c_fill_pattern_lightgrid TYPE zexcel_fill_type VALUE 'lightGrid'. "#EC NOTEXT + CONSTANTS c_fill_pattern_lighthorizontal TYPE zexcel_fill_type VALUE 'lightHorizontal'. "#EC NOTEXT + CONSTANTS c_fill_pattern_lighttrellis TYPE zexcel_fill_type VALUE 'lightTrellis'. "#EC NOTEXT + CONSTANTS c_fill_pattern_lightup TYPE zexcel_fill_type VALUE 'lightUp'. "#EC NOTEXT + CONSTANTS c_fill_pattern_lightvertical TYPE zexcel_fill_type VALUE 'lightVertical'. "#EC NOTEXT + CONSTANTS c_fill_pattern_mediumgray TYPE zexcel_fill_type VALUE 'mediumGray'. "#EC NOTEXT + CONSTANTS c_fill_gradient_horizontal90 TYPE zexcel_fill_type VALUE 'horizontal90'. "#EC NOTEXT + CONSTANTS c_fill_gradient_horizontal270 TYPE zexcel_fill_type VALUE 'horizontal270'. "#EC NOTEXT + CONSTANTS c_fill_gradient_horizontalb TYPE zexcel_fill_type VALUE 'horizontalb'. "#EC NOTEXT + CONSTANTS c_fill_gradient_vertical TYPE zexcel_fill_type VALUE 'vertical'. "#EC NOTEXT + CONSTANTS c_fill_gradient_fromcenter TYPE zexcel_fill_type VALUE 'fromCenter'. "#EC NOTEXT + CONSTANTS c_fill_gradient_diagonal45 TYPE zexcel_fill_type VALUE 'diagonal45'. "#EC NOTEXT + CONSTANTS c_fill_gradient_diagonal45b TYPE zexcel_fill_type VALUE 'diagonal45b'. "#EC NOTEXT + CONSTANTS c_fill_gradient_diagonal135 TYPE zexcel_fill_type VALUE 'diagonal135'. "#EC NOTEXT + CONSTANTS c_fill_gradient_diagonal135b TYPE zexcel_fill_type VALUE 'diagonal135b'. "#EC NOTEXT + CONSTANTS c_fill_gradient_cornerlt TYPE zexcel_fill_type VALUE 'cornerLT'. "#EC NOTEXT + CONSTANTS c_fill_gradient_cornerlb TYPE zexcel_fill_type VALUE 'cornerLB'. "#EC NOTEXT + CONSTANTS c_fill_gradient_cornerrt TYPE zexcel_fill_type VALUE 'cornerRT'. "#EC NOTEXT + CONSTANTS c_fill_gradient_cornerrb TYPE zexcel_fill_type VALUE 'cornerRB'. "#EC NOTEXT + DATA gradtype TYPE zexcel_s_gradient_type . + DATA filltype TYPE zexcel_fill_type . + DATA rotation TYPE zexcel_rotation . + DATA fgcolor TYPE zexcel_s_style_color . + DATA bgcolor TYPE zexcel_s_style_color . + + METHODS constructor . + METHODS get_structure + RETURNING + VALUE(es_fill) TYPE zexcel_s_style_fill . *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_STYLE_FILL *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - methods BUILD_GRADIENT . - methods CHECK_FILLTYPE_IS_GRADIENT - returning - value(RV_IS_GRADIENT) type ABAP_BOOL . + METHODS build_gradient . + METHODS check_filltype_is_gradient + RETURNING + VALUE(rv_is_gradient) TYPE abap_bool . ENDCLASS. -CLASS ZCL_EXCEL_STYLE_FILL IMPLEMENTATION. +CLASS zcl_excel_style_fill IMPLEMENTATION. -method build_gradient. - check check_filltype_is_gradient( ) eq abap_true. - clear gradtype. - case filltype. - when c_fill_gradient_horizontal90. + METHOD build_gradient. + CHECK check_filltype_is_gradient( ) EQ abap_true. + CLEAR gradtype. + CASE filltype. + WHEN c_fill_gradient_horizontal90. gradtype-degree = '90'. gradtype-position1 = '0'. gradtype-position2 = '1'. - when c_fill_gradient_horizontal270. + WHEN c_fill_gradient_horizontal270. gradtype-degree = '270'. gradtype-position1 = '0'. gradtype-position2 = '1'. - when c_fill_gradient_horizontalb. + WHEN c_fill_gradient_horizontalb. gradtype-degree = '90'. gradtype-position1 = '0'. gradtype-position2 = '0.5'. gradtype-position3 = '1'. - when c_fill_gradient_vertical. + WHEN c_fill_gradient_vertical. gradtype-position1 = '0'. gradtype-position2 = '1'. - when c_fill_gradient_fromcenter. + WHEN c_fill_gradient_fromcenter. gradtype-type = c_fill_gradient_path. gradtype-position1 = '0'. gradtype-position2 = '1'. @@ -98,41 +98,41 @@ method build_gradient. gradtype-top = '0.5'. gradtype-left = '0.5'. gradtype-right = '0.5'. - when c_fill_gradient_diagonal45. + WHEN c_fill_gradient_diagonal45. gradtype-degree = '45'. gradtype-position1 = '0'. gradtype-position2 = '1'. - when c_fill_gradient_diagonal45b. + WHEN c_fill_gradient_diagonal45b. gradtype-degree = '45'. gradtype-position1 = '0'. gradtype-position2 = '0.5'. gradtype-position3 = '1'. - when c_fill_gradient_diagonal135. + WHEN c_fill_gradient_diagonal135. gradtype-degree = '135'. gradtype-position1 = '0'. gradtype-position2 = '1'. - when c_fill_gradient_diagonal135b. + WHEN c_fill_gradient_diagonal135b. gradtype-degree = '135'. gradtype-position1 = '0'. gradtype-position2 = '0.5'. gradtype-position3 = '1'. - when c_fill_gradient_cornerlt. + WHEN c_fill_gradient_cornerlt. gradtype-type = c_fill_gradient_path. gradtype-position1 = '0'. gradtype-position2 = '1'. - when c_fill_gradient_cornerlb. + WHEN c_fill_gradient_cornerlb. gradtype-type = c_fill_gradient_path. gradtype-position1 = '0'. gradtype-position2 = '1'. gradtype-bottom = '1'. gradtype-top = '1'. - when c_fill_gradient_cornerrt. + WHEN c_fill_gradient_cornerrt. gradtype-type = c_fill_gradient_path. gradtype-position1 = '0'. gradtype-position2 = '1'. gradtype-left = '1'. gradtype-right = '1'. - when c_fill_gradient_cornerrb. + WHEN c_fill_gradient_cornerrb. gradtype-type = c_fill_gradient_path. gradtype-position1 = '0'. gradtype-position2 = '1'. @@ -140,32 +140,32 @@ method build_gradient. gradtype-top = '0.5'. gradtype-left = '0.5'. gradtype-right = '0.5'. - endcase. - - endmethod. "build_gradient - - -method check_filltype_is_gradient. - case filltype. - when c_fill_gradient_horizontal90 or - c_fill_gradient_horizontal270 or - c_fill_gradient_horizontalb or - c_fill_gradient_vertical or - c_fill_gradient_fromcenter or - c_fill_gradient_diagonal45 or - c_fill_gradient_diagonal45b or - c_fill_gradient_diagonal135 or - c_fill_gradient_diagonal135b or - c_fill_gradient_cornerlt or - c_fill_gradient_cornerlb or - c_fill_gradient_cornerrt or + ENDCASE. + + ENDMETHOD. "build_gradient + + + METHOD check_filltype_is_gradient. + CASE filltype. + WHEN c_fill_gradient_horizontal90 OR + c_fill_gradient_horizontal270 OR + c_fill_gradient_horizontalb OR + c_fill_gradient_vertical OR + c_fill_gradient_fromcenter OR + c_fill_gradient_diagonal45 OR + c_fill_gradient_diagonal45b OR + c_fill_gradient_diagonal135 OR + c_fill_gradient_diagonal135b OR + c_fill_gradient_cornerlt OR + c_fill_gradient_cornerlb OR + c_fill_gradient_cornerrt OR c_fill_gradient_cornerrb. rv_is_gradient = abap_true. - endcase. - endmethod. "check_filltype_is_gradient + ENDCASE. + ENDMETHOD. "check_filltype_is_gradient -method constructor. + METHOD constructor. filltype = zcl_excel_style_fill=>c_fill_none. fgcolor-theme = zcl_excel_style_color=>c_theme_not_set. fgcolor-indexed = zcl_excel_style_color=>c_indexed_not_set. @@ -173,15 +173,15 @@ method constructor. bgcolor-indexed = zcl_excel_style_color=>c_indexed_sys_foreground. rotation = 0. - endmethod. "CONSTRUCTOR + ENDMETHOD. "CONSTRUCTOR -method get_structure. + METHOD get_structure. es_fill-rotation = me->rotation. es_fill-filltype = me->filltype. es_fill-fgcolor = me->fgcolor. es_fill-bgcolor = me->bgcolor. me->build_gradient( ). es_fill-gradtype = me->gradtype. - endmethod. "GET_STRUCTURE + ENDMETHOD. "GET_STRUCTURE ENDCLASS. diff --git a/src/zcl_excel_style_font.clas.abap b/src/zcl_excel_style_font.clas.abap index 28f43d7e1..a09438904 100644 --- a/src/zcl_excel_style_font.clas.abap +++ b/src/zcl_excel_style_font.clas.abap @@ -1,96 +1,96 @@ -class ZCL_EXCEL_STYLE_FONT definition - public - final - create public . +CLASS zcl_excel_style_font DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_STYLE_FONT *"* do not include other source files here!!! - type-pools ABAP . + TYPE-POOLS abap . - data BOLD type FLAG . - data COLOR type ZEXCEL_S_STYLE_COLOR . - constants C_FAMILY_DECORATIVE type ZEXCEL_STYLE_FONT_FAMILY value 5. "#EC NOTEXT - constants C_FAMILY_MODERN type ZEXCEL_STYLE_FONT_FAMILY value 3. "#EC NOTEXT - constants C_FAMILY_NONE type ZEXCEL_STYLE_FONT_FAMILY value 0. "#EC NOTEXT - constants C_FAMILY_ROMAN type ZEXCEL_STYLE_FONT_FAMILY value 1. "#EC NOTEXT - constants C_FAMILY_SCRIPT type ZEXCEL_STYLE_FONT_FAMILY value 4. "#EC NOTEXT - constants C_FAMILY_SWISS type ZEXCEL_STYLE_FONT_FAMILY value 2. "#EC NOTEXT - constants C_NAME_ARIAL type ZEXCEL_STYLE_FONT_NAME value 'Arial'. "#EC NOTEXT - constants C_NAME_CALIBRI type ZEXCEL_STYLE_FONT_NAME value 'Calibri'. "#EC NOTEXT - constants C_NAME_CAMBRIA type ZEXCEL_STYLE_FONT_NAME value 'Cambria'. "#EC NOTEXT - constants C_NAME_ROMAN type ZEXCEL_STYLE_FONT_NAME value 'Times New Roman'. "#EC NOTEXT - constants C_SCHEME_MAJOR type ZEXCEL_STYLE_FONT_SCHEME value 'major'. "#EC NOTEXT - constants C_SCHEME_NONE type ZEXCEL_STYLE_FONT_SCHEME value ''. "#EC NOTEXT - constants C_SCHEME_MINOR type ZEXCEL_STYLE_FONT_SCHEME value 'minor'. "#EC NOTEXT - constants C_UNDERLINE_DOUBLE type ZEXCEL_STYLE_FONT_UNDERLINE value 'double'. "#EC NOTEXT - constants C_UNDERLINE_DOUBLEACCOUNTING type ZEXCEL_STYLE_FONT_UNDERLINE value 'doubleAccounting'. "#EC NOTEXT - constants C_UNDERLINE_NONE type ZEXCEL_STYLE_FONT_UNDERLINE value 'none'. "#EC NOTEXT - constants C_UNDERLINE_SINGLE type ZEXCEL_STYLE_FONT_UNDERLINE value 'single'. "#EC NOTEXT - constants C_UNDERLINE_SINGLEACCOUNTING type ZEXCEL_STYLE_FONT_UNDERLINE value 'singleAccounting'. "#EC NOTEXT - data FAMILY type ZEXCEL_STYLE_FONT_FAMILY value 2. "#EC NOTEXT . . . . . . . . . . . . " . - data ITALIC type FLAG . - data NAME type ZEXCEL_STYLE_FONT_NAME value 'Calibri'. "#EC NOTEXT . . . . . . . . . . . . " . - data SCHEME type ZEXCEL_STYLE_FONT_SCHEME value 'minor'. "#EC NOTEXT . . . . . . . . . . . . " . - data SIZE type ZEXCEL_STYLE_FONT_SIZE value 11. "#EC NOTEXT . . . . . . . . . . . . " . - data STRIKETHROUGH type FLAG . - data UNDERLINE type FLAG . - data UNDERLINE_MODE type ZEXCEL_STYLE_FONT_UNDERLINE . + DATA bold TYPE flag . + DATA color TYPE zexcel_s_style_color . + CONSTANTS c_family_decorative TYPE zexcel_style_font_family VALUE 5. "#EC NOTEXT + CONSTANTS c_family_modern TYPE zexcel_style_font_family VALUE 3. "#EC NOTEXT + CONSTANTS c_family_none TYPE zexcel_style_font_family VALUE 0. "#EC NOTEXT + CONSTANTS c_family_roman TYPE zexcel_style_font_family VALUE 1. "#EC NOTEXT + CONSTANTS c_family_script TYPE zexcel_style_font_family VALUE 4. "#EC NOTEXT + CONSTANTS c_family_swiss TYPE zexcel_style_font_family VALUE 2. "#EC NOTEXT + CONSTANTS c_name_arial TYPE zexcel_style_font_name VALUE 'Arial'. "#EC NOTEXT + CONSTANTS c_name_calibri TYPE zexcel_style_font_name VALUE 'Calibri'. "#EC NOTEXT + CONSTANTS c_name_cambria TYPE zexcel_style_font_name VALUE 'Cambria'. "#EC NOTEXT + CONSTANTS c_name_roman TYPE zexcel_style_font_name VALUE 'Times New Roman'. "#EC NOTEXT + CONSTANTS c_scheme_major TYPE zexcel_style_font_scheme VALUE 'major'. "#EC NOTEXT + CONSTANTS c_scheme_none TYPE zexcel_style_font_scheme VALUE ''. "#EC NOTEXT + CONSTANTS c_scheme_minor TYPE zexcel_style_font_scheme VALUE 'minor'. "#EC NOTEXT + CONSTANTS c_underline_double TYPE zexcel_style_font_underline VALUE 'double'. "#EC NOTEXT + CONSTANTS c_underline_doubleaccounting TYPE zexcel_style_font_underline VALUE 'doubleAccounting'. "#EC NOTEXT + CONSTANTS c_underline_none TYPE zexcel_style_font_underline VALUE 'none'. "#EC NOTEXT + CONSTANTS c_underline_single TYPE zexcel_style_font_underline VALUE 'single'. "#EC NOTEXT + CONSTANTS c_underline_singleaccounting TYPE zexcel_style_font_underline VALUE 'singleAccounting'. "#EC NOTEXT + DATA family TYPE zexcel_style_font_family VALUE 2. "#EC NOTEXT . . . . . . . . . . . . " . + DATA italic TYPE flag . + DATA name TYPE zexcel_style_font_name VALUE 'Calibri'. "#EC NOTEXT . . . . . . . . . . . . " . + DATA scheme TYPE zexcel_style_font_scheme VALUE 'minor'. "#EC NOTEXT . . . . . . . . . . . . " . + DATA size TYPE zexcel_style_font_size VALUE 11. "#EC NOTEXT . . . . . . . . . . . . " . + DATA strikethrough TYPE flag . + DATA underline TYPE flag . + DATA underline_mode TYPE zexcel_style_font_underline . - methods CONSTRUCTOR . - methods GET_STRUCTURE - returning - value(ES_FONT) type ZEXCEL_S_STYLE_FONT . - methods CALCULATE_TEXT_WIDTH - importing - !I_TEXT type ZEXCEL_CELL_VALUE - returning - value(R_WIDTH) type I . + METHODS constructor . + METHODS get_structure + RETURNING + VALUE(es_font) TYPE zexcel_s_style_font . + METHODS calculate_text_width + IMPORTING + !i_text TYPE zexcel_cell_value + RETURNING + VALUE(r_width) TYPE i . *"* protected components of class ZCL_EXCEL_STYLE_FONT *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_STYLE_FONT *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_STYLE_FONT IMPLEMENTATION. +CLASS zcl_excel_style_font IMPLEMENTATION. -method CALCULATE_TEXT_WIDTH. - " Addition to solve issue #120, contribution by Stefan Schmoecker - r_width = strlen( i_text ). - " use scale factor based on default 11 - " ( don't know where defaultsetting is stored currently ) - r_width = r_width * me->size / 11. - endmethod. + METHOD calculate_text_width. + " Addition to solve issue #120, contribution by Stefan Schmoecker + r_width = strlen( i_text ). + " use scale factor based on default 11 + " ( don't know where defaultsetting is stored currently ) + r_width = r_width * me->size / 11. + ENDMETHOD. -method CONSTRUCTOR. - me->color-rgb = zcl_excel_style_color=>c_black. - me->color-theme = zcl_excel_style_color=>c_theme_not_set. - me->color-indexed = zcl_excel_style_color=>c_indexed_not_set. - me->scheme = zcl_excel_style_font=>c_scheme_minor. - me->underline_mode = zcl_excel_style_font=>c_underline_single. - endmethod. + METHOD constructor. + me->color-rgb = zcl_excel_style_color=>c_black. + me->color-theme = zcl_excel_style_color=>c_theme_not_set. + me->color-indexed = zcl_excel_style_color=>c_indexed_not_set. + me->scheme = zcl_excel_style_font=>c_scheme_minor. + me->underline_mode = zcl_excel_style_font=>c_underline_single. + ENDMETHOD. -method GET_STRUCTURE. + METHOD get_structure. - es_font-bold = me->bold. - es_font-italic = me->italic. - es_font-underline = me->underline. - es_font-underline_mode = me->underline_mode. - es_font-strikethrough = me->strikethrough. - es_font-size = me->size. - es_font-color = me->color. - es_font-name = me->name. - es_font-family = me->family. - es_font-scheme = me->scheme. + es_font-bold = me->bold. + es_font-italic = me->italic. + es_font-underline = me->underline. + es_font-underline_mode = me->underline_mode. + es_font-strikethrough = me->strikethrough. + es_font-size = me->size. + es_font-color = me->color. + es_font-name = me->name. + es_font-family = me->family. + es_font-scheme = me->scheme. - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_number_format.clas.abap b/src/zcl_excel_style_number_format.clas.abap index 021675449..3f80cd8e2 100644 --- a/src/zcl_excel_style_number_format.clas.abap +++ b/src/zcl_excel_style_number_format.clas.abap @@ -1,164 +1,164 @@ -class ZCL_EXCEL_STYLE_NUMBER_FORMAT definition - public - final - create public . +CLASS zcl_excel_style_number_format DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. - types: - begin of t_num_format, - id type string, - format type ref to zcl_excel_style_number_format, - end of t_num_format . - types: - t_num_formats type hashed table of t_num_format with unique key id . + TYPES: + BEGIN OF t_num_format, + id TYPE string, + format TYPE REF TO zcl_excel_style_number_format, + END OF t_num_format . + TYPES: + t_num_formats TYPE HASHED TABLE OF t_num_format WITH UNIQUE KEY id . *"* public components of class ZCL_EXCEL_STYLE_NUMBER_FORMAT *"* do not include other source files here!!! - constants C_FORMAT_NUMC_STD type ZEXCEL_NUMBER_FORMAT value 'STD_NDEC'. "#EC NOTEXT - constants C_FORMAT_DATE_STD type ZEXCEL_NUMBER_FORMAT value 'STD_DATE'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_EUR_SIMPLE type ZEXCEL_NUMBER_FORMAT value '[$EUR ]#,##0.00_-'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_USD type ZEXCEL_NUMBER_FORMAT value '$#,##0_-'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_USD_SIMPLE type ZEXCEL_NUMBER_FORMAT value '"$"#,##0.00_-'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_SIMPLE type ZEXCEL_NUMBER_FORMAT value '$#,##0_);($#,##0)'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_SIMPLE_RED type ZEXCEL_NUMBER_FORMAT value '$#,##0_);[Red]($#,##0)'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_SIMPLE2 type ZEXCEL_NUMBER_FORMAT value '$#,##0.00_);($#,##0.00)'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_SIMPLE_RED2 type ZEXCEL_NUMBER_FORMAT value '$#,##0.00_);[Red]($#,##0.00)'. "#EC NOTEXT - constants C_FORMAT_DATE_DATETIME type ZEXCEL_NUMBER_FORMAT value 'd/m/y h:mm'. "#EC NOTEXT - constants C_FORMAT_DATE_DDMMYYYY type ZEXCEL_NUMBER_FORMAT value 'dd/mm/yy'. "#EC NOTEXT - constants C_FORMAT_DATE_DDMMYYYYDOT type ZEXCEL_NUMBER_FORMAT value 'dd\.mm\.yyyy'. "#EC NOTEXT - constants C_FORMAT_DATE_DMMINUS type ZEXCEL_NUMBER_FORMAT value 'd-m'. "#EC NOTEXT - constants C_FORMAT_DATE_DMYMINUS type ZEXCEL_NUMBER_FORMAT value 'd-m-y'. "#EC NOTEXT - constants C_FORMAT_DATE_DMYSLASH type ZEXCEL_NUMBER_FORMAT value 'd/m/y'. "#EC NOTEXT - constants C_FORMAT_DATE_MYMINUS type ZEXCEL_NUMBER_FORMAT value 'm-y'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME1 type ZEXCEL_NUMBER_FORMAT value 'h:mm AM/PM'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME2 type ZEXCEL_NUMBER_FORMAT value 'h:mm:ss AM/PM'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME3 type ZEXCEL_NUMBER_FORMAT value 'h:mm'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME4 type ZEXCEL_NUMBER_FORMAT value 'h:mm:ss'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME5 type ZEXCEL_NUMBER_FORMAT value 'mm:ss'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME6 type ZEXCEL_NUMBER_FORMAT value 'h:mm:ss'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME7 type ZEXCEL_NUMBER_FORMAT value 'i:s.S'. "#EC NOTEXT - constants C_FORMAT_DATE_TIME8 type ZEXCEL_NUMBER_FORMAT value 'h:mm:ss@'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX14 type ZEXCEL_NUMBER_FORMAT value 'mm-dd-yy'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX15 type ZEXCEL_NUMBER_FORMAT value 'd-mmm-yy'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX16 type ZEXCEL_NUMBER_FORMAT value 'd-mmm'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX17 type ZEXCEL_NUMBER_FORMAT value 'mmm-yy'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX22 type ZEXCEL_NUMBER_FORMAT value 'm/d/yy h:mm'. "#EC NOTEXT - constants C_FORMAT_DATE_YYMMDD type ZEXCEL_NUMBER_FORMAT value 'yymmdd'. "#EC NOTEXT - constants C_FORMAT_DATE_YYMMDDMINUS type ZEXCEL_NUMBER_FORMAT value 'yy-mm-dd'. "#EC NOTEXT - constants C_FORMAT_DATE_YYMMDDSLASH type ZEXCEL_NUMBER_FORMAT value 'yy/mm/dd'. "#EC NOTEXT - constants C_FORMAT_DATE_YYYYMMDD type ZEXCEL_NUMBER_FORMAT value 'yyyymmdd'. "#EC NOTEXT - constants C_FORMAT_DATE_YYYYMMDDMINUS type ZEXCEL_NUMBER_FORMAT value 'yyyy-mm-dd'. "#EC NOTEXT - constants C_FORMAT_DATE_YYYYMMDDSLASH type ZEXCEL_NUMBER_FORMAT value 'yyyy/mm/dd'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX45 type ZEXCEL_NUMBER_FORMAT value 'mm:ss'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX46 type ZEXCEL_NUMBER_FORMAT value '[h]:mm:ss'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX47 type ZEXCEL_NUMBER_FORMAT value 'mm:ss.0'. "#EC NOTEXT - constants C_FORMAT_GENERAL type ZEXCEL_NUMBER_FORMAT value ''. "#EC NOTEXT - constants C_FORMAT_NUMBER type ZEXCEL_NUMBER_FORMAT value '0'. "#EC NOTEXT - constants C_FORMAT_NUMBER_00 type ZEXCEL_NUMBER_FORMAT value '0.00'. "#EC NOTEXT - constants C_FORMAT_NUMBER_COMMA_SEP0 type ZEXCEL_NUMBER_FORMAT value '#,##0'. "#EC NOTEXT - constants C_FORMAT_NUMBER_COMMA_SEP1 type ZEXCEL_NUMBER_FORMAT value '#,##0.00'. "#EC NOTEXT - constants C_FORMAT_NUMBER_COMMA_SEP2 type ZEXCEL_NUMBER_FORMAT value '#,##0.00_-'. "#EC NOTEXT - constants C_FORMAT_PERCENTAGE type ZEXCEL_NUMBER_FORMAT value '0%'. "#EC NOTEXT - constants C_FORMAT_PERCENTAGE_00 type ZEXCEL_NUMBER_FORMAT value '0.00%'. "#EC NOTEXT - constants C_FORMAT_TEXT type ZEXCEL_NUMBER_FORMAT value '@'. "#EC NOTEXT - constants C_FORMAT_FRACTION_1 type ZEXCEL_NUMBER_FORMAT value '# ?/?'. "#EC NOTEXT - constants C_FORMAT_FRACTION_2 type ZEXCEL_NUMBER_FORMAT value '# ??/??'. "#EC NOTEXT - constants C_FORMAT_SCIENTIFIC type ZEXCEL_NUMBER_FORMAT value '0.00E+00'. "#EC NOTEXT - constants C_FORMAT_SPECIAL_01 type ZEXCEL_NUMBER_FORMAT value '##0.0E+0'. "#EC NOTEXT - data FORMAT_CODE type ZEXCEL_NUMBER_FORMAT . - class-data MT_BUILT_IN_NUM_FORMATS type T_NUM_FORMATS read-only . - constants C_FORMAT_XLSX37 type ZEXCEL_NUMBER_FORMAT value '#,##0_);(#,##0)'. "#EC NOTEXT - constants C_FORMAT_XLSX38 type ZEXCEL_NUMBER_FORMAT value '#,##0_);[Red](#,##0)'. "#EC NOTEXT - constants C_FORMAT_XLSX39 type ZEXCEL_NUMBER_FORMAT value '#,##0.00_);(#,##0.00)'. "#EC NOTEXT - constants C_FORMAT_XLSX40 type ZEXCEL_NUMBER_FORMAT value '#,##0.00_);[Red](#,##0.00)'. "#EC NOTEXT - constants C_FORMAT_XLSX41 type ZEXCEL_NUMBER_FORMAT value '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)'. "#EC NOTEXT - constants C_FORMAT_XLSX42 type ZEXCEL_NUMBER_FORMAT value '_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)'. "#EC NOTEXT - constants C_FORMAT_XLSX43 type ZEXCEL_NUMBER_FORMAT value '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'. "#EC NOTEXT - constants C_FORMAT_XLSX44 type ZEXCEL_NUMBER_FORMAT value '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_GBP_SIMPLE type ZEXCEL_NUMBER_FORMAT value '[$£-809]#,##0.00'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_PLN_SIMPLE type ZEXCEL_NUMBER_FORMAT value '#,##0.00\ "zł"'. "#EC NOTEXT - - class-methods CLASS_CONSTRUCTOR . - methods CONSTRUCTOR . - methods GET_STRUCTURE - returning - value(EP_NUMBER_FORMAT) type ZEXCEL_S_STYLE_NUMFMT . + CONSTANTS c_format_numc_std TYPE zexcel_number_format VALUE 'STD_NDEC'. "#EC NOTEXT + CONSTANTS c_format_date_std TYPE zexcel_number_format VALUE 'STD_DATE'. "#EC NOTEXT + CONSTANTS c_format_currency_eur_simple TYPE zexcel_number_format VALUE '[$EUR ]#,##0.00_-'. "#EC NOTEXT + CONSTANTS c_format_currency_usd TYPE zexcel_number_format VALUE '$#,##0_-'. "#EC NOTEXT + CONSTANTS c_format_currency_usd_simple TYPE zexcel_number_format VALUE '"$"#,##0.00_-'. "#EC NOTEXT + CONSTANTS c_format_currency_simple TYPE zexcel_number_format VALUE '$#,##0_);($#,##0)'. "#EC NOTEXT + CONSTANTS c_format_currency_simple_red TYPE zexcel_number_format VALUE '$#,##0_);[Red]($#,##0)'. "#EC NOTEXT + CONSTANTS c_format_currency_simple2 TYPE zexcel_number_format VALUE '$#,##0.00_);($#,##0.00)'. "#EC NOTEXT + CONSTANTS c_format_currency_simple_red2 TYPE zexcel_number_format VALUE '$#,##0.00_);[Red]($#,##0.00)'. "#EC NOTEXT + CONSTANTS c_format_date_datetime TYPE zexcel_number_format VALUE 'd/m/y h:mm'. "#EC NOTEXT + CONSTANTS c_format_date_ddmmyyyy TYPE zexcel_number_format VALUE 'dd/mm/yy'. "#EC NOTEXT + CONSTANTS c_format_date_ddmmyyyydot TYPE zexcel_number_format VALUE 'dd\.mm\.yyyy'. "#EC NOTEXT + CONSTANTS c_format_date_dmminus TYPE zexcel_number_format VALUE 'd-m'. "#EC NOTEXT + CONSTANTS c_format_date_dmyminus TYPE zexcel_number_format VALUE 'd-m-y'. "#EC NOTEXT + CONSTANTS c_format_date_dmyslash TYPE zexcel_number_format VALUE 'd/m/y'. "#EC NOTEXT + CONSTANTS c_format_date_myminus TYPE zexcel_number_format VALUE 'm-y'. "#EC NOTEXT + CONSTANTS c_format_date_time1 TYPE zexcel_number_format VALUE 'h:mm AM/PM'. "#EC NOTEXT + CONSTANTS c_format_date_time2 TYPE zexcel_number_format VALUE 'h:mm:ss AM/PM'. "#EC NOTEXT + CONSTANTS c_format_date_time3 TYPE zexcel_number_format VALUE 'h:mm'. "#EC NOTEXT + CONSTANTS c_format_date_time4 TYPE zexcel_number_format VALUE 'h:mm:ss'. "#EC NOTEXT + CONSTANTS c_format_date_time5 TYPE zexcel_number_format VALUE 'mm:ss'. "#EC NOTEXT + CONSTANTS c_format_date_time6 TYPE zexcel_number_format VALUE 'h:mm:ss'. "#EC NOTEXT + CONSTANTS c_format_date_time7 TYPE zexcel_number_format VALUE 'i:s.S'. "#EC NOTEXT + CONSTANTS c_format_date_time8 TYPE zexcel_number_format VALUE 'h:mm:ss@'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx14 TYPE zexcel_number_format VALUE 'mm-dd-yy'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx15 TYPE zexcel_number_format VALUE 'd-mmm-yy'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx16 TYPE zexcel_number_format VALUE 'd-mmm'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx17 TYPE zexcel_number_format VALUE 'mmm-yy'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx22 TYPE zexcel_number_format VALUE 'm/d/yy h:mm'. "#EC NOTEXT + CONSTANTS c_format_date_yymmdd TYPE zexcel_number_format VALUE 'yymmdd'. "#EC NOTEXT + CONSTANTS c_format_date_yymmddminus TYPE zexcel_number_format VALUE 'yy-mm-dd'. "#EC NOTEXT + CONSTANTS c_format_date_yymmddslash TYPE zexcel_number_format VALUE 'yy/mm/dd'. "#EC NOTEXT + CONSTANTS c_format_date_yyyymmdd TYPE zexcel_number_format VALUE 'yyyymmdd'. "#EC NOTEXT + CONSTANTS c_format_date_yyyymmddminus TYPE zexcel_number_format VALUE 'yyyy-mm-dd'. "#EC NOTEXT + CONSTANTS c_format_date_yyyymmddslash TYPE zexcel_number_format VALUE 'yyyy/mm/dd'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx45 TYPE zexcel_number_format VALUE 'mm:ss'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx46 TYPE zexcel_number_format VALUE '[h]:mm:ss'. "#EC NOTEXT + CONSTANTS c_format_date_xlsx47 TYPE zexcel_number_format VALUE 'mm:ss.0'. "#EC NOTEXT + CONSTANTS c_format_general TYPE zexcel_number_format VALUE ''. "#EC NOTEXT + CONSTANTS c_format_number TYPE zexcel_number_format VALUE '0'. "#EC NOTEXT + CONSTANTS c_format_number_00 TYPE zexcel_number_format VALUE '0.00'. "#EC NOTEXT + CONSTANTS c_format_number_comma_sep0 TYPE zexcel_number_format VALUE '#,##0'. "#EC NOTEXT + CONSTANTS c_format_number_comma_sep1 TYPE zexcel_number_format VALUE '#,##0.00'. "#EC NOTEXT + CONSTANTS c_format_number_comma_sep2 TYPE zexcel_number_format VALUE '#,##0.00_-'. "#EC NOTEXT + CONSTANTS c_format_percentage TYPE zexcel_number_format VALUE '0%'. "#EC NOTEXT + CONSTANTS c_format_percentage_00 TYPE zexcel_number_format VALUE '0.00%'. "#EC NOTEXT + CONSTANTS c_format_text TYPE zexcel_number_format VALUE '@'. "#EC NOTEXT + CONSTANTS c_format_fraction_1 TYPE zexcel_number_format VALUE '# ?/?'. "#EC NOTEXT + CONSTANTS c_format_fraction_2 TYPE zexcel_number_format VALUE '# ??/??'. "#EC NOTEXT + CONSTANTS c_format_scientific TYPE zexcel_number_format VALUE '0.00E+00'. "#EC NOTEXT + CONSTANTS c_format_special_01 TYPE zexcel_number_format VALUE '##0.0E+0'. "#EC NOTEXT + DATA format_code TYPE zexcel_number_format . + CLASS-DATA mt_built_in_num_formats TYPE t_num_formats READ-ONLY . + CONSTANTS c_format_xlsx37 TYPE zexcel_number_format VALUE '#,##0_);(#,##0)'. "#EC NOTEXT + CONSTANTS c_format_xlsx38 TYPE zexcel_number_format VALUE '#,##0_);[Red](#,##0)'. "#EC NOTEXT + CONSTANTS c_format_xlsx39 TYPE zexcel_number_format VALUE '#,##0.00_);(#,##0.00)'. "#EC NOTEXT + CONSTANTS c_format_xlsx40 TYPE zexcel_number_format VALUE '#,##0.00_);[Red](#,##0.00)'. "#EC NOTEXT + CONSTANTS c_format_xlsx41 TYPE zexcel_number_format VALUE '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)'. "#EC NOTEXT + CONSTANTS c_format_xlsx42 TYPE zexcel_number_format VALUE '_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)'. "#EC NOTEXT + CONSTANTS c_format_xlsx43 TYPE zexcel_number_format VALUE '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'. "#EC NOTEXT + CONSTANTS c_format_xlsx44 TYPE zexcel_number_format VALUE '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)'. "#EC NOTEXT + CONSTANTS c_format_currency_gbp_simple TYPE zexcel_number_format VALUE '[$£-809]#,##0.00'. "#EC NOTEXT + CONSTANTS c_format_currency_pln_simple TYPE zexcel_number_format VALUE '#,##0.00\ "zł"'. "#EC NOTEXT + + CLASS-METHODS class_constructor . + METHODS constructor . + METHODS get_structure + RETURNING + VALUE(ep_number_format) TYPE zexcel_s_style_numfmt . *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_STYLE_NUMBER_FORMAT *"* do not include other source files here!!! ENDCLASS. -CLASS ZCL_EXCEL_STYLE_NUMBER_FORMAT IMPLEMENTATION. - - -METHOD class_constructor. - - DATA: ls_num_format LIKE LINE OF mt_built_in_num_formats. - - DEFINE predefined_format. - ls_num_format-id = &1. - create object ls_num_format-format. - ls_num_format-format->format_code = &2. - insert ls_num_format into table mt_built_in_num_formats. - END-OF-DEFINITION. - - CLEAR mt_built_in_num_formats. - - predefined_format '1' zcl_excel_style_number_format=>c_format_number. " '0'. - predefined_format '2' zcl_excel_style_number_format=>c_format_number_00. " '0.00'. - predefined_format '3' zcl_excel_style_number_format=>c_format_number_comma_sep0. " '#,##0'. - predefined_format '4' zcl_excel_style_number_format=>c_format_number_comma_sep1. " '#,##0.00'. - predefined_format '5' zcl_excel_style_number_format=>c_format_currency_simple. " '$#,##0_);($#,##0)'. - predefined_format '6' zcl_excel_style_number_format=>c_format_currency_simple_red. " '$#,##0_);[Red]($#,##0)'. - predefined_format '7' zcl_excel_style_number_format=>c_format_currency_simple2. " '$#,##0.00_);($#,##0.00)'. - predefined_format '8' zcl_excel_style_number_format=>c_format_currency_simple_red2. " '$#,##0.00_);[Red]($#,##0.00)'. - predefined_format '9' zcl_excel_style_number_format=>c_format_percentage. " '0%'. - predefined_format '10' zcl_excel_style_number_format=>c_format_percentage_00. " '0.00%'. - predefined_format '11' zcl_excel_style_number_format=>c_format_scientific. " '0.00E+00'. - predefined_format '12' zcl_excel_style_number_format=>c_format_fraction_1. " '# ?/?'. - predefined_format '13' zcl_excel_style_number_format=>c_format_fraction_2. " '# ??/??'. - predefined_format '14' zcl_excel_style_number_format=>c_format_date_xlsx14. "'m/d/yyyy'. <-- should have been 'mm-dd-yy' like constant in zcl_excel_style_number_format - predefined_format '15' zcl_excel_style_number_format=>c_format_date_xlsx15. "'d-mmm-yy'. - predefined_format '16' zcl_excel_style_number_format=>c_format_date_xlsx16. "'d-mmm'. - predefined_format '17' zcl_excel_style_number_format=>c_format_date_xlsx17. "'mmm-yy'. - predefined_format '18' zcl_excel_style_number_format=>c_format_date_time1. " 'h:mm AM/PM'. - predefined_format '19' zcl_excel_style_number_format=>c_format_date_time2. " 'h:mm:ss AM/PM'. - predefined_format '20' zcl_excel_style_number_format=>c_format_date_time3. " 'h:mm'. - predefined_format '21' zcl_excel_style_number_format=>c_format_date_time4. " 'h:mm:ss'. - predefined_format '22' zcl_excel_style_number_format=>c_format_date_xlsx22. " 'm/d/yyyy h:mm'. - - - predefined_format '37' zcl_excel_style_number_format=>c_format_xlsx37. " '#,##0_);(#,##0)'. - predefined_format '38' zcl_excel_style_number_format=>c_format_xlsx38. " '#,##0_);[Red](#,##0)'. - predefined_format '39' zcl_excel_style_number_format=>c_format_xlsx39. " '#,##0.00_);(#,##0.00)'. - predefined_format '40' zcl_excel_style_number_format=>c_format_xlsx40. " '#,##0.00_);[Red](#,##0.00)'. - predefined_format '41' zcl_excel_style_number_format=>c_format_xlsx41. " '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)'. - predefined_format '42' zcl_excel_style_number_format=>c_format_xlsx42. " '_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)'. - predefined_format '43' zcl_excel_style_number_format=>c_format_xlsx43. " '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'. - predefined_format '44' zcl_excel_style_number_format=>c_format_xlsx44. " '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)'. - predefined_format '45' zcl_excel_style_number_format=>c_format_date_xlsx45. " 'mm:ss'. - predefined_format '46' zcl_excel_style_number_format=>c_format_date_xlsx46. " '[h]:mm:ss'. - predefined_format '47' zcl_excel_style_number_format=>c_format_date_xlsx47. " 'mm:ss.0'. - predefined_format '48' zcl_excel_style_number_format=>c_format_special_01. " '##0.0E+0'. - predefined_format '49' zcl_excel_style_number_format=>c_format_text. " '@'. - -ENDMETHOD. - - -method CONSTRUCTOR. - format_code = me->c_format_general. - endmethod. - - -method GET_STRUCTURE. - ep_number_format-numfmt = me->format_code. - endmethod. +CLASS zcl_excel_style_number_format IMPLEMENTATION. + + + METHOD class_constructor. + + DATA: ls_num_format LIKE LINE OF mt_built_in_num_formats. + + DEFINE predefined_format. + ls_num_format-id = &1. + CREATE OBJECT ls_num_format-format. + ls_num_format-format->format_code = &2. + INSERT ls_num_format INTO TABLE mt_built_in_num_formats. + END-OF-DEFINITION. + + CLEAR mt_built_in_num_formats. + + predefined_format '1' zcl_excel_style_number_format=>c_format_number. " '0'. + predefined_format '2' zcl_excel_style_number_format=>c_format_number_00. " '0.00'. + predefined_format '3' zcl_excel_style_number_format=>c_format_number_comma_sep0. " '#,##0'. + predefined_format '4' zcl_excel_style_number_format=>c_format_number_comma_sep1. " '#,##0.00'. + predefined_format '5' zcl_excel_style_number_format=>c_format_currency_simple. " '$#,##0_);($#,##0)'. + predefined_format '6' zcl_excel_style_number_format=>c_format_currency_simple_red. " '$#,##0_);[Red]($#,##0)'. + predefined_format '7' zcl_excel_style_number_format=>c_format_currency_simple2. " '$#,##0.00_);($#,##0.00)'. + predefined_format '8' zcl_excel_style_number_format=>c_format_currency_simple_red2. " '$#,##0.00_);[Red]($#,##0.00)'. + predefined_format '9' zcl_excel_style_number_format=>c_format_percentage. " '0%'. + predefined_format '10' zcl_excel_style_number_format=>c_format_percentage_00. " '0.00%'. + predefined_format '11' zcl_excel_style_number_format=>c_format_scientific. " '0.00E+00'. + predefined_format '12' zcl_excel_style_number_format=>c_format_fraction_1. " '# ?/?'. + predefined_format '13' zcl_excel_style_number_format=>c_format_fraction_2. " '# ??/??'. + predefined_format '14' zcl_excel_style_number_format=>c_format_date_xlsx14. "'m/d/yyyy'. <-- should have been 'mm-dd-yy' like constant in zcl_excel_style_number_format + predefined_format '15' zcl_excel_style_number_format=>c_format_date_xlsx15. "'d-mmm-yy'. + predefined_format '16' zcl_excel_style_number_format=>c_format_date_xlsx16. "'d-mmm'. + predefined_format '17' zcl_excel_style_number_format=>c_format_date_xlsx17. "'mmm-yy'. + predefined_format '18' zcl_excel_style_number_format=>c_format_date_time1. " 'h:mm AM/PM'. + predefined_format '19' zcl_excel_style_number_format=>c_format_date_time2. " 'h:mm:ss AM/PM'. + predefined_format '20' zcl_excel_style_number_format=>c_format_date_time3. " 'h:mm'. + predefined_format '21' zcl_excel_style_number_format=>c_format_date_time4. " 'h:mm:ss'. + predefined_format '22' zcl_excel_style_number_format=>c_format_date_xlsx22. " 'm/d/yyyy h:mm'. + + + predefined_format '37' zcl_excel_style_number_format=>c_format_xlsx37. " '#,##0_);(#,##0)'. + predefined_format '38' zcl_excel_style_number_format=>c_format_xlsx38. " '#,##0_);[Red](#,##0)'. + predefined_format '39' zcl_excel_style_number_format=>c_format_xlsx39. " '#,##0.00_);(#,##0.00)'. + predefined_format '40' zcl_excel_style_number_format=>c_format_xlsx40. " '#,##0.00_);[Red](#,##0.00)'. + predefined_format '41' zcl_excel_style_number_format=>c_format_xlsx41. " '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)'. + predefined_format '42' zcl_excel_style_number_format=>c_format_xlsx42. " '_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)'. + predefined_format '43' zcl_excel_style_number_format=>c_format_xlsx43. " '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'. + predefined_format '44' zcl_excel_style_number_format=>c_format_xlsx44. " '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)'. + predefined_format '45' zcl_excel_style_number_format=>c_format_date_xlsx45. " 'mm:ss'. + predefined_format '46' zcl_excel_style_number_format=>c_format_date_xlsx46. " '[h]:mm:ss'. + predefined_format '47' zcl_excel_style_number_format=>c_format_date_xlsx47. " 'mm:ss.0'. + predefined_format '48' zcl_excel_style_number_format=>c_format_special_01. " '##0.0E+0'. + predefined_format '49' zcl_excel_style_number_format=>c_format_text. " '@'. + + ENDMETHOD. + + + METHOD constructor. + format_code = me->c_format_general. + ENDMETHOD. + + + METHOD get_structure. + ep_number_format-numfmt = me->format_code. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_style_protection.clas.abap b/src/zcl_excel_style_protection.clas.abap index d848c5c8e..1dfd818dd 100644 --- a/src/zcl_excel_style_protection.clas.abap +++ b/src/zcl_excel_style_protection.clas.abap @@ -1,46 +1,46 @@ -class ZCL_EXCEL_STYLE_PROTECTION definition - public - final - create public . +CLASS zcl_excel_style_protection DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_STYLE_PROTECTION *"* do not include other source files here!!! -public section. - - constants C_PROTECTION_HIDDEN type ZEXCEL_CELL_PROTECTION value '1'. "#EC NOTEXT - constants C_PROTECTION_LOCKED type ZEXCEL_CELL_PROTECTION value '1'. "#EC NOTEXT - constants C_PROTECTION_UNHIDDEN type ZEXCEL_CELL_PROTECTION value '0'. "#EC NOTEXT - constants C_PROTECTION_UNLOCKED type ZEXCEL_CELL_PROTECTION value '0'. "#EC NOTEXT - data HIDDEN type ZEXCEL_CELL_PROTECTION . - data LOCKED type ZEXCEL_CELL_PROTECTION . - - methods CONSTRUCTOR . - methods GET_STRUCTURE - returning - value(EP_PROTECTION) type ZEXCEL_S_STYLE_PROTECTION . + PUBLIC SECTION. + + CONSTANTS c_protection_hidden TYPE zexcel_cell_protection VALUE '1'. "#EC NOTEXT + CONSTANTS c_protection_locked TYPE zexcel_cell_protection VALUE '1'. "#EC NOTEXT + CONSTANTS c_protection_unhidden TYPE zexcel_cell_protection VALUE '0'. "#EC NOTEXT + CONSTANTS c_protection_unlocked TYPE zexcel_cell_protection VALUE '0'. "#EC NOTEXT + DATA hidden TYPE zexcel_cell_protection . + DATA locked TYPE zexcel_cell_protection . + + METHODS constructor . + METHODS get_structure + RETURNING + VALUE(ep_protection) TYPE zexcel_s_style_protection . *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_STYLE_FONT *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_STYLE_PROTECTION *"* do not include other source files here!!! -private section. + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_STYLE_PROTECTION IMPLEMENTATION. +CLASS zcl_excel_style_protection IMPLEMENTATION. -method CONSTRUCTOR. - locked = me->c_protection_locked. - hidden = me->c_protection_unhidden. - endmethod. + METHOD constructor. + locked = me->c_protection_locked. + hidden = me->c_protection_unhidden. + ENDMETHOD. -method GET_STRUCTURE. - ep_protection-locked = me->locked. - ep_protection-hidden = me->hidden. - endmethod. + METHOD get_structure. + ep_protection-locked = me->locked. + ep_protection-hidden = me->hidden. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_styles.clas.abap b/src/zcl_excel_styles.clas.abap index 441e7dff2..d64b5c66b 100644 --- a/src/zcl_excel_styles.clas.abap +++ b/src/zcl_excel_styles.clas.abap @@ -1,116 +1,116 @@ -class ZCL_EXCEL_STYLES definition - public - final - create public . +CLASS zcl_excel_styles DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_STYLES *"* do not include other source files here!!! -public section. - - methods ADD - importing - !IP_STYLE type ref to ZCL_EXCEL_STYLE . - methods CLEAR . - methods CONSTRUCTOR . - methods GET - importing - !IP_INDEX type I - returning - value(EO_STYLE) type ref to ZCL_EXCEL_STYLE . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IP_STYLE type ref to ZCL_EXCEL_STYLE . - methods SIZE - returning - value(EP_SIZE) type I . - methods REGISTER_NEW_STYLE - importing - !IO_STYLE type ref to ZCL_EXCEL_STYLE - returning - value(EP_STYLE_CODE) type I . + PUBLIC SECTION. + + METHODS add + IMPORTING + !ip_style TYPE REF TO zcl_excel_style . + METHODS clear . + METHODS constructor . + METHODS get + IMPORTING + !ip_index TYPE i + RETURNING + VALUE(eo_style) TYPE REF TO zcl_excel_style . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !ip_style TYPE REF TO zcl_excel_style . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . + METHODS register_new_style + IMPORTING + !io_style TYPE REF TO zcl_excel_style + RETURNING + VALUE(ep_style_code) TYPE i . *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. - data STYLES type ref to CL_OBJECT_COLLECTION . + DATA styles TYPE REF TO cl_object_collection . ENDCLASS. -CLASS ZCL_EXCEL_STYLES IMPLEMENTATION. +CLASS zcl_excel_styles IMPLEMENTATION. -method ADD. + METHOD add. - styles->add( ip_style ). - endmethod. + styles->add( ip_style ). + ENDMETHOD. -method CLEAR. + METHOD clear. - styles->clear( ). - endmethod. + styles->clear( ). + ENDMETHOD. -method CONSTRUCTOR. + METHOD constructor. - CREATE OBJECT styles. - endmethod. + CREATE OBJECT styles. + ENDMETHOD. -method GET. + METHOD get. - eo_style ?= styles->get( ip_index ). - endmethod. + eo_style ?= styles->get( ip_index ). + ENDMETHOD. -method GET_ITERATOR. + METHOD get_iterator. - eo_iterator ?= styles->get_iterator( ). - endmethod. + eo_iterator ?= styles->get_iterator( ). + ENDMETHOD. -method IS_EMPTY. + METHOD is_empty. - is_empty = styles->is_empty( ). - endmethod. + is_empty = styles->is_empty( ). + ENDMETHOD. -method REGISTER_NEW_STYLE. + METHOD register_new_style. - me->add( io_style ). - ep_style_code = me->size( ) - 1. "style count starts from 0 - endmethod. + me->add( io_style ). + ep_style_code = me->size( ) - 1. "style count starts from 0 + ENDMETHOD. -method REMOVE. + METHOD remove. - styles->remove( ip_style ). - endmethod. + styles->remove( ip_style ). + ENDMETHOD. -method SIZE. + METHOD size. - ep_size = styles->size( ). - endmethod. + ep_size = styles->size( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_styles_cond.clas.abap b/src/zcl_excel_styles_cond.clas.abap index b5e0883c8..aa4a1b7af 100644 --- a/src/zcl_excel_styles_cond.clas.abap +++ b/src/zcl_excel_styles_cond.clas.abap @@ -1,89 +1,89 @@ -class ZCL_EXCEL_STYLES_COND definition - public - final - create public . +CLASS zcl_excel_styles_cond DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_STYLES_COND *"* do not include other source files here!!! -public section. - - methods ADD - importing - !IP_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods CLEAR . - methods CONSTRUCTOR . - methods GET - importing - !IP_INDEX type ZEXCEL_ACTIVE_WORKSHEET - returning - value(EO_STYLE_COND) type ref to ZCL_EXCEL_STYLE_COND . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IP_STYLE_COND type ref to ZCL_EXCEL_STYLE_COND . - methods SIZE - returning - value(EP_SIZE) type I . + PUBLIC SECTION. + + METHODS add + IMPORTING + !ip_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS clear . + METHODS constructor . + METHODS get + IMPORTING + !ip_index TYPE zexcel_active_worksheet + RETURNING + VALUE(eo_style_cond) TYPE REF TO zcl_excel_style_cond . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !ip_style_cond TYPE REF TO zcl_excel_style_cond . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . *"* protected components of class ZABAP_EXCEL_WORKSHEETS *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_STYLES_COND *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - data STYLES_COND type ref to CL_OBJECT_COLLECTION . + DATA styles_cond TYPE REF TO cl_object_collection . ENDCLASS. -CLASS ZCL_EXCEL_STYLES_COND IMPLEMENTATION. +CLASS zcl_excel_styles_cond IMPLEMENTATION. -METHOD ADD. - styles_cond->add( ip_style_cond ). -ENDMETHOD. + METHOD add. + styles_cond->add( ip_style_cond ). + ENDMETHOD. -METHOD CLEAR. - styles_cond->clear( ). -ENDMETHOD. + METHOD clear. + styles_cond->clear( ). + ENDMETHOD. -METHOD constructor. + METHOD constructor. - CREATE OBJECT styles_cond. + CREATE OBJECT styles_cond. -ENDMETHOD. + ENDMETHOD. -METHOD get. - DATA lv_index TYPE i. - lv_index = ip_index. - eo_style_cond ?= styles_cond->get( lv_index ). -ENDMETHOD. + METHOD get. + DATA lv_index TYPE i. + lv_index = ip_index. + eo_style_cond ?= styles_cond->get( lv_index ). + ENDMETHOD. -METHOD get_iterator. - eo_iterator ?= styles_cond->get_iterator( ). -ENDMETHOD. + METHOD get_iterator. + eo_iterator ?= styles_cond->get_iterator( ). + ENDMETHOD. -METHOD is_empty. - is_empty = styles_cond->is_empty( ). -ENDMETHOD. + METHOD is_empty. + is_empty = styles_cond->is_empty( ). + ENDMETHOD. -METHOD remove. - styles_cond->remove( ip_style_cond ). -ENDMETHOD. + METHOD remove. + styles_cond->remove( ip_style_cond ). + ENDMETHOD. -METHOD size. - ep_size = styles_cond->size( ). -ENDMETHOD. + METHOD size. + ep_size = styles_cond->size( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_table.clas.abap b/src/zcl_excel_table.clas.abap index bf9fcdbaa..752ea8438 100644 --- a/src/zcl_excel_table.clas.abap +++ b/src/zcl_excel_table.clas.abap @@ -1,305 +1,305 @@ -class ZCL_EXCEL_TABLE definition - public - final - create public . +CLASS zcl_excel_table DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_TABLE *"* do not include other source files here!!! -public section. - type-pools ABAP . - - constants BUILTINSTYLE_DARK1 type ZEXCEL_TABLE_STYLE value 'TableStyleDark1'. "#EC NOTEXT - constants BUILTINSTYLE_DARK2 type ZEXCEL_TABLE_STYLE value 'TableStyleDark2'. "#EC NOTEXT - constants BUILTINSTYLE_DARK3 type ZEXCEL_TABLE_STYLE value 'TableStyleDark3'. "#EC NOTEXT - constants BUILTINSTYLE_DARK4 type ZEXCEL_TABLE_STYLE value 'TableStyleDark4'. "#EC NOTEXT - constants BUILTINSTYLE_DARK5 type ZEXCEL_TABLE_STYLE value 'TableStyleDark5'. "#EC NOTEXT - constants BUILTINSTYLE_DARK6 type ZEXCEL_TABLE_STYLE value 'TableStyleDark6'. "#EC NOTEXT - constants BUILTINSTYLE_DARK7 type ZEXCEL_TABLE_STYLE value 'TableStyleDark7'. "#EC NOTEXT - constants BUILTINSTYLE_DARK8 type ZEXCEL_TABLE_STYLE value 'TableStyleDark8'. "#EC NOTEXT - constants BUILTINSTYLE_DARK9 type ZEXCEL_TABLE_STYLE value 'TableStyleDark9'. "#EC NOTEXT - constants BUILTINSTYLE_DARK10 type ZEXCEL_TABLE_STYLE value 'TableStyleDark10'. "#EC NOTEXT - constants BUILTINSTYLE_DARK11 type ZEXCEL_TABLE_STYLE value 'TableStyleDark11'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT1 type ZEXCEL_TABLE_STYLE value 'TableStyleLight1'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT2 type ZEXCEL_TABLE_STYLE value 'TableStyleLight2'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT3 type ZEXCEL_TABLE_STYLE value 'TableStyleLight3'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT4 type ZEXCEL_TABLE_STYLE value 'TableStyleLight4'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT5 type ZEXCEL_TABLE_STYLE value 'TableStyleLight5'. "#EC NOTEXT - constants BUILTINSTYLE_PIVOT_LIGHT16 type ZEXCEL_TABLE_STYLE value 'PivotStyleLight16'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT6 type ZEXCEL_TABLE_STYLE value 'TableStyleLight6'. "#EC NOTEXT - constants TOTALS_FUNCTION_AVERAGE type ZEXCEL_TABLE_TOTALS_FUNCTION value 'average'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT7 type ZEXCEL_TABLE_STYLE value 'TableStyleLight7'. "#EC NOTEXT - constants TOTALS_FUNCTION_COUNT type ZEXCEL_TABLE_TOTALS_FUNCTION value 'count'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT8 type ZEXCEL_TABLE_STYLE value 'TableStyleLight8'. "#EC NOTEXT - constants TOTALS_FUNCTION_CUSTOM type ZEXCEL_TABLE_TOTALS_FUNCTION value 'custom'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT9 type ZEXCEL_TABLE_STYLE value 'TableStyleLight9'. "#EC NOTEXT - constants TOTALS_FUNCTION_MAX type ZEXCEL_TABLE_TOTALS_FUNCTION value 'max'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT10 type ZEXCEL_TABLE_STYLE value 'TableStyleLight10'. "#EC NOTEXT - constants TOTALS_FUNCTION_MIN type ZEXCEL_TABLE_TOTALS_FUNCTION value 'min'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT11 type ZEXCEL_TABLE_STYLE value 'TableStyleLight11'. "#EC NOTEXT - constants TOTALS_FUNCTION_SUM type ZEXCEL_TABLE_TOTALS_FUNCTION value 'sum'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT12 type ZEXCEL_TABLE_STYLE value 'TableStyleLight12'. "#EC NOTEXT - data FIELDCAT type ZEXCEL_T_FIELDCATALOG . - constants BUILTINSTYLE_LIGHT13 type ZEXCEL_TABLE_STYLE value 'TableStyleLight13'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT14 type ZEXCEL_TABLE_STYLE value 'TableStyleLight14'. "#EC NOTEXT - data SETTINGS type ZEXCEL_S_TABLE_SETTINGS . - constants BUILTINSTYLE_LIGHT15 type ZEXCEL_TABLE_STYLE value 'TableStyleLight15'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT16 type ZEXCEL_TABLE_STYLE value 'TableStyleLight16'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT17 type ZEXCEL_TABLE_STYLE value 'TableStyleLight17'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT18 type ZEXCEL_TABLE_STYLE value 'TableStyleLight18'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT19 type ZEXCEL_TABLE_STYLE value 'TableStyleLight19'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT20 type ZEXCEL_TABLE_STYLE value 'TableStyleLight20'. "#EC NOTEXT - constants BUILTINSTYLE_LIGHT21 type ZEXCEL_TABLE_STYLE value 'TableStyleLight21'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM1 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium1'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM2 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium2'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM3 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium3'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM4 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium4'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM5 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium5'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM6 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium6'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM7 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium7'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM8 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium8'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM9 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium9'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM10 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium10'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM11 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium11'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM12 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium12'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM13 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium13'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM14 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium14'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM15 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium15'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM16 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium16'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM17 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium17'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM18 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium18'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM19 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium19'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM20 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium20'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM21 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium21'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM22 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium22'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM23 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium23'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM24 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium24'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM25 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium26'. "#EC NOTEXT - constants BUILTINSTYLE_MEDIUM27 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium27'. "#EC NOTEXT - - methods GET_TOTALS_FORMULA - importing - !IP_COLUMN type CLIKE - !IP_FUNCTION type ZEXCEL_TABLE_TOTALS_FUNCTION - returning - value(EP_FORMULA) type STRING - raising - ZCX_EXCEL . - methods HAS_TOTALS - returning - value(EP_RESULT) type ABAP_BOOL . - methods SET_DATA - importing - !IR_DATA type STANDARD TABLE . - methods GET_ID - returning - value(OV_ID) type I . - methods SET_ID - importing - !IV_ID type I . - methods GET_NAME - returning - value(OV_NAME) type STRING . - methods GET_REFERENCE - importing - !IP_INCLUDE_TOTALS_ROW type ABAP_BOOL default ABAP_TRUE - returning - value(OV_REFERENCE) type STRING - raising - ZCX_EXCEL . - methods GET_BOTTOM_ROW_INTEGER - returning - value(EV_ROW) type I . - methods GET_RIGHT_COLUMN_INTEGER - returning - value(EV_COLUMN) type I - raising - ZCX_EXCEL . + PUBLIC SECTION. + TYPE-POOLS abap . + + CONSTANTS builtinstyle_dark1 TYPE zexcel_table_style VALUE 'TableStyleDark1'. "#EC NOTEXT + CONSTANTS builtinstyle_dark2 TYPE zexcel_table_style VALUE 'TableStyleDark2'. "#EC NOTEXT + CONSTANTS builtinstyle_dark3 TYPE zexcel_table_style VALUE 'TableStyleDark3'. "#EC NOTEXT + CONSTANTS builtinstyle_dark4 TYPE zexcel_table_style VALUE 'TableStyleDark4'. "#EC NOTEXT + CONSTANTS builtinstyle_dark5 TYPE zexcel_table_style VALUE 'TableStyleDark5'. "#EC NOTEXT + CONSTANTS builtinstyle_dark6 TYPE zexcel_table_style VALUE 'TableStyleDark6'. "#EC NOTEXT + CONSTANTS builtinstyle_dark7 TYPE zexcel_table_style VALUE 'TableStyleDark7'. "#EC NOTEXT + CONSTANTS builtinstyle_dark8 TYPE zexcel_table_style VALUE 'TableStyleDark8'. "#EC NOTEXT + CONSTANTS builtinstyle_dark9 TYPE zexcel_table_style VALUE 'TableStyleDark9'. "#EC NOTEXT + CONSTANTS builtinstyle_dark10 TYPE zexcel_table_style VALUE 'TableStyleDark10'. "#EC NOTEXT + CONSTANTS builtinstyle_dark11 TYPE zexcel_table_style VALUE 'TableStyleDark11'. "#EC NOTEXT + CONSTANTS builtinstyle_light1 TYPE zexcel_table_style VALUE 'TableStyleLight1'. "#EC NOTEXT + CONSTANTS builtinstyle_light2 TYPE zexcel_table_style VALUE 'TableStyleLight2'. "#EC NOTEXT + CONSTANTS builtinstyle_light3 TYPE zexcel_table_style VALUE 'TableStyleLight3'. "#EC NOTEXT + CONSTANTS builtinstyle_light4 TYPE zexcel_table_style VALUE 'TableStyleLight4'. "#EC NOTEXT + CONSTANTS builtinstyle_light5 TYPE zexcel_table_style VALUE 'TableStyleLight5'. "#EC NOTEXT + CONSTANTS builtinstyle_pivot_light16 TYPE zexcel_table_style VALUE 'PivotStyleLight16'. "#EC NOTEXT + CONSTANTS builtinstyle_light6 TYPE zexcel_table_style VALUE 'TableStyleLight6'. "#EC NOTEXT + CONSTANTS totals_function_average TYPE zexcel_table_totals_function VALUE 'average'. "#EC NOTEXT + CONSTANTS builtinstyle_light7 TYPE zexcel_table_style VALUE 'TableStyleLight7'. "#EC NOTEXT + CONSTANTS totals_function_count TYPE zexcel_table_totals_function VALUE 'count'. "#EC NOTEXT + CONSTANTS builtinstyle_light8 TYPE zexcel_table_style VALUE 'TableStyleLight8'. "#EC NOTEXT + CONSTANTS totals_function_custom TYPE zexcel_table_totals_function VALUE 'custom'. "#EC NOTEXT + CONSTANTS builtinstyle_light9 TYPE zexcel_table_style VALUE 'TableStyleLight9'. "#EC NOTEXT + CONSTANTS totals_function_max TYPE zexcel_table_totals_function VALUE 'max'. "#EC NOTEXT + CONSTANTS builtinstyle_light10 TYPE zexcel_table_style VALUE 'TableStyleLight10'. "#EC NOTEXT + CONSTANTS totals_function_min TYPE zexcel_table_totals_function VALUE 'min'. "#EC NOTEXT + CONSTANTS builtinstyle_light11 TYPE zexcel_table_style VALUE 'TableStyleLight11'. "#EC NOTEXT + CONSTANTS totals_function_sum TYPE zexcel_table_totals_function VALUE 'sum'. "#EC NOTEXT + CONSTANTS builtinstyle_light12 TYPE zexcel_table_style VALUE 'TableStyleLight12'. "#EC NOTEXT + DATA fieldcat TYPE zexcel_t_fieldcatalog . + CONSTANTS builtinstyle_light13 TYPE zexcel_table_style VALUE 'TableStyleLight13'. "#EC NOTEXT + CONSTANTS builtinstyle_light14 TYPE zexcel_table_style VALUE 'TableStyleLight14'. "#EC NOTEXT + DATA settings TYPE zexcel_s_table_settings . + CONSTANTS builtinstyle_light15 TYPE zexcel_table_style VALUE 'TableStyleLight15'. "#EC NOTEXT + CONSTANTS builtinstyle_light16 TYPE zexcel_table_style VALUE 'TableStyleLight16'. "#EC NOTEXT + CONSTANTS builtinstyle_light17 TYPE zexcel_table_style VALUE 'TableStyleLight17'. "#EC NOTEXT + CONSTANTS builtinstyle_light18 TYPE zexcel_table_style VALUE 'TableStyleLight18'. "#EC NOTEXT + CONSTANTS builtinstyle_light19 TYPE zexcel_table_style VALUE 'TableStyleLight19'. "#EC NOTEXT + CONSTANTS builtinstyle_light20 TYPE zexcel_table_style VALUE 'TableStyleLight20'. "#EC NOTEXT + CONSTANTS builtinstyle_light21 TYPE zexcel_table_style VALUE 'TableStyleLight21'. "#EC NOTEXT + CONSTANTS builtinstyle_medium1 TYPE zexcel_table_style VALUE 'TableStyleMedium1'. "#EC NOTEXT + CONSTANTS builtinstyle_medium2 TYPE zexcel_table_style VALUE 'TableStyleMedium2'. "#EC NOTEXT + CONSTANTS builtinstyle_medium3 TYPE zexcel_table_style VALUE 'TableStyleMedium3'. "#EC NOTEXT + CONSTANTS builtinstyle_medium4 TYPE zexcel_table_style VALUE 'TableStyleMedium4'. "#EC NOTEXT + CONSTANTS builtinstyle_medium5 TYPE zexcel_table_style VALUE 'TableStyleMedium5'. "#EC NOTEXT + CONSTANTS builtinstyle_medium6 TYPE zexcel_table_style VALUE 'TableStyleMedium6'. "#EC NOTEXT + CONSTANTS builtinstyle_medium7 TYPE zexcel_table_style VALUE 'TableStyleMedium7'. "#EC NOTEXT + CONSTANTS builtinstyle_medium8 TYPE zexcel_table_style VALUE 'TableStyleMedium8'. "#EC NOTEXT + CONSTANTS builtinstyle_medium9 TYPE zexcel_table_style VALUE 'TableStyleMedium9'. "#EC NOTEXT + CONSTANTS builtinstyle_medium10 TYPE zexcel_table_style VALUE 'TableStyleMedium10'. "#EC NOTEXT + CONSTANTS builtinstyle_medium11 TYPE zexcel_table_style VALUE 'TableStyleMedium11'. "#EC NOTEXT + CONSTANTS builtinstyle_medium12 TYPE zexcel_table_style VALUE 'TableStyleMedium12'. "#EC NOTEXT + CONSTANTS builtinstyle_medium13 TYPE zexcel_table_style VALUE 'TableStyleMedium13'. "#EC NOTEXT + CONSTANTS builtinstyle_medium14 TYPE zexcel_table_style VALUE 'TableStyleMedium14'. "#EC NOTEXT + CONSTANTS builtinstyle_medium15 TYPE zexcel_table_style VALUE 'TableStyleMedium15'. "#EC NOTEXT + CONSTANTS builtinstyle_medium16 TYPE zexcel_table_style VALUE 'TableStyleMedium16'. "#EC NOTEXT + CONSTANTS builtinstyle_medium17 TYPE zexcel_table_style VALUE 'TableStyleMedium17'. "#EC NOTEXT + CONSTANTS builtinstyle_medium18 TYPE zexcel_table_style VALUE 'TableStyleMedium18'. "#EC NOTEXT + CONSTANTS builtinstyle_medium19 TYPE zexcel_table_style VALUE 'TableStyleMedium19'. "#EC NOTEXT + CONSTANTS builtinstyle_medium20 TYPE zexcel_table_style VALUE 'TableStyleMedium20'. "#EC NOTEXT + CONSTANTS builtinstyle_medium21 TYPE zexcel_table_style VALUE 'TableStyleMedium21'. "#EC NOTEXT + CONSTANTS builtinstyle_medium22 TYPE zexcel_table_style VALUE 'TableStyleMedium22'. "#EC NOTEXT + CONSTANTS builtinstyle_medium23 TYPE zexcel_table_style VALUE 'TableStyleMedium23'. "#EC NOTEXT + CONSTANTS builtinstyle_medium24 TYPE zexcel_table_style VALUE 'TableStyleMedium24'. "#EC NOTEXT + CONSTANTS builtinstyle_medium25 TYPE zexcel_table_style VALUE 'TableStyleMedium26'. "#EC NOTEXT + CONSTANTS builtinstyle_medium27 TYPE zexcel_table_style VALUE 'TableStyleMedium27'. "#EC NOTEXT + + METHODS get_totals_formula + IMPORTING + !ip_column TYPE clike + !ip_function TYPE zexcel_table_totals_function + RETURNING + VALUE(ep_formula) TYPE string + RAISING + zcx_excel . + METHODS has_totals + RETURNING + VALUE(ep_result) TYPE abap_bool . + METHODS set_data + IMPORTING + !ir_data TYPE STANDARD TABLE . + METHODS get_id + RETURNING + VALUE(ov_id) TYPE i . + METHODS set_id + IMPORTING + !iv_id TYPE i . + METHODS get_name + RETURNING + VALUE(ov_name) TYPE string . + METHODS get_reference + IMPORTING + !ip_include_totals_row TYPE abap_bool DEFAULT abap_true + RETURNING + VALUE(ov_reference) TYPE string + RAISING + zcx_excel . + METHODS get_bottom_row_integer + RETURNING + VALUE(ev_row) TYPE i . + METHODS get_right_column_integer + RETURNING + VALUE(ev_column) TYPE i + RAISING + zcx_excel . *"* protected components of class ZCL_EXCEL_TABLE *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_TABLE *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_TABLE *"* do not include other source files here!!! -protected section. -private section. + PROTECTED SECTION. + PRIVATE SECTION. - data ID type I . - data NAME type STRING . - data TABLE_DATA type ref to DATA . - data BUILTINSTYLE_MEDIUM28 type ZEXCEL_TABLE_STYLE value 'TableStyleMedium28'. "#EC NOTEXT . . . " . + DATA id TYPE i . + DATA name TYPE string . + DATA table_data TYPE REF TO data . + DATA builtinstyle_medium28 TYPE zexcel_table_style VALUE 'TableStyleMedium28'. "#EC NOTEXT . . . " . ENDCLASS. -CLASS ZCL_EXCEL_TABLE IMPLEMENTATION. +CLASS zcl_excel_table IMPLEMENTATION. -method GET_BOTTOM_ROW_INTEGER. - DATA: lv_table_lines TYPE i. - FIELD-SYMBOLS: TYPE STANDARD TABLE. + METHOD get_bottom_row_integer. + DATA: lv_table_lines TYPE i. + FIELD-SYMBOLS: TYPE STANDARD TABLE. - IF settings-bottom_right_row IS NOT INITIAL. + IF settings-bottom_right_row IS NOT INITIAL. * ev_row = zcl_excel_common=>convert_column2int( settings-bottom_right_row ). " del issue #246 - ev_row = settings-bottom_right_row . " ins issue #246 - EXIT. - ENDIF. + ev_row = settings-bottom_right_row . " ins issue #246 + EXIT. + ENDIF. - ASSIGN table_data->* TO . - DESCRIBE TABLE LINES lv_table_lines. - IF lv_table_lines = 0. - lv_table_lines = 1. "table needs at least 1 data row - ENDIF. + ASSIGN table_data->* TO . + DESCRIBE TABLE LINES lv_table_lines. + IF lv_table_lines = 0. + lv_table_lines = 1. "table needs at least 1 data row + ENDIF. - ev_row = settings-top_left_row + lv_table_lines. + ev_row = settings-top_left_row + lv_table_lines. - IF me->has_totals( ) = abap_true." ???? AND ip_include_totals_row = abap_true. - ADD 1 TO ev_row. - ENDIF. - endmethod. + IF me->has_totals( ) = abap_true." ???? AND ip_include_totals_row = abap_true. + ADD 1 TO ev_row. + ENDIF. + ENDMETHOD. -method GET_ID. - ov_id = id. - endmethod. + METHOD get_id. + ov_id = id. + ENDMETHOD. -method GET_NAME. + METHOD get_name. - IF me->name IS INITIAL. - me->name = zcl_excel_common=>number_to_excel_string( ip_value = me->id ). - CONCATENATE 'table' me->name INTO me->name. - ENDIF. + IF me->name IS INITIAL. + me->name = zcl_excel_common=>number_to_excel_string( ip_value = me->id ). + CONCATENATE 'table' me->name INTO me->name. + ENDIF. - ov_name = me->name. - endmethod. + ov_name = me->name. + ENDMETHOD. -method GET_REFERENCE. - DATA: lv_column TYPE zexcel_cell_column, - lv_table_lines TYPE i, - lv_right_column TYPE zexcel_cell_column_alpha, - ls_field_catalog TYPE zexcel_s_fieldcatalog, - lv_bottom_row TYPE zexcel_cell_row, - lv_top_row_string(10) TYPE c, - lv_bottom_row_string(10) TYPE c. + METHOD get_reference. + DATA: lv_column TYPE zexcel_cell_column, + lv_table_lines TYPE i, + lv_right_column TYPE zexcel_cell_column_alpha, + ls_field_catalog TYPE zexcel_s_fieldcatalog, + lv_bottom_row TYPE zexcel_cell_row, + lv_top_row_string(10) TYPE c, + lv_bottom_row_string(10) TYPE c. - FIELD-SYMBOLS: TYPE STANDARD TABLE. + FIELD-SYMBOLS: TYPE STANDARD TABLE. *column - lv_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). - lv_table_lines = 0. - LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. - ADD 1 TO lv_table_lines. - ENDLOOP. - lv_column = lv_column + lv_table_lines - 1. - lv_right_column = zcl_excel_common=>convert_column2alpha( lv_column ). + lv_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). + lv_table_lines = 0. + LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. + ADD 1 TO lv_table_lines. + ENDLOOP. + lv_column = lv_column + lv_table_lines - 1. + lv_right_column = zcl_excel_common=>convert_column2alpha( lv_column ). *row - ASSIGN table_data->* TO . - DESCRIBE TABLE LINES lv_table_lines. - IF lv_table_lines = 0. - lv_table_lines = 1. "table needs at least 1 data row - ENDIF. - lv_bottom_row = settings-top_left_row + lv_table_lines . + ASSIGN table_data->* TO . + DESCRIBE TABLE LINES lv_table_lines. + IF lv_table_lines = 0. + lv_table_lines = 1. "table needs at least 1 data row + ENDIF. + lv_bottom_row = settings-top_left_row + lv_table_lines . - IF me->has_totals( ) = abap_true AND ip_include_totals_row = abap_true. - ADD 1 TO lv_bottom_row. - ENDIF. + IF me->has_totals( ) = abap_true AND ip_include_totals_row = abap_true. + ADD 1 TO lv_bottom_row. + ENDIF. - lv_top_row_string = zcl_excel_common=>number_to_excel_string( settings-top_left_row ). - lv_bottom_row_string = zcl_excel_common=>number_to_excel_string( lv_bottom_row ). + lv_top_row_string = zcl_excel_common=>number_to_excel_string( settings-top_left_row ). + lv_bottom_row_string = zcl_excel_common=>number_to_excel_string( lv_bottom_row ). - CONCATENATE settings-top_left_column lv_top_row_string - ':' - lv_right_column lv_bottom_row_string INTO ov_reference. + CONCATENATE settings-top_left_column lv_top_row_string + ':' + lv_right_column lv_bottom_row_string INTO ov_reference. - endmethod. + ENDMETHOD. -method GET_RIGHT_COLUMN_INTEGER. - DATA: ls_field_catalog TYPE zexcel_s_fieldcatalog. + METHOD get_right_column_integer. + DATA: ls_field_catalog TYPE zexcel_s_fieldcatalog. - IF settings-bottom_right_column IS NOT INITIAL. - ev_column = zcl_excel_common=>convert_column2int( settings-bottom_right_column ). - EXIT. - ENDIF. + IF settings-bottom_right_column IS NOT INITIAL. + ev_column = zcl_excel_common=>convert_column2int( settings-bottom_right_column ). + EXIT. + ENDIF. - ev_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). - LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. - ADD 1 TO ev_column. - ENDLOOP. + ev_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). + LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. + ADD 1 TO ev_column. + ENDLOOP. - endmethod. + ENDMETHOD. -method GET_TOTALS_FORMULA. - CONSTANTS: lc_function_id_sum TYPE string VALUE '109', - lc_function_id_min TYPE string VALUE '105', - lc_function_id_max TYPE string VALUE '104', - lc_function_id_count TYPE string VALUE '103', - lc_function_id_average TYPE string VALUE '101'. + METHOD get_totals_formula. + CONSTANTS: lc_function_id_sum TYPE string VALUE '109', + lc_function_id_min TYPE string VALUE '105', + lc_function_id_max TYPE string VALUE '104', + lc_function_id_count TYPE string VALUE '103', + lc_function_id_average TYPE string VALUE '101'. - DATA: lv_function_id TYPE string. + DATA: lv_function_id TYPE string. - CASE ip_function. - WHEN zcl_excel_table=>totals_function_sum. - lv_function_id = lc_function_id_sum. + CASE ip_function. + WHEN zcl_excel_table=>totals_function_sum. + lv_function_id = lc_function_id_sum. - WHEN zcl_excel_table=>totals_function_min. - lv_function_id = lc_function_id_min. + WHEN zcl_excel_table=>totals_function_min. + lv_function_id = lc_function_id_min. - WHEN zcl_excel_table=>totals_function_max. - lv_function_id = lc_function_id_max. + WHEN zcl_excel_table=>totals_function_max. + lv_function_id = lc_function_id_max. - WHEN zcl_excel_table=>totals_function_count. - lv_function_id = lc_function_id_count. + WHEN zcl_excel_table=>totals_function_count. + lv_function_id = lc_function_id_count. - WHEN zcl_excel_table=>totals_function_average. - lv_function_id = lc_function_id_average. + WHEN zcl_excel_table=>totals_function_average. + lv_function_id = lc_function_id_average. - WHEN zcl_excel_table=>totals_function_custom. " issue #292 - RETURN. + WHEN zcl_excel_table=>totals_function_custom. " issue #292 + RETURN. - WHEN OTHERS. - zcx_excel=>raise_text( 'Invalid totals formula. See ZCL_ for possible values' ). - ENDCASE. + WHEN OTHERS. + zcx_excel=>raise_text( 'Invalid totals formula. See ZCL_ for possible values' ). + ENDCASE. - CONCATENATE 'SUBTOTAL(' lv_function_id ',[' ip_column '])' INTO ep_formula. - endmethod. + CONCATENATE 'SUBTOTAL(' lv_function_id ',[' ip_column '])' INTO ep_formula. + ENDMETHOD. -method HAS_TOTALS. - DATA: ls_field_catalog TYPE zexcel_s_fieldcatalog. + METHOD has_totals. + DATA: ls_field_catalog TYPE zexcel_s_fieldcatalog. - ep_result = abap_false. + ep_result = abap_false. - LOOP AT fieldcat INTO ls_field_catalog. - IF ls_field_catalog-totals_function IS NOT INITIAL. - ep_result = abap_true. - EXIT. - ENDIF. - ENDLOOP. + LOOP AT fieldcat INTO ls_field_catalog. + IF ls_field_catalog-totals_function IS NOT INITIAL. + ep_result = abap_true. + EXIT. + ENDIF. + ENDLOOP. - endmethod. + ENDMETHOD. -METHOD set_data. + METHOD set_data. - DATA lr_temp TYPE REF TO data. + DATA lr_temp TYPE REF TO data. - FIELD-SYMBOLS: TYPE ANY TABLE, - TYPE ANY TABLE. + FIELD-SYMBOLS: TYPE ANY TABLE, + TYPE ANY TABLE. - GET REFERENCE OF ir_data INTO lr_temp. - ASSIGN lr_temp->* TO . - CREATE DATA table_data LIKE . - ASSIGN me->table_data->* TO . - = . + GET REFERENCE OF ir_data INTO lr_temp. + ASSIGN lr_temp->* TO . + CREATE DATA table_data LIKE . + ASSIGN me->table_data->* TO . + = . -ENDMETHOD. + ENDMETHOD. -method SET_ID. - id = iv_id. - endmethod. + METHOD set_id. + id = iv_id. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_theme.clas.abap b/src/zcl_excel_theme.clas.abap index b8ce38338..278fa03a7 100644 --- a/src/zcl_excel_theme.clas.abap +++ b/src/zcl_excel_theme.clas.abap @@ -1,206 +1,206 @@ -class ZCL_EXCEL_THEME definition - public - create public . - -public section. - - constants C_THEME_ELEMENTS type STRING value 'themeElements'. "#EC NOTEXT - constants C_THEME_OBJECT_DEF type STRING value 'objectDefaults'. "#EC NOTEXT - constants C_THEME_EXTRA_COLOR type STRING value 'extraClrSchemeLst'. "#EC NOTEXT - constants C_THEME_EXTLST type STRING value 'extLst'. "#EC NOTEXT - constants C_THEME type STRING value 'theme'. "#EC NOTEXT - constants C_THEME_NAME type STRING value 'name'. "#EC NOTEXT - constants C_THEME_XMLNS type STRING value 'xmlns:a'. "#EC NOTEXT - constants C_THEME_PREFIX type STRING value 'a'. "#EC NOTEXT - constants C_THEME_PREFIX_WRITE type STRING value 'a:'. "#EC NOTEXT - constants C_THEME_XMLNS_VAL type STRING value 'http://schemas.openxmlformats.org/drawingml/2006/main'. "#EC NOTEXT - - methods CONSTRUCTOR . - methods READ_THEME - importing - value(IO_THEME_XML) type ref to IF_IXML_DOCUMENT . - methods WRITE_THEME - returning - value(RV_XSTRING) type XSTRING . - methods SET_COLOR - importing - value(IV_TYPE) type STRING - value(IV_SRGB) type ZCL_EXCEL_THEME_COLOR_SCHEME=>T_SRGB optional - value(IV_SYSCOLORNAME) type STRING optional - value(IV_SYSCOLORLAST) type ZCL_EXCEL_THEME_COLOR_SCHEME=>T_SRGB optional . - methods SET_COLOR_SCHEME_NAME - importing - value(IV_NAME) type STRING . - methods SET_FONT - importing - value(IV_TYPE) type STRING - value(IV_SCRIPT) type STRING - value(IV_TYPEFACE) type STRING . - methods SET_LATIN_FONT - importing - value(IV_TYPE) type STRING - value(IV_TYPEFACE) type STRING - value(IV_PANOSE) type STRING optional - value(IV_PITCHFAMILY) type STRING optional - value(IV_CHARSET) type STRING optional . - methods SET_EA_FONT - importing - value(IV_TYPE) type STRING - value(IV_TYPEFACE) type STRING - value(IV_PANOSE) type STRING optional - value(IV_PITCHFAMILY) type STRING optional - value(IV_CHARSET) type STRING optional . - methods SET_CS_FONT - importing - value(IV_TYPE) type STRING - value(IV_TYPEFACE) type STRING - value(IV_PANOSE) type STRING optional - value(IV_PITCHFAMILY) type STRING optional - value(IV_CHARSET) type STRING optional . - methods SET_FONT_SCHEME_NAME - importing - value(IV_NAME) type STRING . - methods SET_THEME_NAME - importing - value(IV_NAME) type STRING . -protected section. - - data ELEMENTS type ref to ZCL_EXCEL_THEME_ELEMENTS . - data OBJECTDEFAULTS type ref to ZCL_EXCEL_THEME_OBJECTDEFAULTS . - data EXTCLRSCHEMELST type ref to ZCL_EXCEL_THEME_ECLRSCHEMELST . - data EXTLST type ref to ZCL_EXCEL_THEME_EXTLST . -private section. - - data THEME_CHANGED type ABAP_BOOL . - data THEME_READ type ABAP_BOOL . - data NAME type STRING . - data XMLS_A type STRING . +CLASS zcl_excel_theme DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + CONSTANTS c_theme_elements TYPE string VALUE 'themeElements'. "#EC NOTEXT + CONSTANTS c_theme_object_def TYPE string VALUE 'objectDefaults'. "#EC NOTEXT + CONSTANTS c_theme_extra_color TYPE string VALUE 'extraClrSchemeLst'. "#EC NOTEXT + CONSTANTS c_theme_extlst TYPE string VALUE 'extLst'. "#EC NOTEXT + CONSTANTS c_theme TYPE string VALUE 'theme'. "#EC NOTEXT + CONSTANTS c_theme_name TYPE string VALUE 'name'. "#EC NOTEXT + CONSTANTS c_theme_xmlns TYPE string VALUE 'xmlns:a'. "#EC NOTEXT + CONSTANTS c_theme_prefix TYPE string VALUE 'a'. "#EC NOTEXT + CONSTANTS c_theme_prefix_write TYPE string VALUE 'a:'. "#EC NOTEXT + CONSTANTS c_theme_xmlns_val TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main'. "#EC NOTEXT + + METHODS constructor . + METHODS read_theme + IMPORTING + VALUE(io_theme_xml) TYPE REF TO if_ixml_document . + METHODS write_theme + RETURNING + VALUE(rv_xstring) TYPE xstring . + METHODS set_color + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_srgb) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL + VALUE(iv_syscolorname) TYPE string OPTIONAL + VALUE(iv_syscolorlast) TYPE zcl_excel_theme_color_scheme=>t_srgb OPTIONAL . + METHODS set_color_scheme_name + IMPORTING + VALUE(iv_name) TYPE string . + METHODS set_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_script) TYPE string + VALUE(iv_typeface) TYPE string . + METHODS set_latin_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_typeface) TYPE string + VALUE(iv_panose) TYPE string OPTIONAL + VALUE(iv_pitchfamily) TYPE string OPTIONAL + VALUE(iv_charset) TYPE string OPTIONAL . + METHODS set_ea_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_typeface) TYPE string + VALUE(iv_panose) TYPE string OPTIONAL + VALUE(iv_pitchfamily) TYPE string OPTIONAL + VALUE(iv_charset) TYPE string OPTIONAL . + METHODS set_cs_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_typeface) TYPE string + VALUE(iv_panose) TYPE string OPTIONAL + VALUE(iv_pitchfamily) TYPE string OPTIONAL + VALUE(iv_charset) TYPE string OPTIONAL . + METHODS set_font_scheme_name + IMPORTING + VALUE(iv_name) TYPE string . + METHODS set_theme_name + IMPORTING + VALUE(iv_name) TYPE string . + PROTECTED SECTION. + + DATA elements TYPE REF TO zcl_excel_theme_elements . + DATA objectdefaults TYPE REF TO zcl_excel_theme_objectdefaults . + DATA extclrschemelst TYPE REF TO zcl_excel_theme_eclrschemelst . + DATA extlst TYPE REF TO zcl_excel_theme_extlst . + PRIVATE SECTION. + + DATA theme_changed TYPE abap_bool . + DATA theme_read TYPE abap_bool . + DATA name TYPE string . + DATA xmls_a TYPE string . ENDCLASS. -CLASS ZCL_EXCEL_THEME IMPLEMENTATION. +CLASS zcl_excel_theme IMPLEMENTATION. -method constructor. - create object elements. - create object objectdefaults. - create object extclrschemelst. - create object extlst. - endmethod. "class_constructor + METHOD constructor. + CREATE OBJECT elements. + CREATE OBJECT objectdefaults. + CREATE OBJECT extclrschemelst. + CREATE OBJECT extlst. + ENDMETHOD. "class_constructor -method read_theme. - data: lo_node_theme type ref to if_ixml_element. - data: lo_theme_children type ref to if_ixml_node_list. - data: lo_theme_iterator type ref to if_ixml_node_iterator. - data: lo_theme_element type ref to if_ixml_element. - check io_theme_xml is not initial. + METHOD read_theme. + DATA: lo_node_theme TYPE REF TO if_ixml_element. + DATA: lo_theme_children TYPE REF TO if_ixml_node_list. + DATA: lo_theme_iterator TYPE REF TO if_ixml_node_iterator. + DATA: lo_theme_element TYPE REF TO if_ixml_element. + CHECK io_theme_xml IS NOT INITIAL. lo_node_theme = io_theme_xml->get_root_element( )." find_from_name( name = c_theme ). - if lo_node_theme is bound. + IF lo_node_theme IS BOUND. name = lo_node_theme->get_attribute( name = c_theme_name ). xmls_a = lo_node_theme->get_attribute( name = c_theme_xmlns ). lo_theme_children = lo_node_theme->get_children( ). lo_theme_iterator = lo_theme_children->create_iterator( ). lo_theme_element ?= lo_theme_iterator->get_next( ). - while lo_theme_element is bound. - case lo_theme_element->get_name( ). - when c_theme_elements. + WHILE lo_theme_element IS BOUND. + CASE lo_theme_element->get_name( ). + WHEN c_theme_elements. elements->load( io_elements = lo_theme_element ). - when c_theme_object_def. + WHEN c_theme_object_def. objectdefaults->load( io_object_def = lo_theme_element ). - when c_theme_extra_color. + WHEN c_theme_extra_color. extclrschemelst->load( io_extra_color = lo_theme_element ). - when c_theme_extlst. + WHEN c_theme_extlst. extlst->load( io_extlst = lo_theme_element ). - endcase. + ENDCASE. lo_theme_element ?= lo_theme_iterator->get_next( ). - endwhile. - endif. - endmethod. "read_theme + ENDWHILE. + ENDIF. + ENDMETHOD. "read_theme -method set_color. + METHOD set_color. elements->color_scheme->set_color( - exporting + EXPORTING iv_type = iv_type iv_srgb = iv_srgb iv_syscolorname = iv_syscolorname iv_syscolorlast = iv_syscolorlast ). - endmethod. "set_color + ENDMETHOD. "set_color -method set_color_scheme_name. + METHOD set_color_scheme_name. elements->color_scheme->set_name( iv_name = iv_name ). - endmethod. "set_color_scheme_name + ENDMETHOD. "set_color_scheme_name -method set_cs_font. + METHOD set_cs_font. elements->font_scheme->modify_cs_font( - exporting + EXPORTING iv_type = iv_type iv_typeface = iv_typeface iv_panose = iv_panose iv_pitchfamily = iv_pitchfamily iv_charset = iv_charset ). - endmethod. "set_cs_font + ENDMETHOD. "set_cs_font -method set_ea_font. + METHOD set_ea_font. elements->font_scheme->modify_ea_font( - exporting + EXPORTING iv_type = iv_type iv_typeface = iv_typeface iv_panose = iv_panose iv_pitchfamily = iv_pitchfamily iv_charset = iv_charset ). - endmethod. "set_ea_font + ENDMETHOD. "set_ea_font -method set_font. + METHOD set_font. elements->font_scheme->modify_font( - exporting + EXPORTING iv_type = iv_type iv_script = iv_script iv_typeface = iv_typeface ). - endmethod. "set_font + ENDMETHOD. "set_font -method set_font_scheme_name. + METHOD set_font_scheme_name. elements->font_scheme->set_name( iv_name = iv_name ). - endmethod. "set_font_scheme_name + ENDMETHOD. "set_font_scheme_name -method set_latin_font. + METHOD set_latin_font. elements->font_scheme->modify_latin_font( - exporting + EXPORTING iv_type = iv_type iv_typeface = iv_typeface iv_panose = iv_panose iv_pitchfamily = iv_pitchfamily iv_charset = iv_charset ). - endmethod. "set_latin_font + ENDMETHOD. "set_latin_font -method set_theme_name. + METHOD set_theme_name. name = iv_name. - endmethod. + ENDMETHOD. -method write_theme. - data: lo_ixml type ref to if_ixml, - lo_element_root type ref to if_ixml_element, - lo_encoding type ref to if_ixml_encoding. - data: lo_streamfactory TYPE REF TO if_ixml_stream_factory. - data: lo_ostream TYPE REF TO if_ixml_ostream. - data: lo_renderer TYPE REF TO if_ixml_renderer. - data: lo_document type ref to if_ixml_document. + METHOD write_theme. + DATA: lo_ixml TYPE REF TO if_ixml, + lo_element_root TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding. + DATA: lo_streamfactory TYPE REF TO if_ixml_stream_factory. + DATA: lo_ostream TYPE REF TO if_ixml_ostream. + DATA: lo_renderer TYPE REF TO if_ixml_renderer. + DATA: lo_document TYPE REF TO if_ixml_document. lo_ixml = cl_ixml=>create( ). lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian @@ -229,5 +229,5 @@ method write_theme. lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). lo_renderer->render( ). - endmethod. "write_theme + ENDMETHOD. "write_theme ENDCLASS. diff --git a/src/zcl_excel_theme_color_scheme.clas.abap b/src/zcl_excel_theme_color_scheme.clas.abap index ef56165b0..ade6ee91a 100644 --- a/src/zcl_excel_theme_color_scheme.clas.abap +++ b/src/zcl_excel_theme_color_scheme.clas.abap @@ -1,100 +1,100 @@ -class ZCL_EXCEL_THEME_COLOR_SCHEME definition - public - final - create public - - global friends ZCL_EXCEL_THEME - ZCL_EXCEL_THEME_ELEMENTS . - -public section. - - types T_SRGB type STRING . - types: - begin of t_syscolor, - val type string, - lastclr type t_srgb, - end of t_syscolor . - types: - begin of t_color, - srgb type t_srgb, - syscolor type t_syscolor, - end of t_color . - - constants C_DARK1 type STRING value 'dk1'. "#EC NOTEXT - constants C_DARK2 type STRING value 'dk2'. "#EC NOTEXT - constants C_LIGHT1 type STRING value 'lt1'. "#EC NOTEXT - constants C_LIGHT2 type STRING value 'lt2'. "#EC NOTEXT - constants C_ACCENT1 type STRING value 'accent1'. "#EC NOTEXT - constants C_ACCENT2 type STRING value 'accent2'. "#EC NOTEXT - constants C_ACCENT3 type STRING value 'accent3'. "#EC NOTEXT - constants C_ACCENT4 type STRING value 'accent4'. "#EC NOTEXT - constants C_ACCENT5 type STRING value 'accent5'. "#EC NOTEXT - constants C_ACCENT6 type STRING value 'accent6'. "#EC NOTEXT - constants C_HLINK type STRING value 'hlink'. "#EC NOTEXT - constants C_FOLHLINK type STRING value 'folHlink'. "#EC NOTEXT - constants C_SYSCOLOR type STRING value 'sysClr'. "#EC NOTEXT - constants C_SRGBCOLOR type STRING value 'srgbClr'. "#EC NOTEXT - constants C_VAL type STRING value 'val'. "#EC NOTEXT - constants C_LASTCLR type STRING value 'lastClr'. "#EC NOTEXT - constants C_NAME type STRING value 'name'. "#EC NOTEXT - constants C_SCHEME type STRING value 'clrScheme'. "#EC NOTEXT - - methods LOAD - importing - !IO_COLOR_SCHEME type ref to IF_IXML_ELEMENT . - methods SET_COLOR - importing - value(IV_TYPE) type STRING - value(IV_SRGB) type T_SRGB optional - value(IV_SYSCOLORNAME) type STRING optional - value(IV_SYSCOLORLAST) type T_SRGB . - methods BUILD_XML - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT . - methods CONSTRUCTOR . - methods SET_NAME - importing - value(IV_NAME) type STRING . -protected section. - - data NAME type STRING . - data DARK1 type T_COLOR . - data DARK2 type T_COLOR . - data LIGHT1 type T_COLOR . - data LIGHT2 type T_COLOR . - data ACCENT1 type T_COLOR . - data ACCENT2 type T_COLOR . - data ACCENT3 type T_COLOR . - data ACCENT4 type T_COLOR . - data ACCENT5 type T_COLOR . - data ACCENT6 type T_COLOR . - data HLINK type T_COLOR . - data FOLHLINK type T_COLOR . -private section. - - methods GET_COLOR - importing - !IO_OBJECT type ref to IF_IXML_ELEMENT - returning - value(RV_COLOR) type T_COLOR . - methods SET_DEFAULTS . +CLASS zcl_excel_theme_color_scheme DEFINITION + PUBLIC + FINAL + CREATE PUBLIC + + GLOBAL FRIENDS zcl_excel_theme + zcl_excel_theme_elements . + + PUBLIC SECTION. + + TYPES t_srgb TYPE string . + TYPES: + BEGIN OF t_syscolor, + val TYPE string, + lastclr TYPE t_srgb, + END OF t_syscolor . + TYPES: + BEGIN OF t_color, + srgb TYPE t_srgb, + syscolor TYPE t_syscolor, + END OF t_color . + + CONSTANTS c_dark1 TYPE string VALUE 'dk1'. "#EC NOTEXT + CONSTANTS c_dark2 TYPE string VALUE 'dk2'. "#EC NOTEXT + CONSTANTS c_light1 TYPE string VALUE 'lt1'. "#EC NOTEXT + CONSTANTS c_light2 TYPE string VALUE 'lt2'. "#EC NOTEXT + CONSTANTS c_accent1 TYPE string VALUE 'accent1'. "#EC NOTEXT + CONSTANTS c_accent2 TYPE string VALUE 'accent2'. "#EC NOTEXT + CONSTANTS c_accent3 TYPE string VALUE 'accent3'. "#EC NOTEXT + CONSTANTS c_accent4 TYPE string VALUE 'accent4'. "#EC NOTEXT + CONSTANTS c_accent5 TYPE string VALUE 'accent5'. "#EC NOTEXT + CONSTANTS c_accent6 TYPE string VALUE 'accent6'. "#EC NOTEXT + CONSTANTS c_hlink TYPE string VALUE 'hlink'. "#EC NOTEXT + CONSTANTS c_folhlink TYPE string VALUE 'folHlink'. "#EC NOTEXT + CONSTANTS c_syscolor TYPE string VALUE 'sysClr'. "#EC NOTEXT + CONSTANTS c_srgbcolor TYPE string VALUE 'srgbClr'. "#EC NOTEXT + CONSTANTS c_val TYPE string VALUE 'val'. "#EC NOTEXT + CONSTANTS c_lastclr TYPE string VALUE 'lastClr'. "#EC NOTEXT + CONSTANTS c_name TYPE string VALUE 'name'. "#EC NOTEXT + CONSTANTS c_scheme TYPE string VALUE 'clrScheme'. "#EC NOTEXT + + METHODS load + IMPORTING + !io_color_scheme TYPE REF TO if_ixml_element . + METHODS set_color + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_srgb) TYPE t_srgb OPTIONAL + VALUE(iv_syscolorname) TYPE string OPTIONAL + VALUE(iv_syscolorlast) TYPE t_srgb . + METHODS build_xml + IMPORTING + !io_document TYPE REF TO if_ixml_document . + METHODS constructor . + METHODS set_name + IMPORTING + VALUE(iv_name) TYPE string . + PROTECTED SECTION. + + DATA name TYPE string . + DATA dark1 TYPE t_color . + DATA dark2 TYPE t_color . + DATA light1 TYPE t_color . + DATA light2 TYPE t_color . + DATA accent1 TYPE t_color . + DATA accent2 TYPE t_color . + DATA accent3 TYPE t_color . + DATA accent4 TYPE t_color . + DATA accent5 TYPE t_color . + DATA accent6 TYPE t_color . + DATA hlink TYPE t_color . + DATA folhlink TYPE t_color . + PRIVATE SECTION. + + METHODS get_color + IMPORTING + !io_object TYPE REF TO if_ixml_element + RETURNING + VALUE(rv_color) TYPE t_color . + METHODS set_defaults . ENDCLASS. -CLASS ZCL_EXCEL_THEME_COLOR_SCHEME IMPLEMENTATION. +CLASS zcl_excel_theme_color_scheme IMPLEMENTATION. -method build_xml. - data: lo_scheme_element type ref to if_ixml_element. - data: lo_color type ref to if_ixml_element. - data: lo_syscolor type ref to if_ixml_element. - data: lo_srgb type ref to if_ixml_element. - data: lo_elements type ref to if_ixml_element. + METHOD build_xml. + DATA: lo_scheme_element TYPE REF TO if_ixml_element. + DATA: lo_color TYPE REF TO if_ixml_element. + DATA: lo_syscolor TYPE REF TO if_ixml_element. + DATA: lo_srgb TYPE REF TO if_ixml_element. + DATA: lo_elements TYPE REF TO if_ixml_element. - check io_document is bound. + CHECK io_document IS BOUND. lo_elements ?= io_document->find_from_name_ns( name = zcl_excel_theme=>c_theme_elements ). - if lo_elements is bound. + IF lo_elements IS BOUND. lo_scheme_element ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = zcl_excel_theme_elements=>c_color_scheme parent = lo_elements ). @@ -104,321 +104,321 @@ method build_xml. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_dark1 parent = lo_scheme_element ). - if lo_color is bound. - if dark1-srgb is not initial. + IF lo_color IS BOUND. + IF dark1-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = dark1-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = dark1-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = dark1-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_light1 parent = lo_scheme_element ). - if lo_color is bound. - if light1-srgb is not initial. + IF lo_color IS BOUND. + IF light1-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = light1-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = light1-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = light1-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_dark2 parent = lo_scheme_element ). - if lo_color is bound. - if dark2-srgb is not initial. + IF lo_color IS BOUND. + IF dark2-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = dark2-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = dark2-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = dark2-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_light2 parent = lo_scheme_element ). - if lo_color is bound. - if light2-srgb is not initial. + IF lo_color IS BOUND. + IF light2-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = light2-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = light2-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = light2-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_accent1 parent = lo_scheme_element ). - if lo_color is bound. - if accent1-srgb is not initial. + IF lo_color IS BOUND. + IF accent1-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = accent1-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = accent1-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = accent1-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_accent2 parent = lo_scheme_element ). - if lo_color is bound. - if accent2-srgb is not initial. + IF lo_color IS BOUND. + IF accent2-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = accent2-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = accent2-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = accent2-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_accent3 parent = lo_scheme_element ). - if lo_color is bound. - if accent3-srgb is not initial. + IF lo_color IS BOUND. + IF accent3-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = accent3-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = accent3-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = accent3-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_accent4 parent = lo_scheme_element ). - if lo_color is bound. - if accent4-srgb is not initial. + IF lo_color IS BOUND. + IF accent4-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = accent4-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = accent4-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = accent4-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_accent5 parent = lo_scheme_element ). - if lo_color is bound. - if accent5-srgb is not initial. + IF lo_color IS BOUND. + IF accent5-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = accent5-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = accent5-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = accent5-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_accent6 parent = lo_scheme_element ). - if lo_color is bound. - if accent6-srgb is not initial. + IF lo_color IS BOUND. + IF accent6-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = accent6-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = accent6-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = accent6-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_hlink parent = lo_scheme_element ). - if lo_color is bound. - if hlink-srgb is not initial. + IF lo_color IS BOUND. + IF hlink-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = hlink-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = hlink-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = hlink-syscolor-lastclr ). - endif. - clear: lo_color, lo_srgb, lo_syscolor. - endif. + ENDIF. + CLEAR: lo_color, lo_srgb, lo_syscolor. + ENDIF. lo_color ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_folhlink parent = lo_scheme_element ). - if lo_color is bound. - if folhlink-srgb is not initial. + IF lo_color IS BOUND. + IF folhlink-srgb IS NOT INITIAL. lo_srgb ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_srgbcolor parent = lo_color ). lo_srgb->set_attribute( name = c_val value = folhlink-srgb ). - else. + ELSE. lo_syscolor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_syscolor parent = lo_color ). lo_syscolor->set_attribute( name = c_val value = folhlink-syscolor-val ). lo_syscolor->set_attribute( name = c_lastclr value = folhlink-syscolor-lastclr ). - endif. - endif. + ENDIF. + ENDIF. - endif. - endmethod. "build_xml + ENDIF. + ENDMETHOD. "build_xml -method constructor. + METHOD constructor. set_defaults( ). - endmethod. "constructor + ENDMETHOD. "constructor -method get_color. - data: lo_color_children type ref to if_ixml_node_list. - data: lo_color_iterator type ref to if_ixml_node_iterator. - data: lo_color_element type ref to if_ixml_element. - check io_object is not initial. + METHOD get_color. + DATA: lo_color_children TYPE REF TO if_ixml_node_list. + DATA: lo_color_iterator TYPE REF TO if_ixml_node_iterator. + DATA: lo_color_element TYPE REF TO if_ixml_element. + CHECK io_object IS NOT INITIAL. lo_color_children = io_object->get_children( ). lo_color_iterator = lo_color_children->create_iterator( ). lo_color_element ?= lo_color_iterator->get_next( ). - if lo_color_element is bound. - case lo_color_element->get_name( ). - when c_srgbcolor. + IF lo_color_element IS BOUND. + CASE lo_color_element->get_name( ). + WHEN c_srgbcolor. rv_color-srgb = lo_color_element->get_attribute( name = c_val ). - when c_syscolor. + WHEN c_syscolor. rv_color-syscolor-val = lo_color_element->get_attribute( name = c_val ). rv_color-syscolor-lastclr = lo_color_element->get_attribute( name = c_lastclr ). - endcase. - endif. - endmethod. "get_color + ENDCASE. + ENDIF. + ENDMETHOD. "get_color -method load. - data: lo_scheme_children type ref to if_ixml_node_list. - data: lo_scheme_iterator type ref to if_ixml_node_iterator. - data: lo_scheme_element type ref to if_ixml_element. - check io_color_scheme is not initial. + METHOD load. + DATA: lo_scheme_children TYPE REF TO if_ixml_node_list. + DATA: lo_scheme_iterator TYPE REF TO if_ixml_node_iterator. + DATA: lo_scheme_element TYPE REF TO if_ixml_element. + CHECK io_color_scheme IS NOT INITIAL. name = io_color_scheme->get_attribute( name = c_name ). lo_scheme_children = io_color_scheme->get_children( ). lo_scheme_iterator = lo_scheme_children->create_iterator( ). lo_scheme_element ?= lo_scheme_iterator->get_next( ). - while lo_scheme_element is bound. - case lo_scheme_element->get_name( ). - when c_dark1. + WHILE lo_scheme_element IS BOUND. + CASE lo_scheme_element->get_name( ). + WHEN c_dark1. dark1 = me->get_color( lo_scheme_element ). - when c_dark2. + WHEN c_dark2. dark2 = me->get_color( lo_scheme_element ). - when c_light1. + WHEN c_light1. light1 = me->get_color( lo_scheme_element ). - when c_light2. + WHEN c_light2. light2 = me->get_color( lo_scheme_element ). - when c_accent1. + WHEN c_accent1. accent1 = me->get_color( lo_scheme_element ). - when c_accent2. + WHEN c_accent2. accent2 = me->get_color( lo_scheme_element ). - when c_accent3. + WHEN c_accent3. accent3 = me->get_color( lo_scheme_element ). - when c_accent4. + WHEN c_accent4. accent4 = me->get_color( lo_scheme_element ). - when c_accent5. + WHEN c_accent5. accent5 = me->get_color( lo_scheme_element ). - when c_accent6. + WHEN c_accent6. accent6 = me->get_color( lo_scheme_element ). - when c_hlink. + WHEN c_hlink. hlink = me->get_color( lo_scheme_element ). - when c_folhlink. + WHEN c_folhlink. folhlink = me->get_color( lo_scheme_element ). - endcase. + ENDCASE. lo_scheme_element ?= lo_scheme_iterator->get_next( ). - endwhile. - endmethod. "load - - -method set_color. - field-symbols: type t_color. - check iv_type is not initial. - check iv_srgb is not initial or iv_syscolorname is not initial. - case iv_type. - when c_dark1. - assign dark1 to . - when c_dark2. - assign dark2 to . - when c_light1. - assign light1 to . - when c_light2. - assign light2 to . - when c_accent1. - assign accent1 to . - when c_accent2. - assign accent2 to . - when c_accent3. - assign accent3 to . - when c_accent4. - assign accent4 to . - when c_accent5. - assign accent5 to . - when c_accent6. - assign accent6 to . - when c_hlink. - assign hlink to . - when c_folhlink. - assign folhlink to . - endcase. - check is assigned. - clear . - if iv_srgb is not initial. + ENDWHILE. + ENDMETHOD. "load + + + METHOD set_color. + FIELD-SYMBOLS: TYPE t_color. + CHECK iv_type IS NOT INITIAL. + CHECK iv_srgb IS NOT INITIAL OR iv_syscolorname IS NOT INITIAL. + CASE iv_type. + WHEN c_dark1. + ASSIGN dark1 TO . + WHEN c_dark2. + ASSIGN dark2 TO . + WHEN c_light1. + ASSIGN light1 TO . + WHEN c_light2. + ASSIGN light2 TO . + WHEN c_accent1. + ASSIGN accent1 TO . + WHEN c_accent2. + ASSIGN accent2 TO . + WHEN c_accent3. + ASSIGN accent3 TO . + WHEN c_accent4. + ASSIGN accent4 TO . + WHEN c_accent5. + ASSIGN accent5 TO . + WHEN c_accent6. + ASSIGN accent6 TO . + WHEN c_hlink. + ASSIGN hlink TO . + WHEN c_folhlink. + ASSIGN folhlink TO . + ENDCASE. + CHECK IS ASSIGNED. + CLEAR . + IF iv_srgb IS NOT INITIAL. -srgb = iv_srgb. - else. + ELSE. -syscolor-val = iv_syscolorname. - if iv_syscolorlast is not initial. + IF iv_syscolorlast IS NOT INITIAL. -syscolor-lastclr = iv_syscolorlast. - else. + ELSE. -syscolor-lastclr = '000000'. - endif. - endif. - endmethod. "set_color + ENDIF. + ENDIF. + ENDMETHOD. "set_color -method set_defaults. + METHOD set_defaults. name = 'Office'. dark1-syscolor-val = 'windowText'. dark1-syscolor-lastclr = '000000'. @@ -434,14 +434,14 @@ method set_defaults. accent6-srgb = '70AD47'. hlink-srgb = '0563C1'. folhlink-srgb = '954F72'. - endmethod. "set_defaults + ENDMETHOD. "set_defaults -method set_name. - if strlen( iv_name ) > 50. + METHOD set_name. + IF strlen( iv_name ) > 50. name = iv_name(50). - else. + ELSE. name = iv_name. - endif. - endmethod. "set_name + ENDIF. + ENDMETHOD. "set_name ENDCLASS. diff --git a/src/zcl_excel_theme_eclrschemelst.clas.abap b/src/zcl_excel_theme_eclrschemelst.clas.abap index 5cadcc02b..2fc41e13a 100644 --- a/src/zcl_excel_theme_eclrschemelst.clas.abap +++ b/src/zcl_excel_theme_eclrschemelst.clas.abap @@ -1,47 +1,47 @@ -class ZCL_EXCEL_THEME_ECLRSCHEMELST definition - public - final - create public . - -public section. - - methods LOAD - importing - !IO_EXTRA_COLOR type ref to IF_IXML_ELEMENT . - methods BUILD_XML - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT . -protected section. -private section. - - data EXTRACOLOR type ref to IF_IXML_ELEMENT . +CLASS zcl_excel_theme_eclrschemelst DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS load + IMPORTING + !io_extra_color TYPE REF TO if_ixml_element . + METHODS build_xml + IMPORTING + !io_document TYPE REF TO if_ixml_document . + PROTECTED SECTION. + PRIVATE SECTION. + + DATA extracolor TYPE REF TO if_ixml_element . ENDCLASS. -CLASS ZCL_EXCEL_THEME_ECLRSCHEMELST IMPLEMENTATION. +CLASS zcl_excel_theme_eclrschemelst IMPLEMENTATION. -method build_xml. - data: lo_theme type ref to if_ixml_element. - data: lo_theme_objdef type ref to if_ixml_element. - check io_document is bound. + METHOD build_xml. + DATA: lo_theme TYPE REF TO if_ixml_element. + DATA: lo_theme_objdef TYPE REF TO if_ixml_element. + CHECK io_document IS BOUND. lo_theme ?= io_document->get_root_element( ). - check lo_theme is bound. - if extracolor is initial. + CHECK lo_theme IS BOUND. + IF extracolor IS INITIAL. lo_theme_objdef ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = zcl_excel_theme=>c_theme_extra_color parent = lo_theme ). - else. + ELSE. lo_theme->append_child( new_child = extracolor ). - endif. + ENDIF. - endmethod. "build_xml + ENDMETHOD. "build_xml -method load. + METHOD load. "! so far copy only existing values extracolor ?= io_extra_color. - endmethod. "load + ENDMETHOD. "load ENDCLASS. diff --git a/src/zcl_excel_theme_elements.clas.abap b/src/zcl_excel_theme_elements.clas.abap index df7a7a9e0..f14d05dce 100644 --- a/src/zcl_excel_theme_elements.clas.abap +++ b/src/zcl_excel_theme_elements.clas.abap @@ -1,43 +1,43 @@ -class ZCL_EXCEL_THEME_ELEMENTS definition - public - final - create public - - global friends ZCL_EXCEL_THEME . - -public section. - - constants C_COLOR_SCHEME type STRING value 'clrScheme'. "#EC NOTEXT - constants C_FONT_SCHEME type STRING value 'fontScheme'. "#EC NOTEXT - constants C_FMT_SCHEME type STRING value 'fmtScheme'. "#EC NOTEXT - constants C_THEME_ELEMENTS type STRING value 'themeElements'. "#EC NOTEXT - - methods CONSTRUCTOR . - methods LOAD - importing - !IO_ELEMENTS type ref to IF_IXML_ELEMENT . - methods BUILD_XML - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT . -protected section. - - data COLOR_SCHEME type ref to ZCL_EXCEL_THEME_COLOR_SCHEME . - data FONT_SCHEME type ref to ZCL_EXCEL_THEME_FONT_SCHEME . - data FMT_SCHEME type ref to ZCL_EXCEL_THEME_FMT_SCHEME . -private section. +CLASS zcl_excel_theme_elements DEFINITION + PUBLIC + FINAL + CREATE PUBLIC + + GLOBAL FRIENDS zcl_excel_theme . + + PUBLIC SECTION. + + CONSTANTS c_color_scheme TYPE string VALUE 'clrScheme'. "#EC NOTEXT + CONSTANTS c_font_scheme TYPE string VALUE 'fontScheme'. "#EC NOTEXT + CONSTANTS c_fmt_scheme TYPE string VALUE 'fmtScheme'. "#EC NOTEXT + CONSTANTS c_theme_elements TYPE string VALUE 'themeElements'. "#EC NOTEXT + + METHODS constructor . + METHODS load + IMPORTING + !io_elements TYPE REF TO if_ixml_element . + METHODS build_xml + IMPORTING + !io_document TYPE REF TO if_ixml_document . + PROTECTED SECTION. + + DATA color_scheme TYPE REF TO zcl_excel_theme_color_scheme . + DATA font_scheme TYPE REF TO zcl_excel_theme_font_scheme . + DATA fmt_scheme TYPE REF TO zcl_excel_theme_fmt_scheme . + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_THEME_ELEMENTS IMPLEMENTATION. +CLASS zcl_excel_theme_elements IMPLEMENTATION. -method build_xml. - data: lo_theme_element type ref to if_ixml_element. - data: lo_theme type ref to if_ixml_element. - check io_document is bound. + METHOD build_xml. + DATA: lo_theme_element TYPE REF TO if_ixml_element. + DATA: lo_theme TYPE REF TO if_ixml_element. + CHECK io_document IS BOUND. lo_theme ?= io_document->get_root_element( ). - if lo_theme is bound. + IF lo_theme IS BOUND. lo_theme_element ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_theme_elements parent = lo_theme ). @@ -45,36 +45,36 @@ method build_xml. color_scheme->build_xml( io_document = io_document ). font_scheme->build_xml( io_document = io_document ). fmt_scheme->build_xml( io_document = io_document ). - endif. - endmethod. + ENDIF. + ENDMETHOD. -method constructor. - create object color_scheme. - create object font_scheme. - create object fmt_scheme. - endmethod. "constructor + METHOD constructor. + CREATE OBJECT color_scheme. + CREATE OBJECT font_scheme. + CREATE OBJECT fmt_scheme. + ENDMETHOD. "constructor -method load. - data: lo_elements_children type ref to if_ixml_node_list. - data: lo_elements_iterator type ref to if_ixml_node_iterator. - data: lo_elements_element type ref to if_ixml_element. - check io_elements is not initial. + METHOD load. + DATA: lo_elements_children TYPE REF TO if_ixml_node_list. + DATA: lo_elements_iterator TYPE REF TO if_ixml_node_iterator. + DATA: lo_elements_element TYPE REF TO if_ixml_element. + CHECK io_elements IS NOT INITIAL. lo_elements_children = io_elements->get_children( ). lo_elements_iterator = lo_elements_children->create_iterator( ). lo_elements_element ?= lo_elements_iterator->get_next( ). - while lo_elements_element is bound. - case lo_elements_element->get_name( ). - when c_color_scheme. - color_scheme->load( io_color_scheme = lo_elements_element ). - when c_font_scheme. - font_scheme->load( io_font_scheme = lo_elements_element ). - when c_fmt_scheme. - fmt_scheme->load( io_fmt_scheme = lo_elements_element ). - endcase. + WHILE lo_elements_element IS BOUND. + CASE lo_elements_element->get_name( ). + WHEN c_color_scheme. + color_scheme->load( io_color_scheme = lo_elements_element ). + WHEN c_font_scheme. + font_scheme->load( io_font_scheme = lo_elements_element ). + WHEN c_fmt_scheme. + fmt_scheme->load( io_fmt_scheme = lo_elements_element ). + ENDCASE. lo_elements_element ?= lo_elements_iterator->get_next( ). - endwhile. - endmethod. "load + ENDWHILE. + ENDMETHOD. "load ENDCLASS. diff --git a/src/zcl_excel_theme_extlst.clas.abap b/src/zcl_excel_theme_extlst.clas.abap index f7b90d7a9..b22209ccf 100644 --- a/src/zcl_excel_theme_extlst.clas.abap +++ b/src/zcl_excel_theme_extlst.clas.abap @@ -1,47 +1,47 @@ -class ZCL_EXCEL_THEME_EXTLST definition - public - final - create public . - -public section. - - methods LOAD - importing - !IO_EXTLST type ref to IF_IXML_ELEMENT . - methods BUILD_XML - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT . -protected section. -private section. - - data EXTLST type ref to IF_IXML_ELEMENT . +CLASS zcl_excel_theme_extlst DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS load + IMPORTING + !io_extlst TYPE REF TO if_ixml_element . + METHODS build_xml + IMPORTING + !io_document TYPE REF TO if_ixml_document . + PROTECTED SECTION. + PRIVATE SECTION. + + DATA extlst TYPE REF TO if_ixml_element . ENDCLASS. -CLASS ZCL_EXCEL_THEME_EXTLST IMPLEMENTATION. +CLASS zcl_excel_theme_extlst IMPLEMENTATION. -method build_xml. - data: lo_theme type ref to if_ixml_element. - data: lo_theme_objdef type ref to if_ixml_element. - check io_document is bound. + METHOD build_xml. + DATA: lo_theme TYPE REF TO if_ixml_element. + DATA: lo_theme_objdef TYPE REF TO if_ixml_element. + CHECK io_document IS BOUND. lo_theme ?= io_document->get_root_element( ). - check lo_theme is bound. - if extlst is initial. + CHECK lo_theme IS BOUND. + IF extlst IS INITIAL. lo_theme_objdef ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = zcl_excel_theme=>c_theme_extlst parent = lo_theme ). - else. + ELSE. lo_theme->append_child( new_child = extlst ). - endif. - endmethod. "build_xml + ENDIF. + ENDMETHOD. "build_xml -method load. + METHOD load. "! so far copy only existing values extlst ?= io_extlst. - endmethod. "load + ENDMETHOD. "load ENDCLASS. diff --git a/src/zcl_excel_theme_fmt_scheme.clas.abap b/src/zcl_excel_theme_fmt_scheme.clas.abap index 159851307..492383937 100644 --- a/src/zcl_excel_theme_fmt_scheme.clas.abap +++ b/src/zcl_excel_theme_fmt_scheme.clas.abap @@ -1,53 +1,53 @@ -class ZCL_EXCEL_THEME_FMT_SCHEME definition - public - final - create public . +CLASS zcl_excel_theme_fmt_scheme DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . -public section. + PUBLIC SECTION. - methods LOAD - importing - !IO_FMT_SCHEME type ref to IF_IXML_ELEMENT . - methods BUILD_XML - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT . -protected section. -private section. + METHODS load + IMPORTING + !io_fmt_scheme TYPE REF TO if_ixml_element . + METHODS build_xml + IMPORTING + !io_document TYPE REF TO if_ixml_document . + PROTECTED SECTION. + PRIVATE SECTION. - data FMT_SCHEME type ref to IF_IXML_ELEMENT . + DATA fmt_scheme TYPE REF TO if_ixml_element . - methods GET_DEFAULT_FMT - returning - value(RV_STRING) type STRING . + METHODS get_default_fmt + RETURNING + VALUE(rv_string) TYPE string . ENDCLASS. -CLASS ZCL_EXCEL_THEME_FMT_SCHEME IMPLEMENTATION. +CLASS zcl_excel_theme_fmt_scheme IMPLEMENTATION. -method build_xml. - data: lo_xml type ref to cl_xml_document. - data: lo_node type ref to if_ixml_node. - data: lo_elements type ref to if_ixml_element. - check io_document is bound. + METHOD build_xml. + DATA: lo_xml TYPE REF TO cl_xml_document. + DATA: lo_node TYPE REF TO if_ixml_node. + DATA: lo_elements TYPE REF TO if_ixml_element. + CHECK io_document IS BOUND. lo_elements ?= io_document->find_from_name_ns( name = zcl_excel_theme=>c_theme_elements ). - if lo_elements is bound. + IF lo_elements IS BOUND. - if fmt_scheme is initial. - create object lo_xml. + IF fmt_scheme IS INITIAL. + CREATE OBJECT lo_xml. lo_xml->parse_string( get_default_fmt( ) ). lo_node = lo_xml->get_first_node( ). lo_elements->append_child( new_child = lo_node ). - else. + ELSE. lo_elements->append_child( new_child = fmt_scheme ). - endif. - endif. - endmethod. "build_xml + ENDIF. + ENDIF. + ENDMETHOD. "build_xml -method get_default_fmt. - concatenate '' + METHOD get_default_fmt. + CONCATENATE '' ' ' ' ' ' ' @@ -184,12 +184,12 @@ method get_default_fmt. ' ' ' ' ' ' - into rv_string . - endmethod. "get_default_fmt + INTO rv_string . + ENDMETHOD. "get_default_fmt -method load. + METHOD load. "! so far copy only existing values fmt_scheme ?= io_fmt_scheme. - endmethod. "load + ENDMETHOD. "load ENDCLASS. diff --git a/src/zcl_excel_theme_font_scheme.clas.abap b/src/zcl_excel_theme_font_scheme.clas.abap index 7e4b30265..4b939d326 100644 --- a/src/zcl_excel_theme_font_scheme.clas.abap +++ b/src/zcl_excel_theme_font_scheme.clas.abap @@ -1,338 +1,338 @@ -class ZCL_EXCEL_THEME_FONT_SCHEME definition - public - final - create public . - -public section. - - types: - begin of t_font, - script type string, - typeface type string, - end of t_font . - types: - tt_font type sorted table of t_font with unique key script . - types: - begin of t_fonttype, - typeface type string, - panose type string, - pitchfamily type string, - charset type string, - end of t_fonttype . - types: - begin of t_fonts, - latin type t_fonttype, - ea type t_fonttype, - cs type t_fonttype, - fonts type tt_font, - end of t_fonts . - types: - begin of t_scheme, - name type string, - major type t_fonts, - minor type t_fonts, - end of t_scheme . - - constants C_NAME type STRING value 'name'. "#EC NOTEXT - constants C_SCHEME type STRING value 'fontScheme'. "#EC NOTEXT - constants C_MAJOR type STRING value 'majorFont'. "#EC NOTEXT - constants C_MINOR type STRING value 'minorFont'. "#EC NOTEXT - constants C_FONT type STRING value 'font'. "#EC NOTEXT - constants C_LATIN type STRING value 'latin'. "#EC NOTEXT - constants C_EA type STRING value 'ea'. "#EC NOTEXT - constants C_CS type STRING value 'cs'. "#EC NOTEXT - constants C_TYPEFACE type STRING value 'typeface'. "#EC NOTEXT - constants C_PANOSE type STRING value 'panose'. "#EC NOTEXT - constants C_PITCHFAMILY type STRING value 'pitchFamily'. "#EC NOTEXT - constants C_CHARSET type STRING value 'charset'. "#EC NOTEXT - constants C_SCRIPT type STRING value 'script'. "#EC NOTEXT - - methods LOAD - importing - !IO_FONT_SCHEME type ref to IF_IXML_ELEMENT . - methods SET_NAME - importing - value(IV_NAME) type STRING . - methods BUILD_XML - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT . - methods MODIFY_FONT - importing - value(IV_TYPE) type STRING - value(IV_SCRIPT) type STRING - value(IV_TYPEFACE) type STRING . - methods MODIFY_LATIN_FONT - importing - value(IV_TYPE) type STRING - value(IV_TYPEFACE) type STRING - value(IV_PANOSE) type STRING optional - value(IV_PITCHFAMILY) type STRING optional - value(IV_CHARSET) type STRING optional . - methods MODIFY_EA_FONT - importing - value(IV_TYPE) type STRING - value(IV_TYPEFACE) type STRING - value(IV_PANOSE) type STRING optional - value(IV_PITCHFAMILY) type STRING optional - value(IV_CHARSET) type STRING optional . - methods MODIFY_CS_FONT - importing - value(IV_TYPE) type STRING - value(IV_TYPEFACE) type STRING - value(IV_PANOSE) type STRING optional - value(IV_PITCHFAMILY) type STRING optional - value(IV_CHARSET) type STRING optional . - methods CONSTRUCTOR . -protected section. - - methods MODIFY_LEC_FONTS - importing - value(IV_TYPE) type STRING - value(IV_FONT_TYPE) type STRING - value(IV_TYPEFACE) type STRING - value(IV_PANOSE) type STRING optional - value(IV_PITCHFAMILY) type STRING optional - value(IV_CHARSET) type STRING optional . -private section. - - data FONT_SCHEME type T_SCHEME . - - methods SET_DEFAULTS . +CLASS zcl_excel_theme_font_scheme DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + TYPES: + BEGIN OF t_font, + script TYPE string, + typeface TYPE string, + END OF t_font . + TYPES: + tt_font TYPE SORTED TABLE OF t_font WITH UNIQUE KEY script . + TYPES: + BEGIN OF t_fonttype, + typeface TYPE string, + panose TYPE string, + pitchfamily TYPE string, + charset TYPE string, + END OF t_fonttype . + TYPES: + BEGIN OF t_fonts, + latin TYPE t_fonttype, + ea TYPE t_fonttype, + cs TYPE t_fonttype, + fonts TYPE tt_font, + END OF t_fonts . + TYPES: + BEGIN OF t_scheme, + name TYPE string, + major TYPE t_fonts, + minor TYPE t_fonts, + END OF t_scheme . + + CONSTANTS c_name TYPE string VALUE 'name'. "#EC NOTEXT + CONSTANTS c_scheme TYPE string VALUE 'fontScheme'. "#EC NOTEXT + CONSTANTS c_major TYPE string VALUE 'majorFont'. "#EC NOTEXT + CONSTANTS c_minor TYPE string VALUE 'minorFont'. "#EC NOTEXT + CONSTANTS c_font TYPE string VALUE 'font'. "#EC NOTEXT + CONSTANTS c_latin TYPE string VALUE 'latin'. "#EC NOTEXT + CONSTANTS c_ea TYPE string VALUE 'ea'. "#EC NOTEXT + CONSTANTS c_cs TYPE string VALUE 'cs'. "#EC NOTEXT + CONSTANTS c_typeface TYPE string VALUE 'typeface'. "#EC NOTEXT + CONSTANTS c_panose TYPE string VALUE 'panose'. "#EC NOTEXT + CONSTANTS c_pitchfamily TYPE string VALUE 'pitchFamily'. "#EC NOTEXT + CONSTANTS c_charset TYPE string VALUE 'charset'. "#EC NOTEXT + CONSTANTS c_script TYPE string VALUE 'script'. "#EC NOTEXT + + METHODS load + IMPORTING + !io_font_scheme TYPE REF TO if_ixml_element . + METHODS set_name + IMPORTING + VALUE(iv_name) TYPE string . + METHODS build_xml + IMPORTING + !io_document TYPE REF TO if_ixml_document . + METHODS modify_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_script) TYPE string + VALUE(iv_typeface) TYPE string . + METHODS modify_latin_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_typeface) TYPE string + VALUE(iv_panose) TYPE string OPTIONAL + VALUE(iv_pitchfamily) TYPE string OPTIONAL + VALUE(iv_charset) TYPE string OPTIONAL . + METHODS modify_ea_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_typeface) TYPE string + VALUE(iv_panose) TYPE string OPTIONAL + VALUE(iv_pitchfamily) TYPE string OPTIONAL + VALUE(iv_charset) TYPE string OPTIONAL . + METHODS modify_cs_font + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_typeface) TYPE string + VALUE(iv_panose) TYPE string OPTIONAL + VALUE(iv_pitchfamily) TYPE string OPTIONAL + VALUE(iv_charset) TYPE string OPTIONAL . + METHODS constructor . + PROTECTED SECTION. + + METHODS modify_lec_fonts + IMPORTING + VALUE(iv_type) TYPE string + VALUE(iv_font_type) TYPE string + VALUE(iv_typeface) TYPE string + VALUE(iv_panose) TYPE string OPTIONAL + VALUE(iv_pitchfamily) TYPE string OPTIONAL + VALUE(iv_charset) TYPE string OPTIONAL . + PRIVATE SECTION. + + DATA font_scheme TYPE t_scheme . + + METHODS set_defaults . ENDCLASS. -CLASS ZCL_EXCEL_THEME_FONT_SCHEME IMPLEMENTATION. +CLASS zcl_excel_theme_font_scheme IMPLEMENTATION. -method build_xml. - data: lo_scheme_element type ref to if_ixml_element. - data: lo_font type ref to if_ixml_element. - data: lo_latin type ref to if_ixml_element. - data: lo_ea type ref to if_ixml_element. - data: lo_cs type ref to if_ixml_element. - data: lo_major type ref to if_ixml_element. - data: lo_minor type ref to if_ixml_element. - data: lo_elements type ref to if_ixml_element. - field-symbols: type t_font. - check io_document is bound. + METHOD build_xml. + DATA: lo_scheme_element TYPE REF TO if_ixml_element. + DATA: lo_font TYPE REF TO if_ixml_element. + DATA: lo_latin TYPE REF TO if_ixml_element. + DATA: lo_ea TYPE REF TO if_ixml_element. + DATA: lo_cs TYPE REF TO if_ixml_element. + DATA: lo_major TYPE REF TO if_ixml_element. + DATA: lo_minor TYPE REF TO if_ixml_element. + DATA: lo_elements TYPE REF TO if_ixml_element. + FIELD-SYMBOLS: TYPE t_font. + CHECK io_document IS BOUND. lo_elements ?= io_document->find_from_name_ns( name = zcl_excel_theme=>c_theme_elements ). - if lo_elements is bound. + IF lo_elements IS BOUND. lo_scheme_element ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = zcl_excel_theme_elements=>c_font_scheme parent = lo_elements ). lo_scheme_element->set_attribute( name = c_name value = font_scheme-name ). lo_major ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_major parent = lo_scheme_element ). - if lo_major is bound. + IF lo_major IS BOUND. lo_latin ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_latin parent = lo_major ). lo_latin->set_attribute( name = c_typeface value = font_scheme-major-latin-typeface ). - if font_scheme-major-latin-panose is not initial. + IF font_scheme-major-latin-panose IS NOT INITIAL. lo_latin->set_attribute( name = c_panose value = font_scheme-major-latin-panose ). - endif. - if font_scheme-major-latin-pitchfamily is not initial. + ENDIF. + IF font_scheme-major-latin-pitchfamily IS NOT INITIAL. lo_latin->set_attribute( name = c_pitchfamily value = font_scheme-major-latin-pitchfamily ). - endif. - if font_scheme-major-latin-charset is not initial. + ENDIF. + IF font_scheme-major-latin-charset IS NOT INITIAL. lo_latin->set_attribute( name = c_charset value = font_scheme-major-latin-charset ). - endif. + ENDIF. lo_ea ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_ea parent = lo_major ). lo_ea->set_attribute( name = c_typeface value = font_scheme-major-ea-typeface ). - if font_scheme-major-ea-panose is not initial. + IF font_scheme-major-ea-panose IS NOT INITIAL. lo_ea->set_attribute( name = c_panose value = font_scheme-major-ea-panose ). - endif. - if font_scheme-major-ea-pitchfamily is not initial. + ENDIF. + IF font_scheme-major-ea-pitchfamily IS NOT INITIAL. lo_ea->set_attribute( name = c_pitchfamily value = font_scheme-major-ea-pitchfamily ). - endif. - if font_scheme-major-ea-charset is not initial. + ENDIF. + IF font_scheme-major-ea-charset IS NOT INITIAL. lo_ea->set_attribute( name = c_charset value = font_scheme-major-ea-charset ). - endif. + ENDIF. lo_cs ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_cs parent = lo_major ). lo_cs->set_attribute( name = c_typeface value = font_scheme-major-cs-typeface ). - if font_scheme-major-cs-panose is not initial. + IF font_scheme-major-cs-panose IS NOT INITIAL. lo_cs->set_attribute( name = c_panose value = font_scheme-major-cs-panose ). - endif. - if font_scheme-major-cs-pitchfamily is not initial. + ENDIF. + IF font_scheme-major-cs-pitchfamily IS NOT INITIAL. lo_cs->set_attribute( name = c_pitchfamily value = font_scheme-major-cs-pitchfamily ). - endif. - if font_scheme-major-cs-charset is not initial. + ENDIF. + IF font_scheme-major-cs-charset IS NOT INITIAL. lo_cs->set_attribute( name = c_charset value = font_scheme-major-cs-charset ). - endif. + ENDIF. - loop at font_scheme-major-fonts assigning . - if -script is not initial and -typeface is not initial. - clear lo_font. + LOOP AT font_scheme-major-fonts ASSIGNING . + IF -script IS NOT INITIAL AND -typeface IS NOT INITIAL. + CLEAR lo_font. lo_font ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_font parent = lo_major ). lo_font->set_attribute( name = c_script value = -script ). lo_font->set_attribute( name = c_typeface value = -typeface ). - endif. - endloop. - clear: lo_latin, lo_ea, lo_cs, lo_font. - endif. + ENDIF. + ENDLOOP. + CLEAR: lo_latin, lo_ea, lo_cs, lo_font. + ENDIF. lo_minor ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_minor parent = lo_scheme_element ). - if lo_minor is bound. + IF lo_minor IS BOUND. lo_latin ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_latin parent = lo_minor ). lo_latin->set_attribute( name = c_typeface value = font_scheme-minor-latin-typeface ). - if font_scheme-minor-latin-panose is not initial. + IF font_scheme-minor-latin-panose IS NOT INITIAL. lo_latin->set_attribute( name = c_panose value = font_scheme-minor-latin-panose ). - endif. - if font_scheme-minor-latin-pitchfamily is not initial. + ENDIF. + IF font_scheme-minor-latin-pitchfamily IS NOT INITIAL. lo_latin->set_attribute( name = c_pitchfamily value = font_scheme-minor-latin-pitchfamily ). - endif. - if font_scheme-minor-latin-charset is not initial. + ENDIF. + IF font_scheme-minor-latin-charset IS NOT INITIAL. lo_latin->set_attribute( name = c_charset value = font_scheme-minor-latin-charset ). - endif. + ENDIF. lo_ea ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_ea parent = lo_minor ). lo_ea->set_attribute( name = c_typeface value = font_scheme-minor-ea-typeface ). - if font_scheme-minor-ea-panose is not initial. + IF font_scheme-minor-ea-panose IS NOT INITIAL. lo_ea->set_attribute( name = c_panose value = font_scheme-minor-ea-panose ). - endif. - if font_scheme-minor-ea-pitchfamily is not initial. + ENDIF. + IF font_scheme-minor-ea-pitchfamily IS NOT INITIAL. lo_ea->set_attribute( name = c_pitchfamily value = font_scheme-minor-ea-pitchfamily ). - endif. - if font_scheme-minor-ea-charset is not initial. + ENDIF. + IF font_scheme-minor-ea-charset IS NOT INITIAL. lo_ea->set_attribute( name = c_charset value = font_scheme-minor-ea-charset ). - endif. + ENDIF. lo_cs ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_cs parent = lo_minor ). lo_cs->set_attribute( name = c_typeface value = font_scheme-minor-cs-typeface ). - if font_scheme-minor-cs-panose is not initial. + IF font_scheme-minor-cs-panose IS NOT INITIAL. lo_cs->set_attribute( name = c_panose value = font_scheme-minor-cs-panose ). - endif. - if font_scheme-minor-cs-pitchfamily is not initial. + ENDIF. + IF font_scheme-minor-cs-pitchfamily IS NOT INITIAL. lo_cs->set_attribute( name = c_pitchfamily value = font_scheme-minor-cs-pitchfamily ). - endif. - if font_scheme-minor-cs-charset is not initial. + ENDIF. + IF font_scheme-minor-cs-charset IS NOT INITIAL. lo_cs->set_attribute( name = c_charset value = font_scheme-minor-cs-charset ). - endif. + ENDIF. - loop at font_scheme-minor-fonts assigning . - if -script is not initial and -typeface is not initial. - clear lo_font. + LOOP AT font_scheme-minor-fonts ASSIGNING . + IF -script IS NOT INITIAL AND -typeface IS NOT INITIAL. + CLEAR lo_font. lo_font ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = c_font parent = lo_minor ). lo_font->set_attribute( name = c_script value = -script ). lo_font->set_attribute( name = c_typeface value = -typeface ). - endif. - endloop. - endif. + ENDIF. + ENDLOOP. + ENDIF. - endif. - endmethod. "build_xml + ENDIF. + ENDMETHOD. "build_xml -method constructor. + METHOD constructor. set_defaults( ). - endmethod. "constructor - - -method load. - data: lo_scheme_children type ref to if_ixml_node_list. - data: lo_scheme_iterator type ref to if_ixml_node_iterator. - data: lo_scheme_element type ref to if_ixml_element. - data: lo_major_children type ref to if_ixml_node_list. - data: lo_major_iterator type ref to if_ixml_node_iterator. - data: lo_major_element type ref to if_ixml_element. - data: lo_minor_children type ref to if_ixml_node_list. - data: lo_minor_iterator type ref to if_ixml_node_iterator. - data: lo_minor_element type ref to if_ixml_element. - data: ls_font type t_font. - check io_font_scheme is not initial. - clear font_scheme. + ENDMETHOD. "constructor + + + METHOD load. + DATA: lo_scheme_children TYPE REF TO if_ixml_node_list. + DATA: lo_scheme_iterator TYPE REF TO if_ixml_node_iterator. + DATA: lo_scheme_element TYPE REF TO if_ixml_element. + DATA: lo_major_children TYPE REF TO if_ixml_node_list. + DATA: lo_major_iterator TYPE REF TO if_ixml_node_iterator. + DATA: lo_major_element TYPE REF TO if_ixml_element. + DATA: lo_minor_children TYPE REF TO if_ixml_node_list. + DATA: lo_minor_iterator TYPE REF TO if_ixml_node_iterator. + DATA: lo_minor_element TYPE REF TO if_ixml_element. + DATA: ls_font TYPE t_font. + CHECK io_font_scheme IS NOT INITIAL. + CLEAR font_scheme. font_scheme-name = io_font_scheme->get_attribute( name = c_name ). lo_scheme_children = io_font_scheme->get_children( ). lo_scheme_iterator = lo_scheme_children->create_iterator( ). lo_scheme_element ?= lo_scheme_iterator->get_next( ). - while lo_scheme_element is bound. - case lo_scheme_element->get_name( ). - when c_major. + WHILE lo_scheme_element IS BOUND. + CASE lo_scheme_element->get_name( ). + WHEN c_major. lo_major_children = lo_scheme_element->get_children( ). lo_major_iterator = lo_major_children->create_iterator( ). lo_major_element ?= lo_major_iterator->get_next( ). - while lo_major_element is bound. - case lo_major_element->get_name( ). - when c_latin. + WHILE lo_major_element IS BOUND. + CASE lo_major_element->get_name( ). + WHEN c_latin. font_scheme-major-latin-typeface = lo_major_element->get_attribute( name = c_typeface ). font_scheme-major-latin-panose = lo_major_element->get_attribute( name = c_panose ). font_scheme-major-latin-pitchfamily = lo_major_element->get_attribute( name = c_pitchfamily ). font_scheme-major-latin-charset = lo_major_element->get_attribute( name = c_charset ). - when c_ea. + WHEN c_ea. font_scheme-major-ea-typeface = lo_major_element->get_attribute( name = c_typeface ). font_scheme-major-ea-panose = lo_major_element->get_attribute( name = c_panose ). font_scheme-major-ea-pitchfamily = lo_major_element->get_attribute( name = c_pitchfamily ). font_scheme-major-ea-charset = lo_major_element->get_attribute( name = c_charset ). - when c_cs. + WHEN c_cs. font_scheme-major-cs-typeface = lo_major_element->get_attribute( name = c_typeface ). font_scheme-major-cs-panose = lo_major_element->get_attribute( name = c_panose ). font_scheme-major-cs-pitchfamily = lo_major_element->get_attribute( name = c_pitchfamily ). font_scheme-major-cs-charset = lo_major_element->get_attribute( name = c_charset ). - when c_font. - clear ls_font. + WHEN c_font. + CLEAR ls_font. ls_font-script = lo_major_element->get_attribute( name = c_script ). ls_font-typeface = lo_major_element->get_attribute( name = c_typeface ). - try. - insert ls_font into table font_scheme-major-fonts. - catch cx_root. "not the best but just to avoid duplicate lines dump + TRY. + INSERT ls_font INTO TABLE font_scheme-major-fonts. + CATCH cx_root. "not the best but just to avoid duplicate lines dump - endtry. - endcase. + ENDTRY. + ENDCASE. lo_major_element ?= lo_major_iterator->get_next( ). - endwhile. - when c_minor. + ENDWHILE. + WHEN c_minor. lo_minor_children = lo_scheme_element->get_children( ). lo_minor_iterator = lo_minor_children->create_iterator( ). lo_minor_element ?= lo_minor_iterator->get_next( ). - while lo_minor_element is bound. - case lo_minor_element->get_name( ). - when c_latin. + WHILE lo_minor_element IS BOUND. + CASE lo_minor_element->get_name( ). + WHEN c_latin. font_scheme-minor-latin-typeface = lo_minor_element->get_attribute( name = c_typeface ). font_scheme-minor-latin-panose = lo_minor_element->get_attribute( name = c_panose ). font_scheme-minor-latin-pitchfamily = lo_minor_element->get_attribute( name = c_pitchfamily ). font_scheme-minor-latin-charset = lo_minor_element->get_attribute( name = c_charset ). - when c_ea. + WHEN c_ea. font_scheme-minor-ea-typeface = lo_minor_element->get_attribute( name = c_typeface ). font_scheme-minor-ea-panose = lo_minor_element->get_attribute( name = c_panose ). font_scheme-minor-ea-pitchfamily = lo_minor_element->get_attribute( name = c_pitchfamily ). font_scheme-minor-ea-charset = lo_minor_element->get_attribute( name = c_charset ). - when c_cs. + WHEN c_cs. font_scheme-minor-cs-typeface = lo_minor_element->get_attribute( name = c_typeface ). font_scheme-minor-cs-panose = lo_minor_element->get_attribute( name = c_panose ). font_scheme-minor-cs-pitchfamily = lo_minor_element->get_attribute( name = c_pitchfamily ). font_scheme-minor-cs-charset = lo_minor_element->get_attribute( name = c_charset ). - when c_font. - clear ls_font. + WHEN c_font. + CLEAR ls_font. ls_font-script = lo_minor_element->get_attribute( name = c_script ). ls_font-typeface = lo_minor_element->get_attribute( name = c_typeface ). - try. - insert ls_font into table font_scheme-minor-fonts. - catch cx_root. "not the best but just to avoid duplicate lines dump + TRY. + INSERT ls_font INTO TABLE font_scheme-minor-fonts. + CATCH cx_root. "not the best but just to avoid duplicate lines dump - endtry. - endcase. + ENDTRY. + ENDCASE. lo_minor_element ?= lo_minor_iterator->get_next( ). - endwhile. - endcase. + ENDWHILE. + ENDCASE. lo_scheme_element ?= lo_scheme_iterator->get_next( ). - endwhile. - endmethod. "load + ENDWHILE. + ENDMETHOD. "load -method modify_cs_font. + METHOD modify_cs_font. modify_lec_fonts( - exporting + EXPORTING iv_type = iv_type iv_font_type = c_cs iv_typeface = iv_typeface @@ -340,12 +340,12 @@ method modify_cs_font. iv_pitchfamily = iv_pitchfamily iv_charset = iv_charset ). - endmethod. "modify_latin_font + ENDMETHOD. "modify_latin_font -method modify_ea_font. + METHOD modify_ea_font. modify_lec_fonts( - exporting + EXPORTING iv_type = iv_type iv_font_type = c_ea iv_typeface = iv_typeface @@ -353,39 +353,39 @@ method modify_ea_font. iv_pitchfamily = iv_pitchfamily iv_charset = iv_charset ). - endmethod. "modify_latin_font + ENDMETHOD. "modify_latin_font -method modify_font. - data: ls_font type t_font. - field-symbols: type t_font. + METHOD modify_font. + DATA: ls_font TYPE t_font. + FIELD-SYMBOLS: TYPE t_font. ls_font-script = iv_script. ls_font-typeface = iv_typeface. - try. - case iv_type. - when c_major. - read table font_scheme-major-fonts with key script = iv_script assigning . - if sy-subrc eq 0. + TRY. + CASE iv_type. + WHEN c_major. + READ TABLE font_scheme-major-fonts WITH KEY script = iv_script ASSIGNING . + IF sy-subrc EQ 0. = ls_font. - else. - insert ls_font into table font_scheme-major-fonts. - endif. - when c_minor. - read table font_scheme-minor-fonts with key script = iv_script assigning . - if sy-subrc eq 0. + ELSE. + INSERT ls_font INTO TABLE font_scheme-major-fonts. + ENDIF. + WHEN c_minor. + READ TABLE font_scheme-minor-fonts WITH KEY script = iv_script ASSIGNING . + IF sy-subrc EQ 0. = ls_font. - else. - insert ls_font into table font_scheme-minor-fonts. - endif. - endcase. - catch cx_root. "not the best but just to avoid duplicate lines dump - endtry. - endmethod. "add_font + ELSE. + INSERT ls_font INTO TABLE font_scheme-minor-fonts. + ENDIF. + ENDCASE. + CATCH cx_root. "not the best but just to avoid duplicate lines dump + ENDTRY. + ENDMETHOD. "add_font -method modify_latin_font. + METHOD modify_latin_font. modify_lec_fonts( - exporting + EXPORTING iv_type = iv_type iv_font_type = c_latin iv_typeface = iv_typeface @@ -393,41 +393,41 @@ method modify_latin_font. iv_pitchfamily = iv_pitchfamily iv_charset = iv_charset ). - endmethod. "modify_latin_font - - -method modify_lec_fonts. - field-symbols: type t_fonts, - type t_fonttype. - case iv_type. - when c_minor. - assign font_scheme-minor to . - when c_major. - assign font_scheme-major to . - when others. - return. - endcase. - check is assigned. - case iv_font_type. - when c_latin. - assign -latin to . - when c_ea. - assign -ea to . - when c_cs. - assign -cs to . - when others. - return. - endcase. - check is assigned. + ENDMETHOD. "modify_latin_font + + + METHOD modify_lec_fonts. + FIELD-SYMBOLS: TYPE t_fonts, + TYPE t_fonttype. + CASE iv_type. + WHEN c_minor. + ASSIGN font_scheme-minor TO . + WHEN c_major. + ASSIGN font_scheme-major TO . + WHEN OTHERS. + RETURN. + ENDCASE. + CHECK IS ASSIGNED. + CASE iv_font_type. + WHEN c_latin. + ASSIGN -latin TO . + WHEN c_ea. + ASSIGN -ea TO . + WHEN c_cs. + ASSIGN -cs TO . + WHEN OTHERS. + RETURN. + ENDCASE. + CHECK IS ASSIGNED. -typeface = iv_typeface. -panose = iv_panose. -pitchfamily = iv_pitchfamily. -charset = iv_charset. - endmethod. "modify_lec_fonts + ENDMETHOD. "modify_lec_fonts -method set_defaults. - clear font_scheme. + METHOD set_defaults. + CLEAR font_scheme. font_scheme-name = 'Office'. font_scheme-major-latin-typeface = 'Calibri Light'. font_scheme-major-latin-panose = '020F0302020204030204'. @@ -495,10 +495,10 @@ method set_defaults. modify_font( iv_type = c_minor iv_script = 'Uigh' iv_typeface = 'Microsoft Uighur' ). modify_font( iv_type = c_minor iv_script = 'Geor' iv_typeface = 'Sylfaen' ). - endmethod. "set_defaults + ENDMETHOD. "set_defaults -method set_name. + METHOD set_name. font_scheme-name = iv_name. - endmethod. "set_name + ENDMETHOD. "set_name ENDCLASS. diff --git a/src/zcl_excel_theme_objectdefaults.clas.abap b/src/zcl_excel_theme_objectdefaults.clas.abap index 85752be94..b00b45f9d 100644 --- a/src/zcl_excel_theme_objectdefaults.clas.abap +++ b/src/zcl_excel_theme_objectdefaults.clas.abap @@ -1,45 +1,45 @@ -class ZCL_EXCEL_THEME_OBJECTDEFAULTS definition - public - final - create public . - -public section. - - methods LOAD - importing - !IO_OBJECT_DEF type ref to IF_IXML_ELEMENT . - methods BUILD_XML - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT . -protected section. -private section. - - data OBJECTDEFAULTS type ref to IF_IXML_ELEMENT . +CLASS zcl_excel_theme_objectdefaults DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS load + IMPORTING + !io_object_def TYPE REF TO if_ixml_element . + METHODS build_xml + IMPORTING + !io_document TYPE REF TO if_ixml_document . + PROTECTED SECTION. + PRIVATE SECTION. + + DATA objectdefaults TYPE REF TO if_ixml_element . ENDCLASS. -CLASS ZCL_EXCEL_THEME_OBJECTDEFAULTS IMPLEMENTATION. +CLASS zcl_excel_theme_objectdefaults IMPLEMENTATION. -method build_xml. - data: lo_theme type ref to if_ixml_element. - data: lo_theme_objdef type ref to if_ixml_element. - check io_document is bound. + METHOD build_xml. + DATA: lo_theme TYPE REF TO if_ixml_element. + DATA: lo_theme_objdef TYPE REF TO if_ixml_element. + CHECK io_document IS BOUND. lo_theme ?= io_document->get_root_element( ). - check lo_theme is bound. - if objectdefaults is initial. + CHECK lo_theme IS BOUND. + IF objectdefaults IS INITIAL. lo_theme_objdef ?= io_document->create_simple_element_ns( prefix = zcl_excel_theme=>c_theme_prefix name = zcl_excel_theme=>c_theme_object_def parent = lo_theme ). - else. + ELSE. lo_theme->append_child( new_child = objectdefaults ). - endif. - endmethod. "build_xml + ENDIF. + ENDMETHOD. "build_xml -method load. + METHOD load. "! so far copy only existing values objectdefaults ?= io_object_def. - endmethod. "load + ENDMETHOD. "load ENDCLASS. diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index d9dcd13e2..7785e3102 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -910,7 +910,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. DATA l_error TYPE REF TO c_oi_proxy_error. DATA count TYPE i. DATA datac TYPE i. - DATA datareal TYPE i. " exporting column number + DATA datareal TYPE i. " exporting column number DATA vkeycount TYPE i. DATA all TYPE i. DATA mit TYPE i VALUE 1. " index of recent row? diff --git a/src/zcl_excel_worksheet_pagebreaks.clas.abap b/src/zcl_excel_worksheet_pagebreaks.clas.abap index dfa0a9255..354b68207 100644 --- a/src/zcl_excel_worksheet_pagebreaks.clas.abap +++ b/src/zcl_excel_worksheet_pagebreaks.clas.abap @@ -1,50 +1,50 @@ -class ZCL_EXCEL_WORKSHEET_PAGEBREAKS definition - public - create public . - -public section. - - types: - BEGIN OF ts_pagebreak_at , - cell_row TYPE zexcel_cell_row, - cell_column TYPE zexcel_cell_column, - END OF ts_pagebreak_at . - types: - tt_pagebreak_at TYPE HASHED TABLE OF ts_pagebreak_at WITH UNIQUE KEY cell_row cell_column . - - methods ADD_PAGEBREAK - importing - !IP_COLUMN type SIMPLE - !IP_ROW type ZEXCEL_CELL_ROW - raising - ZCX_EXCEL . - methods GET_ALL_PAGEBREAKS - returning - value(RT_PAGEBREAKS) type TT_PAGEBREAK_AT . -protected section. - - data MT_PAGEBREAKS type TT_PAGEBREAK_AT . -private section. +CLASS zcl_excel_worksheet_pagebreaks DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + TYPES: + BEGIN OF ts_pagebreak_at , + cell_row TYPE zexcel_cell_row, + cell_column TYPE zexcel_cell_column, + END OF ts_pagebreak_at . + TYPES: + tt_pagebreak_at TYPE HASHED TABLE OF ts_pagebreak_at WITH UNIQUE KEY cell_row cell_column . + + METHODS add_pagebreak + IMPORTING + !ip_column TYPE simple + !ip_row TYPE zexcel_cell_row + RAISING + zcx_excel . + METHODS get_all_pagebreaks + RETURNING + VALUE(rt_pagebreaks) TYPE tt_pagebreak_at . + PROTECTED SECTION. + + DATA mt_pagebreaks TYPE tt_pagebreak_at . + PRIVATE SECTION. ENDCLASS. -CLASS ZCL_EXCEL_WORKSHEET_PAGEBREAKS IMPLEMENTATION. +CLASS zcl_excel_worksheet_pagebreaks IMPLEMENTATION. -METHOD add_pagebreak. - DATA: ls_pagebreak LIKE LINE OF me->mt_pagebreaks. + METHOD add_pagebreak. + DATA: ls_pagebreak LIKE LINE OF me->mt_pagebreaks. - ls_pagebreak-cell_row = ip_row. - ls_pagebreak-cell_column = zcl_excel_common=>convert_column2int( ip_column ). + ls_pagebreak-cell_row = ip_row. + ls_pagebreak-cell_column = zcl_excel_common=>convert_column2int( ip_column ). - INSERT ls_pagebreak INTO TABLE me->mt_pagebreaks. + INSERT ls_pagebreak INTO TABLE me->mt_pagebreaks. -ENDMETHOD. + ENDMETHOD. -METHOD get_all_pagebreaks. - rt_pagebreaks = me->mt_pagebreaks. -ENDMETHOD. + METHOD get_all_pagebreaks. + rt_pagebreaks = me->mt_pagebreaks. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_worksheets.clas.abap b/src/zcl_excel_worksheets.clas.abap index 103ea547c..d5bb471a7 100644 --- a/src/zcl_excel_worksheets.clas.abap +++ b/src/zcl_excel_worksheets.clas.abap @@ -1,106 +1,106 @@ -class ZCL_EXCEL_WORKSHEETS definition - public - final - create public . +CLASS zcl_excel_worksheets DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_WORKSHEETS *"* do not include other source files here!!! -public section. - - data ACTIVE_WORKSHEET type ZEXCEL_ACTIVE_WORKSHEET value 1. "#EC NOTEXT . . . . . . . . . " . - data NAME type ZEXCEL_WORKSHEETS_NAME value 'Worksheets'. "#EC NOTEXT . . . . . . . . . " . - - methods ADD - importing - !IP_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET . - methods CLEAR . - methods CONSTRUCTOR . - methods GET - importing - !IP_INDEX type ZEXCEL_ACTIVE_WORKSHEET - returning - value(EO_WORKSHEET) type ref to ZCL_EXCEL_WORKSHEET . - methods GET_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . - methods IS_EMPTY - returning - value(IS_EMPTY) type FLAG . - methods REMOVE - importing - !IP_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET . - methods SIZE - returning - value(EP_SIZE) type I . + PUBLIC SECTION. + + DATA active_worksheet TYPE zexcel_active_worksheet VALUE 1. "#EC NOTEXT . . . . . . . . . " . + DATA name TYPE zexcel_worksheets_name VALUE 'Worksheets'. "#EC NOTEXT . . . . . . . . . " . + + METHODS add + IMPORTING + !ip_worksheet TYPE REF TO zcl_excel_worksheet . + METHODS clear . + METHODS constructor . + METHODS get + IMPORTING + !ip_index TYPE zexcel_active_worksheet + RETURNING + VALUE(eo_worksheet) TYPE REF TO zcl_excel_worksheet . + METHODS get_iterator + RETURNING + VALUE(eo_iterator) TYPE REF TO cl_object_collection_iterator . + METHODS is_empty + RETURNING + VALUE(is_empty) TYPE flag . + METHODS remove + IMPORTING + !ip_worksheet TYPE REF TO zcl_excel_worksheet . + METHODS size + RETURNING + VALUE(ep_size) TYPE i . *"* protected components of class ZCL_EXCEL_WORKSHEETS *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_WORKSHEETS *"* do not include other source files here!!! -private section. + PRIVATE SECTION. - data WORKSHEETS type ref to CL_OBJECT_COLLECTION . + DATA worksheets TYPE REF TO cl_object_collection . ENDCLASS. -CLASS ZCL_EXCEL_WORKSHEETS IMPLEMENTATION. +CLASS zcl_excel_worksheets IMPLEMENTATION. -method ADD. + METHOD add. - worksheets->add( ip_worksheet ). + worksheets->add( ip_worksheet ). - endmethod. + ENDMETHOD. -method CLEAR. + METHOD clear. - worksheets->clear( ). + worksheets->clear( ). - endmethod. + ENDMETHOD. -method CONSTRUCTOR. + METHOD constructor. - CREATE OBJECT worksheets. + CREATE OBJECT worksheets. - endmethod. + ENDMETHOD. -method GET. + METHOD get. - DATA lv_index TYPE i. - lv_index = ip_index. - eo_worksheet ?= worksheets->get( lv_index ). + DATA lv_index TYPE i. + lv_index = ip_index. + eo_worksheet ?= worksheets->get( lv_index ). - endmethod. + ENDMETHOD. -method GET_ITERATOR. + METHOD get_iterator. - eo_iterator ?= worksheets->get_iterator( ). + eo_iterator ?= worksheets->get_iterator( ). - endmethod. + ENDMETHOD. -method IS_EMPTY. + METHOD is_empty. - is_empty = worksheets->is_empty( ). + is_empty = worksheets->is_empty( ). - endmethod. + ENDMETHOD. -method REMOVE. + METHOD remove. - worksheets->remove( ip_worksheet ). + worksheets->remove( ip_worksheet ). - endmethod. + ENDMETHOD. -method SIZE. + METHOD size. - ep_size = worksheets->size( ). + ep_size = worksheets->size( ). - endmethod. + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_writer_2007.clas.abap b/src/zcl_excel_writer_2007.clas.abap index 9ac1a7584..e9596686a 100644 --- a/src/zcl_excel_writer_2007.clas.abap +++ b/src/zcl_excel_writer_2007.clas.abap @@ -1,2487 +1,2487 @@ -class ZCL_EXCEL_WRITER_2007 definition - public - create public . +CLASS zcl_excel_writer_2007 DEFINITION + PUBLIC + CREATE PUBLIC . -public section. + PUBLIC SECTION. *"* public components of class ZCL_EXCEL_WRITER_2007 *"* do not include other source files here!!! - interfaces ZIF_EXCEL_WRITER . - METHODS constructor. + INTERFACES zif_excel_writer . + METHODS constructor. -protected section. + PROTECTED SECTION. *"* protected components of class ZCL_EXCEL_WRITER_2007 *"* do not include other source files here!!! - constants C_CONTENT_TYPES type STRING value '[Content_Types].xml'. "#EC NOTEXT - constants C_DOCPROPS_APP type STRING value 'docProps/app.xml'. "#EC NOTEXT - constants C_DOCPROPS_CORE type STRING value 'docProps/core.xml'. "#EC NOTEXT - constants C_RELATIONSHIPS type STRING value '_rels/.rels'. "#EC NOTEXT - constants C_XL_CALCCHAIN type STRING value 'xl/calcChain.xml'. "#EC NOTEXT - constants C_XL_DRAWINGS type STRING value 'xl/drawings/drawing#.xml'. "#EC NOTEXT - constants C_XL_DRAWINGS_RELS type STRING value 'xl/drawings/_rels/drawing#.xml.rels'. "#EC NOTEXT - constants C_XL_RELATIONSHIPS type STRING value 'xl/_rels/workbook.xml.rels'. "#EC NOTEXT - constants C_XL_SHAREDSTRINGS type STRING value 'xl/sharedStrings.xml'. "#EC NOTEXT - constants C_XL_SHEET type STRING value 'xl/worksheets/sheet#.xml'. "#EC NOTEXT - constants C_XL_SHEET_RELS type STRING value 'xl/worksheets/_rels/sheet#.xml.rels'. "#EC NOTEXT - constants C_XL_STYLES type STRING value 'xl/styles.xml'. "#EC NOTEXT - constants C_XL_THEME type STRING value 'xl/theme/theme1.xml'. "#EC NOTEXT - constants C_XL_WORKBOOK type STRING value 'xl/workbook.xml'. "#EC NOTEXT - data EXCEL type ref to ZCL_EXCEL . - data SHARED_STRINGS type ZEXCEL_T_SHARED_STRING . - data STYLES_COND_MAPPING type ZEXCEL_T_STYLES_COND_MAPPING . - data STYLES_MAPPING type ZEXCEL_T_STYLES_MAPPING . - constants C_XL_COMMENTS type STRING value 'xl/comments#.xml'. "#EC NOTEXT - constants CL_XL_DRAWING_FOR_COMMENTS type STRING value 'xl/drawings/vmlDrawing#.vml'. "#EC NOTEXT - constants C_XL_DRAWINGS_VML_RELS type STRING value 'xl/drawings/_rels/vmlDrawing#.vml.rels'. "#EC NOTEXT - data ixml type ref to if_ixml. - - methods CREATE_XL_SHEET_SHEET_DATA - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(RV_IXML_SHEET_DATA_ROOT) type ref to IF_IXML_ELEMENT . - methods ADD_FURTHER_DATA_TO_ZIP - importing - !IO_ZIP type ref to CL_ABAP_ZIP . - methods CREATE - returning - value(EP_EXCEL) type XSTRING . - methods CREATE_CONTENT_TYPES - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_DOCPROPS_APP - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_DOCPROPS_CORE - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_DXF_STYLE - importing - !IV_CELL_STYLE type ZEXCEL_CELL_STYLE - !IO_DXF_ELEMENT type ref to IF_IXML_ELEMENT - !IO_IXML_DOCUMENT type ref to IF_IXML_DOCUMENT - !IT_CELLXFS type ZEXCEL_T_CELLXFS - !IT_FONTS type ZEXCEL_T_STYLE_FONT - !IT_FILLS type ZEXCEL_T_STYLE_FILL - changing - !CV_DFX_COUNT type I . - methods CREATE_RELATIONSHIPS - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_CHARTS - importing - !IO_DRAWING type ref to ZCL_EXCEL_DRAWING - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_COMMENTS - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_DRAWINGS - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_DRAWINGS_RELS - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_DRAWING_ANCHOR - importing - !IO_DRAWING type ref to ZCL_EXCEL_DRAWING - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT - !IP_INDEX type I - returning - value(EP_ANCHOR) type ref to IF_IXML_ELEMENT . - methods CREATE_XL_DRAWING_FOR_COMMENTS - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_RELATIONSHIPS - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_SHAREDSTRINGS - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_SHEET - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - !IV_ACTIVE type FLAG default '' - returning - value(EP_CONTENT) type XSTRING - raising - ZCX_EXCEL . - methods CREATE_XL_SHEET_PAGEBREAKS - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT - !IO_PARENT type ref to IF_IXML_ELEMENT - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - raising - ZCX_EXCEL . - methods CREATE_XL_SHEET_RELS - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - !IV_DRAWING_INDEX type I - !IV_COMMENT_INDEX type I - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_STYLES - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_STYLES_COLOR_NODE - importing - !IO_DOCUMENT type ref to IF_IXML_DOCUMENT - !IO_PARENT type ref to IF_IXML_ELEMENT - !IV_COLOR_ELEM_NAME type STRING default 'color' - !IS_COLOR type ZEXCEL_S_STYLE_COLOR . - methods CREATE_XL_TABLE - importing - !IO_TABLE type ref to ZCL_EXCEL_TABLE - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_THEME - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_WORKBOOK - returning - value(EP_CONTENT) type XSTRING . - methods GET_SHARED_STRING_INDEX - importing - !IP_CELL_VALUE type ZEXCEL_CELL_VALUE - returning - value(EP_INDEX) type INT4 . - methods CREATE_XL_DRAWINGS_VML - returning - value(EP_CONTENT) type XSTRING . - methods SET_VML_STRING - returning - value(EP_CONTENT) type STRING . - methods CREATE_XL_DRAWINGS_VML_RELS - returning - value(EP_CONTENT) type XSTRING . - methods SET_VML_SHAPE_FOOTER - importing - !IS_FOOTER type ZEXCEL_S_WORKSHEET_HEAD_FOOT - returning - value(EP_CONTENT) type STRING . - methods SET_VML_SHAPE_HEADER - importing - !IS_HEADER type ZEXCEL_S_WORKSHEET_HEAD_FOOT - returning - value(EP_CONTENT) type STRING . - methods CREATE_XL_DRAWING_FOR_HDFT_IM - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(EP_CONTENT) type XSTRING . - methods CREATE_XL_DRAWINGS_HDFT_RELS - importing - !IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET - returning - value(EP_CONTENT) type XSTRING . - methods create_xml_document - returning - value(ro_document) type ref to if_ixml_document. - methods render_xml_document - importing - io_document type ref to if_ixml_document - returning - value(ep_content) type xstring. -private section. + CONSTANTS c_content_types TYPE string VALUE '[Content_Types].xml'. "#EC NOTEXT + CONSTANTS c_docprops_app TYPE string VALUE 'docProps/app.xml'. "#EC NOTEXT + CONSTANTS c_docprops_core TYPE string VALUE 'docProps/core.xml'. "#EC NOTEXT + CONSTANTS c_relationships TYPE string VALUE '_rels/.rels'. "#EC NOTEXT + CONSTANTS c_xl_calcchain TYPE string VALUE 'xl/calcChain.xml'. "#EC NOTEXT + CONSTANTS c_xl_drawings TYPE string VALUE 'xl/drawings/drawing#.xml'. "#EC NOTEXT + CONSTANTS c_xl_drawings_rels TYPE string VALUE 'xl/drawings/_rels/drawing#.xml.rels'. "#EC NOTEXT + CONSTANTS c_xl_relationships TYPE string VALUE 'xl/_rels/workbook.xml.rels'. "#EC NOTEXT + CONSTANTS c_xl_sharedstrings TYPE string VALUE 'xl/sharedStrings.xml'. "#EC NOTEXT + CONSTANTS c_xl_sheet TYPE string VALUE 'xl/worksheets/sheet#.xml'. "#EC NOTEXT + CONSTANTS c_xl_sheet_rels TYPE string VALUE 'xl/worksheets/_rels/sheet#.xml.rels'. "#EC NOTEXT + CONSTANTS c_xl_styles TYPE string VALUE 'xl/styles.xml'. "#EC NOTEXT + CONSTANTS c_xl_theme TYPE string VALUE 'xl/theme/theme1.xml'. "#EC NOTEXT + CONSTANTS c_xl_workbook TYPE string VALUE 'xl/workbook.xml'. "#EC NOTEXT + DATA excel TYPE REF TO zcl_excel . + DATA shared_strings TYPE zexcel_t_shared_string . + DATA styles_cond_mapping TYPE zexcel_t_styles_cond_mapping . + DATA styles_mapping TYPE zexcel_t_styles_mapping . + CONSTANTS c_xl_comments TYPE string VALUE 'xl/comments#.xml'. "#EC NOTEXT + CONSTANTS cl_xl_drawing_for_comments TYPE string VALUE 'xl/drawings/vmlDrawing#.vml'. "#EC NOTEXT + CONSTANTS c_xl_drawings_vml_rels TYPE string VALUE 'xl/drawings/_rels/vmlDrawing#.vml.rels'. "#EC NOTEXT + DATA ixml TYPE REF TO if_ixml. + + METHODS create_xl_sheet_sheet_data + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(rv_ixml_sheet_data_root) TYPE REF TO if_ixml_element . + METHODS add_further_data_to_zip + IMPORTING + !io_zip TYPE REF TO cl_abap_zip . + METHODS create + RETURNING + VALUE(ep_excel) TYPE xstring . + METHODS create_content_types + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_docprops_app + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_docprops_core + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_dxf_style + IMPORTING + !iv_cell_style TYPE zexcel_cell_style + !io_dxf_element TYPE REF TO if_ixml_element + !io_ixml_document TYPE REF TO if_ixml_document + !it_cellxfs TYPE zexcel_t_cellxfs + !it_fonts TYPE zexcel_t_style_font + !it_fills TYPE zexcel_t_style_fill + CHANGING + !cv_dfx_count TYPE i . + METHODS create_relationships + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_charts + IMPORTING + !io_drawing TYPE REF TO zcl_excel_drawing + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_comments + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawings + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawings_rels + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawing_anchor + IMPORTING + !io_drawing TYPE REF TO zcl_excel_drawing + !io_document TYPE REF TO if_ixml_document + !ip_index TYPE i + RETURNING + VALUE(ep_anchor) TYPE REF TO if_ixml_element . + METHODS create_xl_drawing_for_comments + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_relationships + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_sharedstrings + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_sheet + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + !iv_active TYPE flag DEFAULT '' + RETURNING + VALUE(ep_content) TYPE xstring + RAISING + zcx_excel . + METHODS create_xl_sheet_pagebreaks + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_parent TYPE REF TO if_ixml_element + !io_worksheet TYPE REF TO zcl_excel_worksheet + RAISING + zcx_excel . + METHODS create_xl_sheet_rels + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + !iv_drawing_index TYPE i + !iv_comment_index TYPE i + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_styles + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_styles_color_node + IMPORTING + !io_document TYPE REF TO if_ixml_document + !io_parent TYPE REF TO if_ixml_element + !iv_color_elem_name TYPE string DEFAULT 'color' + !is_color TYPE zexcel_s_style_color . + METHODS create_xl_table + IMPORTING + !io_table TYPE REF TO zcl_excel_table + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_theme + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_workbook + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS get_shared_string_index + IMPORTING + !ip_cell_value TYPE zexcel_cell_value + RETURNING + VALUE(ep_index) TYPE int4 . + METHODS create_xl_drawings_vml + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS set_vml_string + RETURNING + VALUE(ep_content) TYPE string . + METHODS create_xl_drawings_vml_rels + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS set_vml_shape_footer + IMPORTING + !is_footer TYPE zexcel_s_worksheet_head_foot + RETURNING + VALUE(ep_content) TYPE string . + METHODS set_vml_shape_header + IMPORTING + !is_header TYPE zexcel_s_worksheet_head_foot + RETURNING + VALUE(ep_content) TYPE string . + METHODS create_xl_drawing_for_hdft_im + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xl_drawings_hdft_rels + IMPORTING + !io_worksheet TYPE REF TO zcl_excel_worksheet + RETURNING + VALUE(ep_content) TYPE xstring . + METHODS create_xml_document + RETURNING + VALUE(ro_document) TYPE REF TO if_ixml_document. + METHODS render_xml_document + IMPORTING + io_document TYPE REF TO if_ixml_document + RETURNING + VALUE(ep_content) TYPE xstring. + PRIVATE SECTION. *"* private components of class ZCL_EXCEL_WRITER_2007 *"* do not include other source files here!!! - constants C_OFF type STRING value '0'. "#EC NOTEXT - constants C_ON type STRING value '1'. "#EC NOTEXT - constants C_XL_PRINTERSETTINGS type STRING value 'xl/printerSettings/printerSettings#.bin'. "#EC NOTEXT - - methods FLAG2BOOL - importing - !IP_FLAG type FLAG - returning - value(EP_BOOLEAN) type CHAR5 . + CONSTANTS c_off TYPE string VALUE '0'. "#EC NOTEXT + CONSTANTS c_on TYPE string VALUE '1'. "#EC NOTEXT + CONSTANTS c_xl_printersettings TYPE string VALUE 'xl/printerSettings/printerSettings#.bin'. "#EC NOTEXT + + METHODS flag2bool + IMPORTING + !ip_flag TYPE flag + RETURNING + VALUE(ep_boolean) TYPE char5 . ENDCLASS. -CLASS ZCL_EXCEL_WRITER_2007 IMPLEMENTATION. +CLASS zcl_excel_writer_2007 IMPLEMENTATION. - METHOD CONSTRUCTOR. + METHOD constructor. me->ixml = cl_ixml=>create( ). ENDMETHOD. -METHOD add_further_data_to_zip. + METHOD add_further_data_to_zip. * Can be used by child classes like xlsm-writer to write additional data to zip archive -ENDMETHOD. + ENDMETHOD. -METHOD create. + METHOD create. * Office 2007 file format is a cab of several xml files with extension .xlsx - DATA: lo_zip TYPE REF TO cl_abap_zip, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_active_worksheet TYPE REF TO zcl_excel_worksheet, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_nested_iterator TYPE REF TO cl_object_collection_iterator, - lo_table TYPE REF TO zcl_excel_table, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_drawings TYPE REF TO zcl_excel_drawings, - lo_comment TYPE REF TO zcl_excel_comment, " (+) Issue #180 - lo_comments TYPE REF TO zcl_excel_comments. " (+) Issue #180 - - DATA: lv_content TYPE xstring, - lv_active TYPE flag, - lv_xl_sheet TYPE string, - lv_xl_sheet_rels TYPE string, - lv_xl_drawing_for_comment TYPE string, " (+) Issue #180 - lv_xl_comment TYPE string, " (+) Issue #180 - lv_xl_drawing TYPE string, - lv_xl_drawing_rels TYPE string, - lv_index_str TYPE string, - lv_value TYPE string, - lv_sheet_index TYPE i, - lv_drawing_index TYPE i, - lv_comment_index TYPE i. " (+) Issue #180 + DATA: lo_zip TYPE REF TO cl_abap_zip, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_active_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_nested_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_drawings TYPE REF TO zcl_excel_drawings, + lo_comment TYPE REF TO zcl_excel_comment, " (+) Issue #180 + lo_comments TYPE REF TO zcl_excel_comments. " (+) Issue #180 + + DATA: lv_content TYPE xstring, + lv_active TYPE flag, + lv_xl_sheet TYPE string, + lv_xl_sheet_rels TYPE string, + lv_xl_drawing_for_comment TYPE string, " (+) Issue #180 + lv_xl_comment TYPE string, " (+) Issue #180 + lv_xl_drawing TYPE string, + lv_xl_drawing_rels TYPE string, + lv_index_str TYPE string, + lv_value TYPE string, + lv_sheet_index TYPE i, + lv_drawing_index TYPE i, + lv_comment_index TYPE i. " (+) Issue #180 ********************************************************************** ********************************************************************** * Start of insertion # issue 139 - Dateretention of cellstyles - me->excel->add_static_styles( ). + me->excel->add_static_styles( ). * End of insertion # issue 139 - Dateretention of cellstyles ********************************************************************** * STEP 1: Create archive object file (ZIP) - CREATE OBJECT lo_zip. + CREATE OBJECT lo_zip. ********************************************************************** * STEP 2: Add [Content_Types].xml to zip - lv_content = me->create_content_types( ). - lo_zip->add( name = me->c_content_types - content = lv_content ). + lv_content = me->create_content_types( ). + lo_zip->add( name = me->c_content_types + content = lv_content ). ********************************************************************** * STEP 3: Add _rels/.rels to zip - lv_content = me->create_relationships( ). - lo_zip->add( name = me->c_relationships - content = lv_content ). + lv_content = me->create_relationships( ). + lo_zip->add( name = me->c_relationships + content = lv_content ). ********************************************************************** * STEP 4: Add docProps/app.xml to zip - lv_content = me->create_docprops_app( ). - lo_zip->add( name = me->c_docprops_app - content = lv_content ). + lv_content = me->create_docprops_app( ). + lo_zip->add( name = me->c_docprops_app + content = lv_content ). ********************************************************************** * STEP 5: Add docProps/core.xml to zip - lv_content = me->create_docprops_core( ). - lo_zip->add( name = me->c_docprops_core - content = lv_content ). + lv_content = me->create_docprops_core( ). + lo_zip->add( name = me->c_docprops_core + content = lv_content ). ********************************************************************** * STEP 6: Add xl/_rels/workbook.xml.rels to zip - lv_content = me->create_xl_relationships( ). - lo_zip->add( name = me->c_xl_relationships - content = lv_content ). + lv_content = me->create_xl_relationships( ). + lo_zip->add( name = me->c_xl_relationships + content = lv_content ). ********************************************************************** * STEP 6: Add xl/_rels/workbook.xml.rels to zip - lv_content = me->create_xl_theme( ). - lo_zip->add( name = me->c_xl_theme - content = lv_content ). + lv_content = me->create_xl_theme( ). + lo_zip->add( name = me->c_xl_theme + content = lv_content ). ********************************************************************** * STEP 7: Add xl/workbook.xml to zip - lv_content = me->create_xl_workbook( ). - lo_zip->add( name = me->c_xl_workbook - content = lv_content ). + lv_content = me->create_xl_workbook( ). + lo_zip->add( name = me->c_xl_workbook + content = lv_content ). ********************************************************************** * STEP 8: Add xl/workbook.xml to zip * lv_content = me->create_xl_styles_static( ). - lv_content = me->create_xl_styles( ). - lo_zip->add( name = me->c_xl_styles - content = lv_content ). + lv_content = me->create_xl_styles( ). + lo_zip->add( name = me->c_xl_styles + content = lv_content ). ********************************************************************** * STEP 9: Add sharedStrings.xml to zip - lv_content = me->create_xl_sharedstrings( ). - lo_zip->add( name = me->c_xl_sharedstrings - content = lv_content ). + lv_content = me->create_xl_sharedstrings( ). + lo_zip->add( name = me->c_xl_sharedstrings + content = lv_content ). ********************************************************************** * STEP 10: Add sheet#.xml and drawing#.xml to zip - lo_iterator = me->excel->get_worksheets_iterator( ). - lo_active_worksheet = me->excel->get_active_worksheet( ). + lo_iterator = me->excel->get_worksheets_iterator( ). + lo_active_worksheet = me->excel->get_active_worksheet( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lv_sheet_index = sy-index. - - lo_worksheet ?= lo_iterator->get_next( ). - IF lo_active_worksheet->get_guid( ) EQ lo_worksheet->get_guid( ). - lv_active = abap_true. - ELSE. - lv_active = abap_false. - ENDIF. - lv_content = me->create_xl_sheet( io_worksheet = lo_worksheet - iv_active = lv_active ). - lv_xl_sheet = me->c_xl_sheet. - - lv_index_str = lv_sheet_index. - CONDENSE lv_index_str NO-GAPS. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet WITH lv_index_str. - lo_zip->add( name = lv_xl_sheet - content = lv_content ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lv_sheet_index = sy-index. -* Begin - Add - Issue #180 -* Add comments ********************************** - lo_comments = lo_worksheet->get_comments( ). - IF lo_comments->is_empty( ) = abap_false. - lv_comment_index = lv_comment_index + 1. + lo_worksheet ?= lo_iterator->get_next( ). + IF lo_active_worksheet->get_guid( ) EQ lo_worksheet->get_guid( ). + lv_active = abap_true. + ELSE. + lv_active = abap_false. + ENDIF. + lv_content = me->create_xl_sheet( io_worksheet = lo_worksheet + iv_active = lv_active ). + lv_xl_sheet = me->c_xl_sheet. - " Create comment itself - lv_content = me->create_xl_comments( lo_worksheet ). - lv_xl_comment = me->c_xl_comments. - lv_index_str = lv_comment_index. + lv_index_str = lv_sheet_index. CONDENSE lv_index_str NO-GAPS. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_comment WITH lv_index_str. - lo_zip->add( name = lv_xl_comment + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet WITH lv_index_str. + lo_zip->add( name = lv_xl_sheet content = lv_content ). - " Create vmlDrawing that will host the comment - lv_content = me->create_xl_drawing_for_comments( lo_worksheet ). - lv_xl_drawing_for_comment = me->cl_xl_drawing_for_comments. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_for_comment WITH lv_index_str. - lo_zip->add( name = lv_xl_drawing_for_comment - content = lv_content ). - ENDIF. +* Begin - Add - Issue #180 +* Add comments ********************************** + lo_comments = lo_worksheet->get_comments( ). + IF lo_comments->is_empty( ) = abap_false. + lv_comment_index = lv_comment_index + 1. + + " Create comment itself + lv_content = me->create_xl_comments( lo_worksheet ). + lv_xl_comment = me->c_xl_comments. + lv_index_str = lv_comment_index. + CONDENSE lv_index_str NO-GAPS. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_comment WITH lv_index_str. + lo_zip->add( name = lv_xl_comment + content = lv_content ). + + " Create vmlDrawing that will host the comment + lv_content = me->create_xl_drawing_for_comments( lo_worksheet ). + lv_xl_drawing_for_comment = me->cl_xl_drawing_for_comments. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_for_comment WITH lv_index_str. + lo_zip->add( name = lv_xl_drawing_for_comment + content = lv_content ). + ENDIF. * End - Add - Issue #180 * Add drawings ********************************** - lo_drawings = lo_worksheet->get_drawings( ). - IF lo_drawings->is_empty( ) = abap_false. - lv_drawing_index = lv_drawing_index + 1. - - lv_content = me->create_xl_drawings( lo_worksheet ). - lv_xl_drawing = me->c_xl_drawings. - lv_index_str = lv_drawing_index. - CONDENSE lv_index_str NO-GAPS. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing WITH lv_index_str. - lo_zip->add( name = lv_xl_drawing - content = lv_content ). - - lv_content = me->create_xl_drawings_rels( lo_worksheet ). - lv_xl_drawing_rels = me->c_xl_drawings_rels. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str. - lo_zip->add( name = lv_xl_drawing_rels - content = lv_content ). - ENDIF. + lo_drawings = lo_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lv_drawing_index = lv_drawing_index + 1. + + lv_content = me->create_xl_drawings( lo_worksheet ). + lv_xl_drawing = me->c_xl_drawings. + lv_index_str = lv_drawing_index. + CONDENSE lv_index_str NO-GAPS. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing WITH lv_index_str. + lo_zip->add( name = lv_xl_drawing + content = lv_content ). + + lv_content = me->create_xl_drawings_rels( lo_worksheet ). + lv_xl_drawing_rels = me->c_xl_drawings_rels. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str. + lo_zip->add( name = lv_xl_drawing_rels + content = lv_content ). + ENDIF. * Add Header/Footer image - DATA: lt_drawings TYPE zexcel_t_drawings. - lt_drawings = lo_worksheet->get_header_footer_drawings( ). - IF lines( lt_drawings ) > 0. "Header or footer image exist + DATA: lt_drawings TYPE zexcel_t_drawings. + lt_drawings = lo_worksheet->get_header_footer_drawings( ). + IF lines( lt_drawings ) > 0. "Header or footer image exist + + lv_comment_index = lv_comment_index + 1. + lv_index_str = lv_comment_index. + CONDENSE lv_index_str NO-GAPS. + + " Create vmlDrawing that will host the image + lv_content = me->create_xl_drawing_for_hdft_im( lo_worksheet ). + lv_xl_drawing_for_comment = me->cl_xl_drawing_for_comments. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_for_comment WITH lv_index_str. + lo_zip->add( name = lv_xl_drawing_for_comment + content = lv_content ). + + " Create vmlDrawing REL that will host the image + lv_content = me->create_xl_drawings_hdft_rels( lo_worksheet ). + lv_xl_drawing_rels = me->c_xl_drawings_vml_rels. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str. + lo_zip->add( name = lv_xl_drawing_rels + content = lv_content ). + ENDIF. - lv_comment_index = lv_comment_index + 1. - lv_index_str = lv_comment_index. - CONDENSE lv_index_str NO-GAPS. - " Create vmlDrawing that will host the image - lv_content = me->create_xl_drawing_for_hdft_im( lo_worksheet ). - lv_xl_drawing_for_comment = me->cl_xl_drawing_for_comments. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_for_comment WITH lv_index_str. - lo_zip->add( name = lv_xl_drawing_for_comment - content = lv_content ). + lv_xl_sheet_rels = me->c_xl_sheet_rels. + lv_content = me->create_xl_sheet_rels( io_worksheet = lo_worksheet + iv_drawing_index = lv_drawing_index + iv_comment_index = lv_comment_index ). " (+) Issue #180 - " Create vmlDrawing REL that will host the image - lv_content = me->create_xl_drawings_hdft_rels( lo_worksheet ). - lv_xl_drawing_rels = me->c_xl_drawings_vml_rels. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_index_str. - lo_zip->add( name = lv_xl_drawing_rels + lv_index_str = lv_sheet_index. + CONDENSE lv_index_str NO-GAPS. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet_rels WITH lv_index_str. + lo_zip->add( name = lv_xl_sheet_rels content = lv_content ). - ENDIF. + lo_nested_iterator = lo_worksheet->get_tables_iterator( ). - lv_xl_sheet_rels = me->c_xl_sheet_rels. - lv_content = me->create_xl_sheet_rels( io_worksheet = lo_worksheet - iv_drawing_index = lv_drawing_index - iv_comment_index = lv_comment_index ). " (+) Issue #180 + WHILE lo_nested_iterator->has_next( ) EQ abap_true. + lo_table ?= lo_nested_iterator->get_next( ). + lv_content = me->create_xl_table( lo_table ). - lv_index_str = lv_sheet_index. - CONDENSE lv_index_str NO-GAPS. - REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet_rels WITH lv_index_str. - lo_zip->add( name = lv_xl_sheet_rels - content = lv_content ). + lv_value = lo_table->get_name( ). + CONCATENATE 'xl/tables/' lv_value '.xml' INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDWHILE. - lo_nested_iterator = lo_worksheet->get_tables_iterator( ). - WHILE lo_nested_iterator->has_next( ) EQ abap_true. - lo_table ?= lo_nested_iterator->get_next( ). - lv_content = me->create_xl_table( lo_table ). - lv_value = lo_table->get_name( ). - CONCATENATE 'xl/tables/' lv_value '.xml' INTO lv_value. - lo_zip->add( name = lv_value - content = lv_content ). ENDWHILE. - - - ENDWHILE. - ********************************************************************** * STEP 11: Add media - lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_drawing ?= lo_iterator->get_next( ). + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->get_next( ). * IF lo_drawing->get_type( ) NE zcl_excel_drawing=>type_image_header_footer. - lv_content = lo_drawing->get_media( ). - lv_value = lo_drawing->get_media_name( ). - CONCATENATE 'xl/media/' lv_value INTO lv_value. - lo_zip->add( name = lv_value - content = lv_content ). + lv_content = lo_drawing->get_media( ). + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/media/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). * ENDIF. - ENDWHILE. + ENDWHILE. ********************************************************************** * STEP 12: Add charts - lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_drawing ?= lo_iterator->get_next( ). - - lv_content = lo_drawing->get_media( ). - - "-------------Added by Alessandro Iannacci - Only if template exist - IF lv_content IS NOT INITIAL AND me->excel->use_template EQ abap_true. - lv_value = lo_drawing->get_media_name( ). - CONCATENATE 'xl/charts/' lv_value INTO lv_value. - lo_zip->add( name = lv_value - content = lv_content ). - ELSE. "ADD CUSTOM CHART!!!! - lv_content = me->create_xl_charts( lo_drawing ). - lv_value = lo_drawing->get_media_name( ). - CONCATENATE 'xl/charts/' lv_value INTO lv_value. - lo_zip->add( name = lv_value - content = lv_content ). - ENDIF. - "------------------------------------------------- - ENDWHILE. + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->get_next( ). + + lv_content = lo_drawing->get_media( ). + + "-------------Added by Alessandro Iannacci - Only if template exist + IF lv_content IS NOT INITIAL AND me->excel->use_template EQ abap_true. + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/charts/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ELSE. "ADD CUSTOM CHART!!!! + lv_content = me->create_xl_charts( lo_drawing ). + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/charts/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDIF. + "------------------------------------------------- + ENDWHILE. * Second to last step: Allow further information put into the zip archive by child classes - me->add_further_data_to_zip( lo_zip ). + me->add_further_data_to_zip( lo_zip ). ********************************************************************** * Last step: Create the final zip - ep_excel = lo_zip->save( ). + ep_excel = lo_zip->save( ). -ENDMETHOD. + ENDMETHOD. -method CREATE_CONTENT_TYPES. + METHOD create_content_types. ** Constant node name - DATA: lc_xml_node_types TYPE string VALUE 'Types', - lc_xml_node_override TYPE string VALUE 'Override', - lc_xml_node_default TYPE string VALUE 'Default', - " Node attributes - lc_xml_attr_partname TYPE string VALUE 'PartName', - lc_xml_attr_extension TYPE string VALUE 'Extension', - lc_xml_attr_contenttype TYPE string VALUE 'ContentType', - " Node namespace - lc_xml_node_types_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/content-types', - " Node extension - lc_xml_node_rels_ext TYPE string VALUE 'rels', - lc_xml_node_xml_ext TYPE string VALUE 'xml', - lc_xml_node_xml_vml TYPE string VALUE 'vml', " (+) GGAR - " Node partnumber - lc_xml_node_theme_pn TYPE string VALUE '/xl/theme/theme1.xml', - lc_xml_node_styles_pn TYPE string VALUE '/xl/styles.xml', - lc_xml_node_workb_pn TYPE string VALUE '/xl/workbook.xml', - lc_xml_node_props_pn TYPE string VALUE '/docProps/app.xml', - lc_xml_node_worksheet_pn TYPE string VALUE '/xl/worksheets/sheet#.xml', - lc_xml_node_strings_pn TYPE string VALUE '/xl/sharedStrings.xml', - lc_xml_node_core_pn TYPE string VALUE '/docProps/core.xml', - lc_xml_node_chart_pn TYPE string VALUE '/xl/charts/chart#.xml', - " Node contentType - lc_xml_node_theme_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.theme+xml', - lc_xml_node_styles_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml', - lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml', - lc_xml_node_rels_ct TYPE string VALUE 'application/vnd.openxmlformats-package.relationships+xml', - lc_xml_node_vml_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.vmlDrawing', - lc_xml_node_xml_ct TYPE string VALUE 'application/xml', - lc_xml_node_props_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.extended-properties+xml', - lc_xml_node_worksheet_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml', - lc_xml_node_strings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml', - lc_xml_node_core_ct TYPE string VALUE 'application/vnd.openxmlformats-package.core-properties+xml', - lc_xml_node_table_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml', - lc_xml_node_comments_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml', " (+) GGAR - lc_xml_node_drawings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawing+xml', - lc_xml_node_chart_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_nested_iterator TYPE REF TO cl_object_collection_iterator, - lo_table TYPE REF TO zcl_excel_table. - - DATA: lv_worksheets_num TYPE i, - lv_worksheets_numc TYPE numc3, - lv_xml_node_worksheet_pn TYPE string, - lv_value TYPE string, - lv_comment_index TYPE i VALUE 1, " (+) GGAR - lv_drawing_index TYPE i VALUE 1, - lv_index_str TYPE string. + DATA: lc_xml_node_types TYPE string VALUE 'Types', + lc_xml_node_override TYPE string VALUE 'Override', + lc_xml_node_default TYPE string VALUE 'Default', + " Node attributes + lc_xml_attr_partname TYPE string VALUE 'PartName', + lc_xml_attr_extension TYPE string VALUE 'Extension', + lc_xml_attr_contenttype TYPE string VALUE 'ContentType', + " Node namespace + lc_xml_node_types_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/content-types', + " Node extension + lc_xml_node_rels_ext TYPE string VALUE 'rels', + lc_xml_node_xml_ext TYPE string VALUE 'xml', + lc_xml_node_xml_vml TYPE string VALUE 'vml', " (+) GGAR + " Node partnumber + lc_xml_node_theme_pn TYPE string VALUE '/xl/theme/theme1.xml', + lc_xml_node_styles_pn TYPE string VALUE '/xl/styles.xml', + lc_xml_node_workb_pn TYPE string VALUE '/xl/workbook.xml', + lc_xml_node_props_pn TYPE string VALUE '/docProps/app.xml', + lc_xml_node_worksheet_pn TYPE string VALUE '/xl/worksheets/sheet#.xml', + lc_xml_node_strings_pn TYPE string VALUE '/xl/sharedStrings.xml', + lc_xml_node_core_pn TYPE string VALUE '/docProps/core.xml', + lc_xml_node_chart_pn TYPE string VALUE '/xl/charts/chart#.xml', + " Node contentType + lc_xml_node_theme_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.theme+xml', + lc_xml_node_styles_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml', + lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml', + lc_xml_node_rels_ct TYPE string VALUE 'application/vnd.openxmlformats-package.relationships+xml', + lc_xml_node_vml_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.vmlDrawing', + lc_xml_node_xml_ct TYPE string VALUE 'application/xml', + lc_xml_node_props_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.extended-properties+xml', + lc_xml_node_worksheet_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml', + lc_xml_node_strings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml', + lc_xml_node_core_ct TYPE string VALUE 'application/vnd.openxmlformats-package.core-properties+xml', + lc_xml_node_table_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml', + lc_xml_node_comments_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml', " (+) GGAR + lc_xml_node_drawings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawing+xml', + lc_xml_node_chart_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_nested_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table. + + DATA: lv_worksheets_num TYPE i, + lv_worksheets_numc TYPE numc3, + lv_xml_node_worksheet_pn TYPE string, + lv_value TYPE string, + lv_comment_index TYPE i VALUE 1, " (+) GGAR + lv_drawing_index TYPE i VALUE 1, + lv_index_str TYPE string. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node types - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_types - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_types_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_types + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_types_ns ). ********************************************************************** * STEP 4: Create subnodes - " rels node - lo_element = lo_document->create_simple_element( name = lc_xml_node_default - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_extension - value = lc_xml_node_rels_ext ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_rels_ct ). - lo_element_root->append_child( new_child = lo_element ). - - " extension node - lo_element = lo_document->create_simple_element( name = lc_xml_node_default - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_extension - value = lc_xml_node_xml_ext ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_xml_ct ). - lo_element_root->append_child( new_child = lo_element ). + " rels node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_rels_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_rels_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " extension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_xml_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_xml_ct ). + lo_element_root->append_child( new_child = lo_element ). * Begin - Add - GGAR - " VML node (for comments) - lo_element = lo_document->create_simple_element( name = lc_xml_node_default - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_extension - value = lc_xml_node_xml_vml ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_vml_ct ). - lo_element_root->append_child( new_child = lo_element ). + " VML node (for comments) + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_xml_vml ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_vml_ct ). + lo_element_root->append_child( new_child = lo_element ). * End - Add - GGAR - " Theme node - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lc_xml_node_theme_pn ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_theme_ct ). - lo_element_root->append_child( new_child = lo_element ). - - " Styles node - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lc_xml_node_styles_pn ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_styles_ct ). - lo_element_root->append_child( new_child = lo_element ). - - " Workbook node - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lc_xml_node_workb_pn ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_workb_ct ). - lo_element_root->append_child( new_child = lo_element ). - - " Properties node - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lc_xml_node_props_pn ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_props_ct ). - lo_element_root->append_child( new_child = lo_element ). - - " Worksheet node - lv_worksheets_num = excel->get_worksheets_size( ). - DO lv_worksheets_num TIMES. + " Theme node lo_element = lo_document->create_simple_element( name = lc_xml_node_override parent = lo_document ). - - MOVE sy-index TO lv_worksheets_numc. - SHIFT lv_worksheets_numc LEFT DELETING LEADING '0'. - lv_xml_node_worksheet_pn = lc_xml_node_worksheet_pn. - REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_worksheet_pn WITH lv_worksheets_numc. lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lv_xml_node_worksheet_pn ). + value = lc_xml_node_theme_pn ). lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_worksheet_ct ). + value = lc_xml_node_theme_ct ). lo_element_root->append_child( new_child = lo_element ). - ENDDO. - lo_iterator = me->excel->get_worksheets_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->get_next( ). - - lo_nested_iterator = lo_worksheet->get_tables_iterator( ). + " Styles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_styles_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_styles_ct ). + lo_element_root->append_child( new_child = lo_element ). - WHILE lo_nested_iterator->has_next( ) EQ abap_true. - lo_table ?= lo_nested_iterator->get_next( ). + " Workbook node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_workb_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_workb_ct ). + lo_element_root->append_child( new_child = lo_element ). - lv_value = lo_table->get_name( ). - CONCATENATE '/xl/tables/' lv_value '.xml' INTO lv_value. + " Properties node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_props_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_props_ct ). + lo_element_root->append_child( new_child = lo_element ). + " Worksheet node + lv_worksheets_num = excel->get_worksheets_size( ). + DO lv_worksheets_num TIMES. lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). + parent = lo_document ). + + MOVE sy-index TO lv_worksheets_numc. + SHIFT lv_worksheets_numc LEFT DELETING LEADING '0'. + lv_xml_node_worksheet_pn = lc_xml_node_worksheet_pn. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_worksheet_pn WITH lv_worksheets_numc. lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lv_value ). + value = lv_xml_node_worksheet_pn ). lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_table_ct ). + value = lc_xml_node_worksheet_ct ). lo_element_root->append_child( new_child = lo_element ). - ENDWHILE. + ENDDO. + + lo_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->get_next( ). + + lo_nested_iterator = lo_worksheet->get_tables_iterator( ). + + WHILE lo_nested_iterator->has_next( ) EQ abap_true. + lo_table ?= lo_nested_iterator->get_next( ). + + lv_value = lo_table->get_name( ). + CONCATENATE '/xl/tables/' lv_value '.xml' INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_table_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. * Begin - Add - GGAR - " Comments - DATA: lo_comments TYPE REF TO zcl_excel_comments. + " Comments + DATA: lo_comments TYPE REF TO zcl_excel_comments. - lo_comments = lo_worksheet->get_comments( ). - IF lo_comments->is_empty( ) = abap_false. - lv_index_str = lv_comment_index. - CONDENSE lv_index_str NO-GAPS. - CONCATENATE '/' me->c_xl_comments INTO lv_value. - REPLACE '#' WITH lv_index_str INTO lv_value. + lo_comments = lo_worksheet->get_comments( ). + IF lo_comments->is_empty( ) = abap_false. + lv_index_str = lv_comment_index. + CONDENSE lv_index_str NO-GAPS. + CONCATENATE '/' me->c_xl_comments INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_comments_ct ). - lo_element_root->append_child( new_child = lo_element ). + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_comments_ct ). + lo_element_root->append_child( new_child = lo_element ). - ADD 1 TO lv_comment_index. - ENDIF. + ADD 1 TO lv_comment_index. + ENDIF. * End - Add - GGAR - " Drawings - DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + " Drawings + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. - lo_drawings = lo_worksheet->get_drawings( ). - IF lo_drawings->is_empty( ) = abap_false. - lv_index_str = lv_drawing_index. - CONDENSE lv_index_str NO-GAPS. - CONCATENATE '/' me->c_xl_drawings INTO lv_value. - REPLACE '#' WITH lv_index_str INTO lv_value. + lo_drawings = lo_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lv_index_str = lv_drawing_index. + CONDENSE lv_index_str NO-GAPS. + CONCATENATE '/' me->c_xl_drawings INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_drawings_ct ). - lo_element_root->append_child( new_child = lo_element ). + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_drawings_ct ). + lo_element_root->append_child( new_child = lo_element ). - ADD 1 TO lv_drawing_index. - ENDIF. - ENDWHILE. + ADD 1 TO lv_drawing_index. + ENDIF. + ENDWHILE. - " media mimes - DATA: lo_drawing TYPE REF TO zcl_excel_drawing, - lt_media_type TYPE TABLE OF mimetypes-extension, - lv_media_type TYPE mimetypes-extension, - lv_mime_type TYPE mimetypes-type. + " media mimes + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + lt_media_type TYPE TABLE OF mimetypes-extension, + lv_media_type TYPE mimetypes-extension, + lv_mime_type TYPE mimetypes-type. - lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). - WHILE lo_iterator->has_next( ) = abap_true. - lo_drawing ?= lo_iterator->get_next( ). + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). + WHILE lo_iterator->has_next( ) = abap_true. + lo_drawing ?= lo_iterator->get_next( ). - lv_media_type = lo_drawing->get_media_type( ). - COLLECT lv_media_type INTO lt_media_type. - ENDWHILE. + lv_media_type = lo_drawing->get_media_type( ). + COLLECT lv_media_type INTO lt_media_type. + ENDWHILE. - LOOP AT lt_media_type INTO lv_media_type. - CALL FUNCTION 'SDOK_MIMETYPE_GET' - EXPORTING - extension = lv_media_type - IMPORTING - mimetype = lv_mime_type. + LOOP AT lt_media_type INTO lv_media_type. + CALL FUNCTION 'SDOK_MIMETYPE_GET' + EXPORTING + extension = lv_media_type + IMPORTING + mimetype = lv_mime_type. - lo_element = lo_document->create_simple_element( name = lc_xml_node_default + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lv_value = lv_media_type. + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lv_value ). + lv_value = lv_mime_type. + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDLOOP. + + " Charts + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). + WHILE lo_iterator->has_next( ) = abap_true. + lo_drawing ?= lo_iterator->get_next( ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lv_index_str = lo_drawing->get_index( ). + CONDENSE lv_index_str. + lv_value = lc_xml_node_chart_pn. + REPLACE ALL OCCURRENCES OF '#' IN lv_value WITH lv_index_str. + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_chart_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + + " Strings node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override parent = lo_document ). - lv_value = lv_media_type. - lo_element->set_attribute_ns( name = lc_xml_attr_extension - value = lv_value ). - lv_value = lv_mime_type. + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_strings_pn ). lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lv_value ). + value = lc_xml_node_strings_ct ). lo_element_root->append_child( new_child = lo_element ). - ENDLOOP. - - " Charts - lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). - WHILE lo_iterator->has_next( ) = abap_true. - lo_drawing ?= lo_iterator->get_next( ). + " Strings node lo_element = lo_document->create_simple_element( name = lc_xml_node_override parent = lo_document ). - lv_index_str = lo_drawing->get_index( ). - CONDENSE lv_index_str. - lv_value = lc_xml_node_chart_pn. - REPLACE ALL OCCURRENCES OF '#' IN lv_value WITH lv_index_str. lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lv_value ). + value = lc_xml_node_core_pn ). lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_chart_ct ). + value = lc_xml_node_core_ct ). lo_element_root->append_child( new_child = lo_element ). - ENDWHILE. - - " Strings node - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lc_xml_node_strings_pn ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_strings_ct ). - lo_element_root->append_child( new_child = lo_element ). - - " Strings node - lo_element = lo_document->create_simple_element( name = lc_xml_node_override - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_partname - value = lc_xml_node_core_pn ). - lo_element->set_attribute_ns( name = lc_xml_attr_contenttype - value = lc_xml_node_core_ct ). - lo_element_root->append_child( new_child = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). -endmethod. + ep_content = render_xml_document( lo_document ). + ENDMETHOD. -method CREATE_DOCPROPS_APP. + METHOD create_docprops_app. ** Constant node name - DATA: lc_xml_node_properties TYPE string VALUE 'Properties', - lc_xml_node_application TYPE string VALUE 'Application', - lc_xml_node_docsecurity TYPE string VALUE 'DocSecurity', - lc_xml_node_scalecrop TYPE string VALUE 'ScaleCrop', - lc_xml_node_headingpairs TYPE string VALUE 'HeadingPairs', - lc_xml_node_vector TYPE string VALUE 'vector', - lc_xml_node_variant TYPE string VALUE 'variant', - lc_xml_node_lpstr TYPE string VALUE 'lpstr', - lc_xml_node_i4 TYPE string VALUE 'i4', - lc_xml_node_titlesofparts TYPE string VALUE 'TitlesOfParts', - lc_xml_node_company TYPE string VALUE 'Company', - lc_xml_node_linksuptodate TYPE string VALUE 'LinksUpToDate', - lc_xml_node_shareddoc TYPE string VALUE 'SharedDoc', - lc_xml_node_hyperlinkschanged TYPE string VALUE 'HyperlinksChanged', - lc_xml_node_appversion TYPE string VALUE 'AppVersion', - " Namespace prefix - lc_vt_ns TYPE string VALUE 'vt', - lc_xml_node_props_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties', - lc_xml_node_props_vt_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes', - " Node attributes - lc_xml_attr_size TYPE string VALUE 'size', - lc_xml_attr_basetype TYPE string VALUE 'baseType'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_sub_element_vector TYPE REF TO if_ixml_element, - lo_sub_element_variant TYPE REF TO if_ixml_element, - lo_sub_element_lpstr TYPE REF TO if_ixml_element, - lo_sub_element_i4 TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - - DATA: lv_value TYPE string. + DATA: lc_xml_node_properties TYPE string VALUE 'Properties', + lc_xml_node_application TYPE string VALUE 'Application', + lc_xml_node_docsecurity TYPE string VALUE 'DocSecurity', + lc_xml_node_scalecrop TYPE string VALUE 'ScaleCrop', + lc_xml_node_headingpairs TYPE string VALUE 'HeadingPairs', + lc_xml_node_vector TYPE string VALUE 'vector', + lc_xml_node_variant TYPE string VALUE 'variant', + lc_xml_node_lpstr TYPE string VALUE 'lpstr', + lc_xml_node_i4 TYPE string VALUE 'i4', + lc_xml_node_titlesofparts TYPE string VALUE 'TitlesOfParts', + lc_xml_node_company TYPE string VALUE 'Company', + lc_xml_node_linksuptodate TYPE string VALUE 'LinksUpToDate', + lc_xml_node_shareddoc TYPE string VALUE 'SharedDoc', + lc_xml_node_hyperlinkschanged TYPE string VALUE 'HyperlinksChanged', + lc_xml_node_appversion TYPE string VALUE 'AppVersion', + " Namespace prefix + lc_vt_ns TYPE string VALUE 'vt', + lc_xml_node_props_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties', + lc_xml_node_props_vt_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes', + " Node attributes + lc_xml_attr_size TYPE string VALUE 'size', + lc_xml_attr_basetype TYPE string VALUE 'baseType'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element_vector TYPE REF TO if_ixml_element, + lo_sub_element_variant TYPE REF TO if_ixml_element, + lo_sub_element_lpstr TYPE REF TO if_ixml_element, + lo_sub_element_i4 TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lv_value TYPE string. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node properties - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_properties - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_props_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:vt' - value = lc_xml_node_props_vt_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_properties + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_props_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:vt' + value = lc_xml_node_props_vt_ns ). ********************************************************************** * STEP 4: Create subnodes - " Application - lo_element = lo_document->create_simple_element( name = lc_xml_node_application - parent = lo_document ). - lv_value = excel->zif_excel_book_properties~application. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + " Application + lo_element = lo_document->create_simple_element( name = lc_xml_node_application + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~application. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " DocSecurity - lo_element = lo_document->create_simple_element( name = lc_xml_node_docsecurity - parent = lo_document ). - lv_value = excel->zif_excel_book_properties~docsecurity. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + " DocSecurity + lo_element = lo_document->create_simple_element( name = lc_xml_node_docsecurity + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~docsecurity. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " ScaleCrop - lo_element = lo_document->create_simple_element( name = lc_xml_node_scalecrop - parent = lo_document ). - lv_value = me->flag2bool( excel->zif_excel_book_properties~scalecrop ). - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + " ScaleCrop + lo_element = lo_document->create_simple_element( name = lc_xml_node_scalecrop + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~scalecrop ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " HeadingPairs - lo_element = lo_document->create_simple_element( name = lc_xml_node_headingpairs - parent = lo_document ). + " HeadingPairs + lo_element = lo_document->create_simple_element( name = lc_xml_node_headingpairs + parent = lo_document ). - " * vector node - lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector - prefix = lc_vt_ns - parent = lo_document ). - lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size - value = '2' ). - lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype - value = lc_xml_node_variant ). + " * vector node + lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector + prefix = lc_vt_ns + parent = lo_document ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size + value = '2' ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype + value = lc_xml_node_variant ). + + " ** variant node + lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant + prefix = lc_vt_ns + parent = lo_document ). - " ** variant node - lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant + " *** lpstr node + lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr prefix = lc_vt_ns parent = lo_document ). + lv_value = excel->get_worksheets_name( ). + lo_sub_element_lpstr->set_value( value = lv_value ). + lo_sub_element_variant->append_child( new_child = lo_sub_element_lpstr ). " lpstr node - " *** lpstr node - lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr - prefix = lc_vt_ns - parent = lo_document ). - lv_value = excel->get_worksheets_name( ). - lo_sub_element_lpstr->set_value( value = lv_value ). - lo_sub_element_variant->append_child( new_child = lo_sub_element_lpstr ). " lpstr node + lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node - lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node + " ** variant node + lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant + prefix = lc_vt_ns + parent = lo_document ). - " ** variant node - lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant - prefix = lc_vt_ns - parent = lo_document ). + " *** i4 node + lo_sub_element_i4 = lo_document->create_simple_element_ns( name = lc_xml_node_i4 + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_size( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_i4->set_value( value = lv_value ). + lo_sub_element_variant->append_child( new_child = lo_sub_element_i4 ). " lpstr node - " *** i4 node - lo_sub_element_i4 = lo_document->create_simple_element_ns( name = lc_xml_node_i4 - prefix = lc_vt_ns - parent = lo_document ). - lv_value = excel->get_worksheets_size( ). - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_sub_element_i4->set_value( value = lv_value ). - lo_sub_element_variant->append_child( new_child = lo_sub_element_i4 ). " lpstr node + lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node + + lo_element->append_child( new_child = lo_sub_element_vector ). " vector node - lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node + lo_element_root->append_child( new_child = lo_element ). " HeadingPairs - lo_element->append_child( new_child = lo_sub_element_vector ). " vector node - lo_element_root->append_child( new_child = lo_element ). " HeadingPairs + " TitlesOfParts + lo_element = lo_document->create_simple_element( name = lc_xml_node_titlesofparts + parent = lo_document ). - " TitlesOfParts - lo_element = lo_document->create_simple_element( name = lc_xml_node_titlesofparts - parent = lo_document ). + " * vector node + lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_size( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size + value = lv_value ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype + value = lc_xml_node_lpstr ). + lo_iterator = excel->get_worksheets_iterator( ). - " * vector node - lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector - prefix = lc_vt_ns - parent = lo_document ). - lv_value = excel->get_worksheets_size( ). - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size - value = lv_value ). - lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype - value = lc_xml_node_lpstr ). - - lo_iterator = excel->get_worksheets_iterator( ). - - WHILE lo_iterator->has_next( ) EQ abap_true. - " ** lpstr node - lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr - prefix = lc_vt_ns - parent = lo_document ). - lo_worksheet ?= lo_iterator->get_next( ). - lv_value = lo_worksheet->get_title( ). - lo_sub_element_lpstr->set_value( value = lv_value ). - lo_sub_element_vector->append_child( new_child = lo_sub_element_lpstr ). " lpstr node - ENDWHILE. + WHILE lo_iterator->has_next( ) EQ abap_true. + " ** lpstr node + lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr + prefix = lc_vt_ns + parent = lo_document ). + lo_worksheet ?= lo_iterator->get_next( ). + lv_value = lo_worksheet->get_title( ). + lo_sub_element_lpstr->set_value( value = lv_value ). + lo_sub_element_vector->append_child( new_child = lo_sub_element_lpstr ). " lpstr node + ENDWHILE. - lo_element->append_child( new_child = lo_sub_element_vector ). " vector node + lo_element->append_child( new_child = lo_sub_element_vector ). " vector node - lo_element_root->append_child( new_child = lo_element ). " TitlesOfParts + lo_element_root->append_child( new_child = lo_element ). " TitlesOfParts - " Company - IF excel->zif_excel_book_properties~company IS NOT INITIAL. - lo_element = lo_document->create_simple_element( name = lc_xml_node_company + " Company + IF excel->zif_excel_book_properties~company IS NOT INITIAL. + lo_element = lo_document->create_simple_element( name = lc_xml_node_company + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~company. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + " LinksUpToDate + lo_element = lo_document->create_simple_element( name = lc_xml_node_linksuptodate parent = lo_document ). - lv_value = excel->zif_excel_book_properties~company. + lv_value = me->flag2bool( excel->zif_excel_book_properties~linksuptodate ). lo_element->set_value( value = lv_value ). lo_element_root->append_child( new_child = lo_element ). - ENDIF. - " LinksUpToDate - lo_element = lo_document->create_simple_element( name = lc_xml_node_linksuptodate - parent = lo_document ). - lv_value = me->flag2bool( excel->zif_excel_book_properties~linksuptodate ). - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - - " SharedDoc - lo_element = lo_document->create_simple_element( name = lc_xml_node_shareddoc - parent = lo_document ). - lv_value = me->flag2bool( excel->zif_excel_book_properties~shareddoc ). - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + " SharedDoc + lo_element = lo_document->create_simple_element( name = lc_xml_node_shareddoc + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~shareddoc ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " HyperlinksChanged - lo_element = lo_document->create_simple_element( name = lc_xml_node_hyperlinkschanged - parent = lo_document ). - lv_value = me->flag2bool( excel->zif_excel_book_properties~hyperlinkschanged ). - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + " HyperlinksChanged + lo_element = lo_document->create_simple_element( name = lc_xml_node_hyperlinkschanged + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~hyperlinkschanged ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " AppVersion - lo_element = lo_document->create_simple_element( name = lc_xml_node_appversion - parent = lo_document ). - lv_value = excel->zif_excel_book_properties~appversion. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + " AppVersion + lo_element = lo_document->create_simple_element( name = lc_xml_node_appversion + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~appversion. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). -endmethod. + ep_content = render_xml_document( lo_document ). + ENDMETHOD. -method CREATE_DOCPROPS_CORE. + METHOD create_docprops_core. ** Constant node name - DATA: lc_xml_node_coreproperties TYPE string VALUE 'coreProperties', - lc_xml_node_creator TYPE string VALUE 'creator', - lc_xml_node_description TYPE string VALUE 'description', - lc_xml_node_lastmodifiedby TYPE string VALUE 'lastModifiedBy', - lc_xml_node_created TYPE string VALUE 'created', - lc_xml_node_modified TYPE string VALUE 'modified', - " Node attributes - lc_xml_attr_type TYPE string VALUE 'type', - lc_xml_attr_target TYPE string VALUE 'dcterms:W3CDTF', - " Node namespace - lc_cp_ns TYPE string VALUE 'cp', - lc_dc_ns TYPE string VALUE 'dc', - lc_dcterms_ns TYPE string VALUE 'dcterms', + DATA: lc_xml_node_coreproperties TYPE string VALUE 'coreProperties', + lc_xml_node_creator TYPE string VALUE 'creator', + lc_xml_node_description TYPE string VALUE 'description', + lc_xml_node_lastmodifiedby TYPE string VALUE 'lastModifiedBy', + lc_xml_node_created TYPE string VALUE 'created', + lc_xml_node_modified TYPE string VALUE 'modified', + " Node attributes + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_target TYPE string VALUE 'dcterms:W3CDTF', + " Node namespace + lc_cp_ns TYPE string VALUE 'cp', + lc_dc_ns TYPE string VALUE 'dc', + lc_dcterms_ns TYPE string VALUE 'dcterms', * lc_dcmitype_ns TYPE string VALUE 'dcmitype', - lc_xsi_ns TYPE string VALUE 'xsi', - lc_xml_node_cp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties', - lc_xml_node_dc_ns TYPE string VALUE 'http://purl.org/dc/elements/1.1/', - lc_xml_node_dcterms_ns TYPE string VALUE 'http://purl.org/dc/terms/', - lc_xml_node_dcmitype_ns TYPE string VALUE 'http://purl.org/dc/dcmitype/', - lc_xml_node_xsi_ns TYPE string VALUE 'http://www.w3.org/2001/XMLSchema-instance'. + lc_xsi_ns TYPE string VALUE 'xsi', + lc_xml_node_cp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties', + lc_xml_node_dc_ns TYPE string VALUE 'http://purl.org/dc/elements/1.1/', + lc_xml_node_dcterms_ns TYPE string VALUE 'http://purl.org/dc/terms/', + lc_xml_node_dcmitype_ns TYPE string VALUE 'http://purl.org/dc/dcmitype/', + lc_xml_node_xsi_ns TYPE string VALUE 'http://www.w3.org/2001/XMLSchema-instance'. - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element. + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element. - DATA: lv_value TYPE string, - lv_date TYPE sydatum, - lv_time TYPE syuzeit. + DATA: lv_value TYPE string, + lv_date TYPE sydatum, + lv_time TYPE syuzeit. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node coreProperties - lo_element_root = lo_document->create_simple_element_ns( name = lc_xml_node_coreproperties - prefix = lc_cp_ns - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns:cp' - value = lc_xml_node_cp_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:dc' - value = lc_xml_node_dc_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:dcterms' - value = lc_xml_node_dcterms_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:dcmitype' - value = lc_xml_node_dcmitype_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:xsi' - value = lc_xml_node_xsi_ns ). + lo_element_root = lo_document->create_simple_element_ns( name = lc_xml_node_coreproperties + prefix = lc_cp_ns + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:cp' + value = lc_xml_node_cp_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dc' + value = lc_xml_node_dc_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dcterms' + value = lc_xml_node_dcterms_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dcmitype' + value = lc_xml_node_dcmitype_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:xsi' + value = lc_xml_node_xsi_ns ). ********************************************************************** * STEP 4: Create subnodes - " Creator node - lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_creator - prefix = lc_dc_ns - parent = lo_document ). - lv_value = excel->zif_excel_book_properties~creator. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - - " Description node - lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_description - prefix = lc_dc_ns - parent = lo_document ). - lv_value = excel->zif_excel_book_properties~description. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - - " lastModifiedBy node - lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_lastmodifiedby - prefix = lc_cp_ns - parent = lo_document ). - lv_value = excel->zif_excel_book_properties~lastmodifiedby. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - - " Created node - lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_created - prefix = lc_dcterms_ns - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - prefix = lc_xsi_ns - value = lc_xml_attr_target ). - - CONVERT TIME STAMP excel->zif_excel_book_properties~created TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. - CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. - REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. + " Creator node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_creator + prefix = lc_dc_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~creator. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Description node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_description + prefix = lc_dc_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~description. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " lastModifiedBy node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_lastmodifiedby + prefix = lc_cp_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~lastmodifiedby. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Created node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_created + prefix = lc_dcterms_ns + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + prefix = lc_xsi_ns + value = lc_xml_attr_target ). + + CONVERT TIME STAMP excel->zif_excel_book_properties~created TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. + CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. + REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. * lv_value = excel->zif_excel_book_properties~created. * lv_value = '2010-07-04T14:58:53Z'. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - - " Modified node - lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_modified - prefix = lc_dcterms_ns - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - prefix = lc_xsi_ns - value = lc_xml_attr_target ). - CONVERT TIME STAMP excel->zif_excel_book_properties~modified TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. - CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. - REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Modified node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_modified + prefix = lc_dcterms_ns + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + prefix = lc_xsi_ns + value = lc_xml_attr_target ). + CONVERT TIME STAMP excel->zif_excel_book_properties~modified TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. + CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. + REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. * lv_value = excel->zif_excel_book_properties~modified. * lv_value = '2010-07-04T14:58:53Z'. - lo_element->set_value( value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). -endmethod. - - -METHOD create_dxf_style. - - CONSTANTS: lc_xml_node_dxf TYPE string VALUE 'dxf', - lc_xml_node_font TYPE string VALUE 'font', - lc_xml_node_b TYPE string VALUE 'b', "bold - lc_xml_node_i TYPE string VALUE 'i', "italic - lc_xml_node_u TYPE string VALUE 'u', "underline - lc_xml_node_strike TYPE string VALUE 'strike', "strikethrough - lc_xml_attr_val TYPE string VALUE 'val', - lc_xml_node_fill TYPE string VALUE 'fill', - lc_xml_node_patternfill TYPE string VALUE 'patternFill', - lc_xml_attr_patterntype TYPE string VALUE 'patternType', - lc_xml_node_fgcolor TYPE string VALUE 'fgColor', - lc_xml_node_bgcolor TYPE string VALUE 'bgColor'. - - DATA: ls_styles_mapping TYPE zexcel_s_styles_mapping, - ls_cellxfs TYPE zexcel_s_cellxfs, - ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, - lo_sub_element TYPE REF TO if_ixml_element, - lo_sub_element_2 TYPE REF TO if_ixml_element, - lv_index TYPE i, - ls_font TYPE zexcel_s_style_font, - lo_element_font TYPE REF TO if_ixml_element, - lv_value TYPE string, - ls_fill TYPE zexcel_s_style_fill, - lo_element_fill TYPE REF TO if_ixml_element. - - CHECK iv_cell_style IS NOT INITIAL. - - READ TABLE me->styles_mapping INTO ls_styles_mapping WITH KEY guid = iv_cell_style. - ADD 1 TO ls_styles_mapping-style. " the numbering starts from 0 - READ TABLE it_cellxfs INTO ls_cellxfs INDEX ls_styles_mapping-style. - ADD 1 TO ls_cellxfs-fillid. " the numbering starts from 0 - - READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY style = ls_styles_mapping-style. - IF sy-subrc EQ 0. - ls_style_cond_mapping-guid = iv_cell_style. - APPEND ls_style_cond_mapping TO me->styles_cond_mapping. - ELSE. - ls_style_cond_mapping-guid = iv_cell_style. - ls_style_cond_mapping-style = ls_styles_mapping-style. - ls_style_cond_mapping-dxf = cv_dfx_count. - APPEND ls_style_cond_mapping TO me->styles_cond_mapping. - ADD 1 TO cv_dfx_count. - - " dxf node - lo_sub_element = io_ixml_document->create_simple_element( name = lc_xml_node_dxf - parent = io_ixml_document ). - - "Conditional formatting font style correction by Alessandro Iannacci START - lv_index = ls_cellxfs-fontid + 1. - READ TABLE it_fonts INTO ls_font INDEX lv_index. - IF ls_font IS NOT INITIAL. - lo_element_font = io_ixml_document->create_simple_element( name = lc_xml_node_font - parent = io_ixml_document ). - IF ls_font-bold EQ abap_true. - lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_b - parent = io_ixml_document ). - lo_element_font->append_child( new_child = lo_sub_element_2 ). - ENDIF. - IF ls_font-italic EQ abap_true. - lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_i - parent = io_ixml_document ). - lo_element_font->append_child( new_child = lo_sub_element_2 ). - ENDIF. - IF ls_font-underline EQ abap_true. - lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_u - parent = io_ixml_document ). - lv_value = ls_font-underline_mode. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_val - value = lv_value ). - lo_element_font->append_child( new_child = lo_sub_element_2 ). - ENDIF. - IF ls_font-strikethrough EQ abap_true. - lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_strike - parent = io_ixml_document ). - lo_element_font->append_child( new_child = lo_sub_element_2 ). - ENDIF. - "color - create_xl_styles_color_node( - io_document = io_ixml_document - io_parent = lo_element_font - is_color = ls_font-color ). - lo_sub_element->append_child( new_child = lo_element_font ). - ENDIF. - "---Conditional formatting font style correction by Alessandro Iannacci END + ep_content = render_xml_document( lo_document ). + ENDMETHOD. - READ TABLE it_fills INTO ls_fill INDEX ls_cellxfs-fillid. - IF ls_fill IS NOT INITIAL. - " fill properties - lo_element_fill = io_ixml_document->create_simple_element( name = lc_xml_node_fill + METHOD create_dxf_style. + + CONSTANTS: lc_xml_node_dxf TYPE string VALUE 'dxf', + lc_xml_node_font TYPE string VALUE 'font', + lc_xml_node_b TYPE string VALUE 'b', "bold + lc_xml_node_i TYPE string VALUE 'i', "italic + lc_xml_node_u TYPE string VALUE 'u', "underline + lc_xml_node_strike TYPE string VALUE 'strike', "strikethrough + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_node_fill TYPE string VALUE 'fill', + lc_xml_node_patternfill TYPE string VALUE 'patternFill', + lc_xml_attr_patterntype TYPE string VALUE 'patternType', + lc_xml_node_fgcolor TYPE string VALUE 'fgColor', + lc_xml_node_bgcolor TYPE string VALUE 'bgColor'. + + DATA: ls_styles_mapping TYPE zexcel_s_styles_mapping, + ls_cellxfs TYPE zexcel_s_cellxfs, + ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, + lo_sub_element TYPE REF TO if_ixml_element, + lo_sub_element_2 TYPE REF TO if_ixml_element, + lv_index TYPE i, + ls_font TYPE zexcel_s_style_font, + lo_element_font TYPE REF TO if_ixml_element, + lv_value TYPE string, + ls_fill TYPE zexcel_s_style_fill, + lo_element_fill TYPE REF TO if_ixml_element. + + CHECK iv_cell_style IS NOT INITIAL. + + READ TABLE me->styles_mapping INTO ls_styles_mapping WITH KEY guid = iv_cell_style. + ADD 1 TO ls_styles_mapping-style. " the numbering starts from 0 + READ TABLE it_cellxfs INTO ls_cellxfs INDEX ls_styles_mapping-style. + ADD 1 TO ls_cellxfs-fillid. " the numbering starts from 0 + + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY style = ls_styles_mapping-style. + IF sy-subrc EQ 0. + ls_style_cond_mapping-guid = iv_cell_style. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ELSE. + ls_style_cond_mapping-guid = iv_cell_style. + ls_style_cond_mapping-style = ls_styles_mapping-style. + ls_style_cond_mapping-dxf = cv_dfx_count. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ADD 1 TO cv_dfx_count. + + " dxf node + lo_sub_element = io_ixml_document->create_simple_element( name = lc_xml_node_dxf + parent = io_ixml_document ). + + "Conditional formatting font style correction by Alessandro Iannacci START + lv_index = ls_cellxfs-fontid + 1. + READ TABLE it_fonts INTO ls_font INDEX lv_index. + IF ls_font IS NOT INITIAL. + lo_element_font = io_ixml_document->create_simple_element( name = lc_xml_node_font + parent = io_ixml_document ). + IF ls_font-bold EQ abap_true. + lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_b parent = io_ixml_document ). - "pattern - lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_patternfill - parent = io_ixml_document ). - lv_value = ls_fill-filltype. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_patterntype - value = lv_value ). - " fgcolor - create_xl_styles_color_node( - io_document = io_ixml_document - io_parent = lo_sub_element_2 - is_color = ls_fill-fgcolor - iv_color_elem_name = lc_xml_node_fgcolor ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-italic EQ abap_true. + lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_i + parent = io_ixml_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-underline EQ abap_true. + lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_u + parent = io_ixml_document ). + lv_value = ls_font-underline_mode. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-strikethrough EQ abap_true. + lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_strike + parent = io_ixml_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + "color + create_xl_styles_color_node( + io_document = io_ixml_document + io_parent = lo_element_font + is_color = ls_font-color ). + lo_sub_element->append_child( new_child = lo_element_font ). + ENDIF. + "---Conditional formatting font style correction by Alessandro Iannacci END - IF ls_fill-fgcolor-rgb IS INITIAL AND - ls_fill-fgcolor-indexed EQ zcl_excel_style_color=>c_indexed_not_set AND - ls_fill-fgcolor-theme EQ zcl_excel_style_color=>c_theme_not_set AND - ls_fill-fgcolor-tint IS INITIAL AND ls_fill-bgcolor-indexed EQ zcl_excel_style_color=>c_indexed_sys_foreground. - " bgcolor + READ TABLE it_fills INTO ls_fill INDEX ls_cellxfs-fillid. + IF ls_fill IS NOT INITIAL. + " fill properties + lo_element_fill = io_ixml_document->create_simple_element( name = lc_xml_node_fill + parent = io_ixml_document ). + "pattern + lo_sub_element_2 = io_ixml_document->create_simple_element( name = lc_xml_node_patternfill + parent = io_ixml_document ). + lv_value = ls_fill-filltype. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor create_xl_styles_color_node( io_document = io_ixml_document io_parent = lo_sub_element_2 - is_color = ls_fill-bgcolor - iv_color_elem_name = lc_xml_node_bgcolor ). + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). - ENDIF. + IF ls_fill-fgcolor-rgb IS INITIAL AND + ls_fill-fgcolor-indexed EQ zcl_excel_style_color=>c_indexed_not_set AND + ls_fill-fgcolor-theme EQ zcl_excel_style_color=>c_theme_not_set AND + ls_fill-fgcolor-tint IS INITIAL AND ls_fill-bgcolor-indexed EQ zcl_excel_style_color=>c_indexed_sys_foreground. + + " bgcolor + create_xl_styles_color_node( + io_document = io_ixml_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). + + ENDIF. - lo_element_fill->append_child( new_child = lo_sub_element_2 ). "pattern + lo_element_fill->append_child( new_child = lo_sub_element_2 ). "pattern - lo_sub_element->append_child( new_child = lo_element_fill ). + lo_sub_element->append_child( new_child = lo_element_fill ). + ENDIF. ENDIF. - ENDIF. - io_dxf_element->append_child( new_child = lo_sub_element ). -ENDMETHOD. + io_dxf_element->append_child( new_child = lo_sub_element ). + ENDMETHOD. -method CREATE_RELATIONSHIPS. + METHOD create_relationships. ** Constant node name - DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', - lc_xml_node_relationship TYPE string VALUE 'Relationship', - " Node attributes - lc_xml_attr_id TYPE string VALUE 'Id', - lc_xml_attr_type TYPE string VALUE 'Type', - lc_xml_attr_target TYPE string VALUE 'Target', - " Node namespace - lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', - " Node id - lc_xml_node_rId1_id TYPE string VALUE 'rId1', - lc_xml_node_rId2_id TYPE string VALUE 'rId2', - lc_xml_node_rId3_id TYPE string VALUE 'rId3', - " Node type - lc_xml_node_rId1_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', - lc_xml_node_rId2_tp TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', - lc_xml_node_rId3_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', - " Node target - lc_xml_node_rId1_tg TYPE string VALUE 'xl/workbook.xml', - lc_xml_node_rId2_tg TYPE string VALUE 'docProps/core.xml', - lc_xml_node_rId3_tg TYPE string VALUE 'docProps/app.xml'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element. + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + " Node id + lc_xml_node_rid1_id TYPE string VALUE 'rId1', + lc_xml_node_rid2_id TYPE string VALUE 'rId2', + lc_xml_node_rid3_id TYPE string VALUE 'rId3', + " Node type + lc_xml_node_rid1_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + lc_xml_node_rid2_tp TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + lc_xml_node_rid3_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + " Node target + lc_xml_node_rid1_tg TYPE string VALUE 'xl/workbook.xml', + lc_xml_node_rid2_tg TYPE string VALUE 'docProps/core.xml', + lc_xml_node_rid3_tg TYPE string VALUE 'docProps/app.xml'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_rels_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). ********************************************************************** * STEP 4: Create subnodes - " Theme node - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lc_xml_node_rId3_id ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rId3_tp ). - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lc_xml_node_rId3_tg ). - lo_element_root->append_child( new_child = lo_element ). - - " Styles node - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lc_xml_node_rId2_id ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rId2_tp ). - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lc_xml_node_rId2_tg ). - lo_element_root->append_child( new_child = lo_element ). - - " rels node - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lc_xml_node_rId1_id ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rId1_tp ). - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lc_xml_node_rId1_tg ). - lo_element_root->append_child( new_child = lo_element ). + " Theme node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rid3_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid3_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid3_tg ). + lo_element_root->append_child( new_child = lo_element ). + + " Styles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rid2_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid2_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid2_tg ). + lo_element_root->append_child( new_child = lo_element ). + + " rels node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rid1_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid1_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid1_tg ). + lo_element_root->append_child( new_child = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). -endmethod. + ep_content = render_xml_document( lo_document ). + ENDMETHOD. -METHOD create_xl_charts. + METHOD create_xl_charts. ** Constant node name - CONSTANTS: lc_xml_node_chartspace TYPE string VALUE 'c:chartSpace', - lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', - lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main', - lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', - lc_xml_node_date1904 TYPE string VALUE 'c:date1904', - lc_xml_node_lang TYPE string VALUE 'c:lang', - lc_xml_node_roundedcorners TYPE string VALUE 'c:roundedCorners', - lc_xml_node_altcont TYPE string VALUE 'mc:AlternateContent', - lc_xml_node_altcont_ns_mc TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', - lc_xml_node_choice TYPE string VALUE 'mc:Choice', - lc_xml_node_choice_ns_requires TYPE string VALUE 'c14', - lc_xml_node_choice_ns_c14 TYPE string VALUE 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart', - lc_xml_node_style TYPE string VALUE 'c14:style', - lc_xml_node_fallback TYPE string VALUE 'mc:Fallback', - lc_xml_node_style2 TYPE string VALUE 'c:style', - - "---------------------------CHART - lc_xml_node_chart TYPE string VALUE 'c:chart', - lc_xml_node_autotitledeleted TYPE string VALUE 'c:autoTitleDeleted', - "plotArea - lc_xml_node_plotarea TYPE string VALUE 'c:plotArea', - lc_xml_node_layout TYPE string VALUE 'c:layout', - lc_xml_node_varycolors TYPE string VALUE 'c:varyColors', - lc_xml_node_ser TYPE string VALUE 'c:ser', - lc_xml_node_idx TYPE string VALUE 'c:idx', - lc_xml_node_order TYPE string VALUE 'c:order', - lc_xml_node_tx TYPE string VALUE 'c:tx', - lc_xml_node_v TYPE string VALUE 'c:v', - lc_xml_node_val TYPE string VALUE 'c:val', - lc_xml_node_cat TYPE string VALUE 'c:cat', - lc_xml_node_numref TYPE string VALUE 'c:numRef', - lc_xml_node_strref TYPE string VALUE 'c:strRef', - lc_xml_node_f TYPE string VALUE 'c:f', "this is the range - lc_xml_node_overlap TYPE string VALUE 'c:overlap', - "note: numcache avoided - lc_xml_node_dlbls TYPE string VALUE 'c:dLbls', - lc_xml_node_showlegendkey TYPE string VALUE 'c:showLegendKey', - lc_xml_node_showval TYPE string VALUE 'c:showVal', - lc_xml_node_showcatname TYPE string VALUE 'c:showCatName', - lc_xml_node_showsername TYPE string VALUE 'c:showSerName', - lc_xml_node_showpercent TYPE string VALUE 'c:showPercent', - lc_xml_node_showbubblesize TYPE string VALUE 'c:showBubbleSize', - "plotArea->pie - lc_xml_node_piechart TYPE string VALUE 'c:pieChart', - lc_xml_node_showleaderlines TYPE string VALUE 'c:showLeaderLines', - lc_xml_node_firstsliceang TYPE string VALUE 'c:firstSliceAng', - "plotArea->line - lc_xml_node_linechart TYPE string VALUE 'c:lineChart', - lc_xml_node_symbol TYPE string VALUE 'c:symbol', - lc_xml_node_marker TYPE string VALUE 'c:marker', - lc_xml_node_smooth TYPE string VALUE 'c:smooth', - "plotArea->bar - lc_xml_node_invertifnegative TYPE string VALUE 'c:invertIfNegative', - lc_xml_node_barchart TYPE string VALUE 'c:barChart', - lc_xml_node_bardir TYPE string VALUE 'c:barDir', - lc_xml_node_gapwidth TYPE string VALUE 'c:gapWidth', - "plotArea->line + plotArea->bar - lc_xml_node_grouping TYPE string VALUE 'c:grouping', - lc_xml_node_axid TYPE string VALUE 'c:axId', - lc_xml_node_catax TYPE string VALUE 'c:catAx', - lc_xml_node_valax TYPE string VALUE 'c:valAx', - lc_xml_node_scaling TYPE string VALUE 'c:scaling', - lc_xml_node_orientation TYPE string VALUE 'c:orientation', - lc_xml_node_delete TYPE string VALUE 'c:delete', - lc_xml_node_axpos TYPE string VALUE 'c:axPos', - lc_xml_node_numfmt TYPE string VALUE 'c:numFmt', - lc_xml_node_majorgridlines TYPE string VALUE 'c:majorGridlines', - lc_xml_node_majortickmark TYPE string VALUE 'c:majorTickMark', - lc_xml_node_minortickmark TYPE string VALUE 'c:minorTickMark', - lc_xml_node_ticklblpos TYPE string VALUE 'c:tickLblPos', - lc_xml_node_crossax TYPE string VALUE 'c:crossAx', - lc_xml_node_crosses TYPE string VALUE 'c:crosses', - lc_xml_node_auto TYPE string VALUE 'c:auto', - lc_xml_node_lblalgn TYPE string VALUE 'c:lblAlgn', - lc_xml_node_lbloffset TYPE string VALUE 'c:lblOffset', - lc_xml_node_nomultilvllbl TYPE string VALUE 'c:noMultiLvlLbl', - lc_xml_node_crossbetween TYPE string VALUE 'c:crossBetween', - "legend - lc_xml_node_legend TYPE string VALUE 'c:legend', - "legend->pie - lc_xml_node_legendpos TYPE string VALUE 'c:legendPos', + CONSTANTS: lc_xml_node_chartspace TYPE string VALUE 'c:chartSpace', + lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', + lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main', + lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + lc_xml_node_date1904 TYPE string VALUE 'c:date1904', + lc_xml_node_lang TYPE string VALUE 'c:lang', + lc_xml_node_roundedcorners TYPE string VALUE 'c:roundedCorners', + lc_xml_node_altcont TYPE string VALUE 'mc:AlternateContent', + lc_xml_node_altcont_ns_mc TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + lc_xml_node_choice TYPE string VALUE 'mc:Choice', + lc_xml_node_choice_ns_requires TYPE string VALUE 'c14', + lc_xml_node_choice_ns_c14 TYPE string VALUE 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart', + lc_xml_node_style TYPE string VALUE 'c14:style', + lc_xml_node_fallback TYPE string VALUE 'mc:Fallback', + lc_xml_node_style2 TYPE string VALUE 'c:style', + + "---------------------------CHART + lc_xml_node_chart TYPE string VALUE 'c:chart', + lc_xml_node_autotitledeleted TYPE string VALUE 'c:autoTitleDeleted', + "plotArea + lc_xml_node_plotarea TYPE string VALUE 'c:plotArea', + lc_xml_node_layout TYPE string VALUE 'c:layout', + lc_xml_node_varycolors TYPE string VALUE 'c:varyColors', + lc_xml_node_ser TYPE string VALUE 'c:ser', + lc_xml_node_idx TYPE string VALUE 'c:idx', + lc_xml_node_order TYPE string VALUE 'c:order', + lc_xml_node_tx TYPE string VALUE 'c:tx', + lc_xml_node_v TYPE string VALUE 'c:v', + lc_xml_node_val TYPE string VALUE 'c:val', + lc_xml_node_cat TYPE string VALUE 'c:cat', + lc_xml_node_numref TYPE string VALUE 'c:numRef', + lc_xml_node_strref TYPE string VALUE 'c:strRef', + lc_xml_node_f TYPE string VALUE 'c:f', "this is the range + lc_xml_node_overlap TYPE string VALUE 'c:overlap', + "note: numcache avoided + lc_xml_node_dlbls TYPE string VALUE 'c:dLbls', + lc_xml_node_showlegendkey TYPE string VALUE 'c:showLegendKey', + lc_xml_node_showval TYPE string VALUE 'c:showVal', + lc_xml_node_showcatname TYPE string VALUE 'c:showCatName', + lc_xml_node_showsername TYPE string VALUE 'c:showSerName', + lc_xml_node_showpercent TYPE string VALUE 'c:showPercent', + lc_xml_node_showbubblesize TYPE string VALUE 'c:showBubbleSize', + "plotArea->pie + lc_xml_node_piechart TYPE string VALUE 'c:pieChart', + lc_xml_node_showleaderlines TYPE string VALUE 'c:showLeaderLines', + lc_xml_node_firstsliceang TYPE string VALUE 'c:firstSliceAng', + "plotArea->line + lc_xml_node_linechart TYPE string VALUE 'c:lineChart', + lc_xml_node_symbol TYPE string VALUE 'c:symbol', + lc_xml_node_marker TYPE string VALUE 'c:marker', + lc_xml_node_smooth TYPE string VALUE 'c:smooth', + "plotArea->bar + lc_xml_node_invertifnegative TYPE string VALUE 'c:invertIfNegative', + lc_xml_node_barchart TYPE string VALUE 'c:barChart', + lc_xml_node_bardir TYPE string VALUE 'c:barDir', + lc_xml_node_gapwidth TYPE string VALUE 'c:gapWidth', + "plotArea->line + plotArea->bar + lc_xml_node_grouping TYPE string VALUE 'c:grouping', + lc_xml_node_axid TYPE string VALUE 'c:axId', + lc_xml_node_catax TYPE string VALUE 'c:catAx', + lc_xml_node_valax TYPE string VALUE 'c:valAx', + lc_xml_node_scaling TYPE string VALUE 'c:scaling', + lc_xml_node_orientation TYPE string VALUE 'c:orientation', + lc_xml_node_delete TYPE string VALUE 'c:delete', + lc_xml_node_axpos TYPE string VALUE 'c:axPos', + lc_xml_node_numfmt TYPE string VALUE 'c:numFmt', + lc_xml_node_majorgridlines TYPE string VALUE 'c:majorGridlines', + lc_xml_node_majortickmark TYPE string VALUE 'c:majorTickMark', + lc_xml_node_minortickmark TYPE string VALUE 'c:minorTickMark', + lc_xml_node_ticklblpos TYPE string VALUE 'c:tickLblPos', + lc_xml_node_crossax TYPE string VALUE 'c:crossAx', + lc_xml_node_crosses TYPE string VALUE 'c:crosses', + lc_xml_node_auto TYPE string VALUE 'c:auto', + lc_xml_node_lblalgn TYPE string VALUE 'c:lblAlgn', + lc_xml_node_lbloffset TYPE string VALUE 'c:lblOffset', + lc_xml_node_nomultilvllbl TYPE string VALUE 'c:noMultiLvlLbl', + lc_xml_node_crossbetween TYPE string VALUE 'c:crossBetween', + "legend + lc_xml_node_legend TYPE string VALUE 'c:legend', + "legend->pie + lc_xml_node_legendpos TYPE string VALUE 'c:legendPos', * lc_xml_node_layout TYPE string VALUE 'c:layout', "already exist - lc_xml_node_overlay TYPE string VALUE 'c:overlay', - lc_xml_node_txpr TYPE string VALUE 'c:txPr', - lc_xml_node_bodypr TYPE string VALUE 'a:bodyPr', - lc_xml_node_lststyle TYPE string VALUE 'a:lstStyle', - lc_xml_node_p TYPE string VALUE 'a:p', - lc_xml_node_ppr TYPE string VALUE 'a:pPr', - lc_xml_node_defrpr TYPE string VALUE 'a:defRPr', - lc_xml_node_endpararpr TYPE string VALUE 'a:endParaRPr', - "legend->bar + legend->line - lc_xml_node_plotvisonly TYPE string VALUE 'c:plotVisOnly', - lc_xml_node_dispblanksas TYPE string VALUE 'c:dispBlanksAs', - lc_xml_node_showdlblsovermax TYPE string VALUE 'c:showDLblsOverMax', - "---------------------------END OF CHART - - lc_xml_node_printsettings TYPE string VALUE 'c:printSettings', - lc_xml_node_headerfooter TYPE string VALUE 'c:headerFooter', - lc_xml_node_pagemargins TYPE string VALUE 'c:pageMargins', - lc_xml_node_pagesetup TYPE string VALUE 'c:pageSetup'. - - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element. - - - DATA lo_element TYPE REF TO if_ixml_element. - DATA lo_element2 TYPE REF TO if_ixml_element. - DATA lo_element3 TYPE REF TO if_ixml_element. - DATA lo_el_rootchart TYPE REF TO if_ixml_element. - DATA lo_element4 TYPE REF TO if_ixml_element. - DATA lo_element5 TYPE REF TO if_ixml_element. - DATA lo_element6 TYPE REF TO if_ixml_element. - DATA lo_element7 TYPE REF TO if_ixml_element. + lc_xml_node_overlay TYPE string VALUE 'c:overlay', + lc_xml_node_txpr TYPE string VALUE 'c:txPr', + lc_xml_node_bodypr TYPE string VALUE 'a:bodyPr', + lc_xml_node_lststyle TYPE string VALUE 'a:lstStyle', + lc_xml_node_p TYPE string VALUE 'a:p', + lc_xml_node_ppr TYPE string VALUE 'a:pPr', + lc_xml_node_defrpr TYPE string VALUE 'a:defRPr', + lc_xml_node_endpararpr TYPE string VALUE 'a:endParaRPr', + "legend->bar + legend->line + lc_xml_node_plotvisonly TYPE string VALUE 'c:plotVisOnly', + lc_xml_node_dispblanksas TYPE string VALUE 'c:dispBlanksAs', + lc_xml_node_showdlblsovermax TYPE string VALUE 'c:showDLblsOverMax', + "---------------------------END OF CHART + + lc_xml_node_printsettings TYPE string VALUE 'c:printSettings', + lc_xml_node_headerfooter TYPE string VALUE 'c:headerFooter', + lc_xml_node_pagemargins TYPE string VALUE 'c:pageMargins', + lc_xml_node_pagesetup TYPE string VALUE 'c:pageSetup'. + + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element. + + + DATA lo_element TYPE REF TO if_ixml_element. + DATA lo_element2 TYPE REF TO if_ixml_element. + DATA lo_element3 TYPE REF TO if_ixml_element. + DATA lo_el_rootchart TYPE REF TO if_ixml_element. + DATA lo_element4 TYPE REF TO if_ixml_element. + DATA lo_element5 TYPE REF TO if_ixml_element. + DATA lo_element6 TYPE REF TO if_ixml_element. + DATA lo_element7 TYPE REF TO if_ixml_element. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). *********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_chartspace - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns:c' - value = lc_xml_node_ns_c ). - lo_element_root->set_attribute_ns( name = 'xmlns:a' - value = lc_xml_node_ns_a ). - lo_element_root->set_attribute_ns( name = 'xmlns:r' - value = lc_xml_node_ns_r ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_chartspace + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:c' + value = lc_xml_node_ns_c ). + lo_element_root->set_attribute_ns( name = 'xmlns:a' + value = lc_xml_node_ns_a ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). ********************************************************************** * STEP 4: Create chart - DATA lo_chartb TYPE REF TO zcl_excel_graph_bars. - DATA lo_chartp TYPE REF TO zcl_excel_graph_pie. - DATA lo_chartl TYPE REF TO zcl_excel_graph_line. - DATA lo_chart TYPE REF TO zcl_excel_graph. - - DATA ls_serie TYPE zcl_excel_graph=>s_series. - DATA ls_ax TYPE zcl_excel_graph_bars=>s_ax. - DATA lv_str TYPE string. - - "Identify chart type - CASE io_drawing->graph_type. - WHEN zcl_excel_drawing=>c_graph_bars. - lo_chartb ?= io_drawing->graph. - WHEN zcl_excel_drawing=>c_graph_pie. - lo_chartp ?= io_drawing->graph. - WHEN zcl_excel_drawing=>c_graph_line. - lo_chartl ?= io_drawing->graph. - WHEN OTHERS. - ENDCASE. - - - lo_chart = io_drawing->graph. - - lo_element = lo_document->create_simple_element( name = lc_xml_node_date1904 - parent = lo_element_root ). - lo_element->set_attribute_ns( name = 'val' - value = lo_chart->ns_1904val ). - - lo_element = lo_document->create_simple_element( name = lc_xml_node_lang - parent = lo_element_root ). - lo_element->set_attribute_ns( name = 'val' - value = lo_chart->ns_langval ). - - lo_element = lo_document->create_simple_element( name = lc_xml_node_roundedcorners - parent = lo_element_root ). - lo_element->set_attribute_ns( name = 'val' - value = lo_chart->ns_roundedcornersval ). - - lo_element = lo_document->create_simple_element( name = lc_xml_node_altcont - parent = lo_element_root ). - lo_element->set_attribute_ns( name = 'xmlns:mc' - value = lc_xml_node_altcont_ns_mc ). - - "Choice - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_choice - parent = lo_element ). - lo_element2->set_attribute_ns( name = 'Requires' - value = lc_xml_node_choice_ns_requires ). - lo_element2->set_attribute_ns( name = 'xmlns:c14' - value = lc_xml_node_choice_ns_c14 ). + DATA lo_chartb TYPE REF TO zcl_excel_graph_bars. + DATA lo_chartp TYPE REF TO zcl_excel_graph_pie. + DATA lo_chartl TYPE REF TO zcl_excel_graph_line. + DATA lo_chart TYPE REF TO zcl_excel_graph. - "C14:style - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chart->ns_c14styleval ). + DATA ls_serie TYPE zcl_excel_graph=>s_series. + DATA ls_ax TYPE zcl_excel_graph_bars=>s_ax. + DATA lv_str TYPE string. - "Fallback - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_fallback - parent = lo_element ). + "Identify chart type + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + lo_chartb ?= io_drawing->graph. + WHEN zcl_excel_drawing=>c_graph_pie. + lo_chartp ?= io_drawing->graph. + WHEN zcl_excel_drawing=>c_graph_line. + lo_chartl ?= io_drawing->graph. + WHEN OTHERS. + ENDCASE. - "C:style - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style2 - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chart->ns_styleval ). - - "---------------------------CHART - lo_element = lo_document->create_simple_element( name = lc_xml_node_chart - parent = lo_element_root ). - "Added - IF lo_chart->title IS NOT INITIAL. - lo_element2 = lo_document->create_simple_element( name = 'c:title' + + lo_chart = io_drawing->graph. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_date1904 + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_1904val ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_lang + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_langval ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_roundedcorners + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_roundedcornersval ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_altcont + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'xmlns:mc' + value = lc_xml_node_altcont_ns_mc ). + + "Choice + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_choice + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'Requires' + value = lc_xml_node_choice_ns_requires ). + lo_element2->set_attribute_ns( name = 'xmlns:c14' + value = lc_xml_node_choice_ns_c14 ). + + "C14:style + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chart->ns_c14styleval ). + + "Fallback + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_fallback parent = lo_element ). - lo_element3 = lo_document->create_simple_element( name = 'c:tx' + + "C:style + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style2 parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = 'c:rich' - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = 'a:bodyPr' - parent = lo_element4 ). - lo_element5 = lo_document->create_simple_element( name = 'a:lstStyle' - parent = lo_element4 ). - lo_element5 = lo_document->create_simple_element( name = 'a:p' - parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = 'a:pPr' - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = 'a:defRPr' - parent = lo_element6 ). - lo_element6 = lo_document->create_simple_element( name = 'a:r' - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = 'a:rPr' - parent = lo_element6 ). - lo_element7->set_attribute_ns( name = 'lang' - value = 'en-US' ). - lo_element7 = lo_document->create_simple_element( name = 'a:t' - parent = lo_element6 ). - lo_element7->set_value( value = lo_chart->title ). - ENDIF. - "End - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_autotitledeleted - parent = lo_element ). - lo_element2->set_attribute_ns( name = 'val' - value = lo_chart->ns_autotitledeletedval ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chart->ns_styleval ). + + "---------------------------CHART + lo_element = lo_document->create_simple_element( name = lc_xml_node_chart + parent = lo_element_root ). + "Added + IF lo_chart->title IS NOT INITIAL. + lo_element2 = lo_document->create_simple_element( name = 'c:title' + parent = lo_element ). + lo_element3 = lo_document->create_simple_element( name = 'c:tx' + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = 'c:rich' + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = 'a:bodyPr' + parent = lo_element4 ). + lo_element5 = lo_document->create_simple_element( name = 'a:lstStyle' + parent = lo_element4 ). + lo_element5 = lo_document->create_simple_element( name = 'a:p' + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = 'a:pPr' + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = 'a:defRPr' + parent = lo_element6 ). + lo_element6 = lo_document->create_simple_element( name = 'a:r' + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = 'a:rPr' + parent = lo_element6 ). + lo_element7->set_attribute_ns( name = 'lang' + value = 'en-US' ). + lo_element7 = lo_document->create_simple_element( name = 'a:t' + parent = lo_element6 ). + lo_element7->set_value( value = lo_chart->title ). + ENDIF. + "End + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_autotitledeleted + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_autotitledeletedval ). - "plotArea - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotarea - parent = lo_element ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + "plotArea + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotarea + parent = lo_element ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + "----bar + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_barchart parent = lo_element2 ). - CASE io_drawing->graph_type. - WHEN zcl_excel_drawing=>c_graph_bars. - "----bar - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_barchart - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bardir - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartb->ns_bardirval ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartb->ns_groupingval ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartb->ns_varycolorsval ). - - "series - LOOP AT lo_chartb->series INTO ls_serie. - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx - parent = lo_element4 ). - IF ls_serie-idx IS NOT INITIAL. - lv_str = ls_serie-idx. - ELSE. - lv_str = sy-tabix - 1. - ENDIF. - CONDENSE lv_str. - lo_element5->set_attribute_ns( name = 'val' - value = lv_str ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order - parent = lo_element4 ). - lv_str = ls_serie-order. - CONDENSE lv_str. - lo_element5->set_attribute_ns( name = 'val' - value = lv_str ). - IF ls_serie-sername IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx - parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v - parent = lo_element5 ). - lo_element6->set_value( value = ls_serie-sername ). - ENDIF. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_invertifnegative - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = ls_serie-invertifnegative ). - IF ls_serie-lbl IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bardir + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_bardirval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_groupingval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_varycolorsval ). + + "series + LOOP AT lo_chartb->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f - parent = lo_element6 ). - lo_element7->set_value( value = ls_serie-lbl ). - ENDIF. - IF ls_serie-ref IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f - parent = lo_element6 ). - lo_element7->set_value( value = ls_serie-ref ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_invertifnegative + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_serie-invertifnegative ). + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + ENDLOOP. + "endseries + IF lo_chartb->ns_groupingval = zcl_excel_graph_bars=>c_groupingval_stacked. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_overlap + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = '100' ). ENDIF. - ENDLOOP. - "endseries - IF lo_chartb->ns_groupingval = zcl_excel_graph_bars=>c_groupingval_stacked. - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_overlap - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = '100' ). - ENDIF. - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartb->ns_showlegendkeyval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartb->ns_showvalval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartb->ns_showcatnameval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartb->ns_showsernameval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartb->ns_showpercentval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartb->ns_showbubblesizeval ). - - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_gapwidth - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartb->ns_gapwidthval ). - - "axes - lo_el_rootchart = lo_element3. - LOOP AT lo_chartb->axes INTO ls_ax. - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid - parent = lo_el_rootchart ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axid ). - CASE ls_ax-type. - WHEN zcl_excel_graph_bars=>c_catax. - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axid ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = ls_ax-orientation ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-delete ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axpos ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'formatCode' - value = ls_ax-formatcode ). - lo_element4->set_attribute_ns( name = 'sourceLinked' - value = ls_ax-sourcelinked ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-majortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-minortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-ticklblpos ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crossax ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crosses ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-auto ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-lblalgn ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-lbloffset ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-nomultilvllbl ). - WHEN zcl_excel_graph_bars=>c_valax. - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axid ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = ls_ax-orientation ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-delete ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axpos ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines - parent = lo_element3 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'formatCode' - value = ls_ax-formatcode ). - lo_element4->set_attribute_ns( name = 'sourceLinked' - value = ls_ax-sourcelinked ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-majortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-minortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-ticklblpos ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crossax ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crosses ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crossbetween ). - WHEN OTHERS. - ENDCASE. - ENDLOOP. - "endaxes - - WHEN zcl_excel_drawing=>c_graph_pie. - "----pie - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_piechart - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartp->ns_varycolorsval ). - - "series - LOOP AT lo_chartp->series INTO ls_serie. - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx - parent = lo_element4 ). - IF ls_serie-idx IS NOT INITIAL. - lv_str = ls_serie-idx. - ELSE. - lv_str = sy-tabix - 1. - ENDIF. - CONDENSE lv_str. - lo_element5->set_attribute_ns( name = 'val' - value = lv_str ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order - parent = lo_element4 ). - lv_str = ls_serie-order. - CONDENSE lv_str. - lo_element5->set_attribute_ns( name = 'val' - value = lv_str ). - IF ls_serie-sername IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx - parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v - parent = lo_element5 ). - lo_element6->set_value( value = ls_serie-sername ). - ENDIF. - IF ls_serie-lbl IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f - parent = lo_element6 ). - lo_element7->set_value( value = ls_serie-lbl ). - ENDIF. - IF ls_serie-ref IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f - parent = lo_element6 ). - lo_element7->set_value( value = ls_serie-ref ). - ENDIF. - ENDLOOP. - "endseries - - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartp->ns_showlegendkeyval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartp->ns_showvalval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartp->ns_showcatnameval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartp->ns_showsernameval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartp->ns_showpercentval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartp->ns_showbubblesizeval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showleaderlines - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartp->ns_showleaderlinesval ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_firstsliceang - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartp->ns_firstsliceangval ). - WHEN zcl_excel_drawing=>c_graph_line. - "----line - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_linechart - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartl->ns_groupingval ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartl->ns_varycolorsval ). - - "series - LOOP AT lo_chartl->series INTO ls_serie. - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx - parent = lo_element4 ). - IF ls_serie-idx IS NOT INITIAL. - lv_str = ls_serie-idx. - ELSE. - lv_str = sy-tabix - 1. - ENDIF. - CONDENSE lv_str. lo_element5->set_attribute_ns( name = 'val' - value = lv_str ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order - parent = lo_element4 ). - lv_str = ls_serie-order. - CONDENSE lv_str. + value = lo_chartb->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). lo_element5->set_attribute_ns( name = 'val' - value = lv_str ). - IF ls_serie-sername IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx - parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v - parent = lo_element5 ). - lo_element6->set_value( value = ls_serie-sername ). - ENDIF. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_marker - parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_symbol - parent = lo_element5 ). - lo_element6->set_attribute_ns( name = 'val' - value = ls_serie-symbol ). - IF ls_serie-lbl IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + value = lo_chartb->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f - parent = lo_element6 ). - lo_element7->set_value( value = ls_serie-lbl ). - ENDIF. - IF ls_serie-ref IS NOT INITIAL. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent parent = lo_element4 ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref - parent = lo_element5 ). - lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f - parent = lo_element6 ). - lo_element7->set_value( value = ls_serie-ref ). - ENDIF. - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_smooth + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize parent = lo_element4 ). lo_element5->set_attribute_ns( name = 'val' - value = ls_serie-smooth ). - ENDLOOP. - "endseries - - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartl->ns_showlegendkeyval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartl->ns_showvalval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartl->ns_showcatnameval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartl->ns_showsernameval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartl->ns_showpercentval ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = lo_chartl->ns_showbubblesizeval ). - - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_marker - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartl->ns_markerval ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_smooth - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = lo_chartl->ns_smoothval ). - - "axes - lo_el_rootchart = lo_element3. - LOOP AT lo_chartl->axes INTO ls_ax. - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid - parent = lo_el_rootchart ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axid ). - CASE ls_ax-type. - WHEN zcl_excel_graph_line=>c_catax. - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axid ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = ls_ax-orientation ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-delete ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axpos ). -* lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt -* parent = lo_element3 ). -* lo_element4->set_attribute_ns( name = 'formatCode' -* value = ls_ax-formatcode ). -* lo_element4->set_attribute_ns( name = 'sourceLinked' -* value = ls_ax-sourcelinked ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-majortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-minortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-ticklblpos ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crossax ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crosses ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-auto ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-lblalgn ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-lbloffset ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-nomultilvllbl ). - WHEN zcl_excel_graph_line=>c_valax. - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axid ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling - parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation - parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'val' - value = ls_ax-orientation ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-delete ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-axpos ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines - parent = lo_element3 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'formatCode' - value = ls_ax-formatcode ). - lo_element4->set_attribute_ns( name = 'sourceLinked' - value = ls_ax-sourcelinked ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-majortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-minortickmark ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-ticklblpos ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crossax ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crosses ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween - parent = lo_element3 ). - lo_element4->set_attribute_ns( name = 'val' - value = ls_ax-crossbetween ). - WHEN OTHERS. - ENDCASE. - ENDLOOP. - "endaxes + value = lo_chartb->ns_showbubblesizeval ). - WHEN OTHERS. - ENDCASE. - - "legend - IF lo_chart->print_label EQ abap_true. - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_legend - parent = lo_element ). - CASE io_drawing->graph_type. - WHEN zcl_excel_drawing=>c_graph_bars. - "----bar - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chartb->ns_legendposval ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout - parent = lo_element2 ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chartb->ns_overlayval ). - WHEN zcl_excel_drawing=>c_graph_line. - "----line - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chartl->ns_legendposval ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout - parent = lo_element2 ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chartl->ns_overlayval ). - WHEN zcl_excel_drawing=>c_graph_pie. - "----pie - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chartp->ns_legendposval ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout - parent = lo_element2 ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay - parent = lo_element2 ). - lo_element3->set_attribute_ns( name = 'val' - value = lo_chartp->ns_overlayval ). - lo_element3 = lo_document->create_simple_element( name = lc_xml_node_txpr - parent = lo_element2 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bodypr + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_gapwidth parent = lo_element3 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lststyle + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_gapwidthval ). + + "axes + lo_el_rootchart = lo_element3. + LOOP AT lo_chartb->axes INTO ls_ax. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_el_rootchart ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + CASE ls_ax-type. + WHEN zcl_excel_graph_bars=>c_catax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid parent = lo_element3 ). - lo_element4 = lo_document->create_simple_element( name = lc_xml_node_p + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling parent = lo_element3 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_ppr + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'rtl' - value = lo_chartp->ns_pprrtl ). - lo_element6 = lo_document->create_simple_element( name = lc_xml_node_defrpr - parent = lo_element5 ). - lo_element5 = lo_document->create_simple_element( name = lc_xml_node_endpararpr + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-auto ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lblalgn ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lbloffset ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-nomultilvllbl ). + WHEN zcl_excel_graph_bars=>c_valax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation parent = lo_element4 ). - lo_element5->set_attribute_ns( name = 'lang' - value = lo_chartp->ns_endpararprlang ). - WHEN OTHERS. - ENDCASE. - ENDIF. - - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotvisonly - parent = lo_element ). - lo_element2->set_attribute_ns( name = 'val' - value = lo_chart->ns_plotvisonlyval ). - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_dispblanksas - parent = lo_element ). - lo_element2->set_attribute_ns( name = 'val' - value = lo_chart->ns_dispblanksasval ). - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_showdlblsovermax - parent = lo_element ). - lo_element2->set_attribute_ns( name = 'val' - value = lo_chart->ns_showdlblsovermaxval ). - "---------------------------END OF CHART - - "printSettings - lo_element = lo_document->create_simple_element( name = lc_xml_node_printsettings - parent = lo_element_root ). - "headerFooter - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_headerfooter - parent = lo_element ). - "pageMargins - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagemargins - parent = lo_element ). - lo_element2->set_attribute_ns( name = 'b' - value = lo_chart->pagemargins-b ). - lo_element2->set_attribute_ns( name = 'l' - value = lo_chart->pagemargins-l ). - lo_element2->set_attribute_ns( name = 'r' - value = lo_chart->pagemargins-r ). - lo_element2->set_attribute_ns( name = 't' - value = lo_chart->pagemargins-t ). - lo_element2->set_attribute_ns( name = 'header' - value = lo_chart->pagemargins-header ). - lo_element2->set_attribute_ns( name = 'footer' - value = lo_chart->pagemargins-footer ). - "pageSetup - lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagesetup - parent = lo_element ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossbetween ). + WHEN OTHERS. + ENDCASE. + ENDLOOP. + "endaxes + + WHEN zcl_excel_drawing=>c_graph_pie. + "----pie + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_piechart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartp->ns_varycolorsval ). + + "series + LOOP AT lo_chartp->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showbubblesizeval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showleaderlines + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showleaderlinesval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_firstsliceang + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartp->ns_firstsliceangval ). + WHEN zcl_excel_drawing=>c_graph_line. + "----line + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_linechart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_groupingval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_varycolorsval ). + + "series + LOOP AT lo_chartl->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_marker + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_symbol + parent = lo_element5 ). + lo_element6->set_attribute_ns( name = 'val' + value = ls_serie-symbol ). + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_smooth + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_serie-smooth ). + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showbubblesizeval ). + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_marker + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_markerval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_smooth + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_smoothval ). + + "axes + lo_el_rootchart = lo_element3. + LOOP AT lo_chartl->axes INTO ls_ax. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_el_rootchart ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + CASE ls_ax-type. + WHEN zcl_excel_graph_line=>c_catax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). +* lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt +* parent = lo_element3 ). +* lo_element4->set_attribute_ns( name = 'formatCode' +* value = ls_ax-formatcode ). +* lo_element4->set_attribute_ns( name = 'sourceLinked' +* value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-auto ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lblalgn ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lbloffset ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-nomultilvllbl ). + WHEN zcl_excel_graph_line=>c_valax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossbetween ). + WHEN OTHERS. + ENDCASE. + ENDLOOP. + "endaxes + + WHEN OTHERS. + ENDCASE. + + "legend + IF lo_chart->print_label EQ abap_true. + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_legend + parent = lo_element ). + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + "----bar + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartb->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartb->ns_overlayval ). + WHEN zcl_excel_drawing=>c_graph_line. + "----line + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartl->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartl->ns_overlayval ). + WHEN zcl_excel_drawing=>c_graph_pie. + "----pie + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartp->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartp->ns_overlayval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_txpr + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bodypr + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lststyle + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_p + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_ppr + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'rtl' + value = lo_chartp->ns_pprrtl ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_defrpr + parent = lo_element5 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_endpararpr + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'lang' + value = lo_chartp->ns_endpararprlang ). + WHEN OTHERS. + ENDCASE. + ENDIF. + + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotvisonly + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_plotvisonlyval ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_dispblanksas + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_dispblanksasval ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_showdlblsovermax + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_showdlblsovermaxval ). + "---------------------------END OF CHART + + "printSettings + lo_element = lo_document->create_simple_element( name = lc_xml_node_printsettings + parent = lo_element_root ). + "headerFooter + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_headerfooter + parent = lo_element ). + "pageMargins + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagemargins + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'b' + value = lo_chart->pagemargins-b ). + lo_element2->set_attribute_ns( name = 'l' + value = lo_chart->pagemargins-l ). + lo_element2->set_attribute_ns( name = 'r' + value = lo_chart->pagemargins-r ). + lo_element2->set_attribute_ns( name = 't' + value = lo_chart->pagemargins-t ). + lo_element2->set_attribute_ns( name = 'header' + value = lo_chart->pagemargins-header ). + lo_element2->set_attribute_ns( name = 'footer' + value = lo_chart->pagemargins-footer ). + "pageSetup + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagesetup + parent = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ep_content = render_xml_document( lo_document ). + ENDMETHOD. -METHOD create_xl_comments. + METHOD create_xl_comments. ** Constant node name - CONSTANTS: lc_xml_node_comments TYPE string VALUE 'comments', - lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - " authors - lc_xml_node_author TYPE string VALUE 'author', - lc_xml_node_authors TYPE string VALUE 'authors', - " comments - lc_xml_node_commentlist TYPE string VALUE 'commentList', - lc_xml_node_comment TYPE string VALUE 'comment', - lc_xml_node_text TYPE string VALUE 'text', - lc_xml_node_r TYPE string VALUE 'r', - lc_xml_node_rpr TYPE string VALUE 'rPr', - lc_xml_node_b TYPE string VALUE 'b', - lc_xml_node_sz TYPE string VALUE 'sz', - lc_xml_node_color TYPE string VALUE 'color', - lc_xml_node_rfont TYPE string VALUE 'rFont', + CONSTANTS: lc_xml_node_comments TYPE string VALUE 'comments', + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + " authors + lc_xml_node_author TYPE string VALUE 'author', + lc_xml_node_authors TYPE string VALUE 'authors', + " comments + lc_xml_node_commentlist TYPE string VALUE 'commentList', + lc_xml_node_comment TYPE string VALUE 'comment', + lc_xml_node_text TYPE string VALUE 'text', + lc_xml_node_r TYPE string VALUE 'r', + lc_xml_node_rpr TYPE string VALUE 'rPr', + lc_xml_node_b TYPE string VALUE 'b', + lc_xml_node_sz TYPE string VALUE 'sz', + lc_xml_node_color TYPE string VALUE 'color', + lc_xml_node_rfont TYPE string VALUE 'rFont', * lc_xml_node_charset TYPE string VALUE 'charset', - lc_xml_node_family TYPE string VALUE 'family', - lc_xml_node_t TYPE string VALUE 't', - " comments attributes - lc_xml_attr_ref TYPE string VALUE 'ref', - lc_xml_attr_authorid TYPE string VALUE 'authorId', - lc_xml_attr_val TYPE string VALUE 'val', - lc_xml_attr_indexed TYPE string VALUE 'indexed', - lc_xml_attr_xmlspacing TYPE string VALUE 'xml:space'. - - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element_authors TYPE REF TO if_ixml_element, - lo_element_author TYPE REF TO if_ixml_element, - lo_element_commentlist TYPE REF TO if_ixml_element, - lo_element_comment TYPE REF TO if_ixml_element, - lo_element_text TYPE REF TO if_ixml_element, - lo_element_r TYPE REF TO if_ixml_element, - lo_element_rpr TYPE REF TO if_ixml_element, - lo_element_b TYPE REF TO if_ixml_element, - lo_element_sz TYPE REF TO if_ixml_element, - lo_element_color TYPE REF TO if_ixml_element, - lo_element_rfont TYPE REF TO if_ixml_element, + lc_xml_node_family TYPE string VALUE 'family', + lc_xml_node_t TYPE string VALUE 't', + " comments attributes + lc_xml_attr_ref TYPE string VALUE 'ref', + lc_xml_attr_authorid TYPE string VALUE 'authorId', + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_attr_indexed TYPE string VALUE 'indexed', + lc_xml_attr_xmlspacing TYPE string VALUE 'xml:space'. + + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_authors TYPE REF TO if_ixml_element, + lo_element_author TYPE REF TO if_ixml_element, + lo_element_commentlist TYPE REF TO if_ixml_element, + lo_element_comment TYPE REF TO if_ixml_element, + lo_element_text TYPE REF TO if_ixml_element, + lo_element_r TYPE REF TO if_ixml_element, + lo_element_rpr TYPE REF TO if_ixml_element, + lo_element_b TYPE REF TO if_ixml_element, + lo_element_sz TYPE REF TO if_ixml_element, + lo_element_color TYPE REF TO if_ixml_element, + lo_element_rfont TYPE REF TO if_ixml_element, * lo_element_charset TYPE REF TO if_ixml_element, - lo_element_family TYPE REF TO if_ixml_element, - lo_element_t TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_comments TYPE REF TO zcl_excel_comments, - lo_comment TYPE REF TO zcl_excel_comment. - DATA: lv_rel_id TYPE i, - lv_author TYPE string. - - DEFINE add_1_val_child_node. + lo_element_family TYPE REF TO if_ixml_element, + lo_element_t TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_comments TYPE REF TO zcl_excel_comments, + lo_comment TYPE REF TO zcl_excel_comment. + DATA: lv_rel_id TYPE i, + lv_author TYPE string. + + DEFINE add_1_val_child_node. * &1: parent element * &2: child element * &3: element name * &4: attribute name * &5: attribute value - &2 = lo_document->create_simple_element( name = &3 - parent = lo_document ). - IF &4 IS NOT INITIAL. - &2->set_attribute_ns( name = &4 - value = &5 ). - ENDIF. - &1->append_child( new_child = &2 ). - END-OF-DEFINITION. + &2 = lo_document->create_simple_element( name = &3 + parent = lo_document ). + IF &4 IS NOT INITIAL. + &2->set_attribute_ns( name = &4 + value = &5 ). + ENDIF. + &1->append_child( new_child = &2 ). + END-OF-DEFINITION. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). *********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_comments - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_comments + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). ********************************************************************** * STEP 4: Create authors * TO-DO: management of several authors - lo_element_authors = lo_document->create_simple_element( name = lc_xml_node_authors - parent = lo_document ). + lo_element_authors = lo_document->create_simple_element( name = lc_xml_node_authors + parent = lo_document ). - lo_element_author = lo_document->create_simple_element( name = lc_xml_node_author - parent = lo_document ). - lv_author = sy-uname. - lo_element_author->set_value( lv_author ). + lo_element_author = lo_document->create_simple_element( name = lc_xml_node_author + parent = lo_document ). + lv_author = sy-uname. + lo_element_author->set_value( lv_author ). - lo_element_authors->append_child( new_child = lo_element_author ). - lo_element_root->append_child( new_child = lo_element_authors ). + lo_element_authors->append_child( new_child = lo_element_author ). + lo_element_root->append_child( new_child = lo_element_authors ). ********************************************************************** * STEP 5: Create comments - lo_element_commentlist = lo_document->create_simple_element( name = lc_xml_node_commentlist - parent = lo_document ). + lo_element_commentlist = lo_document->create_simple_element( name = lc_xml_node_commentlist + parent = lo_document ). - lo_comments = io_worksheet->get_comments( ). + lo_comments = io_worksheet->get_comments( ). - lo_iterator = lo_comments->get_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_comment ?= lo_iterator->get_next( ). + lo_iterator = lo_comments->get_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_comment ?= lo_iterator->get_next( ). - lo_element_comment = lo_document->create_simple_element( name = lc_xml_node_comment - parent = lo_document ). - lo_element_comment->set_attribute_ns( name = lc_xml_attr_ref - value = lo_comment->get_ref( ) ). - lo_element_comment->set_attribute_ns( name = lc_xml_attr_authorid - value = '0' ). " TO-DO + lo_element_comment = lo_document->create_simple_element( name = lc_xml_node_comment + parent = lo_document ). + lo_element_comment->set_attribute_ns( name = lc_xml_attr_ref + value = lo_comment->get_ref( ) ). + lo_element_comment->set_attribute_ns( name = lc_xml_attr_authorid + value = '0' ). " TO-DO - lo_element_text = lo_document->create_simple_element( name = lc_xml_node_text - parent = lo_document ). - lo_element_r = lo_document->create_simple_element( name = lc_xml_node_r - parent = lo_document ). - lo_element_rpr = lo_document->create_simple_element( name = lc_xml_node_rpr - parent = lo_document ). + lo_element_text = lo_document->create_simple_element( name = lc_xml_node_text + parent = lo_document ). + lo_element_r = lo_document->create_simple_element( name = lc_xml_node_r + parent = lo_document ). + lo_element_rpr = lo_document->create_simple_element( name = lc_xml_node_rpr + parent = lo_document ). - lo_element_b = lo_document->create_simple_element( name = lc_xml_node_b - parent = lo_document ). - lo_element_rpr->append_child( new_child = lo_element_b ). + lo_element_b = lo_document->create_simple_element( name = lc_xml_node_b + parent = lo_document ). + lo_element_rpr->append_child( new_child = lo_element_b ). - add_1_val_child_node lo_element_rpr: lo_element_sz lc_xml_node_sz lc_xml_attr_val '9', - lo_element_color lc_xml_node_color lc_xml_attr_indexed '81', - lo_element_rfont lc_xml_node_rfont lc_xml_attr_val 'Tahoma', - lo_element_family lc_xml_node_family lc_xml_attr_val '2' + add_1_val_child_node lo_element_rpr: lo_element_sz lc_xml_node_sz lc_xml_attr_val '9', + lo_element_color lc_xml_node_color lc_xml_attr_indexed '81', + lo_element_rfont lc_xml_node_rfont lc_xml_attr_val 'Tahoma', + lo_element_family lc_xml_node_family lc_xml_attr_val '2' * lo_element_charset lc_xml_node_charset lc_xml_attr_val '1' - . + . - lo_element_r->append_child( new_child = lo_element_rpr ). + lo_element_r->append_child( new_child = lo_element_rpr ). - lo_element_t = lo_document->create_simple_element( name = lc_xml_node_t - parent = lo_document ). - lo_element_t->set_attribute_ns( name = lc_xml_attr_xmlspacing - value = 'preserve' ). - lo_element_t->set_value( lo_comment->get_text( ) ). - lo_element_r->append_child( new_child = lo_element_t ). - - lo_element_text->append_child( new_child = lo_element_r ). - lo_element_comment->append_child( new_child = lo_element_text ). - lo_element_commentlist->append_child( new_child = lo_element_comment ). - ENDWHILE. + lo_element_t = lo_document->create_simple_element( name = lc_xml_node_t + parent = lo_document ). + lo_element_t->set_attribute_ns( name = lc_xml_attr_xmlspacing + value = 'preserve' ). + lo_element_t->set_value( lo_comment->get_text( ) ). + lo_element_r->append_child( new_child = lo_element_t ). + + lo_element_text->append_child( new_child = lo_element_r ). + lo_element_comment->append_child( new_child = lo_element_text ). + lo_element_commentlist->append_child( new_child = lo_element_comment ). + ENDWHILE. - lo_element_root->append_child( new_child = lo_element_commentlist ). + lo_element_root->append_child( new_child = lo_element_commentlist ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -method CREATE_XL_DRAWINGS. + METHOD create_xl_drawings. ** Constant node name - CONSTANTS: lc_xml_node_wsdr TYPE string VALUE 'xdr:wsDr', - lc_xml_node_ns_xdr TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', - lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main'. + CONSTANTS: lc_xml_node_wsdr TYPE string VALUE 'xdr:wsDr', + lc_xml_node_ns_xdr TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', + lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main'. - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element_cellanchor TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_drawings TYPE REF TO zcl_excel_drawings, - lo_drawing TYPE REF TO zcl_excel_drawing. - DATA: lv_rel_id TYPE i. + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_cellanchor TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawings TYPE REF TO zcl_excel_drawings, + lo_drawing TYPE REF TO zcl_excel_drawing. + DATA: lv_rel_id TYPE i. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). *********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_wsdr - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns:xdr' - value = lc_xml_node_ns_xdr ). - lo_element_root->set_attribute_ns( name = 'xmlns:a' - value = lc_xml_node_ns_a ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_wsdr + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:xdr' + value = lc_xml_node_ns_xdr ). + lo_element_root->set_attribute_ns( name = 'xmlns:a' + value = lc_xml_node_ns_a ). ********************************************************************** * STEP 4: Create drawings - CLEAR: lv_rel_id. + CLEAR: lv_rel_id. - lo_drawings = io_worksheet->get_drawings( ). + lo_drawings = io_worksheet->get_drawings( ). - lo_iterator = lo_drawings->get_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_drawing ?= lo_iterator->get_next( ). + lo_iterator = lo_drawings->get_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->get_next( ). - ADD 1 TO lv_rel_id. - lo_element_cellanchor = me->create_xl_drawing_anchor( - io_drawing = lo_drawing - io_document = lo_document - ip_index = lv_rel_id ). + ADD 1 TO lv_rel_id. + lo_element_cellanchor = me->create_xl_drawing_anchor( + io_drawing = lo_drawing + io_document = lo_document + ip_index = lv_rel_id ). - lo_element_root->append_child( new_child = lo_element_cellanchor ). + lo_element_root->append_child( new_child = lo_element_cellanchor ). - ENDWHILE. + ENDWHILE. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -endmethod. + ENDMETHOD. -METHOD create_xl_drawings_hdft_rels. + METHOD create_xl_drawings_hdft_rels. ** Constant node name - DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', - lc_xml_node_relationship TYPE string VALUE 'Relationship', - " Node attributes - lc_xml_attr_id TYPE string VALUE 'Id', - lc_xml_attr_type TYPE string VALUE 'Type', - lc_xml_attr_target TYPE string VALUE 'Target', - " Node namespace - lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', - lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', - lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. - - DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lv_value TYPE string, - lv_relation_id TYPE i, - lt_temp TYPE strtable, - lt_drawings TYPE zexcel_t_drawings. - - FIELD-SYMBOLS: TYPE sstrtable, - TYPE zexcel_s_drawings. + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. + + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lv_value TYPE string, + lv_relation_id TYPE i, + lt_temp TYPE strtable, + lt_drawings TYPE zexcel_t_drawings. + + FIELD-SYMBOLS: TYPE sstrtable, + TYPE zexcel_s_drawings. * BODY ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_rels_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). ********************************************************************** * STEP 4: Create subnodes @@ -2489,141 +2489,141 @@ METHOD create_xl_drawings_hdft_rels. ********************************************************************** - lt_drawings = io_worksheet->get_header_footer_drawings( ). - LOOP AT lt_drawings ASSIGNING . "Header or footer image exist - ADD 1 TO lv_relation_id. + lt_drawings = io_worksheet->get_header_footer_drawings( ). + LOOP AT lt_drawings ASSIGNING . "Header or footer image exist + ADD 1 TO lv_relation_id. * lv_value = lv_relation_id. - lv_value = -drawing->get_index( ). - READ TABLE lt_temp WITH KEY str = lv_value TRANSPORTING NO FIELDS. - IF sy-subrc NE 0. - APPEND INITIAL LINE TO lt_temp ASSIGNING . - -row_index = sy-tabix. - -str = lv_value. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id + lv_value = -drawing->get_index( ). + READ TABLE lt_temp WITH KEY str = lv_value TRANSPORTING NO FIELDS. + IF sy-subrc NE 0. + APPEND INITIAL LINE TO lt_temp ASSIGNING . + -row_index = sy-tabix. + -str = lv_value. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id * value = 'LOGO' ). - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_image_tp ). + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_image_tp ). - lv_value = '../media/#'. - REPLACE '#' IN lv_value WITH -drawing->get_media_name( ). - lo_element->set_attribute_ns( name = lc_xml_attr_target + lv_value = '../media/#'. + REPLACE '#' IN lv_value WITH -drawing->get_media_name( ). + lo_element->set_attribute_ns( name = lc_xml_attr_target * value = '../media/LOGO.png' ). - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. - ENDLOOP. + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + ENDLOOP. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. "create_xl_drawings_hdft_rels + ENDMETHOD. "create_xl_drawings_hdft_rels -method CREATE_XL_DRAWINGS_RELS. + METHOD create_xl_drawings_rels. ** Constant node name - DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', - lc_xml_node_relationship TYPE string VALUE 'Relationship', - " Node attributes - lc_xml_attr_id TYPE string VALUE 'Id', - lc_xml_attr_type TYPE string VALUE 'Type', - lc_xml_attr_target TYPE string VALUE 'Target', - " Node namespace - lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', - lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', - lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_drawings TYPE REF TO zcl_excel_drawings, - lo_drawing TYPE REF TO zcl_excel_drawing. - - DATA: lv_value TYPE string, - lv_counter TYPE i. + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawings TYPE REF TO zcl_excel_drawings, + lo_drawing TYPE REF TO zcl_excel_drawing. + + DATA: lv_value TYPE string, + lv_counter TYPE i. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_rels_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). ********************************************************************** * STEP 4: Create subnodes - " Add sheet Relationship nodes here - lv_counter = 0. - lo_drawings = io_worksheet->get_drawings( ). - lo_iterator = lo_drawings->get_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_drawing ?= lo_iterator->get_next( ). - ADD 1 TO lv_counter. + " Add sheet Relationship nodes here + lv_counter = 0. + lo_drawings = io_worksheet->get_drawings( ). + lo_iterator = lo_drawings->get_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->get_next( ). + ADD 1 TO lv_counter. - lv_value = lv_counter. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. + lv_value = lv_counter. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). - lv_value = lo_drawing->get_media_name( ). - CASE lo_drawing->get_type( ). - WHEN zcl_excel_drawing=>type_image. - CONCATENATE '../media/' lv_value INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_image_tp ). + lv_value = lo_drawing->get_media_name( ). + CASE lo_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. + CONCATENATE '../media/' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_image_tp ). - WHEN zcl_excel_drawing=>type_chart. - CONCATENATE '../charts/' lv_value INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_chart_tp ). + WHEN zcl_excel_drawing=>type_chart. + CONCATENATE '../charts/' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_chart_tp ). - ENDCASE. - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDWHILE. + ENDCASE. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -endmethod. + ENDMETHOD. -METHOD create_xl_drawings_vml. + METHOD create_xl_drawings_vml. - DATA: + DATA: lo_xml_document TYPE REF TO cl_xml_document, ld_stream TYPE string. * INIT_RESULT - CLEAR ep_content. + CLEAR ep_content. * BODY - ld_stream = set_vml_string( ). + ld_stream = set_vml_string( ). - CREATE OBJECT lo_xml_document. - CALL METHOD lo_xml_document->parse_string - EXPORTING - stream = ld_stream. + CREATE OBJECT lo_xml_document. + CALL METHOD lo_xml_document->parse_string + EXPORTING + stream = ld_stream. * CALL FUNCTION 'CRM_IC_XML_STRING2XSTRING' * EXPORTING @@ -2631,222 +2631,172 @@ METHOD create_xl_drawings_vml. * IMPORTING * outxstring = ep_content. - CALL FUNCTION 'SCMS_STRING_TO_XSTRING' - EXPORTING - text = ld_stream - IMPORTING - buffer = ep_content - EXCEPTIONS - failed = 1 - OTHERS = 2. - IF sy-subrc <> 0. - CLEAR ep_content. - ENDIF. + CALL FUNCTION 'SCMS_STRING_TO_XSTRING' + EXPORTING + text = ld_stream + IMPORTING + buffer = ep_content + EXCEPTIONS + failed = 1 + OTHERS = 2. + IF sy-subrc <> 0. + CLEAR ep_content. + ENDIF. -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_drawings_vml_rels. + METHOD create_xl_drawings_vml_rels. ** Constant node name - DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', - lc_xml_node_relationship TYPE string VALUE 'Relationship', - " Node attributes - lc_xml_attr_id TYPE string VALUE 'Id', - lc_xml_attr_type TYPE string VALUE 'Type', - lc_xml_attr_target TYPE string VALUE 'Target', - " Node namespace - lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', - lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', - lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. - - DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_drawing TYPE REF TO zcl_excel_drawing, - lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lv_value TYPE string, - lv_relation_id TYPE i. + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. + + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lv_value TYPE string, + lv_relation_id TYPE i. * BODY ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_rels_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). ********************************************************************** * STEP 4: Create subnodes - lv_relation_id = 0. - lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_drawing ?= lo_iterator->get_next( ). - IF lo_drawing->get_type( ) = zcl_excel_drawing=>type_image_header_footer. - ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id -* value = 'LOGO' ). - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_image_tp ). - - lv_value = '../media/#'. - REPLACE '#' IN lv_value WITH lo_drawing->get_media_name( ). - lo_element->set_attribute_ns( name = lc_xml_attr_target + lv_relation_id = 0. + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->get_next( ). + IF lo_drawing->get_type( ) = zcl_excel_drawing=>type_image_header_footer. + ADD 1 TO lv_relation_id. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id +* value = 'LOGO' ). + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_image_tp ). + + lv_value = '../media/#'. + REPLACE '#' IN lv_value WITH lo_drawing->get_media_name( ). + lo_element->set_attribute_ns( name = lc_xml_attr_target * value = '../media/LOGO.png' ). - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. - ENDWHILE. + ENDWHILE. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -method CREATE_XL_DRAWING_ANCHOR. + METHOD create_xl_drawing_anchor. ** Constant node name - CONSTANTS: lc_xml_node_onecellanchor TYPE string VALUE 'xdr:oneCellAnchor', - lc_xml_node_twocellanchor TYPE string VALUE 'xdr:twoCellAnchor', - lc_xml_node_from TYPE string VALUE 'xdr:from', - lc_xml_node_to TYPE string VALUE 'xdr:to', - lc_xml_node_pic TYPE string VALUE 'xdr:pic', - lc_xml_node_ext TYPE string VALUE 'xdr:ext', - lc_xml_node_clientdata TYPE string VALUE 'xdr:clientData', - - lc_xml_node_col TYPE string VALUE 'xdr:col', - lc_xml_node_coloff TYPE string VALUE 'xdr:colOff', - lc_xml_node_row TYPE string VALUE 'xdr:row', - lc_xml_node_rowoff TYPE string VALUE 'xdr:rowOff', - - lc_xml_node_nvpicpr TYPE string VALUE 'xdr:nvPicPr', - lc_xml_node_cnvpr TYPE string VALUE 'xdr:cNvPr', - lc_xml_node_cnvpicpr TYPE string VALUE 'xdr:cNvPicPr', - lc_xml_node_piclocks TYPE string VALUE 'a:picLocks', - - lc_xml_node_sppr TYPE string VALUE 'xdr:spPr', - lc_xml_node_apgeom TYPE string VALUE 'a:prstGeom', - lc_xml_node_aavlst TYPE string VALUE 'a:avLst', - - lc_xml_node_graphicframe TYPE string VALUE 'xdr:graphicFrame', - lc_xml_node_nvgraphicframepr TYPE string VALUE 'xdr:nvGraphicFramePr', - lc_xml_node_cnvgraphicframepr TYPE string VALUE 'xdr:cNvGraphicFramePr', - lc_xml_node_graphicframelocks TYPE string VALUE 'a:graphicFrameLocks', - lc_xml_node_xfrm TYPE string VALUE 'xdr:xfrm', - lc_xml_node_aoff TYPE string VALUE 'a:off', - lc_xml_node_aext TYPE string VALUE 'a:ext', - lc_xml_node_agraphic TYPE string VALUE 'a:graphic', - lc_xml_node_agraphicdata TYPE string VALUE 'a:graphicData', - - lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', - lc_xml_node_cchart TYPE string VALUE 'c:chart', - - lc_xml_node_blipfill TYPE string VALUE 'xdr:blipFill', - lc_xml_node_ablip TYPE string VALUE 'a:blip', - lc_xml_node_astretch TYPE string VALUE 'a:stretch', - lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'. - - DATA: lo_element_graphicframe TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_element2 TYPE REF TO if_ixml_element, - lo_element3 TYPE REF TO if_ixml_element, - lo_element_from TYPE REF TO if_ixml_element, - lo_element_to TYPE REF TO if_ixml_element, - lo_element_ext TYPE REF TO if_ixml_element, - lo_element_pic TYPE REF TO if_ixml_element, - lo_element_clientdata TYPE REF TO if_ixml_element, - ls_position TYPE zexcel_drawing_position, - lv_col TYPE string, " zexcel_cell_column, - lv_row TYPE string, " zexcel_cell_row. - lv_col_offset TYPE string, - lv_row_offset TYPE string, - lv_value TYPE string. - - ls_position = io_drawing->get_position( ). - - IF ls_position-anchor = 'ONE'. - ep_anchor = io_document->create_simple_element( name = lc_xml_node_onecellanchor - parent = io_document ). - ELSE. - ep_anchor = io_document->create_simple_element( name = lc_xml_node_twocellanchor - parent = io_document ). - ENDIF. + CONSTANTS: lc_xml_node_onecellanchor TYPE string VALUE 'xdr:oneCellAnchor', + lc_xml_node_twocellanchor TYPE string VALUE 'xdr:twoCellAnchor', + lc_xml_node_from TYPE string VALUE 'xdr:from', + lc_xml_node_to TYPE string VALUE 'xdr:to', + lc_xml_node_pic TYPE string VALUE 'xdr:pic', + lc_xml_node_ext TYPE string VALUE 'xdr:ext', + lc_xml_node_clientdata TYPE string VALUE 'xdr:clientData', + + lc_xml_node_col TYPE string VALUE 'xdr:col', + lc_xml_node_coloff TYPE string VALUE 'xdr:colOff', + lc_xml_node_row TYPE string VALUE 'xdr:row', + lc_xml_node_rowoff TYPE string VALUE 'xdr:rowOff', + + lc_xml_node_nvpicpr TYPE string VALUE 'xdr:nvPicPr', + lc_xml_node_cnvpr TYPE string VALUE 'xdr:cNvPr', + lc_xml_node_cnvpicpr TYPE string VALUE 'xdr:cNvPicPr', + lc_xml_node_piclocks TYPE string VALUE 'a:picLocks', + + lc_xml_node_sppr TYPE string VALUE 'xdr:spPr', + lc_xml_node_apgeom TYPE string VALUE 'a:prstGeom', + lc_xml_node_aavlst TYPE string VALUE 'a:avLst', + + lc_xml_node_graphicframe TYPE string VALUE 'xdr:graphicFrame', + lc_xml_node_nvgraphicframepr TYPE string VALUE 'xdr:nvGraphicFramePr', + lc_xml_node_cnvgraphicframepr TYPE string VALUE 'xdr:cNvGraphicFramePr', + lc_xml_node_graphicframelocks TYPE string VALUE 'a:graphicFrameLocks', + lc_xml_node_xfrm TYPE string VALUE 'xdr:xfrm', + lc_xml_node_aoff TYPE string VALUE 'a:off', + lc_xml_node_aext TYPE string VALUE 'a:ext', + lc_xml_node_agraphic TYPE string VALUE 'a:graphic', + lc_xml_node_agraphicdata TYPE string VALUE 'a:graphicData', + + lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', + lc_xml_node_cchart TYPE string VALUE 'c:chart', + + lc_xml_node_blipfill TYPE string VALUE 'xdr:blipFill', + lc_xml_node_ablip TYPE string VALUE 'a:blip', + lc_xml_node_astretch TYPE string VALUE 'a:stretch', + lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'. + + DATA: lo_element_graphicframe TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element2 TYPE REF TO if_ixml_element, + lo_element3 TYPE REF TO if_ixml_element, + lo_element_from TYPE REF TO if_ixml_element, + lo_element_to TYPE REF TO if_ixml_element, + lo_element_ext TYPE REF TO if_ixml_element, + lo_element_pic TYPE REF TO if_ixml_element, + lo_element_clientdata TYPE REF TO if_ixml_element, + ls_position TYPE zexcel_drawing_position, + lv_col TYPE string, " zexcel_cell_column, + lv_row TYPE string, " zexcel_cell_row. + lv_col_offset TYPE string, + lv_row_offset TYPE string, + lv_value TYPE string. + + ls_position = io_drawing->get_position( ). + + IF ls_position-anchor = 'ONE'. + ep_anchor = io_document->create_simple_element( name = lc_xml_node_onecellanchor + parent = io_document ). + ELSE. + ep_anchor = io_document->create_simple_element( name = lc_xml_node_twocellanchor + parent = io_document ). + ENDIF. * from cell ****************************** - lo_element_from = io_document->create_simple_element( name = lc_xml_node_from - parent = io_document ). - - lv_col = ls_position-from-col. - lv_row = ls_position-from-row. - lv_col_offset = ls_position-from-col_offset. - lv_row_offset = ls_position-from-row_offset. - CONDENSE lv_col NO-GAPS. - CONDENSE lv_row NO-GAPS. - CONDENSE lv_col_offset NO-GAPS. - CONDENSE lv_row_offset NO-GAPS. - - lo_element = io_document->create_simple_element( name = lc_xml_node_col - parent = io_document ). - lo_element->set_value( value = lv_col ). - lo_element_from->append_child( new_child = lo_element ). - - lo_element = io_document->create_simple_element( name = lc_xml_node_coloff - parent = io_document ). - lo_element->set_value( value = lv_col_offset ). - lo_element_from->append_child( new_child = lo_element ). - - lo_element = io_document->create_simple_element( name = lc_xml_node_row - parent = io_document ). - lo_element->set_value( value = lv_row ). - lo_element_from->append_child( new_child = lo_element ). - - lo_element = io_document->create_simple_element( name = lc_xml_node_rowoff - parent = io_document ). - lo_element->set_value( value = lv_row_offset ). - lo_element_from->append_child( new_child = lo_element ). - ep_anchor->append_child( new_child = lo_element_from ). - - IF ls_position-anchor = 'ONE'. - -* ext ****************************** - lo_element_ext = io_document->create_simple_element( name = lc_xml_node_ext - parent = io_document ). - - lv_value = io_drawing->get_width_emu_str( ). - lo_element_ext->set_attribute_ns( name = 'cx' - value = lv_value ). - lv_value = io_drawing->get_height_emu_str( ). - lo_element_ext->set_attribute_ns( name = 'cy' - value = lv_value ). - ep_anchor->append_child( new_child = lo_element_ext ). - - ELSEIF ls_position-anchor = 'TWO'. - -* to cell ****************************** - lo_element_to = io_document->create_simple_element( name = lc_xml_node_to - parent = io_document ). + lo_element_from = io_document->create_simple_element( name = lc_xml_node_from + parent = io_document ). - lv_col = ls_position-to-col. - lv_row = ls_position-to-row. - lv_col_offset = ls_position-to-col_offset. - lv_row_offset = ls_position-to-row_offset. + lv_col = ls_position-from-col. + lv_row = ls_position-from-row. + lv_col_offset = ls_position-from-col_offset. + lv_row_offset = ls_position-from-row_offset. CONDENSE lv_col NO-GAPS. CONDENSE lv_row NO-GAPS. CONDENSE lv_col_offset NO-GAPS. @@ -2855,789 +2805,839 @@ method CREATE_XL_DRAWING_ANCHOR. lo_element = io_document->create_simple_element( name = lc_xml_node_col parent = io_document ). lo_element->set_value( value = lv_col ). - lo_element_to->append_child( new_child = lo_element ). + lo_element_from->append_child( new_child = lo_element ). lo_element = io_document->create_simple_element( name = lc_xml_node_coloff parent = io_document ). lo_element->set_value( value = lv_col_offset ). - lo_element_to->append_child( new_child = lo_element ). + lo_element_from->append_child( new_child = lo_element ). lo_element = io_document->create_simple_element( name = lc_xml_node_row parent = io_document ). lo_element->set_value( value = lv_row ). - lo_element_to->append_child( new_child = lo_element ). + lo_element_from->append_child( new_child = lo_element ). lo_element = io_document->create_simple_element( name = lc_xml_node_rowoff parent = io_document ). lo_element->set_value( value = lv_row_offset ). - lo_element_to->append_child( new_child = lo_element ). - ep_anchor->append_child( new_child = lo_element_to ). + lo_element_from->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_from ). - ENDIF. + IF ls_position-anchor = 'ONE'. - CASE io_drawing->get_type( ). - WHEN zcl_excel_drawing=>type_image. -* pic ********************************** - lo_element_pic = io_document->create_simple_element( name = lc_xml_node_pic +* ext ****************************** + lo_element_ext = io_document->create_simple_element( name = lc_xml_node_ext parent = io_document ). + + lv_value = io_drawing->get_width_emu_str( ). + lo_element_ext->set_attribute_ns( name = 'cx' + value = lv_value ). + lv_value = io_drawing->get_height_emu_str( ). + lo_element_ext->set_attribute_ns( name = 'cy' + value = lv_value ). + ep_anchor->append_child( new_child = lo_element_ext ). + + ELSEIF ls_position-anchor = 'TWO'. + +* to cell ****************************** + lo_element_to = io_document->create_simple_element( name = lc_xml_node_to + parent = io_document ). + + lv_col = ls_position-to-col. + lv_row = ls_position-to-row. + lv_col_offset = ls_position-to-col_offset. + lv_row_offset = ls_position-to-row_offset. + CONDENSE lv_col NO-GAPS. + CONDENSE lv_row NO-GAPS. + CONDENSE lv_col_offset NO-GAPS. + CONDENSE lv_row_offset NO-GAPS. + + lo_element = io_document->create_simple_element( name = lc_xml_node_col + parent = io_document ). + lo_element->set_value( value = lv_col ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_coloff + parent = io_document ). + lo_element->set_value( value = lv_col_offset ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_row + parent = io_document ). + lo_element->set_value( value = lv_row ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_rowoff + parent = io_document ). + lo_element->set_value( value = lv_row_offset ). + lo_element_to->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_to ). + + ENDIF. + + CASE io_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. +* pic ********************************** + lo_element_pic = io_document->create_simple_element( name = lc_xml_node_pic + parent = io_document ). * nvPicPr - lo_element = io_document->create_simple_element( name = lc_xml_node_nvpicpr - parent = io_document ). + lo_element = io_document->create_simple_element( name = lc_xml_node_nvpicpr + parent = io_document ). * cNvPr - lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr - parent = io_document ). - lv_value = sy-index. - CONDENSE lv_value. - lo_element2->set_attribute_ns( name = 'id' - value = lv_value ). - lo_element2->set_attribute_ns( name = 'name' - value = io_drawing->title ). - lo_element->append_child( new_child = lo_element2 ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr + parent = io_document ). + lv_value = sy-index. + CONDENSE lv_value. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lo_element2->set_attribute_ns( name = 'name' + value = io_drawing->title ). + lo_element->append_child( new_child = lo_element2 ). * cNvPicPr - lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpicpr - parent = io_document ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpicpr + parent = io_document ). * picLocks - lo_element3 = io_document->create_simple_element( name = lc_xml_node_piclocks - parent = io_document ). - lo_element3->set_attribute_ns( name = 'noChangeAspect' - value = '1' ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_piclocks + parent = io_document ). + lo_element3->set_attribute_ns( name = 'noChangeAspect' + value = '1' ). - lo_element2->append_child( new_child = lo_element3 ). - lo_element->append_child( new_child = lo_element2 ). - lo_element_pic->append_child( new_child = lo_element ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_pic->append_child( new_child = lo_element ). * blipFill - lv_value = ip_index. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. + lv_value = ip_index. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. - lo_element = io_document->create_simple_element( name = lc_xml_node_blipfill - parent = io_document ). - lo_element2 = io_document->create_simple_element( name = lc_xml_node_ablip - parent = io_document ). - lo_element2->set_attribute_ns( name = 'xmlns:r' - value = lc_xml_node_ns_r ). - lo_element2->set_attribute_ns( name = 'r:embed' - value = lv_value ). - lo_element->append_child( new_child = lo_element2 ). + lo_element = io_document->create_simple_element( name = lc_xml_node_blipfill + parent = io_document ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_ablip + parent = io_document ). + lo_element2->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + lo_element2->set_attribute_ns( name = 'r:embed' + value = lv_value ). + lo_element->append_child( new_child = lo_element2 ). - lo_element2 = io_document->create_simple_element( name = lc_xml_node_astretch - parent = io_document ). - lo_element->append_child( new_child = lo_element2 ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_astretch + parent = io_document ). + lo_element->append_child( new_child = lo_element2 ). - lo_element_pic->append_child( new_child = lo_element ). + lo_element_pic->append_child( new_child = lo_element ). * spPr - lo_element = io_document->create_simple_element( name = lc_xml_node_sppr - parent = io_document ). - - lo_element2 = io_document->create_simple_element( name = lc_xml_node_apgeom - parent = io_document ). - lo_element2->set_attribute_ns( name = 'prst' - value = 'rect' ). - lo_element3 = io_document->create_simple_element( name = lc_xml_node_aavlst - parent = io_document ). - lo_element2->append_child( new_child = lo_element3 ). - lo_element->append_child( new_child = lo_element2 ). + lo_element = io_document->create_simple_element( name = lc_xml_node_sppr + parent = io_document ). - lo_element_pic->append_child( new_child = lo_element ). - ep_anchor->append_child( new_child = lo_element_pic ). - WHEN zcl_excel_drawing=>type_chart. + lo_element2 = io_document->create_simple_element( name = lc_xml_node_apgeom + parent = io_document ). + lo_element2->set_attribute_ns( name = 'prst' + value = 'rect' ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_aavlst + parent = io_document ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + + lo_element_pic->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_pic ). + WHEN zcl_excel_drawing=>type_chart. * graphicFrame ********************************** - lo_element_graphicframe = io_document->create_simple_element( name = lc_xml_node_graphicframe - parent = io_document ). + lo_element_graphicframe = io_document->create_simple_element( name = lc_xml_node_graphicframe + parent = io_document ). * nvGraphicFramePr - lo_element = io_document->create_simple_element( name = lc_xml_node_nvgraphicframepr - parent = io_document ). + lo_element = io_document->create_simple_element( name = lc_xml_node_nvgraphicframepr + parent = io_document ). * cNvPr - lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr - parent = io_document ). - lv_value = sy-index. - CONDENSE lv_value. - lo_element2->set_attribute_ns( name = 'id' - value = lv_value ). - lo_element2->set_attribute_ns( name = 'name' - value = io_drawing->title ). - lo_element->append_child( new_child = lo_element2 ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr + parent = io_document ). + lv_value = sy-index. + CONDENSE lv_value. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lo_element2->set_attribute_ns( name = 'name' + value = io_drawing->title ). + lo_element->append_child( new_child = lo_element2 ). * cNvGraphicFramePr - lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvgraphicframepr - parent = io_document ). - lo_element3 = io_document->create_simple_element( name = lc_xml_node_graphicframelocks - parent = io_document ). - lo_element2->append_child( new_child = lo_element3 ). - lo_element->append_child( new_child = lo_element2 ). - lo_element_graphicframe->append_child( new_child = lo_element ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvgraphicframepr + parent = io_document ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_graphicframelocks + parent = io_document ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). * xfrm - lo_element = io_document->create_simple_element( name = lc_xml_node_xfrm - parent = io_document ). + lo_element = io_document->create_simple_element( name = lc_xml_node_xfrm + parent = io_document ). * off - lo_element2 = io_document->create_simple_element( name = lc_xml_node_aoff - parent = io_document ). - lo_element2->set_attribute_ns( name = 'y' value = '0' ). - lo_element2->set_attribute_ns( name = 'x' value = '0' ). - lo_element->append_child( new_child = lo_element2 ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_aoff + parent = io_document ). + lo_element2->set_attribute_ns( name = 'y' value = '0' ). + lo_element2->set_attribute_ns( name = 'x' value = '0' ). + lo_element->append_child( new_child = lo_element2 ). * ext - lo_element2 = io_document->create_simple_element( name = lc_xml_node_aext - parent = io_document ). - lo_element2->set_attribute_ns( name = 'cy' value = '0' ). - lo_element2->set_attribute_ns( name = 'cx' value = '0' ). - lo_element->append_child( new_child = lo_element2 ). - lo_element_graphicframe->append_child( new_child = lo_element ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_aext + parent = io_document ). + lo_element2->set_attribute_ns( name = 'cy' value = '0' ). + lo_element2->set_attribute_ns( name = 'cx' value = '0' ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). * graphic - lo_element = io_document->create_simple_element( name = lc_xml_node_agraphic - parent = io_document ). + lo_element = io_document->create_simple_element( name = lc_xml_node_agraphic + parent = io_document ). * graphicData - lo_element2 = io_document->create_simple_element( name = lc_xml_node_agraphicdata - parent = io_document ). - lo_element2->set_attribute_ns( name = 'uri' value = lc_xml_node_ns_c ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_agraphicdata + parent = io_document ). + lo_element2->set_attribute_ns( name = 'uri' value = lc_xml_node_ns_c ). * chart - lo_element3 = io_document->create_simple_element( name = lc_xml_node_cchart - parent = io_document ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_cchart + parent = io_document ). - lo_element3->set_attribute_ns( name = 'xmlns:r' - value = lc_xml_node_ns_r ). - lo_element3->set_attribute_ns( name = 'xmlns:c' - value = lc_xml_node_ns_c ). + lo_element3->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + lo_element3->set_attribute_ns( name = 'xmlns:c' + value = lc_xml_node_ns_c ). - lv_value = ip_index. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element3->set_attribute_ns( name = 'r:id' - value = lv_value ). - lo_element2->append_child( new_child = lo_element3 ). - lo_element->append_child( new_child = lo_element2 ). - lo_element_graphicframe->append_child( new_child = lo_element ). - ep_anchor->append_child( new_child = lo_element_graphicframe ). + lv_value = ip_index. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element3->set_attribute_ns( name = 'r:id' + value = lv_value ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_graphicframe ). - ENDCASE. + ENDCASE. * client data *************************** - lo_element_clientdata = io_document->create_simple_element( name = lc_xml_node_clientdata - parent = io_document ). - ep_anchor->append_child( new_child = lo_element_clientdata ). + lo_element_clientdata = io_document->create_simple_element( name = lc_xml_node_clientdata + parent = io_document ). + ep_anchor->append_child( new_child = lo_element_clientdata ). - endmethod. + ENDMETHOD. -METHOD create_xl_drawing_for_comments. + METHOD create_xl_drawing_for_comments. ** Constant node name - CONSTANTS: lc_xml_node_xml TYPE string VALUE 'xml', - lc_xml_node_ns_v TYPE string VALUE 'urn:schemas-microsoft-com:vml', - lc_xml_node_ns_o TYPE string VALUE 'urn:schemas-microsoft-com:office:office', - lc_xml_node_ns_x TYPE string VALUE 'urn:schemas-microsoft-com:office:excel', - " shapelayout - lc_xml_node_shapelayout TYPE string VALUE 'o:shapelayout', - lc_xml_node_idmap TYPE string VALUE 'o:idmap', - " shapetype - lc_xml_node_shapetype TYPE string VALUE 'v:shapetype', - lc_xml_node_stroke TYPE string VALUE 'v:stroke', - lc_xml_node_path TYPE string VALUE 'v:path', - " shape - lc_xml_node_shape TYPE string VALUE 'v:shape', - lc_xml_node_fill TYPE string VALUE 'v:fill', - lc_xml_node_shadow TYPE string VALUE 'v:shadow', - lc_xml_node_textbox TYPE string VALUE 'v:textbox', - lc_xml_node_div TYPE string VALUE 'div', - lc_xml_node_clientdata TYPE string VALUE 'x:ClientData', - lc_xml_node_movewithcells TYPE string VALUE 'x:MoveWithCells', - lc_xml_node_sizewithcells TYPE string VALUE 'x:SizeWithCells', - lc_xml_node_anchor TYPE string VALUE 'x:Anchor', - lc_xml_node_autofill TYPE string VALUE 'x:AutoFill', - lc_xml_node_row TYPE string VALUE 'x:Row', - lc_xml_node_column TYPE string VALUE 'x:Column', - " attributes, - lc_xml_attr_vext TYPE string VALUE 'v:ext', - lc_xml_attr_data TYPE string VALUE 'data', - lc_xml_attr_id TYPE string VALUE 'id', - lc_xml_attr_coordsize TYPE string VALUE 'coordsize', - lc_xml_attr_ospt TYPE string VALUE 'o:spt', - lc_xml_attr_joinstyle TYPE string VALUE 'joinstyle', - lc_xml_attr_path TYPE string VALUE 'path', - lc_xml_attr_gradientshapeok TYPE string VALUE 'gradientshapeok', - lc_xml_attr_oconnecttype TYPE string VALUE 'o:connecttype', - lc_xml_attr_type TYPE string VALUE 'type', - lc_xml_attr_style TYPE string VALUE 'style', - lc_xml_attr_fillcolor TYPE string VALUE 'fillcolor', - lc_xml_attr_oinsetmode TYPE string VALUE 'o:insetmode', - lc_xml_attr_color TYPE string VALUE 'color', - lc_xml_attr_color2 TYPE string VALUE 'color2', - lc_xml_attr_on TYPE string VALUE 'on', - lc_xml_attr_obscured TYPE string VALUE 'obscured', - lc_xml_attr_objecttype TYPE string VALUE 'ObjectType', - " attributes values - lc_xml_attr_val_edit TYPE string VALUE 'edit', - lc_xml_attr_val_rect TYPE string VALUE 'rect', - lc_xml_attr_val_t TYPE string VALUE 't', - lc_xml_attr_val_miter TYPE string VALUE 'miter', - lc_xml_attr_val_auto TYPE string VALUE 'auto', - lc_xml_attr_val_black TYPE string VALUE 'black', - lc_xml_attr_val_none TYPE string VALUE 'none', - lc_xml_attr_val_msodir TYPE string VALUE 'mso-direction-alt:auto', - lc_xml_attr_val_note TYPE string VALUE 'Note'. - - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - "shapelayout - lo_element_shapelayout TYPE REF TO if_ixml_element, - lo_element_idmap TYPE REF TO if_ixml_element, - "shapetype - lo_element_shapetype TYPE REF TO if_ixml_element, - lo_element_stroke TYPE REF TO if_ixml_element, - lo_element_path TYPE REF TO if_ixml_element, - "shape - lo_element_shape TYPE REF TO if_ixml_element, - lo_element_fill TYPE REF TO if_ixml_element, - lo_element_shadow TYPE REF TO if_ixml_element, - lo_element_textbox TYPE REF TO if_ixml_element, - lo_element_div TYPE REF TO if_ixml_element, - lo_element_clientdata TYPE REF TO if_ixml_element, - lo_element_movewithcells TYPE REF TO if_ixml_element, - lo_element_sizewithcells TYPE REF TO if_ixml_element, - lo_element_anchor TYPE REF TO if_ixml_element, - lo_element_autofill TYPE REF TO if_ixml_element, - lo_element_row TYPE REF TO if_ixml_element, - lo_element_column TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_comments TYPE REF TO zcl_excel_comments, - lo_comment TYPE REF TO zcl_excel_comment, - lv_row TYPE zexcel_cell_row, - lv_str_column TYPE zexcel_cell_column_alpha, - lv_column TYPE zexcel_cell_column, - lv_index TYPE i, - lv_attr_id_index TYPE i, - lv_attr_id TYPE string, - lv_int_value TYPE i, - lv_int_value_string TYPE string. - DATA: lv_rel_id TYPE i. - - DEFINE add_1_val_child_node. + CONSTANTS: lc_xml_node_xml TYPE string VALUE 'xml', + lc_xml_node_ns_v TYPE string VALUE 'urn:schemas-microsoft-com:vml', + lc_xml_node_ns_o TYPE string VALUE 'urn:schemas-microsoft-com:office:office', + lc_xml_node_ns_x TYPE string VALUE 'urn:schemas-microsoft-com:office:excel', + " shapelayout + lc_xml_node_shapelayout TYPE string VALUE 'o:shapelayout', + lc_xml_node_idmap TYPE string VALUE 'o:idmap', + " shapetype + lc_xml_node_shapetype TYPE string VALUE 'v:shapetype', + lc_xml_node_stroke TYPE string VALUE 'v:stroke', + lc_xml_node_path TYPE string VALUE 'v:path', + " shape + lc_xml_node_shape TYPE string VALUE 'v:shape', + lc_xml_node_fill TYPE string VALUE 'v:fill', + lc_xml_node_shadow TYPE string VALUE 'v:shadow', + lc_xml_node_textbox TYPE string VALUE 'v:textbox', + lc_xml_node_div TYPE string VALUE 'div', + lc_xml_node_clientdata TYPE string VALUE 'x:ClientData', + lc_xml_node_movewithcells TYPE string VALUE 'x:MoveWithCells', + lc_xml_node_sizewithcells TYPE string VALUE 'x:SizeWithCells', + lc_xml_node_anchor TYPE string VALUE 'x:Anchor', + lc_xml_node_autofill TYPE string VALUE 'x:AutoFill', + lc_xml_node_row TYPE string VALUE 'x:Row', + lc_xml_node_column TYPE string VALUE 'x:Column', + " attributes, + lc_xml_attr_vext TYPE string VALUE 'v:ext', + lc_xml_attr_data TYPE string VALUE 'data', + lc_xml_attr_id TYPE string VALUE 'id', + lc_xml_attr_coordsize TYPE string VALUE 'coordsize', + lc_xml_attr_ospt TYPE string VALUE 'o:spt', + lc_xml_attr_joinstyle TYPE string VALUE 'joinstyle', + lc_xml_attr_path TYPE string VALUE 'path', + lc_xml_attr_gradientshapeok TYPE string VALUE 'gradientshapeok', + lc_xml_attr_oconnecttype TYPE string VALUE 'o:connecttype', + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_style TYPE string VALUE 'style', + lc_xml_attr_fillcolor TYPE string VALUE 'fillcolor', + lc_xml_attr_oinsetmode TYPE string VALUE 'o:insetmode', + lc_xml_attr_color TYPE string VALUE 'color', + lc_xml_attr_color2 TYPE string VALUE 'color2', + lc_xml_attr_on TYPE string VALUE 'on', + lc_xml_attr_obscured TYPE string VALUE 'obscured', + lc_xml_attr_objecttype TYPE string VALUE 'ObjectType', + " attributes values + lc_xml_attr_val_edit TYPE string VALUE 'edit', + lc_xml_attr_val_rect TYPE string VALUE 'rect', + lc_xml_attr_val_t TYPE string VALUE 't', + lc_xml_attr_val_miter TYPE string VALUE 'miter', + lc_xml_attr_val_auto TYPE string VALUE 'auto', + lc_xml_attr_val_black TYPE string VALUE 'black', + lc_xml_attr_val_none TYPE string VALUE 'none', + lc_xml_attr_val_msodir TYPE string VALUE 'mso-direction-alt:auto', + lc_xml_attr_val_note TYPE string VALUE 'Note'. + + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + "shapelayout + lo_element_shapelayout TYPE REF TO if_ixml_element, + lo_element_idmap TYPE REF TO if_ixml_element, + "shapetype + lo_element_shapetype TYPE REF TO if_ixml_element, + lo_element_stroke TYPE REF TO if_ixml_element, + lo_element_path TYPE REF TO if_ixml_element, + "shape + lo_element_shape TYPE REF TO if_ixml_element, + lo_element_fill TYPE REF TO if_ixml_element, + lo_element_shadow TYPE REF TO if_ixml_element, + lo_element_textbox TYPE REF TO if_ixml_element, + lo_element_div TYPE REF TO if_ixml_element, + lo_element_clientdata TYPE REF TO if_ixml_element, + lo_element_movewithcells TYPE REF TO if_ixml_element, + lo_element_sizewithcells TYPE REF TO if_ixml_element, + lo_element_anchor TYPE REF TO if_ixml_element, + lo_element_autofill TYPE REF TO if_ixml_element, + lo_element_row TYPE REF TO if_ixml_element, + lo_element_column TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_comments TYPE REF TO zcl_excel_comments, + lo_comment TYPE REF TO zcl_excel_comment, + lv_row TYPE zexcel_cell_row, + lv_str_column TYPE zexcel_cell_column_alpha, + lv_column TYPE zexcel_cell_column, + lv_index TYPE i, + lv_attr_id_index TYPE i, + lv_attr_id TYPE string, + lv_int_value TYPE i, + lv_int_value_string TYPE string. + DATA: lv_rel_id TYPE i. + + DEFINE add_1_val_child_node. * &1: parent element * &2: child element * &3: element name * &4: attribute name * &5: attribute value - &2 = lo_document->create_simple_element( name = &3 - parent = lo_document ). - IF &4 IS NOT INITIAL. - &2->set_attribute_ns( name = &4 - value = &5 ). - ENDIF. - &1->append_child( new_child = &2 ). - END-OF-DEFINITION. + &2 = lo_document->create_simple_element( name = &3 + parent = lo_document ). + IF &4 IS NOT INITIAL. + &2->set_attribute_ns( name = &4 + value = &5 ). + ENDIF. + &1->append_child( new_child = &2 ). + END-OF-DEFINITION. ********************************************************************** * STEP 1: Create XML document - lo_document = me->ixml->create_document( ). + lo_document = me->ixml->create_document( ). *********************************************************************** * STEP 2: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_xml - parent = lo_document ). - lo_element_root->set_attribute_ns( : name = 'xmlns:v' value = lc_xml_node_ns_v ), - name = 'xmlns:o' value = lc_xml_node_ns_o ), - name = 'xmlns:x' value = lc_xml_node_ns_x ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_xml + parent = lo_document ). + lo_element_root->set_attribute_ns( : name = 'xmlns:v' value = lc_xml_node_ns_v ), + name = 'xmlns:o' value = lc_xml_node_ns_o ), + name = 'xmlns:x' value = lc_xml_node_ns_x ). ********************************************************************** * STEP 3: Create o:shapeLayout * TO-DO: management of several authors - lo_element_shapelayout = lo_document->create_simple_element( name = lc_xml_node_shapelayout - parent = lo_document ). + lo_element_shapelayout = lo_document->create_simple_element( name = lc_xml_node_shapelayout + parent = lo_document ). - lo_element_shapelayout->set_attribute_ns( name = lc_xml_attr_vext - value = lc_xml_attr_val_edit ). + lo_element_shapelayout->set_attribute_ns( name = lc_xml_attr_vext + value = lc_xml_attr_val_edit ). - lo_element_idmap = lo_document->create_simple_element( name = lc_xml_node_idmap - parent = lo_document ). - lo_element_idmap->set_attribute_ns( : name = lc_xml_attr_vext value = lc_xml_attr_val_edit ), - name = lc_xml_attr_data value = '1' ). + lo_element_idmap = lo_document->create_simple_element( name = lc_xml_node_idmap + parent = lo_document ). + lo_element_idmap->set_attribute_ns( : name = lc_xml_attr_vext value = lc_xml_attr_val_edit ), + name = lc_xml_attr_data value = '1' ). - lo_element_shapelayout->append_child( new_child = lo_element_idmap ). + lo_element_shapelayout->append_child( new_child = lo_element_idmap ). - lo_element_root->append_child( new_child = lo_element_shapelayout ). + lo_element_root->append_child( new_child = lo_element_shapelayout ). ********************************************************************** * STEP 4: Create v:shapetype - lo_element_shapetype = lo_document->create_simple_element( name = lc_xml_node_shapetype - parent = lo_document ). + lo_element_shapetype = lo_document->create_simple_element( name = lc_xml_node_shapetype + parent = lo_document ). - lo_element_shapetype->set_attribute_ns( : name = lc_xml_attr_id value = '_x0000_t202' ), - name = lc_xml_attr_coordsize value = '21600,21600' ), - name = lc_xml_attr_ospt value = '202' ), - name = lc_xml_attr_path value = 'm,l,21600r21600,l21600,xe' ). + lo_element_shapetype->set_attribute_ns( : name = lc_xml_attr_id value = '_x0000_t202' ), + name = lc_xml_attr_coordsize value = '21600,21600' ), + name = lc_xml_attr_ospt value = '202' ), + name = lc_xml_attr_path value = 'm,l,21600r21600,l21600,xe' ). - lo_element_stroke = lo_document->create_simple_element( name = lc_xml_node_stroke - parent = lo_document ). - lo_element_stroke->set_attribute_ns( name = lc_xml_attr_joinstyle value = lc_xml_attr_val_miter ). + lo_element_stroke = lo_document->create_simple_element( name = lc_xml_node_stroke + parent = lo_document ). + lo_element_stroke->set_attribute_ns( name = lc_xml_attr_joinstyle value = lc_xml_attr_val_miter ). - lo_element_path = lo_document->create_simple_element( name = lc_xml_node_path - parent = lo_document ). - lo_element_path->set_attribute_ns( : name = lc_xml_attr_gradientshapeok value = lc_xml_attr_val_t ), - name = lc_xml_attr_oconnecttype value = lc_xml_attr_val_rect ). + lo_element_path = lo_document->create_simple_element( name = lc_xml_node_path + parent = lo_document ). + lo_element_path->set_attribute_ns( : name = lc_xml_attr_gradientshapeok value = lc_xml_attr_val_t ), + name = lc_xml_attr_oconnecttype value = lc_xml_attr_val_rect ). - lo_element_shapetype->append_child( : new_child = lo_element_stroke ), - new_child = lo_element_path ). + lo_element_shapetype->append_child( : new_child = lo_element_stroke ), + new_child = lo_element_path ). - lo_element_root->append_child( new_child = lo_element_shapetype ). + lo_element_root->append_child( new_child = lo_element_shapetype ). ********************************************************************** * STEP 4: Create v:shapetype - lo_comments = io_worksheet->get_comments( ). - - lo_iterator = lo_comments->get_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lv_index = sy-index. - lo_comment ?= lo_iterator->get_next( ). + lo_comments = io_worksheet->get_comments( ). - zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING i_columnrow = lo_comment->get_ref( ) - IMPORTING e_column = lv_str_column - e_row = lv_row ). - lv_column = zcl_excel_common=>convert_column2int( lv_str_column ). + lo_iterator = lo_comments->get_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lv_index = sy-index. + lo_comment ?= lo_iterator->get_next( ). - lo_element_shape = lo_document->create_simple_element( name = lc_xml_node_shape - parent = lo_document ). + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING i_columnrow = lo_comment->get_ref( ) + IMPORTING e_column = lv_str_column + e_row = lv_row ). + lv_column = zcl_excel_common=>convert_column2int( lv_str_column ). - lv_attr_id_index = 1024 + lv_index. - lv_attr_id = lv_attr_id_index. - CONCATENATE '_x0000_s' lv_attr_id INTO lv_attr_id. - lo_element_shape->set_attribute_ns( : name = lc_xml_attr_id value = lv_attr_id ), - name = lc_xml_attr_type value = '#_x0000_t202' ), - name = lc_xml_attr_style value = 'size:auto;width:auto;height:auto;position:absolute;margin-left:117pt;margin-top:172.5pt;z-index:1;visibility:hidden' ), - name = lc_xml_attr_fillcolor value = '#ffffe1' ), - name = lc_xml_attr_oinsetmode value = lc_xml_attr_val_auto ). - - " Fill - lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill - parent = lo_document ). - lo_element_fill->set_attribute_ns( name = lc_xml_attr_color2 value = '#ffffe1' ). - lo_element_shape->append_child( new_child = lo_element_fill ). - " Shadow - lo_element_shadow = lo_document->create_simple_element( name = lc_xml_node_shadow - parent = lo_document ). - lo_element_shadow->set_attribute_ns( : name = lc_xml_attr_on value = lc_xml_attr_val_t ), - name = lc_xml_attr_color value = lc_xml_attr_val_black ), - name = lc_xml_attr_obscured value = lc_xml_attr_val_t ). - lo_element_shape->append_child( new_child = lo_element_shadow ). - " Path - lo_element_path = lo_document->create_simple_element( name = lc_xml_node_path - parent = lo_document ). - lo_element_path->set_attribute_ns( name = lc_xml_attr_oconnecttype value = lc_xml_attr_val_none ). - lo_element_shape->append_child( new_child = lo_element_path ). - " Textbox - lo_element_textbox = lo_document->create_simple_element( name = lc_xml_node_textbox + lo_element_shape = lo_document->create_simple_element( name = lc_xml_node_shape parent = lo_document ). - lo_element_textbox->set_attribute_ns( name = lc_xml_attr_style value = lc_xml_attr_val_msodir ). - lo_element_div = lo_document->create_simple_element( name = lc_xml_node_div - parent = lo_document ). - lo_element_div->set_attribute_ns( name = lc_xml_attr_style value = 'text-align:left' ). - lo_element_textbox->append_child( new_child = lo_element_div ). - lo_element_shape->append_child( new_child = lo_element_textbox ). - " ClientData - lo_element_clientdata = lo_document->create_simple_element( name = lc_xml_node_clientdata - parent = lo_document ). - lo_element_clientdata->set_attribute_ns( name = lc_xml_attr_objecttype value = lc_xml_attr_val_note ). - lo_element_movewithcells = lo_document->create_simple_element( name = lc_xml_node_movewithcells - parent = lo_document ). - lo_element_clientdata->append_child( new_child = lo_element_movewithcells ). - lo_element_sizewithcells = lo_document->create_simple_element( name = lc_xml_node_sizewithcells - parent = lo_document ). - lo_element_clientdata->append_child( new_child = lo_element_sizewithcells ). - lo_element_anchor = lo_document->create_simple_element( name = lc_xml_node_anchor + + lv_attr_id_index = 1024 + lv_index. + lv_attr_id = lv_attr_id_index. + CONCATENATE '_x0000_s' lv_attr_id INTO lv_attr_id. + lo_element_shape->set_attribute_ns( : name = lc_xml_attr_id value = lv_attr_id ), + name = lc_xml_attr_type value = '#_x0000_t202' ), + name = lc_xml_attr_style value = 'size:auto;width:auto;height:auto;position:absolute;margin-left:117pt;margin-top:172.5pt;z-index:1;visibility:hidden' ), + name = lc_xml_attr_fillcolor value = '#ffffe1' ), + name = lc_xml_attr_oinsetmode value = lc_xml_attr_val_auto ). + + " Fill + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill parent = lo_document ). - lo_element_anchor->set_value( '2, 15, 11, 10, 4, 31, 15, 9' ). - lo_element_clientdata->append_child( new_child = lo_element_anchor ). - lo_element_autofill = lo_document->create_simple_element( name = lc_xml_node_autofill + lo_element_fill->set_attribute_ns( name = lc_xml_attr_color2 value = '#ffffe1' ). + lo_element_shape->append_child( new_child = lo_element_fill ). + " Shadow + lo_element_shadow = lo_document->create_simple_element( name = lc_xml_node_shadow parent = lo_document ). - lo_element_autofill->set_value( 'False' ). - lo_element_clientdata->append_child( new_child = lo_element_autofill ). - lo_element_row = lo_document->create_simple_element( name = lc_xml_node_row - parent = lo_document ). - lv_int_value = lv_row - 1. - lv_int_value_string = lv_int_value. - lo_element_row->set_value( lv_int_value_string ). - lo_element_clientdata->append_child( new_child = lo_element_row ). - lo_element_column = lo_document->create_simple_element( name = lc_xml_node_column + lo_element_shadow->set_attribute_ns( : name = lc_xml_attr_on value = lc_xml_attr_val_t ), + name = lc_xml_attr_color value = lc_xml_attr_val_black ), + name = lc_xml_attr_obscured value = lc_xml_attr_val_t ). + lo_element_shape->append_child( new_child = lo_element_shadow ). + " Path + lo_element_path = lo_document->create_simple_element( name = lc_xml_node_path + parent = lo_document ). + lo_element_path->set_attribute_ns( name = lc_xml_attr_oconnecttype value = lc_xml_attr_val_none ). + lo_element_shape->append_child( new_child = lo_element_path ). + " Textbox + lo_element_textbox = lo_document->create_simple_element( name = lc_xml_node_textbox + parent = lo_document ). + lo_element_textbox->set_attribute_ns( name = lc_xml_attr_style value = lc_xml_attr_val_msodir ). + lo_element_div = lo_document->create_simple_element( name = lc_xml_node_div + parent = lo_document ). + lo_element_div->set_attribute_ns( name = lc_xml_attr_style value = 'text-align:left' ). + lo_element_textbox->append_child( new_child = lo_element_div ). + lo_element_shape->append_child( new_child = lo_element_textbox ). + " ClientData + lo_element_clientdata = lo_document->create_simple_element( name = lc_xml_node_clientdata + parent = lo_document ). + lo_element_clientdata->set_attribute_ns( name = lc_xml_attr_objecttype value = lc_xml_attr_val_note ). + lo_element_movewithcells = lo_document->create_simple_element( name = lc_xml_node_movewithcells + parent = lo_document ). + lo_element_clientdata->append_child( new_child = lo_element_movewithcells ). + lo_element_sizewithcells = lo_document->create_simple_element( name = lc_xml_node_sizewithcells + parent = lo_document ). + lo_element_clientdata->append_child( new_child = lo_element_sizewithcells ). + lo_element_anchor = lo_document->create_simple_element( name = lc_xml_node_anchor parent = lo_document ). - lv_int_value = lv_column - 1. - lv_int_value_string = lv_int_value. - lo_element_column->set_value( lv_int_value_string ). - lo_element_clientdata->append_child( new_child = lo_element_column ). + lo_element_anchor->set_value( '2, 15, 11, 10, 4, 31, 15, 9' ). + lo_element_clientdata->append_child( new_child = lo_element_anchor ). + lo_element_autofill = lo_document->create_simple_element( name = lc_xml_node_autofill + parent = lo_document ). + lo_element_autofill->set_value( 'False' ). + lo_element_clientdata->append_child( new_child = lo_element_autofill ). + lo_element_row = lo_document->create_simple_element( name = lc_xml_node_row + parent = lo_document ). + lv_int_value = lv_row - 1. + lv_int_value_string = lv_int_value. + lo_element_row->set_value( lv_int_value_string ). + lo_element_clientdata->append_child( new_child = lo_element_row ). + lo_element_column = lo_document->create_simple_element( name = lc_xml_node_column + parent = lo_document ). + lv_int_value = lv_column - 1. + lv_int_value_string = lv_int_value. + lo_element_column->set_value( lv_int_value_string ). + lo_element_clientdata->append_child( new_child = lo_element_column ). - lo_element_shape->append_child( new_child = lo_element_clientdata ). + lo_element_shape->append_child( new_child = lo_element_clientdata ). - lo_element_root->append_child( new_child = lo_element_shape ). - ENDWHILE. + lo_element_root->append_child( new_child = lo_element_shape ). + ENDWHILE. ********************************************************************** * STEP 6: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_drawing_for_hdft_im. + METHOD create_xl_drawing_for_hdft_im. - DATA: - ld_1 TYPE string, - ld_2 TYPE string, - ld_3 TYPE string, - ld_4 TYPE string, - ld_5 TYPE string, - ld_7 TYPE string, + DATA: + ld_1 TYPE string, + ld_2 TYPE string, + ld_3 TYPE string, + ld_4 TYPE string, + ld_5 TYPE string, + ld_7 TYPE string, - ls_odd_header TYPE zexcel_s_worksheet_head_foot, - ls_odd_footer TYPE zexcel_s_worksheet_head_foot, - ls_even_header TYPE zexcel_s_worksheet_head_foot, - ls_even_footer TYPE zexcel_s_worksheet_head_foot, - lv_content TYPE string, + ls_odd_header TYPE zexcel_s_worksheet_head_foot, + ls_odd_footer TYPE zexcel_s_worksheet_head_foot, + ls_even_header TYPE zexcel_s_worksheet_head_foot, + ls_even_footer TYPE zexcel_s_worksheet_head_foot, + lv_content TYPE string, lo_xml_document TYPE REF TO cl_xml_document. * INIT_RESULT - CLEAR ep_content. + CLEAR ep_content. * BODY - ld_1 = ''. - ld_2 = ''. - ld_3 = ''. - ld_4 = ''. - - - CONCATENATE ld_1 - ld_2 - ld_3 - ld_4 - INTO lv_content. - - io_worksheet->sheet_setup->get_header_footer( IMPORTING ep_odd_header = ls_odd_header - ep_odd_footer = ls_odd_footer - ep_even_header = ls_even_header - ep_even_footer = ls_even_footer ). - - ld_5 = me->set_vml_shape_header( ls_odd_header ). - CONCATENATE lv_content - ld_5 - INTO lv_content. - ld_5 = me->set_vml_shape_header( ls_even_header ). - CONCATENATE lv_content - ld_5 - INTO lv_content. - ld_5 = me->set_vml_shape_footer( ls_odd_footer ). - CONCATENATE lv_content - ld_5 - INTO lv_content. - ld_5 = me->set_vml_shape_footer( ls_even_footer ). - CONCATENATE lv_content - ld_5 - INTO lv_content. + ld_1 = ''. + ld_2 = ''. + ld_3 = ''. + ld_4 = ''. - ld_7 = ''. - CONCATENATE lv_content - ld_7 + CONCATENATE ld_1 + ld_2 + ld_3 + ld_4 INTO lv_content. - CREATE OBJECT lo_xml_document. - CALL METHOD lo_xml_document->parse_string - EXPORTING - stream = lv_content. + io_worksheet->sheet_setup->get_header_footer( IMPORTING ep_odd_header = ls_odd_header + ep_odd_footer = ls_odd_footer + ep_even_header = ls_even_header + ep_even_footer = ls_even_footer ). - CALL FUNCTION 'SCMS_STRING_TO_XSTRING' - EXPORTING - text = lv_content - IMPORTING - buffer = ep_content - EXCEPTIONS - failed = 1 - OTHERS = 2. - IF sy-subrc <> 0. - CLEAR ep_content. - ENDIF. + ld_5 = me->set_vml_shape_header( ls_odd_header ). + CONCATENATE lv_content + ld_5 + INTO lv_content. + ld_5 = me->set_vml_shape_header( ls_even_header ). + CONCATENATE lv_content + ld_5 + INTO lv_content. + ld_5 = me->set_vml_shape_footer( ls_odd_footer ). + CONCATENATE lv_content + ld_5 + INTO lv_content. + ld_5 = me->set_vml_shape_footer( ls_even_footer ). + CONCATENATE lv_content + ld_5 + INTO lv_content. + + ld_7 = ''. + + CONCATENATE lv_content + ld_7 + INTO lv_content. + + CREATE OBJECT lo_xml_document. + CALL METHOD lo_xml_document->parse_string + EXPORTING + stream = lv_content. + + CALL FUNCTION 'SCMS_STRING_TO_XSTRING' + EXPORTING + text = lv_content + IMPORTING + buffer = ep_content + EXCEPTIONS + failed = 1 + OTHERS = 2. + IF sy-subrc <> 0. + CLEAR ep_content. + ENDIF. -ENDMETHOD. + ENDMETHOD. -method CREATE_XL_RELATIONSHIPS. + METHOD create_xl_relationships. ** Constant node name - DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', - lc_xml_node_relationship TYPE string VALUE 'Relationship', - " Node attributes - lc_xml_attr_id TYPE string VALUE 'Id', - lc_xml_attr_type TYPE string VALUE 'Type', - lc_xml_attr_target TYPE string VALUE 'Target', - " Node namespace - lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', - " Node id - lc_xml_node_ridx_id TYPE string VALUE 'rId#', - " Node type - lc_xml_node_rid_sheet_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', - lc_xml_node_rid_theme_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', - lc_xml_node_rid_styles_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', - lc_xml_node_rid_shared_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', - " Node target - lc_xml_node_ridx_tg TYPE string VALUE 'worksheets/sheet#.xml', - lc_xml_node_rid_shared_tg TYPE string VALUE 'sharedStrings.xml', - lc_xml_node_rid_styles_tg TYPE string VALUE 'styles.xml', - lc_xml_node_rid_theme_tg TYPE string VALUE 'theme/theme1.xml'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element. - - DATA: lv_xml_node_ridx_tg TYPE string, - lv_xml_node_ridx_id TYPE string, - lv_size TYPE i, - lv_syindex TYPE string. + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#', + " Node type + lc_xml_node_rid_sheet_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + lc_xml_node_rid_theme_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + lc_xml_node_rid_styles_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + lc_xml_node_rid_shared_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + " Node target + lc_xml_node_ridx_tg TYPE string VALUE 'worksheets/sheet#.xml', + lc_xml_node_rid_shared_tg TYPE string VALUE 'sharedStrings.xml', + lc_xml_node_rid_styles_tg TYPE string VALUE 'styles.xml', + lc_xml_node_rid_theme_tg TYPE string VALUE 'theme/theme1.xml'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element. + + DATA: lv_xml_node_ridx_tg TYPE string, + lv_xml_node_ridx_id TYPE string, + lv_size TYPE i, + lv_syindex TYPE string. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_rels_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). ********************************************************************** * STEP 4: Create subnodes - lv_size = excel->get_worksheets_size( ). - - - " Relationship node - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lv_size = lv_size + 1. - lv_syindex = lv_size. - shift lv_syindex RIGHT DELETING TRAILING space. - shift lv_syindex left DELETING leading space. - lv_xml_node_ridx_id = lc_xml_node_ridx_id. - replace all occurrences of '#' in lv_xml_node_ridx_id with lv_syindex. - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_xml_node_ridx_id ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_theme_tp ). - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lc_xml_node_rid_theme_tg ). - lo_element_root->append_child( new_child = lo_element ). - - - " Relationship node - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lv_size = lv_size + 1. - lv_syindex = lv_size. - SHIFT lv_syindex RIGHT DELETING TRAILING space. - SHIFT lv_syindex LEFT DELETING LEADING space. - lv_xml_node_ridx_id = lc_xml_node_ridx_id. - REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_xml_node_ridx_id ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_styles_tp ). - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lc_xml_node_rid_styles_tg ). - lo_element_root->append_child( new_child = lo_element ). - + lv_size = excel->get_worksheets_size( ). - lv_size = excel->get_worksheets_size( ). - - DO lv_size TIMES. " Relationship node lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship parent = lo_document ). - lv_xml_node_ridx_id = lc_xml_node_ridx_id. - lv_xml_node_ridx_tg = lc_xml_node_ridx_tg. - lv_syindex = sy-index. + lv_size = lv_size + 1. + lv_syindex = lv_size. SHIFT lv_syindex RIGHT DELETING TRAILING space. SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. - REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_tg WITH lv_syindex. lo_element->set_attribute_ns( name = lc_xml_attr_id value = lv_xml_node_ridx_id ). lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_sheet_tp ). + value = lc_xml_node_rid_theme_tp ). lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_xml_node_ridx_tg ). + value = lc_xml_node_rid_theme_tg ). lo_element_root->append_child( new_child = lo_element ). - ENDDO. - " Relationship node - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - ADD 3 TO lv_size. - lv_syindex = lv_size. - SHIFT lv_syindex RIGHT DELETING TRAILING space. - SHIFT lv_syindex LEFT DELETING LEADING space. - lv_xml_node_ridx_id = lc_xml_node_ridx_id. - REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_xml_node_ridx_id ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_shared_tp ). - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lc_xml_node_rid_shared_tg ). - lo_element_root->append_child( new_child = lo_element ). + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_size = lv_size + 1. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_styles_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_styles_tg ). + lo_element_root->append_child( new_child = lo_element ). + + + + lv_size = excel->get_worksheets_size( ). + + DO lv_size TIMES. + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + lv_xml_node_ridx_tg = lc_xml_node_ridx_tg. + lv_syindex = sy-index. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_tg WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_sheet_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_xml_node_ridx_tg ). + lo_element_root->append_child( new_child = lo_element ). + ENDDO. + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 3 TO lv_size. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_shared_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_shared_tg ). + lo_element_root->append_child( new_child = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -endmethod. + ENDMETHOD. -METHOD create_xl_sharedstrings. + METHOD create_xl_sharedstrings. ** Constant node name - DATA: lc_xml_node_sst TYPE string VALUE 'sst', - lc_xml_node_si TYPE string VALUE 'si', - lc_xml_node_t TYPE string VALUE 't', - " Node attributes - lc_xml_attr_count TYPE string VALUE 'count', - lc_xml_attr_uniquecount TYPE string VALUE 'uniqueCount', - " Node namespace - lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_sub_element TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_worksheet TYPE REF TO zcl_excel_worksheet. - - DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, - ls_shared_string TYPE zexcel_s_shared_string, - lv_count_str TYPE string, - lv_uniquecount_str TYPE string, - lv_sytabix TYPE sytabix, - lv_count TYPE i, - lv_uniquecount TYPE i. - - FIELD-SYMBOLS: TYPE zexcel_s_cell_data, - TYPE zexcel_s_shared_string. + DATA: lc_xml_node_sst TYPE string VALUE 'sst', + lc_xml_node_si TYPE string VALUE 'si', + lc_xml_node_t TYPE string VALUE 't', + " Node attributes + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_uniquecount TYPE string VALUE 'uniqueCount', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, + ls_shared_string TYPE zexcel_s_shared_string, + lv_count_str TYPE string, + lv_uniquecount_str TYPE string, + lv_sytabix TYPE sytabix, + lv_count TYPE i, + lv_uniquecount TYPE i. + + FIELD-SYMBOLS: TYPE zexcel_s_cell_data, + TYPE zexcel_s_shared_string. ********************************************************************** * STEP 1: Collect strings from each worksheet - lo_iterator = excel->get_worksheets_iterator( ). + lo_iterator = excel->get_worksheets_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->get_next( ). - APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. - ENDWHILE. + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->get_next( ). + APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. + ENDWHILE. - DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content + DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content - DESCRIBE TABLE lt_cell_data LINES lv_count. - MOVE lv_count TO lv_count_str. + DESCRIBE TABLE lt_cell_data LINES lv_count. + MOVE lv_count TO lv_count_str. - SHIFT lv_count_str RIGHT DELETING TRAILING space. - SHIFT lv_count_str LEFT DELETING LEADING space. + SHIFT lv_count_str RIGHT DELETING TRAILING space. + SHIFT lv_count_str LEFT DELETING LEADING space. - SORT lt_cell_data BY cell_value data_type. - DELETE ADJACENT DUPLICATES FROM lt_cell_data COMPARING cell_value data_type. + SORT lt_cell_data BY cell_value data_type. + DELETE ADJACENT DUPLICATES FROM lt_cell_data COMPARING cell_value data_type. - DESCRIBE TABLE lt_cell_data LINES lv_uniquecount. - MOVE lv_uniquecount TO lv_uniquecount_str. + DESCRIBE TABLE lt_cell_data LINES lv_uniquecount. + MOVE lv_uniquecount TO lv_uniquecount_str. - SHIFT lv_uniquecount_str RIGHT DELETING TRAILING space. - SHIFT lv_uniquecount_str LEFT DELETING LEADING space. + SHIFT lv_uniquecount_str RIGHT DELETING TRAILING space. + SHIFT lv_uniquecount_str LEFT DELETING LEADING space. - clear lv_count. - LOOP AT lt_cell_data ASSIGNING where data_type = 's'. + CLEAR lv_count. + LOOP AT lt_cell_data ASSIGNING WHERE data_type = 's'. * lv_sytabix = sy-tabix - 1. - lv_sytabix = lv_count. - MOVE lv_sytabix TO ls_shared_string-string_no. - MOVE -cell_value TO ls_shared_string-string_value. - MOVE -data_type TO ls_shared_string-string_type. - INSERT ls_shared_string INTO TABLE shared_strings. - add 1 to lv_count. - ENDLOOP. + lv_sytabix = lv_count. + MOVE lv_sytabix TO ls_shared_string-string_no. + MOVE -cell_value TO ls_shared_string-string_value. + MOVE -data_type TO ls_shared_string-string_type. + INSERT ls_shared_string INTO TABLE shared_strings. + ADD 1 TO lv_count. + ENDLOOP. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_sst - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_ns ). - lo_element_root->set_attribute_ns( name = lc_xml_attr_count - value = lv_count_str ). - lo_element_root->set_attribute_ns( name = lc_xml_attr_uniquecount - value = lv_uniquecount_str ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_sst + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_count + value = lv_count_str ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_uniquecount + value = lv_uniquecount_str ). ********************************************************************** * STEP 4: Create subnode - LOOP AT shared_strings ASSIGNING . - lo_element = lo_document->create_simple_element( name = lc_xml_node_si - parent = lo_document ). - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_t - parent = lo_document ). + LOOP AT shared_strings ASSIGNING . + lo_element = lo_document->create_simple_element( name = lc_xml_node_si + parent = lo_document ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_t + parent = lo_document ). * if -string_type EQ 's_leading_blanks'. - IF -string_value IS NOT INITIAL AND -string_value(1) EQ ` `. - lo_sub_element->set_attribute( name = 'space' namespace = 'xml' value = 'preserve' ). - ENDIF. - lo_sub_element->set_value( value = -string_value ). - lo_element->append_child( new_child = lo_sub_element ). - lo_element_root->append_child( new_child = lo_element ). - ENDLOOP. + IF -string_value IS NOT INITIAL AND -string_value(1) EQ ` `. + lo_sub_element->set_attribute( name = 'space' namespace = 'xml' value = 'preserve' ). + ENDIF. + lo_sub_element->set_value( value = -string_value ). + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + ENDLOOP. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_sheet. + METHOD create_xl_sheet. *--------------------------------------------------------------------* * issue #330 - Adding ColorScale conditional formatting * - Ivan Femia, 2014-08-25 *--------------------------------------------------------------------* - TYPES: BEGIN OF colors, - colorrgb TYPE zexcel_color, - END OF colors. + TYPES: BEGIN OF colors, + colorrgb TYPE zexcel_color, + END OF colors. *--------------------------------------------------------------------* * issue #237 - Error writing column-style * - Stefan Schmoecker, 2012-11-01 *--------------------------------------------------------------------* - TYPES: BEGIN OF cfvo, - value TYPE zexcel_conditional_value, - type TYPE zexcel_conditional_type, - END OF cfvo. + TYPES: BEGIN OF cfvo, + value TYPE zexcel_conditional_value, + type TYPE zexcel_conditional_type, + END OF cfvo. *--------------------------------------------------------------------* * issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 1 - start *--------------------------------------------------------------------* - TYPES: BEGIN OF lty_table_area, - left TYPE i, - right TYPE i, - top TYPE i, - bottom TYPE i, - END OF lty_table_area. + TYPES: BEGIN OF lty_table_area, + left TYPE i, + right TYPE i, + top TYPE i, + bottom TYPE i, + END OF lty_table_area. *--------------------------------------------------------------------* * issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 1 - end *--------------------------------------------------------------------* @@ -3649,213 +3649,213 @@ METHOD create_xl_sheet. ty_condformating_ranges TYPE STANDARD TABLE OF ty_condformating_range. ** Constant node name - DATA: lc_xml_node_worksheet TYPE string VALUE 'worksheet', - lc_xml_node_sheetpr TYPE string VALUE 'sheetPr', - lc_xml_node_tabcolor TYPE string VALUE 'tabColor', - lc_xml_node_outlinepr TYPE string VALUE 'outlinePr', - lc_xml_node_dimension TYPE string VALUE 'dimension', - lc_xml_node_sheetviews TYPE string VALUE 'sheetViews', - lc_xml_node_sheetview TYPE string VALUE 'sheetView', - lc_xml_node_selection TYPE string VALUE 'selection', - lc_xml_node_pane TYPE string VALUE 'pane', - lc_xml_node_sheetformatpr TYPE string VALUE 'sheetFormatPr', - lc_xml_node_cols TYPE string VALUE 'cols', - lc_xml_node_col TYPE string VALUE 'col', - lc_xml_node_sheetprotection TYPE string VALUE 'sheetProtection', - lc_xml_node_pagemargins TYPE string VALUE 'pageMargins', - lc_xml_node_pagesetup TYPE string VALUE 'pageSetup', - lc_xml_node_pagesetuppr TYPE string VALUE 'pageSetUpPr', - lc_xml_node_condformatting TYPE string VALUE 'conditionalFormatting', - lc_xml_node_cfrule TYPE string VALUE 'cfRule', - lc_xml_node_color TYPE string VALUE 'color', " Databar by Albert Lladanosa - lc_xml_node_databar TYPE string VALUE 'dataBar', " Databar by Albert Lladanosa - lc_xml_node_colorscale TYPE string VALUE 'colorScale', - lc_xml_node_iconset TYPE string VALUE 'iconSet', - lc_xml_node_cfvo TYPE string VALUE 'cfvo', - lc_xml_node_formula TYPE string VALUE 'formula', - lc_xml_node_datavalidations TYPE string VALUE 'dataValidations', - lc_xml_node_datavalidation TYPE string VALUE 'dataValidation', - lc_xml_node_formula1 TYPE string VALUE 'formula1', - lc_xml_node_formula2 TYPE string VALUE 'formula2', - lc_xml_node_mergecell TYPE string VALUE 'mergeCell', - lc_xml_node_mergecells TYPE string VALUE 'mergeCells', - lc_xml_node_drawing TYPE string VALUE 'drawing', - lc_xml_node_drawing_for_cmt TYPE string VALUE 'legacyDrawing', + DATA: lc_xml_node_worksheet TYPE string VALUE 'worksheet', + lc_xml_node_sheetpr TYPE string VALUE 'sheetPr', + lc_xml_node_tabcolor TYPE string VALUE 'tabColor', + lc_xml_node_outlinepr TYPE string VALUE 'outlinePr', + lc_xml_node_dimension TYPE string VALUE 'dimension', + lc_xml_node_sheetviews TYPE string VALUE 'sheetViews', + lc_xml_node_sheetview TYPE string VALUE 'sheetView', + lc_xml_node_selection TYPE string VALUE 'selection', + lc_xml_node_pane TYPE string VALUE 'pane', + lc_xml_node_sheetformatpr TYPE string VALUE 'sheetFormatPr', + lc_xml_node_cols TYPE string VALUE 'cols', + lc_xml_node_col TYPE string VALUE 'col', + lc_xml_node_sheetprotection TYPE string VALUE 'sheetProtection', + lc_xml_node_pagemargins TYPE string VALUE 'pageMargins', + lc_xml_node_pagesetup TYPE string VALUE 'pageSetup', + lc_xml_node_pagesetuppr TYPE string VALUE 'pageSetUpPr', + lc_xml_node_condformatting TYPE string VALUE 'conditionalFormatting', + lc_xml_node_cfrule TYPE string VALUE 'cfRule', + lc_xml_node_color TYPE string VALUE 'color', " Databar by Albert Lladanosa + lc_xml_node_databar TYPE string VALUE 'dataBar', " Databar by Albert Lladanosa + lc_xml_node_colorscale TYPE string VALUE 'colorScale', + lc_xml_node_iconset TYPE string VALUE 'iconSet', + lc_xml_node_cfvo TYPE string VALUE 'cfvo', + lc_xml_node_formula TYPE string VALUE 'formula', + lc_xml_node_datavalidations TYPE string VALUE 'dataValidations', + lc_xml_node_datavalidation TYPE string VALUE 'dataValidation', + lc_xml_node_formula1 TYPE string VALUE 'formula1', + lc_xml_node_formula2 TYPE string VALUE 'formula2', + lc_xml_node_mergecell TYPE string VALUE 'mergeCell', + lc_xml_node_mergecells TYPE string VALUE 'mergeCells', + lc_xml_node_drawing TYPE string VALUE 'drawing', + lc_xml_node_drawing_for_cmt TYPE string VALUE 'legacyDrawing', ********************************************************************** - lc_xml_node_drawing_for_hd_ft TYPE string VALUE 'legacyDrawingHF', + lc_xml_node_drawing_for_hd_ft TYPE string VALUE 'legacyDrawingHF', ********************************************************************** - lc_xml_node_headerfooter TYPE string VALUE 'headerFooter', - lc_xml_node_oddheader TYPE string VALUE 'oddHeader', - lc_xml_node_oddfooter TYPE string VALUE 'oddFooter', - lc_xml_node_evenheader TYPE string VALUE 'evenHeader', - lc_xml_node_evenfooter TYPE string VALUE 'evenFooter', - lc_xml_node_autofilter TYPE string VALUE 'autoFilter', - lc_xml_node_filtercolumn TYPE string VALUE 'filterColumn', - lc_xml_node_filters TYPE string VALUE 'filters', - lc_xml_node_filter TYPE string VALUE 'filter', - " Node attributes - lc_xml_attr_ref TYPE string VALUE 'ref', - lc_xml_attr_summarybelow TYPE string VALUE 'summaryBelow', - lc_xml_attr_summaryright TYPE string VALUE 'summaryRight', - lc_xml_attr_tabselected TYPE string VALUE 'tabSelected', - lc_xml_attr_showzeros TYPE string VALUE 'showZeros', - lc_xml_attr_zoomscale TYPE string VALUE 'zoomScale', - lc_xml_attr_zoomscalenormal TYPE string VALUE 'zoomScaleNormal', - lc_xml_attr_zoomscalepageview TYPE string VALUE 'zoomScalePageLayoutView', - lc_xml_attr_zoomscalesheetview TYPE string VALUE 'zoomScaleSheetLayoutView', - lc_xml_attr_workbookviewid TYPE string VALUE 'workbookViewId', - lc_xml_attr_showgridlines TYPE string VALUE 'showGridLines', - lc_xml_attr_gridlines TYPE string VALUE 'gridLines', - lc_xml_attr_showrowcolheaders TYPE string VALUE 'showRowColHeaders', - lc_xml_attr_activecell TYPE string VALUE 'activeCell', - lc_xml_attr_sqref TYPE string VALUE 'sqref', - lc_xml_attr_min TYPE string VALUE 'min', - lc_xml_attr_max TYPE string VALUE 'max', - lc_xml_attr_hidden TYPE string VALUE 'hidden', - lc_xml_attr_width TYPE string VALUE 'width', - lc_xml_attr_defaultwidth TYPE string VALUE '9.10', - lc_xml_attr_style TYPE string VALUE 'style', - lc_xml_attr_true TYPE string VALUE 'true', - lc_xml_attr_bestfit TYPE string VALUE 'bestFit', - lc_xml_attr_customheight TYPE string VALUE 'customHeight', - lc_xml_attr_customwidth TYPE string VALUE 'customWidth', - lc_xml_attr_collapsed TYPE string VALUE 'collapsed', - lc_xml_attr_defaultrowheight TYPE string VALUE 'defaultRowHeight', - lc_xml_attr_defaultcolwidth TYPE string VALUE 'defaultColWidth', - lc_xml_attr_outlinelevelrow TYPE string VALUE 'x14ac:outlineLevelRow', - lc_xml_attr_outlinelevelcol TYPE string VALUE 'x14ac:outlineLevelCol', - lc_xml_attr_outlinelevel TYPE string VALUE 'outlineLevel', - lc_xml_attr_password TYPE string VALUE 'password', - lc_xml_attr_sheet TYPE string VALUE 'sheet', - lc_xml_attr_objects TYPE string VALUE 'objects', - lc_xml_attr_scenarios TYPE string VALUE 'scenarios', - lc_xml_attr_autofilter TYPE string VALUE 'autoFilter', - lc_xml_attr_deletecolumns TYPE string VALUE 'deleteColumns', - lc_xml_attr_deleterows TYPE string VALUE 'deleteRows', - lc_xml_attr_formatcells TYPE string VALUE 'formatCells', - lc_xml_attr_formatcolumns TYPE string VALUE 'formatColumns', - lc_xml_attr_formatrows TYPE string VALUE 'formatRows', - lc_xml_attr_insertcolumns TYPE string VALUE 'insertColumns', - lc_xml_attr_inserthyperlinks TYPE string VALUE 'insertHyperlinks', - lc_xml_attr_insertrows TYPE string VALUE 'insertRows', - lc_xml_attr_pivottables TYPE string VALUE 'pivotTables', - lc_xml_attr_selectlockedcells TYPE string VALUE 'selectLockedCells', - lc_xml_attr_selectunlockedcell TYPE string VALUE 'selectUnlockedCells', - lc_xml_attr_sort TYPE string VALUE 'sort', - lc_xml_attr_left TYPE string VALUE 'left', - lc_xml_attr_right TYPE string VALUE 'right', - lc_xml_attr_top TYPE string VALUE 'top', - lc_xml_attr_bottom TYPE string VALUE 'bottom', - lc_xml_attr_header TYPE string VALUE 'header', - lc_xml_attr_footer TYPE string VALUE 'footer', - lc_xml_attr_type TYPE string VALUE 'type', - lc_xml_attr_iconset TYPE string VALUE 'iconSet', - lc_xml_attr_showvalue TYPE string VALUE 'showValue', - lc_xml_attr_val TYPE string VALUE 'val', - lc_xml_attr_dxfid TYPE string VALUE 'dxfId', - lc_xml_attr_priority TYPE string VALUE 'priority', - lc_xml_attr_operator TYPE string VALUE 'operator', - lc_xml_attr_allowblank TYPE string VALUE 'allowBlank', - lc_xml_attr_showinputmessage TYPE string VALUE 'showInputMessage', - lc_xml_attr_showerrormessage TYPE string VALUE 'showErrorMessage', - lc_xml_attr_showdropdown TYPE string VALUE 'ShowDropDown', " 'showDropDown' does not work - lc_xml_attr_errortitle TYPE string VALUE 'errorTitle', - lc_xml_attr_error TYPE string VALUE 'error', - lc_xml_attr_errorstyle TYPE string VALUE 'errorStyle', - lc_xml_attr_prompttitle TYPE string VALUE 'promptTitle', - lc_xml_attr_prompt TYPE string VALUE 'prompt', - lc_xml_attr_count TYPE string VALUE 'count', - lc_xml_attr_blackandwhite TYPE string VALUE 'blackAndWhite', - lc_xml_attr_cellcomments TYPE string VALUE 'cellComments', - lc_xml_attr_copies TYPE string VALUE 'copies', - lc_xml_attr_draft TYPE string VALUE 'draft', - lc_xml_attr_errors TYPE string VALUE 'errors', - lc_xml_attr_firstpagenumber TYPE string VALUE 'firstPageNumber', - lc_xml_attr_fittopage TYPE string VALUE 'fitToPage', - lc_xml_attr_fittoheight TYPE string VALUE 'fitToHeight', - lc_xml_attr_fittowidth TYPE string VALUE 'fitToWidth', - lc_xml_attr_horizontaldpi TYPE string VALUE 'horizontalDpi', - lc_xml_attr_orientation TYPE string VALUE 'orientation', - lc_xml_attr_pageorder TYPE string VALUE 'pageOrder', - lc_xml_attr_paperheight TYPE string VALUE 'paperHeight', - lc_xml_attr_papersize TYPE string VALUE 'paperSize', - lc_xml_attr_paperwidth TYPE string VALUE 'paperWidth', - lc_xml_attr_scale TYPE string VALUE 'scale', - lc_xml_attr_usefirstpagenumber TYPE string VALUE 'useFirstPageNumber', - lc_xml_attr_useprinterdefaults TYPE string VALUE 'usePrinterDefaults', - lc_xml_attr_verticaldpi TYPE string VALUE 'verticalDpi', - lc_xml_attr_differentoddeven TYPE string VALUE 'differentOddEven', - lc_xml_attr_colid TYPE string VALUE 'colId', - lc_xml_attr_filtermode TYPE string VALUE 'filterMode', - lc_xml_attr_tabcolor_rgb TYPE string VALUE 'rgb', - " Node namespace - lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', - lc_xml_node_comp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', - lc_xml_node_comp_pref TYPE string VALUE 'x14ac', - lc_xml_node_ig_ns TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_element_2 TYPE REF TO if_ixml_element, - lo_element_3 TYPE REF TO if_ixml_element, - lo_element_4 TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_style_cond TYPE REF TO zcl_excel_style_cond, - lo_data_validation TYPE REF TO zcl_excel_data_validation, - lo_table TYPE REF TO zcl_excel_table, - lo_column_default TYPE REF TO zcl_excel_column, - lo_row_default TYPE REF TO zcl_excel_row. - - DATA: lv_value TYPE string, - lt_range_merge TYPE string_table, - lv_column TYPE zexcel_cell_column, - lv_style_guid TYPE zexcel_cell_style, - ls_databar TYPE zexcel_conditional_databar, " Databar by Albert Lladanosa - ls_colorscale TYPE zexcel_conditional_colorscale, - ls_iconset TYPE zexcel_conditional_iconset, - ls_cellis TYPE zexcel_conditional_cellis, - ls_expression TYPE zexcel_conditional_expression, - ls_conditional_top10 TYPE zexcel_conditional_top10, - ls_conditional_above_avg TYPE zexcel_conditional_above_avg, - lt_cfvo TYPE TABLE OF cfvo, - ls_cfvo TYPE cfvo, - lt_colors TYPE TABLE OF colors, - ls_colors TYPE colors, - lv_cell_row_s TYPE string, - ls_style_mapping TYPE zexcel_s_styles_mapping, - lv_freeze_cell_row TYPE zexcel_cell_row, - lv_freeze_cell_column TYPE zexcel_cell_column, - lv_freeze_cell_column_alpha TYPE zexcel_cell_column_alpha, - lo_column_iterator TYPE REF TO cl_object_collection_iterator, - lo_column TYPE REF TO zcl_excel_column, - lo_row_iterator TYPE REF TO cl_object_collection_iterator, - ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, - lv_relation_id TYPE i VALUE 0, - outline_level_col TYPE i VALUE 0, - lts_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row, - merge_count TYPE int4, - lt_values TYPE zexcel_t_autofilter_values, - ls_values TYPE zexcel_s_autofilter_values, - lo_autofilters TYPE REF TO zcl_excel_autofilters, - lo_autofilter TYPE REF TO zcl_excel_autofilter, - lv_ref TYPE string, - lt_condformating_ranges TYPE ty_condformating_ranges, - ls_condformating_range TYPE ty_condformating_range. - - FIELD-SYMBOLS: TYPE zexcel_s_cell_data, - LIKE LINE OF lt_range_merge, - LIKE LINE OF lts_row_outlines, - TYPE ty_condformating_range. + lc_xml_node_headerfooter TYPE string VALUE 'headerFooter', + lc_xml_node_oddheader TYPE string VALUE 'oddHeader', + lc_xml_node_oddfooter TYPE string VALUE 'oddFooter', + lc_xml_node_evenheader TYPE string VALUE 'evenHeader', + lc_xml_node_evenfooter TYPE string VALUE 'evenFooter', + lc_xml_node_autofilter TYPE string VALUE 'autoFilter', + lc_xml_node_filtercolumn TYPE string VALUE 'filterColumn', + lc_xml_node_filters TYPE string VALUE 'filters', + lc_xml_node_filter TYPE string VALUE 'filter', + " Node attributes + lc_xml_attr_ref TYPE string VALUE 'ref', + lc_xml_attr_summarybelow TYPE string VALUE 'summaryBelow', + lc_xml_attr_summaryright TYPE string VALUE 'summaryRight', + lc_xml_attr_tabselected TYPE string VALUE 'tabSelected', + lc_xml_attr_showzeros TYPE string VALUE 'showZeros', + lc_xml_attr_zoomscale TYPE string VALUE 'zoomScale', + lc_xml_attr_zoomscalenormal TYPE string VALUE 'zoomScaleNormal', + lc_xml_attr_zoomscalepageview TYPE string VALUE 'zoomScalePageLayoutView', + lc_xml_attr_zoomscalesheetview TYPE string VALUE 'zoomScaleSheetLayoutView', + lc_xml_attr_workbookviewid TYPE string VALUE 'workbookViewId', + lc_xml_attr_showgridlines TYPE string VALUE 'showGridLines', + lc_xml_attr_gridlines TYPE string VALUE 'gridLines', + lc_xml_attr_showrowcolheaders TYPE string VALUE 'showRowColHeaders', + lc_xml_attr_activecell TYPE string VALUE 'activeCell', + lc_xml_attr_sqref TYPE string VALUE 'sqref', + lc_xml_attr_min TYPE string VALUE 'min', + lc_xml_attr_max TYPE string VALUE 'max', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_width TYPE string VALUE 'width', + lc_xml_attr_defaultwidth TYPE string VALUE '9.10', + lc_xml_attr_style TYPE string VALUE 'style', + lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_bestfit TYPE string VALUE 'bestFit', + lc_xml_attr_customheight TYPE string VALUE 'customHeight', + lc_xml_attr_customwidth TYPE string VALUE 'customWidth', + lc_xml_attr_collapsed TYPE string VALUE 'collapsed', + lc_xml_attr_defaultrowheight TYPE string VALUE 'defaultRowHeight', + lc_xml_attr_defaultcolwidth TYPE string VALUE 'defaultColWidth', + lc_xml_attr_outlinelevelrow TYPE string VALUE 'x14ac:outlineLevelRow', + lc_xml_attr_outlinelevelcol TYPE string VALUE 'x14ac:outlineLevelCol', + lc_xml_attr_outlinelevel TYPE string VALUE 'outlineLevel', + lc_xml_attr_password TYPE string VALUE 'password', + lc_xml_attr_sheet TYPE string VALUE 'sheet', + lc_xml_attr_objects TYPE string VALUE 'objects', + lc_xml_attr_scenarios TYPE string VALUE 'scenarios', + lc_xml_attr_autofilter TYPE string VALUE 'autoFilter', + lc_xml_attr_deletecolumns TYPE string VALUE 'deleteColumns', + lc_xml_attr_deleterows TYPE string VALUE 'deleteRows', + lc_xml_attr_formatcells TYPE string VALUE 'formatCells', + lc_xml_attr_formatcolumns TYPE string VALUE 'formatColumns', + lc_xml_attr_formatrows TYPE string VALUE 'formatRows', + lc_xml_attr_insertcolumns TYPE string VALUE 'insertColumns', + lc_xml_attr_inserthyperlinks TYPE string VALUE 'insertHyperlinks', + lc_xml_attr_insertrows TYPE string VALUE 'insertRows', + lc_xml_attr_pivottables TYPE string VALUE 'pivotTables', + lc_xml_attr_selectlockedcells TYPE string VALUE 'selectLockedCells', + lc_xml_attr_selectunlockedcell TYPE string VALUE 'selectUnlockedCells', + lc_xml_attr_sort TYPE string VALUE 'sort', + lc_xml_attr_left TYPE string VALUE 'left', + lc_xml_attr_right TYPE string VALUE 'right', + lc_xml_attr_top TYPE string VALUE 'top', + lc_xml_attr_bottom TYPE string VALUE 'bottom', + lc_xml_attr_header TYPE string VALUE 'header', + lc_xml_attr_footer TYPE string VALUE 'footer', + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_iconset TYPE string VALUE 'iconSet', + lc_xml_attr_showvalue TYPE string VALUE 'showValue', + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_attr_dxfid TYPE string VALUE 'dxfId', + lc_xml_attr_priority TYPE string VALUE 'priority', + lc_xml_attr_operator TYPE string VALUE 'operator', + lc_xml_attr_allowblank TYPE string VALUE 'allowBlank', + lc_xml_attr_showinputmessage TYPE string VALUE 'showInputMessage', + lc_xml_attr_showerrormessage TYPE string VALUE 'showErrorMessage', + lc_xml_attr_showdropdown TYPE string VALUE 'ShowDropDown', " 'showDropDown' does not work + lc_xml_attr_errortitle TYPE string VALUE 'errorTitle', + lc_xml_attr_error TYPE string VALUE 'error', + lc_xml_attr_errorstyle TYPE string VALUE 'errorStyle', + lc_xml_attr_prompttitle TYPE string VALUE 'promptTitle', + lc_xml_attr_prompt TYPE string VALUE 'prompt', + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_blackandwhite TYPE string VALUE 'blackAndWhite', + lc_xml_attr_cellcomments TYPE string VALUE 'cellComments', + lc_xml_attr_copies TYPE string VALUE 'copies', + lc_xml_attr_draft TYPE string VALUE 'draft', + lc_xml_attr_errors TYPE string VALUE 'errors', + lc_xml_attr_firstpagenumber TYPE string VALUE 'firstPageNumber', + lc_xml_attr_fittopage TYPE string VALUE 'fitToPage', + lc_xml_attr_fittoheight TYPE string VALUE 'fitToHeight', + lc_xml_attr_fittowidth TYPE string VALUE 'fitToWidth', + lc_xml_attr_horizontaldpi TYPE string VALUE 'horizontalDpi', + lc_xml_attr_orientation TYPE string VALUE 'orientation', + lc_xml_attr_pageorder TYPE string VALUE 'pageOrder', + lc_xml_attr_paperheight TYPE string VALUE 'paperHeight', + lc_xml_attr_papersize TYPE string VALUE 'paperSize', + lc_xml_attr_paperwidth TYPE string VALUE 'paperWidth', + lc_xml_attr_scale TYPE string VALUE 'scale', + lc_xml_attr_usefirstpagenumber TYPE string VALUE 'useFirstPageNumber', + lc_xml_attr_useprinterdefaults TYPE string VALUE 'usePrinterDefaults', + lc_xml_attr_verticaldpi TYPE string VALUE 'verticalDpi', + lc_xml_attr_differentoddeven TYPE string VALUE 'differentOddEven', + lc_xml_attr_colid TYPE string VALUE 'colId', + lc_xml_attr_filtermode TYPE string VALUE 'filterMode', + lc_xml_attr_tabcolor_rgb TYPE string VALUE 'rgb', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + lc_xml_node_comp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + lc_xml_node_comp_pref TYPE string VALUE 'x14ac', + lc_xml_node_ig_ns TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element_2 TYPE REF TO if_ixml_element, + lo_element_3 TYPE REF TO if_ixml_element, + lo_element_4 TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_style_cond TYPE REF TO zcl_excel_style_cond, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_table TYPE REF TO zcl_excel_table, + lo_column_default TYPE REF TO zcl_excel_column, + lo_row_default TYPE REF TO zcl_excel_row. + + DATA: lv_value TYPE string, + lt_range_merge TYPE string_table, + lv_column TYPE zexcel_cell_column, + lv_style_guid TYPE zexcel_cell_style, + ls_databar TYPE zexcel_conditional_databar, " Databar by Albert Lladanosa + ls_colorscale TYPE zexcel_conditional_colorscale, + ls_iconset TYPE zexcel_conditional_iconset, + ls_cellis TYPE zexcel_conditional_cellis, + ls_expression TYPE zexcel_conditional_expression, + ls_conditional_top10 TYPE zexcel_conditional_top10, + ls_conditional_above_avg TYPE zexcel_conditional_above_avg, + lt_cfvo TYPE TABLE OF cfvo, + ls_cfvo TYPE cfvo, + lt_colors TYPE TABLE OF colors, + ls_colors TYPE colors, + lv_cell_row_s TYPE string, + ls_style_mapping TYPE zexcel_s_styles_mapping, + lv_freeze_cell_row TYPE zexcel_cell_row, + lv_freeze_cell_column TYPE zexcel_cell_column, + lv_freeze_cell_column_alpha TYPE zexcel_cell_column_alpha, + lo_column_iterator TYPE REF TO cl_object_collection_iterator, + lo_column TYPE REF TO zcl_excel_column, + lo_row_iterator TYPE REF TO cl_object_collection_iterator, + ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, + lv_relation_id TYPE i VALUE 0, + outline_level_col TYPE i VALUE 0, + lts_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row, + merge_count TYPE int4, + lt_values TYPE zexcel_t_autofilter_values, + ls_values TYPE zexcel_s_autofilter_values, + lo_autofilters TYPE REF TO zcl_excel_autofilters, + lo_autofilter TYPE REF TO zcl_excel_autofilter, + lv_ref TYPE string, + lt_condformating_ranges TYPE ty_condformating_ranges, + ls_condformating_range TYPE ty_condformating_range. + + FIELD-SYMBOLS: TYPE zexcel_s_cell_data, + LIKE LINE OF lt_range_merge, + LIKE LINE OF lts_row_outlines, + TYPE ty_condformating_range. *--------------------------------------------------------------------* * issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 2 - start *--------------------------------------------------------------------* - DATA: lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom. + DATA: lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom. *--------------------------------------------------------------------* * issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 2 - end @@ -3865,555 +3865,555 @@ METHOD create_xl_sheet. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). *********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_worksheet - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:r' - value = lc_xml_node_r_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:mc' - value = lc_xml_node_comp_ns ). - lo_element_root->set_attribute_ns( name = 'mc:Ignorable' - value = lc_xml_node_comp_pref ). - lo_element_root->set_attribute_ns( name = 'xmlns:x14ac' - value = lc_xml_node_ig_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_worksheet + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_r_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:mc' + value = lc_xml_node_comp_ns ). + lo_element_root->set_attribute_ns( name = 'mc:Ignorable' + value = lc_xml_node_comp_pref ). + lo_element_root->set_attribute_ns( name = 'xmlns:x14ac' + value = lc_xml_node_ig_ns ). ********************************************************************** * STEP 4: Create subnodes - " sheetPr - lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetpr - parent = lo_document ). - " TODO tabColor - IF io_worksheet->tabcolor IS NOT INITIAL. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_tabcolor - parent = lo_element ). + " sheetPr + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetpr + parent = lo_document ). + " TODO tabColor + IF io_worksheet->tabcolor IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_tabcolor + parent = lo_element ). * Theme not supported yet - start with RGB - lv_value = io_worksheet->tabcolor-rgb. - lo_element_2->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb - value = lv_value ). - ENDIF. + lv_value = io_worksheet->tabcolor-rgb. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). + ENDIF. - " outlinePr - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_outlinepr - parent = lo_document ). + " outlinePr + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_outlinepr + parent = lo_document ). - lv_value = io_worksheet->zif_excel_sheet_properties~summarybelow. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_summarybelow - value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_properties~summarybelow. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_summarybelow + value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_properties~summaryright. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_summaryright - value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_properties~summaryright. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_summaryright + value = lv_value ). - lo_element->append_child( new_child = lo_element_2 ). + lo_element->append_child( new_child = lo_element_2 ). - IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_pagesetuppr - parent = lo_document ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_fittopage - value = `1` ). - lo_element->append_child( new_child = lo_element_2 ). " pageSetupPr node - ENDIF. + IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_pagesetuppr + parent = lo_document ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_fittopage + value = `1` ). + lo_element->append_child( new_child = lo_element_2 ). " pageSetupPr node + ENDIF. - lo_element_root->append_child( new_child = lo_element ). + lo_element_root->append_child( new_child = lo_element ). - " dimension node - lo_element = lo_document->create_simple_element( name = lc_xml_node_dimension - parent = lo_document ). - lv_value = io_worksheet->get_dimension_range( ). - lo_element->set_attribute_ns( name = lc_xml_attr_ref - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + " dimension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_dimension + parent = lo_document ). + lv_value = io_worksheet->get_dimension_range( ). + lo_element->set_attribute_ns( name = lc_xml_attr_ref + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " sheetViews node - lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetviews - parent = lo_document ). - " sheetView node - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_sheetview + " sheetViews node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetviews parent = lo_document ). - IF io_worksheet->zif_excel_sheet_properties~show_zeros EQ abap_false. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showzeros - value = '0' ). - ENDIF. - IF iv_active = abap_true - OR io_worksheet->zif_excel_sheet_properties~selected EQ abap_true. - lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected - value = '1' ). - ELSE. - lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected - value = '0' ). - ENDIF. - " Zoom scale - IF io_worksheet->zif_excel_sheet_properties~zoomscale GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale = 10. - ENDIF. - lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscale - value = lv_value ). - IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_normal LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 10. + " sheetView node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_sheetview + parent = lo_document ). + IF io_worksheet->zif_excel_sheet_properties~show_zeros EQ abap_false. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showzeros + value = '0' ). ENDIF. - lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_normal. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalenormal - value = lv_value ). - ENDIF. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview NE 0. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 10. + IF iv_active = abap_true + OR io_worksheet->zif_excel_sheet_properties~selected EQ abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected + value = '0' ). ENDIF. - lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalepageview - value = lv_value ). - ENDIF. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview NE 0. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 10. + " Zoom scale + IF io_worksheet->zif_excel_sheet_properties~zoomscale GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale = 10. ENDIF. - lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale. CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalesheetview - value = lv_value ). - ENDIF. - lo_element_2->set_attribute_ns( name = lc_xml_attr_workbookviewid - value = '0' ). - " showGridLines attribute - IF io_worksheet->show_gridlines = abap_true. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines - value = '1' ). - ELSE. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscale + value = lv_value ). + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_normal LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_normal. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalenormal + value = lv_value ). + ENDIF. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalepageview + value = lv_value ). + ENDIF. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalesheetview + value = lv_value ). + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_workbookviewid value = '0' ). - ENDIF. + " showGridLines attribute + IF io_worksheet->show_gridlines = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines + value = '0' ). + ENDIF. - " showRowColHeaders attribute - IF io_worksheet->show_rowcolheaders = abap_true. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders - value = '1' ). - ELSE. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders - value = '0' ). - ENDIF. + " showRowColHeaders attribute + IF io_worksheet->show_rowcolheaders = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders + value = '0' ). + ENDIF. - " freeze panes - io_worksheet->get_freeze_cell( IMPORTING ep_row = lv_freeze_cell_row - ep_column = lv_freeze_cell_column ). + " freeze panes + io_worksheet->get_freeze_cell( IMPORTING ep_row = lv_freeze_cell_row + ep_column = lv_freeze_cell_column ). - IF lv_freeze_cell_row IS NOT INITIAL AND lv_freeze_cell_column IS NOT INITIAL. - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_pane - parent = lo_element_2 ). + IF lv_freeze_cell_row IS NOT INITIAL AND lv_freeze_cell_column IS NOT INITIAL. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_pane + parent = lo_element_2 ). - IF lv_freeze_cell_row > 1. - lv_value = lv_freeze_cell_row - 1. - CONDENSE lv_value. - lo_element_3->set_attribute_ns( name = 'ySplit' - value = lv_value ). - ENDIF. + IF lv_freeze_cell_row > 1. + lv_value = lv_freeze_cell_row - 1. + CONDENSE lv_value. + lo_element_3->set_attribute_ns( name = 'ySplit' + value = lv_value ). + ENDIF. - IF lv_freeze_cell_column > 1. - lv_value = lv_freeze_cell_column - 1. - CONDENSE lv_value. - lo_element_3->set_attribute_ns( name = 'xSplit' - value = lv_value ). - ENDIF. + IF lv_freeze_cell_column > 1. + lv_value = lv_freeze_cell_column - 1. + CONDENSE lv_value. + lo_element_3->set_attribute_ns( name = 'xSplit' + value = lv_value ). + ENDIF. - lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ). - lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ). - CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value. - lo_element_3->set_attribute_ns( name = 'topLeftCell' - value = lv_value ). + lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ). + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ). + CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value. + lo_element_3->set_attribute_ns( name = 'topLeftCell' + value = lv_value ). - lo_element_3->set_attribute_ns( name = 'activePane' - value = 'bottomRight' ). + lo_element_3->set_attribute_ns( name = 'activePane' + value = 'bottomRight' ). - lo_element_3->set_attribute_ns( name = 'state' - value = 'frozen' ). + lo_element_3->set_attribute_ns( name = 'state' + value = 'frozen' ). - lo_element_2->append_child( new_child = lo_element_3 ). - ENDIF. - " selection node - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_selection - parent = lo_document ). - lv_value = io_worksheet->get_active_cell( ). - lo_element_3->set_attribute_ns( name = lc_xml_attr_activecell - value = lv_value ). + lo_element_2->append_child( new_child = lo_element_3 ). + ENDIF. + " selection node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_selection + parent = lo_document ). + lv_value = io_worksheet->get_active_cell( ). + lo_element_3->set_attribute_ns( name = lc_xml_attr_activecell + value = lv_value ). - lo_element_3->set_attribute_ns( name = lc_xml_attr_sqref - value = lv_value ). + lo_element_3->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). - lo_element_2->append_child( new_child = lo_element_3 ). " sheetView node + lo_element_2->append_child( new_child = lo_element_3 ). " sheetView node - lo_element->append_child( new_child = lo_element_2 ). " sheetView node + lo_element->append_child( new_child = lo_element_2 ). " sheetView node - lo_element_root->append_child( new_child = lo_element ). " sheetViews node + lo_element_root->append_child( new_child = lo_element ). " sheetViews node - lo_column_iterator = io_worksheet->get_columns_iterator( ). - lo_row_iterator = io_worksheet->get_rows_iterator( ). - " Calculate col - IF NOT lo_column_iterator IS BOUND. - io_worksheet->calculate_column_widths( ). lo_column_iterator = io_worksheet->get_columns_iterator( ). - ENDIF. + lo_row_iterator = io_worksheet->get_rows_iterator( ). + " Calculate col + IF NOT lo_column_iterator IS BOUND. + io_worksheet->calculate_column_widths( ). + lo_column_iterator = io_worksheet->get_columns_iterator( ). + ENDIF. - " sheetFormatPr node - lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetformatpr - parent = lo_document ). - " defaultRowHeight - lo_row_default = io_worksheet->get_default_row( ). - IF lo_row_default IS BOUND. - IF lo_row_default->get_row_height( ) >= 0. - lo_element->set_attribute_ns( name = lc_xml_attr_customheight - value = lc_xml_attr_true ). - lv_value = lo_row_default->get_row_height( ). + " sheetFormatPr node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetformatpr + parent = lo_document ). + " defaultRowHeight + lo_row_default = io_worksheet->get_default_row( ). + IF lo_row_default IS BOUND. + IF lo_row_default->get_row_height( ) >= 0. + lo_element->set_attribute_ns( name = lc_xml_attr_customheight + value = lc_xml_attr_true ). + lv_value = lo_row_default->get_row_height( ). + ELSE. + lv_value = '12.75'. + ENDIF. ELSE. lv_value = '12.75'. ENDIF. - ELSE. - lv_value = '12.75'. - ENDIF. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_defaultrowheight - value = lv_value ). - " defaultColWidth - lo_column_default = io_worksheet->get_default_column( ). - IF lo_column_default IS BOUND AND lo_column_default->get_width( ) >= 0. - lv_value = lo_column_default->get_width( ). SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_defaultcolwidth + lo_element->set_attribute_ns( name = lc_xml_attr_defaultrowheight value = lv_value ). - ENDIF. - - " outlineLevelCol - WHILE lo_column_iterator->has_next( ) = abap_true. - lo_column ?= lo_column_iterator->get_next( ). - IF lo_column->get_outline_level( ) > outline_level_col. - outline_level_col = lo_column->get_outline_level( ). + " defaultColWidth + lo_column_default = io_worksheet->get_default_column( ). + IF lo_column_default IS BOUND AND lo_column_default->get_width( ) >= 0. + lv_value = lo_column_default->get_width( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_defaultcolwidth + value = lv_value ). ENDIF. - ENDWHILE. - lv_value = outline_level_col. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_outlinelevelcol - value = lv_value ). + " outlineLevelCol + WHILE lo_column_iterator->has_next( ) = abap_true. + lo_column ?= lo_column_iterator->get_next( ). + IF lo_column->get_outline_level( ) > outline_level_col. + outline_level_col = lo_column->get_outline_level( ). + ENDIF. + ENDWHILE. + + lv_value = outline_level_col. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_outlinelevelcol + value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). " sheetFormatPr node + lo_element_root->append_child( new_child = lo_element ). " sheetFormatPr node * Reset column iterator - lo_column_iterator = io_worksheet->get_columns_iterator( ). - IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL OR lo_column_iterator->has_next( ) = abap_true. - " cols node - lo_element = lo_document->create_simple_element( name = lc_xml_node_cols - parent = lo_document ). - " This code have to be enhanced in order to manage also column style properties - " Now it is an out/out - IF lo_column_iterator->has_next( ) = abap_true. - WHILE lo_column_iterator->has_next( ) = abap_true. - lo_column ?= lo_column_iterator->get_next( ). - " col node - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col - parent = lo_document ). - lv_value = lo_column->get_column_index( ). - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_2->set_attribute_ns( name = lc_xml_attr_min - value = lv_value ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_max - value = lv_value ). - " Width - IF lo_column->get_width( ) < 0. - lo_element_2->set_attribute_ns( name = lc_xml_attr_width - value = lc_xml_attr_defaultwidth ). - ELSE. - lv_value = lo_column->get_width( ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_width + lo_column_iterator = io_worksheet->get_columns_iterator( ). + IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL OR lo_column_iterator->has_next( ) = abap_true. + " cols node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cols + parent = lo_document ). + " This code have to be enhanced in order to manage also column style properties + " Now it is an out/out + IF lo_column_iterator->has_next( ) = abap_true. + WHILE lo_column_iterator->has_next( ) = abap_true. + lo_column ?= lo_column_iterator->get_next( ). + " col node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col + parent = lo_document ). + lv_value = lo_column->get_column_index( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_min value = lv_value ). - ENDIF. - " Column visibility - IF lo_column->get_visible( ) = abap_false. - lo_element_2->set_attribute_ns( name = lc_xml_attr_hidden - value = lc_xml_attr_true ). - ENDIF. - " Auto size? - IF lo_column->get_auto_size( ) = abap_true. - lo_element_2->set_attribute_ns( name = lc_xml_attr_bestfit - value = lc_xml_attr_true ). - ENDIF. - " Custom width? - IF lo_column_default IS BOUND. - IF lo_column->get_width( ) <> lo_column_default->get_width( ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth + lo_element_2->set_attribute_ns( name = lc_xml_attr_max + value = lv_value ). + " Width + IF lo_column->get_width( ) < 0. + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lc_xml_attr_defaultwidth ). + ELSE. + lv_value = lo_column->get_width( ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lv_value ). + ENDIF. + " Column visibility + IF lo_column->get_visible( ) = abap_false. + lo_element_2->set_attribute_ns( name = lc_xml_attr_hidden + value = lc_xml_attr_true ). + ENDIF. + " Auto size? + IF lo_column->get_auto_size( ) = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_bestfit value = lc_xml_attr_true ). + ENDIF. + " Custom width? + IF lo_column_default IS BOUND. + IF lo_column->get_width( ) <> lo_column_default->get_width( ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth + value = lc_xml_attr_true ). + ENDIF. + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth + value = lc_xml_attr_true ). ENDIF. - ELSE. - lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth - value = lc_xml_attr_true ). - ENDIF. - " Collapsed - IF lo_column->get_collapsed( ) = abap_true. - lo_element_2->set_attribute_ns( name = lc_xml_attr_collapsed - value = lc_xml_attr_true ). - ENDIF. - " outlineLevel - IF lo_column->get_outline_level( ) > 0. - lv_value = lo_column->get_outline_level( ). + " Collapsed + IF lo_column->get_collapsed( ) = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_collapsed + value = lc_xml_attr_true ). + ENDIF. + " outlineLevel + IF lo_column->get_outline_level( ) > 0. + lv_value = lo_column->get_outline_level( ). - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_2->set_attribute_ns( name = lc_xml_attr_outlinelevel - value = lv_value ). - ENDIF. - " Style - lv_style_guid = lo_column->get_column_style_guid( ). "ins issue #157 - set column style - CLEAR ls_style_mapping. - READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. - IF sy-subrc = 0. "ins issue #295 - lv_value = ls_style_mapping-style. "ins issue #295 - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_2->set_attribute_ns( name = lc_xml_attr_style - value = lv_value ). - ENDIF. "ins issue #237 + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_outlinelevel + value = lv_value ). + ENDIF. + " Style + lv_style_guid = lo_column->get_column_style_guid( ). "ins issue #157 - set column style + CLEAR ls_style_mapping. + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. + IF sy-subrc = 0. "ins issue #295 + lv_value = ls_style_mapping-style. "ins issue #295 + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. "ins issue #237 - lo_element->append_child( new_child = lo_element_2 ). " col node - ENDWHILE. + lo_element->append_child( new_child = lo_element_2 ). " col node + ENDWHILE. * ELSE. "del issue #157 - set sheet style ( add missing columns * IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL. "del issue #157 - set sheet style ( add missing columns * Begin of insertion issue #157 - set sheet style ( add missing columns - ENDIF. + ENDIF. * Always pass through this coding - IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL. - DATA: lts_sorted_columns TYPE SORTED TABLE OF zexcel_cell_column WITH UNIQUE KEY table_line. - TYPES: BEGIN OF ty_missing_columns, - first_column TYPE zexcel_cell_column, - last_column TYPE zexcel_cell_column, - END OF ty_missing_columns. - DATA: t_missing_columns TYPE STANDARD TABLE OF ty_missing_columns WITH NON-UNIQUE DEFAULT KEY, - missing_column LIKE LINE OF t_missing_columns. + IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL. + DATA: lts_sorted_columns TYPE SORTED TABLE OF zexcel_cell_column WITH UNIQUE KEY table_line. + TYPES: BEGIN OF ty_missing_columns, + first_column TYPE zexcel_cell_column, + last_column TYPE zexcel_cell_column, + END OF ty_missing_columns. + DATA: t_missing_columns TYPE STANDARD TABLE OF ty_missing_columns WITH NON-UNIQUE DEFAULT KEY, + missing_column LIKE LINE OF t_missing_columns. * First collect columns that were already handled before. The rest has to be inserted now - lo_column_iterator = io_worksheet->get_columns_iterator( ). - WHILE lo_column_iterator->has_next( ) = abap_true. - lo_column ?= lo_column_iterator->get_next( ). - lv_column = zcl_excel_common=>convert_column2int( lo_column->get_column_index( ) ). - INSERT lv_column INTO TABLE lts_sorted_columns. - ENDWHILE. + lo_column_iterator = io_worksheet->get_columns_iterator( ). + WHILE lo_column_iterator->has_next( ) = abap_true. + lo_column ?= lo_column_iterator->get_next( ). + lv_column = zcl_excel_common=>convert_column2int( lo_column->get_column_index( ) ). + INSERT lv_column INTO TABLE lts_sorted_columns. + ENDWHILE. * Now find all columns that were missing so far - missing_column-first_column = 1. - LOOP AT lts_sorted_columns INTO lv_column. - IF lv_column > missing_column-first_column. - missing_column-last_column = lv_column - 1. - APPEND missing_column TO t_missing_columns. - ENDIF. - missing_column-first_column = lv_column + 1. - ENDLOOP. - missing_column-last_column = zcl_excel_common=>c_excel_sheet_max_col. - APPEND missing_column TO t_missing_columns. + missing_column-first_column = 1. + LOOP AT lts_sorted_columns INTO lv_column. + IF lv_column > missing_column-first_column. + missing_column-last_column = lv_column - 1. + APPEND missing_column TO t_missing_columns. + ENDIF. + missing_column-first_column = lv_column + 1. + ENDLOOP. + missing_column-last_column = zcl_excel_common=>c_excel_sheet_max_col. + APPEND missing_column TO t_missing_columns. * Now apply stylesetting ( and other defaults - I copy it from above. Whoever programmed that seems to know what to do :o) - LOOP AT t_missing_columns INTO missing_column. + LOOP AT t_missing_columns INTO missing_column. * End of insertion issue #157 - set column style + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col + parent = lo_document ). +* lv_value = zcl_excel_common=>c_excel_sheet_min_col."del issue #157 - set sheet style ( add missing columns + lv_value = missing_column-first_column. "ins issue #157 - set sheet style ( add missing columns + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_min + value = lv_value ). +* lv_value = zcl_excel_common=>c_excel_sheet_max_col."del issue #157 - set sheet style ( add missing columns + lv_value = missing_column-last_column. "ins issue #157 - set sheet style ( add missing columns + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_max + value = lv_value ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lc_xml_attr_defaultwidth ). + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. + lv_value = ls_style_mapping-style. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). " col node + ENDLOOP. "ins issue #157 - set sheet style ( add missing columns + + ENDIF. +*--------------------------------------------------------------------* +* issue #367 add feature hide columns from +*--------------------------------------------------------------------* + IF io_worksheet->zif_excel_sheet_properties~hide_columns_from IS NOT INITIAL. lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col parent = lo_document ). -* lv_value = zcl_excel_common=>c_excel_sheet_min_col."del issue #157 - set sheet style ( add missing columns - lv_value = missing_column-first_column. "ins issue #157 - set sheet style ( add missing columns - CONDENSE lv_value. + lv_value = zcl_excel_common=>convert_column2int( io_worksheet->zif_excel_sheet_properties~hide_columns_from ). + CONDENSE lv_value NO-GAPS. lo_element_2->set_attribute_ns( name = lc_xml_attr_min value = lv_value ). -* lv_value = zcl_excel_common=>c_excel_sheet_max_col."del issue #157 - set sheet style ( add missing columns - lv_value = missing_column-last_column. "ins issue #157 - set sheet style ( add missing columns - CONDENSE lv_value. lo_element_2->set_attribute_ns( name = lc_xml_attr_max - value = lv_value ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_width - value = lc_xml_attr_defaultwidth ). - lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). - READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. - lv_value = ls_style_mapping-style. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_style - value = lv_value ). + value = '16384' ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_hidden + value = '1' ). lo_element->append_child( new_child = lo_element_2 ). " col node - ENDLOOP. "ins issue #157 - set sheet style ( add missing columns + ENDIF. + lo_element_root->append_child( new_child = lo_element ). " cols node ENDIF. -*--------------------------------------------------------------------* -* issue #367 add feature hide columns from -*--------------------------------------------------------------------* - IF io_worksheet->zif_excel_sheet_properties~hide_columns_from IS NOT INITIAL. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col - parent = lo_document ). - lv_value = zcl_excel_common=>convert_column2int( io_worksheet->zif_excel_sheet_properties~hide_columns_from ). - CONDENSE lv_value NO-GAPS. - lo_element_2->set_attribute_ns( name = lc_xml_attr_min - value = lv_value ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_max - value = '16384' ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_hidden - value = '1' ). - lo_element->append_child( new_child = lo_element_2 ). " col node - ENDIF. - - lo_element_root->append_child( new_child = lo_element ). " cols node - ENDIF. *--------------------------------------------------------------------* * Sheet content - use own method to create this *--------------------------------------------------------------------* - lo_element = create_xl_sheet_sheet_data( io_worksheet = io_worksheet - io_document = lo_document ) . + lo_element = create_xl_sheet_sheet_data( io_worksheet = io_worksheet + io_document = lo_document ) . - lo_autofilters = excel->get_autofilters_reference( ). - lo_autofilter = lo_autofilters->get( io_worksheet = io_worksheet ) . - lo_element_root->append_child( new_child = lo_element ). " sheetData node + lo_autofilters = excel->get_autofilters_reference( ). + lo_autofilter = lo_autofilters->get( io_worksheet = io_worksheet ) . + lo_element_root->append_child( new_child = lo_element ). " sheetData node *< Begin of insertion Issue #572 - Protect sheet with filter caused Excel error * Autofilter must be set AFTER sheet protection in XML - IF io_worksheet->zif_excel_sheet_protection~protected EQ abap_true. - " sheetProtection node - lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetprotection - parent = lo_document ). - MOVE io_worksheet->zif_excel_sheet_protection~password TO lv_value. - IF lv_value IS NOT INITIAL. - lo_element->set_attribute_ns( name = lc_xml_attr_password + IF io_worksheet->zif_excel_sheet_protection~protected EQ abap_true. + " sheetProtection node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetprotection + parent = lo_document ). + MOVE io_worksheet->zif_excel_sheet_protection~password TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_password + value = lv_value ). + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_protection~auto_filter. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_autofilter + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~delete_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_deletecolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~delete_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_deleterows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatcells + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatcolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatrows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_insertcolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_hyperlinks. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_inserthyperlinks + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_insertrows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~objects. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_objects + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~pivot_tables. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_pivottables + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~scenarios. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_scenarios + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~select_locked_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_selectlockedcells + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~select_unlocked_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_selectunlockedcell + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~sheet. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_sheet + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~sort. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_sort value = lv_value ). - ENDIF. - lv_value = io_worksheet->zif_excel_sheet_protection~auto_filter. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_autofilter - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~delete_columns. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_deletecolumns - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~delete_rows. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_deleterows - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~format_cells. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_formatcells - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~format_columns. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_formatcolumns - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~format_rows. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_formatrows - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~insert_columns. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_insertcolumns - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~insert_hyperlinks. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_inserthyperlinks - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~insert_rows. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_insertrows - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~objects. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_objects - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~pivot_tables. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_pivottables - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~scenarios. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_scenarios - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~select_locked_cells. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_selectlockedcells - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~select_unlocked_cells. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_selectunlockedcell - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~sheet. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_sheet - value = lv_value ). - lv_value = io_worksheet->zif_excel_sheet_protection~sort. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_sort - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lo_element_root->append_child( new_child = lo_element ). + ENDIF. *> End of insertion Issue #572 - Protect sheet with filter caused Excel error - IF lo_autofilter IS BOUND. + IF lo_autofilter IS BOUND. * Create node autofilter - lo_element = lo_document->create_simple_element( name = lc_xml_node_autofilter - parent = lo_document ). - lv_ref = lo_autofilter->get_filter_range( ) . - CONDENSE lv_ref NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_ref - value = lv_ref ). - lt_values = lo_autofilter->get_values( ) . - IF lt_values IS NOT INITIAL. + lo_element = lo_document->create_simple_element( name = lc_xml_node_autofilter + parent = lo_document ). + lv_ref = lo_autofilter->get_filter_range( ) . + CONDENSE lv_ref NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_ref + value = lv_ref ). + lt_values = lo_autofilter->get_values( ) . + IF lt_values IS NOT INITIAL. * If we filter we need to set the filter mode to 1. - lo_element_2 = lo_document->find_from_name( name = lc_xml_node_sheetpr ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_filtermode - value = '1' ). + lo_element_2 = lo_document->find_from_name( name = lc_xml_node_sheetpr ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_filtermode + value = '1' ). * Create node filtercolumn - CLEAR lv_column. - LOOP AT lt_values INTO ls_values. - IF ls_values-column <> lv_column. - IF lv_column IS NOT INITIAL. - lo_element_2->append_child( new_child = lo_element_3 ). - lo_element->append_child( new_child = lo_element_2 ). + CLEAR lv_column. + LOOP AT lt_values INTO ls_values. + IF ls_values-column <> lv_column. + IF lv_column IS NOT INITIAL. + lo_element_2->append_child( new_child = lo_element_3 ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_filtercolumn + parent = lo_element ). + lv_column = ls_values-column - lo_autofilter->filter_area-col_start. + lv_value = lv_column. + CONDENSE lv_value NO-GAPS. + lo_element_2->set_attribute_ns( name = lc_xml_attr_colid + value = lv_value ). + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_filters + parent = lo_element_2 ). + lv_column = ls_values-column. ENDIF. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_filtercolumn - parent = lo_element ). - lv_column = ls_values-column - lo_autofilter->filter_area-col_start. - lv_value = lv_column. - CONDENSE lv_value NO-GAPS. - lo_element_2->set_attribute_ns( name = lc_xml_attr_colid - value = lv_value ). - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_filters - parent = lo_element_2 ). - lv_column = ls_values-column. - ENDIF. - lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_filter - parent = lo_element_3 ). - lo_element_4->set_attribute_ns( name = lc_xml_attr_val - value = ls_values-value ). - lo_element_3->append_child( new_child = lo_element_4 ). " value node - ENDLOOP. - lo_element_2->append_child( new_child = lo_element_3 ). - lo_element->append_child( new_child = lo_element_2 ). + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_filter + parent = lo_element_3 ). + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = ls_values-value ). + lo_element_3->append_child( new_child = lo_element_4 ). " value node + ENDLOOP. + lo_element_2->append_child( new_child = lo_element_3 ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + lo_element_root->append_child( new_child = lo_element ). ENDIF. - lo_element_root->append_child( new_child = lo_element ). - ENDIF. *< Comment for Issue #572 - Protect sheet with filter caused Excel error * IF io_worksheet->zif_excel_sheet_protection~protected EQ abap_true. @@ -4493,1115 +4493,1115 @@ METHOD create_xl_sheet. * lo_element_root->append_child( new_child = lo_element ). * ENDIF. *> End of Comment for Issue #572 - Protect sheet with filter caused Excel error - " Merged cells - lt_range_merge = io_worksheet->get_merge( ). - IF lt_range_merge IS NOT INITIAL. - lo_element = lo_document->create_simple_element( name = lc_xml_node_mergecells - parent = lo_document ). - DESCRIBE TABLE lt_range_merge LINES merge_count. - lv_value = merge_count. - CONDENSE lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_count - value = lv_value ). - LOOP AT lt_range_merge ASSIGNING . - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_mergecell - parent = lo_document ). + " Merged cells + lt_range_merge = io_worksheet->get_merge( ). + IF lt_range_merge IS NOT INITIAL. + lo_element = lo_document->create_simple_element( name = lc_xml_node_mergecells + parent = lo_document ). + DESCRIBE TABLE lt_range_merge LINES merge_count. + lv_value = merge_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + LOOP AT lt_range_merge ASSIGNING . + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_mergecell + parent = lo_document ). - lo_element_2->set_attribute_ns( name = lc_xml_attr_ref - value = ). - lo_element->append_child( new_child = lo_element_2 ). - lo_element_root->append_child( new_child = lo_element ). - io_worksheet->delete_merge( ). - ENDLOOP. - ENDIF. - - " Conditional formatting node - lo_iterator = io_worksheet->get_style_cond_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_style_cond ?= lo_iterator->get_next( ). - IF lo_style_cond->rule IS INITIAL. - CONTINUE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_ref + value = ). + lo_element->append_child( new_child = lo_element_2 ). + lo_element_root->append_child( new_child = lo_element ). + io_worksheet->delete_merge( ). + ENDLOOP. ENDIF. - lv_value = lo_style_cond->get_dimension_range( ). + " Conditional formatting node + lo_iterator = io_worksheet->get_style_cond_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_style_cond ?= lo_iterator->get_next( ). + IF lo_style_cond->rule IS INITIAL. + CONTINUE. + ENDIF. - READ TABLE lt_condformating_ranges WITH KEY dimension_range = lv_value ASSIGNING . - IF sy-subrc = 0. - lo_element = -condformatting_node. - ELSE. - lo_element = lo_document->create_simple_element( name = lc_xml_node_condformatting - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_sqref - value = lv_value ). + lv_value = lo_style_cond->get_dimension_range( ). - ls_condformating_range-dimension_range = lv_value. - ls_condformating_range-condformatting_node = lo_element. - INSERT ls_condformating_range INTO TABLE lt_condformating_ranges. + READ TABLE lt_condformating_ranges WITH KEY dimension_range = lv_value ASSIGNING . + IF sy-subrc = 0. + lo_element = -condformatting_node. + ELSE. + lo_element = lo_document->create_simple_element( name = lc_xml_node_condformatting + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). - ENDIF. + ls_condformating_range-dimension_range = lv_value. + ls_condformating_range-condformatting_node = lo_element. + INSERT ls_condformating_range INTO TABLE lt_condformating_ranges. - " cfRule node - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_cfrule - parent = lo_document ). - lv_value = lo_style_cond->rule. - lo_element_2->set_attribute_ns( name = lc_xml_attr_type - value = lv_value ). - lv_value = lo_style_cond->priority. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_2->set_attribute_ns( name = lc_xml_attr_priority - value = lv_value ). + ENDIF. + + " cfRule node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_cfrule + parent = lo_document ). + lv_value = lo_style_cond->rule. + lo_element_2->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = lo_style_cond->priority. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_priority + value = lv_value ). - CASE lo_style_cond->rule. - " Start >> Databar by Albert Lladanosa - WHEN zcl_excel_style_cond=>c_rule_databar. + CASE lo_style_cond->rule. + " Start >> Databar by Albert Lladanosa + WHEN zcl_excel_style_cond=>c_rule_databar. - ls_databar = lo_style_cond->mode_databar. + ls_databar = lo_style_cond->mode_databar. - CLEAR lt_cfvo. - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_databar - parent = lo_document ). + CLEAR lt_cfvo. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_databar + parent = lo_document ). - MOVE ls_databar-cfvo1_value TO ls_cfvo-value. - MOVE ls_databar-cfvo1_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. + MOVE ls_databar-cfvo1_value TO ls_cfvo-value. + MOVE ls_databar-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. - MOVE ls_databar-cfvo2_value TO ls_cfvo-value. - MOVE ls_databar-cfvo2_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. + MOVE ls_databar-cfvo2_value TO ls_cfvo-value. + MOVE ls_databar-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. - LOOP AT lt_cfvo INTO ls_cfvo. - " cfvo node - lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + LOOP AT lt_cfvo INTO ls_cfvo. + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color parent = lo_document ). - lv_value = ls_cfvo-type. - lo_element_4->set_attribute_ns( name = lc_xml_attr_type - value = lv_value ). - lv_value = ls_cfvo-value. - lo_element_4->set_attribute_ns( name = lc_xml_attr_val + lv_value = ls_databar-colorrgb. + lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb value = lv_value ). - lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node - ENDLOOP. - lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color - parent = lo_document ). - lv_value = ls_databar-colorrgb. - lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb - value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " color node - lo_element_3->append_child( new_child = lo_element_4 ). " color node + lo_element_2->append_child( new_child = lo_element_3 ). " databar node + " End << Databar by Albert Lladanosa - lo_element_2->append_child( new_child = lo_element_3 ). " databar node - " End << Databar by Albert Lladanosa + WHEN zcl_excel_style_cond=>c_rule_colorscale. - WHEN zcl_excel_style_cond=>c_rule_colorscale. + ls_colorscale = lo_style_cond->mode_colorscale. - ls_colorscale = lo_style_cond->mode_colorscale. + CLEAR: lt_cfvo, lt_colors. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_colorscale + parent = lo_document ). - CLEAR: lt_cfvo, lt_colors. - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_colorscale - parent = lo_document ). + MOVE ls_colorscale-cfvo1_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. - MOVE ls_colorscale-cfvo1_value TO ls_cfvo-value. - MOVE ls_colorscale-cfvo1_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. + MOVE ls_colorscale-cfvo2_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. - MOVE ls_colorscale-cfvo2_value TO ls_cfvo-value. - MOVE ls_colorscale-cfvo2_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. + MOVE ls_colorscale-cfvo3_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. - MOVE ls_colorscale-cfvo3_value TO ls_cfvo-value. - MOVE ls_colorscale-cfvo3_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. + APPEND ls_colorscale-colorrgb1 TO lt_colors. + APPEND ls_colorscale-colorrgb2 TO lt_colors. + APPEND ls_colorscale-colorrgb3 TO lt_colors. - APPEND ls_colorscale-colorrgb1 TO lt_colors. - APPEND ls_colorscale-colorrgb2 TO lt_colors. - APPEND ls_colorscale-colorrgb3 TO lt_colors. + LOOP AT lt_cfvo INTO ls_cfvo. - LOOP AT lt_cfvo INTO ls_cfvo. + IF ls_cfvo IS INITIAL. + CONTINUE. + ENDIF. - IF ls_cfvo IS INITIAL. - CONTINUE. - ENDIF. + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + LOOP AT lt_colors INTO ls_colors. - " cfvo node - lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo - parent = lo_document ). - lv_value = ls_cfvo-type. - lo_element_4->set_attribute_ns( name = lc_xml_attr_type - value = lv_value ). - lv_value = ls_cfvo-value. - lo_element_4->set_attribute_ns( name = lc_xml_attr_val - value = lv_value ). - lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node - ENDLOOP. - LOOP AT lt_colors INTO ls_colors. + IF ls_colors IS INITIAL. + CONTINUE. + ENDIF. - IF ls_colors IS INITIAL. - CONTINUE. - ENDIF. + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color + parent = lo_document ). + lv_value = ls_colors-colorrgb. + lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). - lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color - parent = lo_document ). - lv_value = ls_colors-colorrgb. - lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb - value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " color node + ENDLOOP. - lo_element_3->append_child( new_child = lo_element_4 ). " color node - ENDLOOP. + lo_element_2->append_child( new_child = lo_element_3 ). " databar node - lo_element_2->append_child( new_child = lo_element_3 ). " databar node + WHEN zcl_excel_style_cond=>c_rule_iconset. - WHEN zcl_excel_style_cond=>c_rule_iconset. + ls_iconset = lo_style_cond->mode_iconset. - ls_iconset = lo_style_cond->mode_iconset. + CLEAR lt_cfvo. + " iconset node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_iconset + parent = lo_document ). + IF ls_iconset-iconset NE zcl_excel_style_cond=>c_iconset_3trafficlights. + lv_value = ls_iconset-iconset. + lo_element_3->set_attribute_ns( name = lc_xml_attr_iconset + value = lv_value ). + ENDIF. - CLEAR lt_cfvo. - " iconset node - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_iconset - parent = lo_document ). - IF ls_iconset-iconset NE zcl_excel_style_cond=>c_iconset_3trafficlights. - lv_value = ls_iconset-iconset. - lo_element_3->set_attribute_ns( name = lc_xml_attr_iconset + " Set the showValue attribute + lv_value = ls_iconset-showvalue. + lo_element_3->set_attribute_ns( name = lc_xml_attr_showvalue value = lv_value ). - ENDIF. - " Set the showValue attribute - lv_value = ls_iconset-showvalue. - lo_element_3->set_attribute_ns( name = lc_xml_attr_showvalue - value = lv_value ). + CASE ls_iconset-iconset. + WHEN zcl_excel_style_cond=>c_iconset_3trafficlights2 OR + zcl_excel_style_cond=>c_iconset_3arrows OR + zcl_excel_style_cond=>c_iconset_3arrowsgray OR + zcl_excel_style_cond=>c_iconset_3flags OR + zcl_excel_style_cond=>c_iconset_3signs OR + zcl_excel_style_cond=>c_iconset_3symbols OR + zcl_excel_style_cond=>c_iconset_3symbols2 OR + zcl_excel_style_cond=>c_iconset_3trafficlights OR + zcl_excel_style_cond=>c_iconset_3trafficlights2. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN zcl_excel_style_cond=>c_iconset_4arrows OR + zcl_excel_style_cond=>c_iconset_4arrowsgray OR + zcl_excel_style_cond=>c_iconset_4rating OR + zcl_excel_style_cond=>c_iconset_4redtoblack OR + zcl_excel_style_cond=>c_iconset_4trafficlights. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN zcl_excel_style_cond=>c_iconset_5arrows OR + zcl_excel_style_cond=>c_iconset_5arrowsgray OR + zcl_excel_style_cond=>c_iconset_5quarters OR + zcl_excel_style_cond=>c_iconset_5rating. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo5_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo5_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN OTHERS. + CLEAR lt_cfvo. + ENDCASE. + + LOOP AT lt_cfvo INTO ls_cfvo. + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. - CASE ls_iconset-iconset. - WHEN zcl_excel_style_cond=>c_iconset_3trafficlights2 OR - zcl_excel_style_cond=>c_iconset_3arrows OR - zcl_excel_style_cond=>c_iconset_3arrowsgray OR - zcl_excel_style_cond=>c_iconset_3flags OR - zcl_excel_style_cond=>c_iconset_3signs OR - zcl_excel_style_cond=>c_iconset_3symbols OR - zcl_excel_style_cond=>c_iconset_3symbols2 OR - zcl_excel_style_cond=>c_iconset_3trafficlights OR - zcl_excel_style_cond=>c_iconset_3trafficlights2. - MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - WHEN zcl_excel_style_cond=>c_iconset_4arrows OR - zcl_excel_style_cond=>c_iconset_4arrowsgray OR - zcl_excel_style_cond=>c_iconset_4rating OR - zcl_excel_style_cond=>c_iconset_4redtoblack OR - zcl_excel_style_cond=>c_iconset_4trafficlights. - MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - WHEN zcl_excel_style_cond=>c_iconset_5arrows OR - zcl_excel_style_cond=>c_iconset_5arrowsgray OR - zcl_excel_style_cond=>c_iconset_5quarters OR - zcl_excel_style_cond=>c_iconset_5rating. - MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - MOVE ls_iconset-cfvo5_value TO ls_cfvo-value. - MOVE ls_iconset-cfvo5_type TO ls_cfvo-type. - APPEND ls_cfvo TO lt_cfvo. - WHEN OTHERS. - CLEAR lt_cfvo. - ENDCASE. - LOOP AT lt_cfvo INTO ls_cfvo. - " cfvo node - lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo - parent = lo_document ). - lv_value = ls_cfvo-type. - lo_element_4->set_attribute_ns( name = lc_xml_attr_type + lo_element_2->append_child( new_child = lo_element_3 ). " iconset node + + WHEN zcl_excel_style_cond=>c_rule_cellis. + ls_cellis = lo_style_cond->mode_cellis. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_cellis-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid value = lv_value ). - lv_value = ls_cfvo-value. - lo_element_4->set_attribute_ns( name = lc_xml_attr_val + lv_value = ls_cellis-operator. + lo_element_2->set_attribute_ns( name = lc_xml_attr_operator value = lv_value ). - lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node - ENDLOOP. - - - lo_element_2->append_child( new_child = lo_element_3 ). " iconset node - - WHEN zcl_excel_style_cond=>c_rule_cellis. - ls_cellis = lo_style_cond->mode_cellis. - READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_cellis-cell_style. - lv_value = ls_style_cond_mapping-dxf. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid - value = lv_value ). - lv_value = ls_cellis-operator. - lo_element_2->set_attribute_ns( name = lc_xml_attr_operator - value = lv_value ). - " formula node - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula - parent = lo_document ). - lv_value = ls_cellis-formula. - lo_element_3->set_value( value = lv_value ). - lo_element_2->append_child( new_child = lo_element_3 ). " formula node - IF ls_cellis-formula2 IS NOT INITIAL. - lv_value = ls_cellis-formula2. + " formula node lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula parent = lo_document ). + lv_value = ls_cellis-formula. lo_element_3->set_value( value = lv_value ). - lo_element_2->append_child( new_child = lo_element_3 ). " 2nd formula node - ENDIF. + lo_element_2->append_child( new_child = lo_element_3 ). " formula node + IF ls_cellis-formula2 IS NOT INITIAL. + lv_value = ls_cellis-formula2. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula + parent = lo_document ). + lo_element_3->set_value( value = lv_value ). + lo_element_2->append_child( new_child = lo_element_3 ). " 2nd formula node + ENDIF. - WHEN zcl_excel_style_cond=>c_rule_expression. - ls_expression = lo_style_cond->mode_expression. - READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_expression-cell_style. - lv_value = ls_style_cond_mapping-dxf. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid - value = lv_value ). - " formula node - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula - parent = lo_document ). - lv_value = ls_expression-formula. - lo_element_3->set_value( value = lv_value ). - lo_element_2->append_child( new_child = lo_element_3 ). " formula node + WHEN zcl_excel_style_cond=>c_rule_expression. + ls_expression = lo_style_cond->mode_expression. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_expression-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid + value = lv_value ). + " formula node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula + parent = lo_document ). + lv_value = ls_expression-formula. + lo_element_3->set_value( value = lv_value ). + lo_element_2->append_child( new_child = lo_element_3 ). " formula node * begin of ins issue #366 - missing conditional rules: top10 - WHEN zcl_excel_style_cond=>c_rule_top10. - ls_conditional_top10 = lo_style_cond->mode_top10. - READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_conditional_top10-cell_style. - lv_value = ls_style_cond_mapping-dxf. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid - value = lv_value ). - lv_value = ls_conditional_top10-topxx_count. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = 'rank' - value = lv_value ). - IF ls_conditional_top10-bottom = 'X'. - lo_element_2->set_attribute_ns( name = 'bottom' - value = '1' ). - ENDIF. - IF ls_conditional_top10-percent = 'X'. - lo_element_2->set_attribute_ns( name = 'percent' - value ='1' ). - ENDIF. - - WHEN zcl_excel_style_cond=>c_rule_above_average. - ls_conditional_above_avg = lo_style_cond->mode_above_average. - READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_conditional_above_avg-cell_style. - lv_value = ls_style_cond_mapping-dxf. - CONDENSE lv_value. - lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid - value = lv_value ). + WHEN zcl_excel_style_cond=>c_rule_top10. + ls_conditional_top10 = lo_style_cond->mode_top10. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_conditional_top10-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid + value = lv_value ). + lv_value = ls_conditional_top10-topxx_count. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = 'rank' + value = lv_value ). + IF ls_conditional_top10-bottom = 'X'. + lo_element_2->set_attribute_ns( name = 'bottom' + value = '1' ). + ENDIF. + IF ls_conditional_top10-percent = 'X'. + lo_element_2->set_attribute_ns( name = 'percent' + value ='1' ). + ENDIF. - IF ls_conditional_above_avg-above_average IS INITIAL. " = below average - lo_element_2->set_attribute_ns( name = 'aboveAverage' - value = '0' ). - ENDIF. - IF ls_conditional_above_avg-equal_average = 'X'. " = equal average also - lo_element_2->set_attribute_ns( name = 'equalAverage' - value = '1' ). - ENDIF. - IF ls_conditional_above_avg-standard_deviation <> 0. " standard deviation instead of value - lv_value = ls_conditional_above_avg-standard_deviation. - lo_element_2->set_attribute_ns( name = 'stdDev' + WHEN zcl_excel_style_cond=>c_rule_above_average. + ls_conditional_above_avg = lo_style_cond->mode_above_average. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_conditional_above_avg-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid value = lv_value ). - ENDIF. + + IF ls_conditional_above_avg-above_average IS INITIAL. " = below average + lo_element_2->set_attribute_ns( name = 'aboveAverage' + value = '0' ). + ENDIF. + IF ls_conditional_above_avg-equal_average = 'X'. " = equal average also + lo_element_2->set_attribute_ns( name = 'equalAverage' + value = '1' ). + ENDIF. + IF ls_conditional_above_avg-standard_deviation <> 0. " standard deviation instead of value + lv_value = ls_conditional_above_avg-standard_deviation. + lo_element_2->set_attribute_ns( name = 'stdDev' + value = lv_value ). + ENDIF. * end of ins issue #366 - missing conditional rules: top10 - ENDCASE. + ENDCASE. - lo_element->append_child( new_child = lo_element_2 ). " cfRule node + lo_element->append_child( new_child = lo_element_2 ). " cfRule node - lo_element_root->append_child( new_child = lo_element ). " Conditional formatting node - ENDWHILE. + lo_element_root->append_child( new_child = lo_element ). " Conditional formatting node + ENDWHILE. - IF io_worksheet->get_data_validations_size( ) GT 0. - " dataValidations node - lo_element = lo_document->create_simple_element( name = lc_xml_node_datavalidations - parent = lo_document ). - " Conditional formatting node - lo_iterator = io_worksheet->get_data_validations_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_data_validation ?= lo_iterator->get_next( ). - " dataValidation node - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_datavalidation - parent = lo_document ). - lv_value = lo_data_validation->type. - lo_element_2->set_attribute_ns( name = lc_xml_attr_type - value = lv_value ). - IF NOT lo_data_validation->operator IS INITIAL. - lv_value = lo_data_validation->operator. - lo_element_2->set_attribute_ns( name = lc_xml_attr_operator - value = lv_value ). - ENDIF. - IF lo_data_validation->allowblank EQ abap_true. - lv_value = '1'. - ELSE. - lv_value = '0'. - ENDIF. - lo_element_2->set_attribute_ns( name = lc_xml_attr_allowblank - value = lv_value ). - IF lo_data_validation->showinputmessage EQ abap_true. - lv_value = '1'. - ELSE. - lv_value = '0'. - ENDIF. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showinputmessage - value = lv_value ). - IF lo_data_validation->showerrormessage EQ abap_true. - lv_value = '1'. - ELSE. - lv_value = '0'. - ENDIF. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showerrormessage - value = lv_value ). - IF lo_data_validation->showdropdown EQ abap_true. - lv_value = '1'. - ELSE. - lv_value = '0'. - ENDIF. - lo_element_2->set_attribute_ns( name = lc_xml_attr_showdropdown - value = lv_value ). - IF NOT lo_data_validation->errortitle IS INITIAL. - lv_value = lo_data_validation->errortitle. - lo_element_2->set_attribute_ns( name = lc_xml_attr_errortitle + IF io_worksheet->get_data_validations_size( ) GT 0. + " dataValidations node + lo_element = lo_document->create_simple_element( name = lc_xml_node_datavalidations + parent = lo_document ). + " Conditional formatting node + lo_iterator = io_worksheet->get_data_validations_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_data_validation ?= lo_iterator->get_next( ). + " dataValidation node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_datavalidation + parent = lo_document ). + lv_value = lo_data_validation->type. + lo_element_2->set_attribute_ns( name = lc_xml_attr_type value = lv_value ). - ENDIF. - IF NOT lo_data_validation->error IS INITIAL. - lv_value = lo_data_validation->error. - lo_element_2->set_attribute_ns( name = lc_xml_attr_error + IF NOT lo_data_validation->operator IS INITIAL. + lv_value = lo_data_validation->operator. + lo_element_2->set_attribute_ns( name = lc_xml_attr_operator + value = lv_value ). + ENDIF. + IF lo_data_validation->allowblank EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_allowblank value = lv_value ). - ENDIF. - IF NOT lo_data_validation->errorstyle IS INITIAL. - lv_value = lo_data_validation->errorstyle. - lo_element_2->set_attribute_ns( name = lc_xml_attr_errorstyle + IF lo_data_validation->showinputmessage EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showinputmessage value = lv_value ). - ENDIF. - IF NOT lo_data_validation->prompttitle IS INITIAL. - lv_value = lo_data_validation->prompttitle. - lo_element_2->set_attribute_ns( name = lc_xml_attr_prompttitle + IF lo_data_validation->showerrormessage EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showerrormessage value = lv_value ). - ENDIF. - IF NOT lo_data_validation->prompt IS INITIAL. - lv_value = lo_data_validation->prompt. - lo_element_2->set_attribute_ns( name = lc_xml_attr_prompt + IF lo_data_validation->showdropdown EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showdropdown value = lv_value ). - ENDIF. - lv_cell_row_s = lo_data_validation->cell_row. - CONDENSE lv_cell_row_s. - CONCATENATE lo_data_validation->cell_column lv_cell_row_s INTO lv_value. - IF lo_data_validation->cell_row_to IS NOT INITIAL. - lv_cell_row_s = lo_data_validation->cell_row_to. + IF NOT lo_data_validation->errortitle IS INITIAL. + lv_value = lo_data_validation->errortitle. + lo_element_2->set_attribute_ns( name = lc_xml_attr_errortitle + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->error IS INITIAL. + lv_value = lo_data_validation->error. + lo_element_2->set_attribute_ns( name = lc_xml_attr_error + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->errorstyle IS INITIAL. + lv_value = lo_data_validation->errorstyle. + lo_element_2->set_attribute_ns( name = lc_xml_attr_errorstyle + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->prompttitle IS INITIAL. + lv_value = lo_data_validation->prompttitle. + lo_element_2->set_attribute_ns( name = lc_xml_attr_prompttitle + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->prompt IS INITIAL. + lv_value = lo_data_validation->prompt. + lo_element_2->set_attribute_ns( name = lc_xml_attr_prompt + value = lv_value ). + ENDIF. + lv_cell_row_s = lo_data_validation->cell_row. CONDENSE lv_cell_row_s. - CONCATENATE lv_value ':' lo_data_validation->cell_column_to lv_cell_row_s INTO lv_value. - ENDIF. - lo_element_2->set_attribute_ns( name = lc_xml_attr_sqref - value = lv_value ). - " formula1 node - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula1 - parent = lo_document ). - lv_value = lo_data_validation->formula1. - lo_element_3->set_value( value = lv_value ). - - lo_element_2->append_child( new_child = lo_element_3 ). " formula1 node - " formula2 node - IF NOT lo_data_validation->formula2 IS INITIAL. - lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula2 + CONCATENATE lo_data_validation->cell_column lv_cell_row_s INTO lv_value. + IF lo_data_validation->cell_row_to IS NOT INITIAL. + lv_cell_row_s = lo_data_validation->cell_row_to. + CONDENSE lv_cell_row_s. + CONCATENATE lv_value ':' lo_data_validation->cell_column_to lv_cell_row_s INTO lv_value. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). + " formula1 node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula1 parent = lo_document ). - lv_value = lo_data_validation->formula2. + lv_value = lo_data_validation->formula1. lo_element_3->set_value( value = lv_value ). - lo_element_2->append_child( new_child = lo_element_3 ). " formula2 node - ENDIF. - - lo_element->append_child( new_child = lo_element_2 ). " dataValidation node - ENDWHILE. - lo_element_root->append_child( new_child = lo_element ). " dataValidations node - ENDIF. - - " Hyperlinks - DATA: lv_hyperlinks_count TYPE i, - lo_link TYPE REF TO zcl_excel_hyperlink. - - lv_hyperlinks_count = io_worksheet->get_hyperlinks_size( ). - IF lv_hyperlinks_count > 0. - lo_element = lo_document->create_simple_element( name = 'hyperlinks' - parent = lo_document ). + lo_element_2->append_child( new_child = lo_element_3 ). " formula1 node + " formula2 node + IF NOT lo_data_validation->formula2 IS INITIAL. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula2 + parent = lo_document ). + lv_value = lo_data_validation->formula2. + lo_element_3->set_value( value = lv_value ). - lo_iterator = io_worksheet->get_hyperlinks_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_link ?= lo_iterator->get_next( ). + lo_element_2->append_child( new_child = lo_element_3 ). " formula2 node + ENDIF. - lo_element_2 = lo_document->create_simple_element( name = 'hyperlink' - parent = lo_element ). + lo_element->append_child( new_child = lo_element_2 ). " dataValidation node + ENDWHILE. + lo_element_root->append_child( new_child = lo_element ). " dataValidations node + ENDIF. - lv_value = lo_link->get_ref( ). - lo_element_2->set_attribute_ns( name = 'ref' - value = lv_value ). + " Hyperlinks + DATA: lv_hyperlinks_count TYPE i, + lo_link TYPE REF TO zcl_excel_hyperlink. - IF lo_link->is_internal( ) = abap_true. - lv_value = lo_link->get_url( ). - lo_element_2->set_attribute_ns( name = 'location' - value = lv_value ). - ELSE. - ADD 1 TO lv_relation_id. + lv_hyperlinks_count = io_worksheet->get_hyperlinks_size( ). + IF lv_hyperlinks_count > 0. + lo_element = lo_document->create_simple_element( name = 'hyperlinks' + parent = lo_document ). - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. + lo_iterator = io_worksheet->get_hyperlinks_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_link ?= lo_iterator->get_next( ). - lo_element_2->set_attribute_ns( name = 'r:id' - value = lv_value ). + lo_element_2 = lo_document->create_simple_element( name = 'hyperlink' + parent = lo_element ). - ENDIF. + lv_value = lo_link->get_ref( ). + lo_element_2->set_attribute_ns( name = 'ref' + value = lv_value ). - lo_element->append_child( new_child = lo_element_2 ). - ENDWHILE. + IF lo_link->is_internal( ) = abap_true. + lv_value = lo_link->get_url( ). + lo_element_2->set_attribute_ns( name = 'location' + value = lv_value ). + ELSE. + ADD 1 TO lv_relation_id. - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element_2->set_attribute_ns( name = 'r:id' + value = lv_value ). - " PrintOptions - IF io_worksheet->print_gridlines = abap_true OR - io_worksheet->sheet_setup->vertical_centered = abap_true OR - io_worksheet->sheet_setup->horizontal_centered = abap_true. - lo_element = lo_document->create_simple_element( name = 'printOptions' - parent = lo_document ). + ENDIF. - IF io_worksheet->print_gridlines = abap_true. - lo_element->set_attribute_ns( name = lc_xml_attr_gridlines - value = 'true' ). - ENDIF. + lo_element->append_child( new_child = lo_element_2 ). + ENDWHILE. - IF io_worksheet->sheet_setup->horizontal_centered = abap_true. - lo_element->set_attribute_ns( name = 'horizontalCentered' - value = 'true' ). + lo_element_root->append_child( new_child = lo_element ). ENDIF. - IF io_worksheet->sheet_setup->vertical_centered = abap_true. - lo_element->set_attribute_ns( name = 'verticalCentered' - value = 'true' ). - ENDIF. - lo_element_root->append_child( new_child = lo_element ). - ENDIF. - " pageMargins node - lo_element = lo_document->create_simple_element( name = lc_xml_node_pagemargins - parent = lo_document ). + " PrintOptions + IF io_worksheet->print_gridlines = abap_true OR + io_worksheet->sheet_setup->vertical_centered = abap_true OR + io_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_element = lo_document->create_simple_element( name = 'printOptions' + parent = lo_document ). - lv_value = io_worksheet->sheet_setup->margin_left. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_left - value = lv_value ). - lv_value = io_worksheet->sheet_setup->margin_right. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_right - value = lv_value ). - lv_value = io_worksheet->sheet_setup->margin_top. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_top - value = lv_value ). - lv_value = io_worksheet->sheet_setup->margin_bottom. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_bottom - value = lv_value ). - lv_value = io_worksheet->sheet_setup->margin_header. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_header - value = lv_value ). - lv_value = io_worksheet->sheet_setup->margin_footer. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_footer - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). " pageMargins node + IF io_worksheet->print_gridlines = abap_true. + lo_element->set_attribute_ns( name = lc_xml_attr_gridlines + value = 'true' ). + ENDIF. -* pageSetup node - lo_element = lo_document->create_simple_element( name = lc_xml_node_pagesetup - parent = lo_document ). + IF io_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_element->set_attribute_ns( name = 'horizontalCentered' + value = 'true' ). + ENDIF. - IF io_worksheet->sheet_setup->black_and_white IS NOT INITIAL. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_blackandwhite - value = `1` ). - ENDIF. + IF io_worksheet->sheet_setup->vertical_centered = abap_true. + lo_element->set_attribute_ns( name = 'verticalCentered' + value = 'true' ). + ENDIF. - IF io_worksheet->sheet_setup->cell_comments IS NOT INITIAL. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_cellcomments - value = io_worksheet->sheet_setup->cell_comments ). - ENDIF. + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + " pageMargins node + lo_element = lo_document->create_simple_element( name = lc_xml_node_pagemargins + parent = lo_document ). - IF io_worksheet->sheet_setup->copies IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->copies. + lv_value = io_worksheet->sheet_setup->margin_left. CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_copies + lo_element->set_attribute_ns( name = lc_xml_attr_left value = lv_value ). - ENDIF. - - IF io_worksheet->sheet_setup->draft IS NOT INITIAL. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_draft - value = `1` ). - ENDIF. - - IF io_worksheet->sheet_setup->errors IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->margin_right. CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_errors - value = io_worksheet->sheet_setup->errors ). - ENDIF. - - IF io_worksheet->sheet_setup->first_page_number IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->first_page_number. + lo_element->set_attribute_ns( name = lc_xml_attr_right + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_top. CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_firstpagenumber + lo_element->set_attribute_ns( name = lc_xml_attr_top value = lv_value ). - ENDIF. - - IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->fit_to_height. + lv_value = io_worksheet->sheet_setup->margin_bottom. CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_fittoheight + lo_element->set_attribute_ns( name = lc_xml_attr_bottom value = lv_value ). - lv_value = io_worksheet->sheet_setup->fit_to_width. + lv_value = io_worksheet->sheet_setup->margin_header. CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_fittowidth + lo_element->set_attribute_ns( name = lc_xml_attr_header value = lv_value ). - ENDIF. - - IF io_worksheet->sheet_setup->horizontal_dpi IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->horizontal_dpi. + lv_value = io_worksheet->sheet_setup->margin_footer. CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_horizontaldpi + lo_element->set_attribute_ns( name = lc_xml_attr_footer value = lv_value ). - ENDIF. + lo_element_root->append_child( new_child = lo_element ). " pageMargins node - IF io_worksheet->sheet_setup->orientation IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->orientation. - lo_element->set_attribute_ns( name = lc_xml_attr_orientation - value = lv_value ). - ENDIF. +* pageSetup node + lo_element = lo_document->create_simple_element( name = lc_xml_node_pagesetup + parent = lo_document ). - IF io_worksheet->sheet_setup->page_order IS NOT INITIAL. - lo_element->set_attribute_ns( name = lc_xml_attr_pageorder - value = io_worksheet->sheet_setup->page_order ). - ENDIF. + IF io_worksheet->sheet_setup->black_and_white IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_blackandwhite + value = `1` ). + ENDIF. - IF io_worksheet->sheet_setup->paper_height IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->paper_height. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_paperheight - value = lv_value ). - ENDIF. + IF io_worksheet->sheet_setup->cell_comments IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_cellcomments + value = io_worksheet->sheet_setup->cell_comments ). + ENDIF. - IF io_worksheet->sheet_setup->paper_size IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->paper_size. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_papersize - value = lv_value ). - ENDIF. + IF io_worksheet->sheet_setup->copies IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->copies. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_copies + value = lv_value ). + ENDIF. - IF io_worksheet->sheet_setup->paper_width IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->paper_width. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_paperwidth - value = lv_value ). - ENDIF. + IF io_worksheet->sheet_setup->draft IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_draft + value = `1` ). + ENDIF. - IF io_worksheet->sheet_setup->scale IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->scale. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_scale - value = lv_value ). - ENDIF. + IF io_worksheet->sheet_setup->errors IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_errors + value = io_worksheet->sheet_setup->errors ). + ENDIF. + + IF io_worksheet->sheet_setup->first_page_number IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->first_page_number. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_firstpagenumber + value = lv_value ). + ENDIF. - IF io_worksheet->sheet_setup->use_first_page_num IS NOT INITIAL. - lo_element->set_attribute_ns( name = lc_xml_attr_usefirstpagenumber - value = `1` ). - ENDIF. + IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->fit_to_height. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_fittoheight + value = lv_value ). + lv_value = io_worksheet->sheet_setup->fit_to_width. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_fittowidth + value = lv_value ). + ENDIF. - IF io_worksheet->sheet_setup->use_printer_defaults IS NOT INITIAL. - lo_element->set_attribute_ns( name = lc_xml_attr_useprinterdefaults - value = `1` ). - ENDIF. + IF io_worksheet->sheet_setup->horizontal_dpi IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->horizontal_dpi. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_horizontaldpi + value = lv_value ). + ENDIF. - IF io_worksheet->sheet_setup->vertical_dpi IS NOT INITIAL. - lv_value = io_worksheet->sheet_setup->vertical_dpi. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_verticaldpi - value = lv_value ). - ENDIF. + IF io_worksheet->sheet_setup->orientation IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->orientation. + lo_element->set_attribute_ns( name = lc_xml_attr_orientation + value = lv_value ). + ENDIF. - lo_element_root->append_child( new_child = lo_element ). " pageSetup node + IF io_worksheet->sheet_setup->page_order IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_pageorder + value = io_worksheet->sheet_setup->page_order ). + ENDIF. -* { headerFooter necessary? > - IF io_worksheet->sheet_setup->odd_header IS NOT INITIAL - OR io_worksheet->sheet_setup->odd_footer IS NOT INITIAL - OR io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + IF io_worksheet->sheet_setup->paper_height IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_height. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_paperheight + value = lv_value ). + ENDIF. - lo_element = lo_document->create_simple_element( name = lc_xml_node_headerfooter - parent = lo_document ). + IF io_worksheet->sheet_setup->paper_size IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_size. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_papersize + value = lv_value ). + ENDIF. - " Different header/footer for odd/even pages? - IF io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. - lo_element->set_attribute_ns( name = lc_xml_attr_differentoddeven - value = '1' ). + IF io_worksheet->sheet_setup->paper_width IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_width. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_paperwidth + value = lv_value ). ENDIF. - " OddHeader - CLEAR: lv_value. - io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_header = lv_value ) . - IF lv_value IS NOT INITIAL. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddheader - parent = lo_document ). - lo_element_2->set_value( value = lv_value ). - lo_element->append_child( new_child = lo_element_2 ). + IF io_worksheet->sheet_setup->scale IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->scale. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_scale + value = lv_value ). ENDIF. - " OddFooter - CLEAR: lv_value. - io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_footer = lv_value ) . - IF lv_value IS NOT INITIAL. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddfooter - parent = lo_document ). - lo_element_2->set_value( value = lv_value ). - lo_element->append_child( new_child = lo_element_2 ). + IF io_worksheet->sheet_setup->use_first_page_num IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_usefirstpagenumber + value = `1` ). ENDIF. - " evenHeader - CLEAR: lv_value. - io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_header = lv_value ) . - IF lv_value IS NOT INITIAL. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenheader - parent = lo_document ). - lo_element_2->set_value( value = lv_value ). - lo_element->append_child( new_child = lo_element_2 ). + IF io_worksheet->sheet_setup->use_printer_defaults IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_useprinterdefaults + value = `1` ). ENDIF. - " evenFooter - CLEAR: lv_value. - io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_footer = lv_value ) . - IF lv_value IS NOT INITIAL. - lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenfooter - parent = lo_document ). - lo_element_2->set_value( value = lv_value ). - lo_element->append_child( new_child = lo_element_2 ). + IF io_worksheet->sheet_setup->vertical_dpi IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->vertical_dpi. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_verticaldpi + value = lv_value ). ENDIF. + lo_element_root->append_child( new_child = lo_element ). " pageSetup node + +* { headerFooter necessary? > + IF io_worksheet->sheet_setup->odd_header IS NOT INITIAL + OR io_worksheet->sheet_setup->odd_footer IS NOT INITIAL + OR io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_headerfooter + parent = lo_document ). + + " Different header/footer for odd/even pages? + IF io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + lo_element->set_attribute_ns( name = lc_xml_attr_differentoddeven + value = '1' ). + ENDIF. + + " OddHeader + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_header = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddheader + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " OddFooter + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_footer = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddfooter + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " evenHeader + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_header = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenheader + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " evenFooter + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_footer = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenfooter + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + - lo_element_root->append_child( new_child = lo_element ). " headerFooter + lo_element_root->append_child( new_child = lo_element ). " headerFooter - ENDIF. + ENDIF. * issue #377 pagebreaks - TRY. - create_xl_sheet_pagebreaks( io_document = lo_document - io_parent = lo_element_root - io_worksheet = io_worksheet ) . - CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify - ENDTRY. + TRY. + create_xl_sheet_pagebreaks( io_document = lo_document + io_parent = lo_element_root + io_worksheet = io_worksheet ) . + CATCH zcx_excel. " Ignore Hyperlink reading errors - pass everything we were able to identify + ENDTRY. * drawing - DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. - lo_drawings = io_worksheet->get_drawings( ). - IF lo_drawings->is_empty( ) = abap_false. - lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing - parent = lo_document ). - ADD 1 TO lv_relation_id. + lo_drawings = io_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing + parent = lo_document ). + ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element->set_attribute( name = 'r:id' - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute( name = 'r:id' + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. * Begin - Add - Issue #180 - " (Legacy) drawings for comments - DATA: lo_drawing_for_comments TYPE REF TO zcl_excel_comments. + " (Legacy) drawings for comments + DATA: lo_drawing_for_comments TYPE REF TO zcl_excel_comments. - lo_drawing_for_comments = io_worksheet->get_comments( ). - IF lo_drawing_for_comments->is_empty( ) = abap_false. - lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing_for_cmt - parent = lo_document ). - ADD 1 TO lv_relation_id. " +1 for legacyDrawings + lo_drawing_for_comments = io_worksheet->get_comments( ). + IF lo_drawing_for_comments->is_empty( ) = abap_false. + lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing_for_cmt + parent = lo_document ). + ADD 1 TO lv_relation_id. " +1 for legacyDrawings - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element->set_attribute( name = 'r:id' - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute( name = 'r:id' + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - ADD 1 TO lv_relation_id. " +1 for comments (not referenced in XL sheet but let's reserve the rId) - ENDIF. + ADD 1 TO lv_relation_id. " +1 for comments (not referenced in XL sheet but let's reserve the rId) + ENDIF. * End - Add - Issue #180 * Header/Footer Image - DATA: lt_drawings TYPE zexcel_t_drawings. - lt_drawings = io_worksheet->get_header_footer_drawings( ). - IF lines( lt_drawings ) > 0. "Header or footer image exist - lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing_for_hd_ft - parent = lo_document ). - ADD 1 TO lv_relation_id. " +1 for legacyDrawings - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element->set_attribute( name = 'r:id' - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ADD 1 TO lv_relation_id. " +1 for comments (not referenced in XL sheet but let's reserve the rId) - ENDIF. + DATA: lt_drawings TYPE zexcel_t_drawings. + lt_drawings = io_worksheet->get_header_footer_drawings( ). + IF lines( lt_drawings ) > 0. "Header or footer image exist + lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing_for_hd_ft + parent = lo_document ). + ADD 1 TO lv_relation_id. " +1 for legacyDrawings + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute( name = 'r:id' + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ADD 1 TO lv_relation_id. " +1 for comments (not referenced in XL sheet but let's reserve the rId) + ENDIF. * * tables - DATA lv_table_count TYPE i. - - lv_table_count = io_worksheet->get_tables_size( ). - IF lv_table_count > 0. - lo_element = lo_document->create_simple_element( name = 'tableParts' - parent = lo_document ). - lv_value = lv_table_count. - CONDENSE lv_value. - lo_element->set_attribute_ns( name = 'count' - value = lv_value ). - - lo_iterator = io_worksheet->get_tables_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_table ?= lo_iterator->get_next( ). - ADD 1 TO lv_relation_id. + DATA lv_table_count TYPE i. - lv_value = lv_relation_id. + lv_table_count = io_worksheet->get_tables_size( ). + IF lv_table_count > 0. + lo_element = lo_document->create_simple_element( name = 'tableParts' + parent = lo_document ). + lv_value = lv_table_count. CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element_2 = lo_document->create_simple_element( name = 'tablePart' - parent = lo_element ). - lo_element_2->set_attribute_ns( name = 'r:id' + lo_element->set_attribute_ns( name = 'count' value = lv_value ). - lo_element->append_child( new_child = lo_element_2 ). - ENDWHILE. + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_table ?= lo_iterator->get_next( ). + ADD 1 TO lv_relation_id. - lo_element_root->append_child( new_child = lo_element ). + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element_2 = lo_document->create_simple_element( name = 'tablePart' + parent = lo_element ). + lo_element_2->set_attribute_ns( name = 'r:id' + value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + + ENDWHILE. + + lo_element_root->append_child( new_child = lo_element ). - ENDIF. + ENDIF. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_sheet_pagebreaks. - DATA: lo_pagebreaks TYPE REF TO zcl_excel_worksheet_pagebreaks, - lt_pagebreaks TYPE zcl_excel_worksheet_pagebreaks=>tt_pagebreak_at, - lt_rows TYPE HASHED TABLE OF int4 WITH UNIQUE KEY table_line, - lt_columns TYPE HASHED TABLE OF int4 WITH UNIQUE KEY table_line, + METHOD create_xl_sheet_pagebreaks. + DATA: lo_pagebreaks TYPE REF TO zcl_excel_worksheet_pagebreaks, + lt_pagebreaks TYPE zcl_excel_worksheet_pagebreaks=>tt_pagebreak_at, + lt_rows TYPE HASHED TABLE OF int4 WITH UNIQUE KEY table_line, + lt_columns TYPE HASHED TABLE OF int4 WITH UNIQUE KEY table_line, - lo_node_rowbreaks TYPE REF TO if_ixml_element, - lo_node_colbreaks TYPE REF TO if_ixml_element, - lo_node_break TYPE REF TO if_ixml_element, + lo_node_rowbreaks TYPE REF TO if_ixml_element, + lo_node_colbreaks TYPE REF TO if_ixml_element, + lo_node_break TYPE REF TO if_ixml_element, - lv_value TYPE string. + lv_value TYPE string. - FIELD-SYMBOLS: LIKE LINE OF lt_pagebreaks. + FIELD-SYMBOLS: LIKE LINE OF lt_pagebreaks. - lo_pagebreaks = io_worksheet->get_pagebreaks( ). - CHECK lo_pagebreaks IS BOUND. + lo_pagebreaks = io_worksheet->get_pagebreaks( ). + CHECK lo_pagebreaks IS BOUND. - lt_pagebreaks = lo_pagebreaks->get_all_pagebreaks( ). - CHECK lt_pagebreaks IS NOT INITIAL. " No need to proceed if don't have any pagebreaks. + lt_pagebreaks = lo_pagebreaks->get_all_pagebreaks( ). + CHECK lt_pagebreaks IS NOT INITIAL. " No need to proceed if don't have any pagebreaks. - lo_node_rowbreaks = io_document->create_simple_element( name = 'rowBreaks' - parent = io_document ). + lo_node_rowbreaks = io_document->create_simple_element( name = 'rowBreaks' + parent = io_document ). - lo_node_colbreaks = io_document->create_simple_element( name = 'colBreaks' - parent = io_document ). + lo_node_colbreaks = io_document->create_simple_element( name = 'colBreaks' + parent = io_document ). - LOOP AT lt_pagebreaks ASSIGNING . + LOOP AT lt_pagebreaks ASSIGNING . * Count how many rows and columns need to be broken - INSERT -cell_row INTO TABLE lt_rows. - IF sy-subrc = 0. " New - lv_value = -cell_row. - CONDENSE lv_value. + INSERT -cell_row INTO TABLE lt_rows. + IF sy-subrc = 0. " New + lv_value = -cell_row. + CONDENSE lv_value. - lo_node_break = io_document->create_simple_element( name = 'brk' - parent = io_document ). - lo_node_break->set_attribute( name = 'id' value = lv_value ). - lo_node_break->set_attribute( name = 'man' value = '1' ). " Manual break - lo_node_break->set_attribute( name = 'max' value = '16383' ). " Max columns + lo_node_break = io_document->create_simple_element( name = 'brk' + parent = io_document ). + lo_node_break->set_attribute( name = 'id' value = lv_value ). + lo_node_break->set_attribute( name = 'man' value = '1' ). " Manual break + lo_node_break->set_attribute( name = 'max' value = '16383' ). " Max columns - lo_node_rowbreaks->append_child( new_child = lo_node_break ). - ENDIF. + lo_node_rowbreaks->append_child( new_child = lo_node_break ). + ENDIF. - INSERT -cell_column INTO TABLE lt_columns. - IF sy-subrc = 0. " New - lv_value = -cell_column. - CONDENSE lv_value. + INSERT -cell_column INTO TABLE lt_columns. + IF sy-subrc = 0. " New + lv_value = -cell_column. + CONDENSE lv_value. - lo_node_break = io_document->create_simple_element( name = 'brk' - parent = io_document ). - lo_node_break->set_attribute( name = 'id' value = lv_value ). - lo_node_break->set_attribute( name = 'man' value = '1' ). " Manual break - lo_node_break->set_attribute( name = 'max' value = '1048575' ). " Max rows + lo_node_break = io_document->create_simple_element( name = 'brk' + parent = io_document ). + lo_node_break->set_attribute( name = 'id' value = lv_value ). + lo_node_break->set_attribute( name = 'man' value = '1' ). " Manual break + lo_node_break->set_attribute( name = 'max' value = '1048575' ). " Max rows - lo_node_colbreaks->append_child( new_child = lo_node_break ). - ENDIF. + lo_node_colbreaks->append_child( new_child = lo_node_break ). + ENDIF. - ENDLOOP. + ENDLOOP. - lv_value = lines( lt_rows ). - CONDENSE lv_value. - lo_node_rowbreaks->set_attribute( name = 'count' value = lv_value ). - lo_node_rowbreaks->set_attribute( name = 'manualBreakCount' value = lv_value ). + lv_value = lines( lt_rows ). + CONDENSE lv_value. + lo_node_rowbreaks->set_attribute( name = 'count' value = lv_value ). + lo_node_rowbreaks->set_attribute( name = 'manualBreakCount' value = lv_value ). - lv_value = lines( lt_rows ). - CONDENSE lv_value. - lo_node_colbreaks->set_attribute( name = 'count' value = lv_value ). - lo_node_colbreaks->set_attribute( name = 'manualBreakCount' value = lv_value ). + lv_value = lines( lt_rows ). + CONDENSE lv_value. + lo_node_colbreaks->set_attribute( name = 'count' value = lv_value ). + lo_node_colbreaks->set_attribute( name = 'manualBreakCount' value = lv_value ). - io_parent->append_child( new_child = lo_node_rowbreaks ). - io_parent->append_child( new_child = lo_node_colbreaks ). + io_parent->append_child( new_child = lo_node_rowbreaks ). + io_parent->append_child( new_child = lo_node_colbreaks ). -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_sheet_rels. + METHOD create_xl_sheet_rels. ** Constant node name - DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', - lc_xml_node_relationship TYPE string VALUE 'Relationship', - " Node attributes - lc_xml_attr_id TYPE string VALUE 'Id', - lc_xml_attr_type TYPE string VALUE 'Type', - lc_xml_attr_target TYPE string VALUE 'Target', - lc_xml_attr_target_mode TYPE string VALUE 'TargetMode', - lc_xml_val_external TYPE string VALUE 'External', - " Node namespace - lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', - lc_xml_node_rid_table_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table', - lc_xml_node_rid_printer_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings', - lc_xml_node_rid_drawing_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', - lc_xml_node_rid_comment_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', " (+) Issue #180 - lc_xml_node_rid_drawing_cmt_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', " (+) Issue #180 - lc_xml_node_rid_link_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_table TYPE REF TO zcl_excel_table, - lo_link TYPE REF TO zcl_excel_hyperlink. - - DATA: lv_value TYPE string, - lv_relation_id TYPE i, - lv_index_str TYPE string, - lv_comment_index TYPE i. + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + lc_xml_attr_target_mode TYPE string VALUE 'TargetMode', + lc_xml_val_external TYPE string VALUE 'External', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_table_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table', + lc_xml_node_rid_printer_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings', + lc_xml_node_rid_drawing_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + lc_xml_node_rid_comment_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', " (+) Issue #180 + lc_xml_node_rid_drawing_cmt_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', " (+) Issue #180 + lc_xml_node_rid_link_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lo_link TYPE REF TO zcl_excel_hyperlink. + + DATA: lv_value TYPE string, + lv_relation_id TYPE i, + lv_index_str TYPE string, + lv_comment_index TYPE i. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_rels_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). ********************************************************************** * STEP 4: Create subnodes - " Add sheet Relationship nodes here - lv_relation_id = 0. - lo_iterator = io_worksheet->get_hyperlinks_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_link ?= lo_iterator->get_next( ). - CHECK lo_link->is_internal( ) = abap_false. " issue #340 - don't put internal links here - ADD 1 TO lv_relation_id. + " Add sheet Relationship nodes here + lv_relation_id = 0. + lo_iterator = io_worksheet->get_hyperlinks_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_link ?= lo_iterator->get_next( ). + CHECK lo_link->is_internal( ) = abap_false. " issue #340 - don't put internal links here + ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_link_tp ). + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_link_tp ). - lv_value = lo_link->get_url( ). - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_target_mode - value = lc_xml_val_external ). - lo_element_root->append_child( new_child = lo_element ). - ENDWHILE. + lv_value = lo_link->get_url( ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_target_mode + value = lc_xml_val_external ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. * drawing - DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. - lo_drawings = io_worksheet->get_drawings( ). - IF lo_drawings->is_empty( ) = abap_false. - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - ADD 1 TO lv_relation_id. + lo_drawings = io_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_drawing_tp ). + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_drawing_tp ). - lv_index_str = iv_drawing_index. - CONDENSE lv_index_str NO-GAPS. - MOVE me->c_xl_drawings TO lv_value. - REPLACE 'xl' WITH '..' INTO lv_value. - REPLACE '#' WITH lv_index_str INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lv_index_str = iv_drawing_index. + CONDENSE lv_index_str NO-GAPS. + MOVE me->c_xl_drawings TO lv_value. + REPLACE 'xl' WITH '..' INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. * Begin - Add - Issue #180 - DATA: lo_comments TYPE REF TO zcl_excel_comments. + DATA: lo_comments TYPE REF TO zcl_excel_comments. - lv_comment_index = iv_comment_index. + lv_comment_index = iv_comment_index. - lo_comments = io_worksheet->get_comments( ). - IF lo_comments->is_empty( ) = abap_false. - " Drawing for comment - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). + lo_comments = io_worksheet->get_comments( ). + IF lo_comments->is_empty( ) = abap_false. + " Drawing for comment + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). - ADD 1 TO lv_relation_id. - ADD 1 TO lv_comment_index. + ADD 1 TO lv_relation_id. + ADD 1 TO lv_comment_index. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_drawing_cmt_tp ). + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_drawing_cmt_tp ). - lv_index_str = iv_comment_index. - CONDENSE lv_index_str NO-GAPS. - MOVE me->cl_xl_drawing_for_comments TO lv_value. - REPLACE 'xl' WITH '..' INTO lv_value. - REPLACE '#' WITH lv_index_str INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + lv_index_str = iv_comment_index. + CONDENSE lv_index_str NO-GAPS. + MOVE me->cl_xl_drawing_for_comments TO lv_value. + REPLACE 'xl' WITH '..' INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " Comment - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - ADD 1 TO lv_relation_id. + " Comment + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_comment_tp ). + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_comment_tp ). - lv_index_str = iv_comment_index. - CONDENSE lv_index_str NO-GAPS. - MOVE me->c_xl_comments TO lv_value. - REPLACE 'xl' WITH '..' INTO lv_value. - REPLACE '#' WITH lv_index_str INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lv_index_str = iv_comment_index. + CONDENSE lv_index_str NO-GAPS. + MOVE me->c_xl_comments TO lv_value. + REPLACE 'xl' WITH '..' INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. * End - Add - Issue #180 ********************************************************************** * header footer image - DATA: lt_drawings TYPE zexcel_t_drawings. - lt_drawings = io_worksheet->get_header_footer_drawings( ). - IF lines( lt_drawings ) > 0. "Header or footer image exist - ADD 1 TO lv_relation_id. - " Drawing for comment/header/footer - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_drawing_cmt_tp ). + DATA: lt_drawings TYPE zexcel_t_drawings. + lt_drawings = io_worksheet->get_header_footer_drawings( ). + IF lines( lt_drawings ) > 0. "Header or footer image exist + ADD 1 TO lv_relation_id. + " Drawing for comment/header/footer + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_drawing_cmt_tp ). - lv_index_str = lv_comment_index. - CONDENSE lv_index_str NO-GAPS. - MOVE me->cl_xl_drawing_for_comments TO lv_value. - REPLACE 'xl' WITH '..' INTO lv_value. - REPLACE '#' WITH lv_index_str INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lv_index_str = lv_comment_index. + CONDENSE lv_index_str NO-GAPS. + MOVE me->cl_xl_drawing_for_comments TO lv_value. + REPLACE 'xl' WITH '..' INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. *** End Header Footer ********************************************************************** - lo_iterator = io_worksheet->get_tables_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_table ?= lo_iterator->get_next( ). - ADD 1 TO lv_relation_id. + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_table ?= lo_iterator->get_next( ). + ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. - lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). - lo_element->set_attribute_ns( name = lc_xml_attr_type - value = lc_xml_node_rid_table_tp ). + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_table_tp ). - lv_value = lo_table->get_name( ). - CONCATENATE '../tables/' lv_value '.xml' INTO lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_target - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDWHILE. + lv_value = lo_table->get_name( ). + CONCATENATE '../tables/' lv_value '.xml' INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. * IF io_worksheet->get_print_settings( )->is_empty( ) = abap_false. * ADD 1 TO lv_relation_id. @@ -5629,224 +5629,224 @@ METHOD create_xl_sheet_rels. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). - -ENDMETHOD. - - -METHOD create_xl_sheet_sheet_data. - - TYPES: BEGIN OF lty_table_area, - left TYPE i, - right TYPE i, - top TYPE i, - bottom TYPE i, - END OF lty_table_area. - - CONSTANTS: lc_dummy_cell_content TYPE zexcel_s_cell_data-cell_value VALUE '})~~~ This is a dummy value for ABAP2XLSX and you should never find this in a real excelsheet Ihope'. - - CONSTANTS: lc_xml_node_sheetdata TYPE string VALUE 'sheetData', " SheetData tag - lc_xml_node_row TYPE string VALUE 'row', " Row tag - lc_xml_attr_r TYPE string VALUE 'r', " Cell: row-attribute - lc_xml_attr_spans TYPE string VALUE 'spans', " Cell: spans-attribute - lc_xml_node_c TYPE string VALUE 'c', " Cell tag - lc_xml_node_v TYPE string VALUE 'v', " Cell: value - lc_xml_node_f TYPE string VALUE 'f', " Cell: formula - lc_xml_attr_s TYPE string VALUE 's', " Cell: style - lc_xml_attr_t TYPE string VALUE 't'. " Cell: type - - DATA: col_count TYPE int4, - lo_autofilters TYPE REF TO zcl_excel_autofilters, - lo_autofilter TYPE REF TO zcl_excel_autofilter, - l_autofilter_hidden TYPE flag, - lt_values TYPE zexcel_t_autofilter_values, - ls_values TYPE zexcel_s_autofilter_values, - ls_area TYPE zexcel_s_autofilter_area, - - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_table TYPE REF TO zcl_excel_table, - lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom, - ls_table_area LIKE LINE OF lt_table_areas, - lo_column TYPE REF TO zcl_excel_column, - - ls_sheet_content LIKE LINE OF io_worksheet->sheet_content, - ls_sheet_content_empty LIKE LINE OF io_worksheet->sheet_content, - lv_current_row TYPE i, - lv_next_row TYPE i, - lv_last_row TYPE i, + ep_content = render_xml_document( lo_document ). + + ENDMETHOD. + + + METHOD create_xl_sheet_sheet_data. + + TYPES: BEGIN OF lty_table_area, + left TYPE i, + right TYPE i, + top TYPE i, + bottom TYPE i, + END OF lty_table_area. + + CONSTANTS: lc_dummy_cell_content TYPE zexcel_s_cell_data-cell_value VALUE '})~~~ This is a dummy value for ABAP2XLSX and you should never find this in a real excelsheet Ihope'. + + CONSTANTS: lc_xml_node_sheetdata TYPE string VALUE 'sheetData', " SheetData tag + lc_xml_node_row TYPE string VALUE 'row', " Row tag + lc_xml_attr_r TYPE string VALUE 'r', " Cell: row-attribute + lc_xml_attr_spans TYPE string VALUE 'spans', " Cell: spans-attribute + lc_xml_node_c TYPE string VALUE 'c', " Cell tag + lc_xml_node_v TYPE string VALUE 'v', " Cell: value + lc_xml_node_f TYPE string VALUE 'f', " Cell: formula + lc_xml_attr_s TYPE string VALUE 's', " Cell: style + lc_xml_attr_t TYPE string VALUE 't'. " Cell: type + + DATA: col_count TYPE int4, + lo_autofilters TYPE REF TO zcl_excel_autofilters, + lo_autofilter TYPE REF TO zcl_excel_autofilter, + l_autofilter_hidden TYPE flag, + lt_values TYPE zexcel_t_autofilter_values, + ls_values TYPE zexcel_s_autofilter_values, + ls_area TYPE zexcel_s_autofilter_area, + + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom, + ls_table_area LIKE LINE OF lt_table_areas, + lo_column TYPE REF TO zcl_excel_column, + + ls_sheet_content LIKE LINE OF io_worksheet->sheet_content, + ls_sheet_content_empty LIKE LINE OF io_worksheet->sheet_content, + lv_current_row TYPE i, + lv_next_row TYPE i, + lv_last_row TYPE i, * lts_row_dimensions TYPE zexcel_t_worksheet_rowdimensio, - lo_row_iterator TYPE REF TO cl_object_collection_iterator, - lo_row TYPE REF TO zcl_excel_row, - lo_row_empty TYPE REF TO zcl_excel_row, - lts_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row, + lo_row_iterator TYPE REF TO cl_object_collection_iterator, + lo_row TYPE REF TO zcl_excel_row, + lo_row_empty TYPE REF TO zcl_excel_row, + lts_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row, - ls_last_row TYPE zexcel_s_cell_data, - ls_style_mapping TYPE zexcel_s_styles_mapping, + ls_last_row TYPE zexcel_s_cell_data, + ls_style_mapping TYPE zexcel_s_styles_mapping, - lo_element_2 TYPE REF TO if_ixml_element, - lo_element_3 TYPE REF TO if_ixml_element, - lo_element_4 TYPE REF TO if_ixml_element, + lo_element_2 TYPE REF TO if_ixml_element, + lo_element_3 TYPE REF TO if_ixml_element, + lo_element_4 TYPE REF TO if_ixml_element, - lv_value TYPE string, - lv_style_guid TYPE zexcel_cell_style. + lv_value TYPE string, + lv_style_guid TYPE zexcel_cell_style. - FIELD-SYMBOLS: TYPE zexcel_s_cell_data, - LIKE LINE OF lts_row_outlines. + FIELD-SYMBOLS: TYPE zexcel_s_cell_data, + LIKE LINE OF lts_row_outlines. - " sheetData node - rv_ixml_sheet_data_root = io_document->create_simple_element( name = lc_xml_node_sheetdata - parent = io_document ). + " sheetData node + rv_ixml_sheet_data_root = io_document->create_simple_element( name = lc_xml_node_sheetdata + parent = io_document ). - " Get column count - col_count = io_worksheet->get_highest_column( ). - " Get autofilter + " Get column count + col_count = io_worksheet->get_highest_column( ). + " Get autofilter *lv_guid = io_worksheet->get_guid( ) . - lo_autofilters = excel->get_autofilters_reference( ). - lo_autofilter = lo_autofilters->get( io_worksheet = io_worksheet ) . - IF lo_autofilter IS BOUND. - lt_values = lo_autofilter->get_values( ) . - ls_area = lo_autofilter->get_filter_area( ) . - l_autofilter_hidden = abap_true. " First defautl is not showing - ENDIF. + lo_autofilters = excel->get_autofilters_reference( ). + lo_autofilter = lo_autofilters->get( io_worksheet = io_worksheet ) . + IF lo_autofilter IS BOUND. + lt_values = lo_autofilter->get_values( ) . + ls_area = lo_autofilter->get_filter_area( ) . + l_autofilter_hidden = abap_true. " First defautl is not showing + ENDIF. *--------------------------------------------------------------------* *issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 1 - start *--------------------------------------------------------------------* *Build table to hold all table-areas attached to this sheet - lo_iterator = io_worksheet->get_tables_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_table ?= lo_iterator->get_next( ). - ls_table_area-left = zcl_excel_common=>convert_column2int( lo_table->settings-top_left_column ). - ls_table_area-right = lo_table->get_right_column_integer( ). - ls_table_area-top = lo_table->settings-top_left_row. - ls_table_area-bottom = lo_table->get_bottom_row_integer( ). - INSERT ls_table_area INTO TABLE lt_table_areas. - ENDWHILE. + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_table ?= lo_iterator->get_next( ). + ls_table_area-left = zcl_excel_common=>convert_column2int( lo_table->settings-top_left_column ). + ls_table_area-right = lo_table->get_right_column_integer( ). + ls_table_area-top = lo_table->settings-top_left_row. + ls_table_area-bottom = lo_table->get_bottom_row_integer( ). + INSERT ls_table_area INTO TABLE lt_table_areas. + ENDWHILE. *--------------------------------------------------------------------* *issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 1 - end *--------------------------------------------------------------------* *We have problems when the first rows or trailing rows are not set but we have rowinformation *to solve this we add dummycontent into first and last line that will not be set *Set first line if necessary - READ TABLE io_worksheet->sheet_content TRANSPORTING NO FIELDS WITH KEY cell_row = 1. - IF sy-subrc <> 0. - ls_sheet_content_empty-cell_row = 1. - ls_sheet_content_empty-cell_column = 1. - ls_sheet_content_empty-cell_value = lc_dummy_cell_content. - INSERT ls_sheet_content_empty INTO TABLE io_worksheet->sheet_content. - ENDIF. + READ TABLE io_worksheet->sheet_content TRANSPORTING NO FIELDS WITH KEY cell_row = 1. + IF sy-subrc <> 0. + ls_sheet_content_empty-cell_row = 1. + ls_sheet_content_empty-cell_column = 1. + ls_sheet_content_empty-cell_value = lc_dummy_cell_content. + INSERT ls_sheet_content_empty INTO TABLE io_worksheet->sheet_content. + ENDIF. *Set last line if necessary *Last row with cell content - lv_last_row = io_worksheet->get_highest_row( ). + lv_last_row = io_worksheet->get_highest_row( ). *Last line with row-information set directly ( like line height, hidden-status ... ) - lo_row_iterator = io_worksheet->get_rows_iterator( ). - WHILE lo_row_iterator->has_next( ) = abap_true. - lo_row ?= lo_row_iterator->get_next( ). - IF lo_row->get_row_index( ) > lv_last_row. - lv_last_row = lo_row->get_row_index( ). - ENDIF. - ENDWHILE. + lo_row_iterator = io_worksheet->get_rows_iterator( ). + WHILE lo_row_iterator->has_next( ) = abap_true. + lo_row ?= lo_row_iterator->get_next( ). + IF lo_row->get_row_index( ) > lv_last_row. + lv_last_row = lo_row->get_row_index( ). + ENDIF. + ENDWHILE. *Last line with row-information set indirectly by row outline - lts_row_outlines = io_worksheet->get_row_outlines( ). - LOOP AT lts_row_outlines ASSIGNING . - IF -collapsed = 'X'. - lv_current_row = -row_to + 1. " collapsed-status may be set on following row - ELSE. - lv_current_row = -row_to. " collapsed-status may be set on following row - ENDIF. - IF lv_current_row > lv_last_row. - lv_last_row = lv_current_row. + lts_row_outlines = io_worksheet->get_row_outlines( ). + LOOP AT lts_row_outlines ASSIGNING . + IF -collapsed = 'X'. + lv_current_row = -row_to + 1. " collapsed-status may be set on following row + ELSE. + lv_current_row = -row_to. " collapsed-status may be set on following row + ENDIF. + IF lv_current_row > lv_last_row. + lv_last_row = lv_current_row. + ENDIF. + ENDLOOP. + READ TABLE io_worksheet->sheet_content TRANSPORTING NO FIELDS WITH KEY cell_row = lv_last_row. + IF sy-subrc <> 0. + ls_sheet_content_empty-cell_row = lv_last_row. + ls_sheet_content_empty-cell_column = 1. + ls_sheet_content_empty-cell_value = lc_dummy_cell_content. + INSERT ls_sheet_content_empty INTO TABLE io_worksheet->sheet_content. ENDIF. - ENDLOOP. - READ TABLE io_worksheet->sheet_content TRANSPORTING NO FIELDS WITH KEY cell_row = lv_last_row. - IF sy-subrc <> 0. - ls_sheet_content_empty-cell_row = lv_last_row. - ls_sheet_content_empty-cell_column = 1. - ls_sheet_content_empty-cell_value = lc_dummy_cell_content. - INSERT ls_sheet_content_empty INTO TABLE io_worksheet->sheet_content. - ENDIF. - - CLEAR ls_sheet_content. - LOOP AT io_worksheet->sheet_content INTO ls_sheet_content. - IF lt_values IS INITIAL. " no values attached to autofilter " issue #368 autofilter filtering too much - CLEAR l_autofilter_hidden. - ELSE. - READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. - IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. + + CLEAR ls_sheet_content. + LOOP AT io_worksheet->sheet_content INTO ls_sheet_content. + IF lt_values IS INITIAL. " no values attached to autofilter " issue #368 autofilter filtering too much CLEAR l_autofilter_hidden. + ELSE. + READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. + IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. + CLEAR l_autofilter_hidden. + ENDIF. ENDIF. - ENDIF. - CLEAR ls_style_mapping. + CLEAR ls_style_mapping. *Create row element *issues #346,#154, #195 - problems when we have information in row_dimension but no cell content in that row *Get next line that may have to be added. If we have empty lines this is the next line after previous cell content *Otherwise it is the line of the current cell content - lv_current_row = ls_last_row-cell_row + 1. - IF lv_current_row > ls_sheet_content-cell_row. - lv_current_row = ls_sheet_content-cell_row. - ENDIF. + lv_current_row = ls_last_row-cell_row + 1. + IF lv_current_row > ls_sheet_content-cell_row. + lv_current_row = ls_sheet_content-cell_row. + ENDIF. *Fill in empty lines if necessary - assign an emtpy sheet content - lv_next_row = lv_current_row. - WHILE lv_next_row <= ls_sheet_content-cell_row. - lv_current_row = lv_next_row. - lv_next_row = lv_current_row + 1. - IF lv_current_row = ls_sheet_content-cell_row. " cell value found in this row - ASSIGN ls_sheet_content TO . - ELSE. + lv_next_row = lv_current_row. + WHILE lv_next_row <= ls_sheet_content-cell_row. + lv_current_row = lv_next_row. + lv_next_row = lv_current_row + 1. + IF lv_current_row = ls_sheet_content-cell_row. " cell value found in this row + ASSIGN ls_sheet_content TO . + ELSE. *Check if empty row is really necessary - this is basically the case when we have information in row_dimension - lo_row_empty = io_worksheet->get_row( lv_current_row ). - CHECK lo_row_empty->get_row_height( ) >= 0 OR - lo_row_empty->get_collapsed( io_worksheet ) = abap_true OR - lo_row_empty->get_outline_level( io_worksheet ) > 0 OR - lo_row_empty->get_xf_index( ) <> 0. - " Dummyentry A1 - ls_sheet_content_empty-cell_row = lv_current_row. - ls_sheet_content_empty-cell_column = 1. - ASSIGN ls_sheet_content_empty TO . - ENDIF. + lo_row_empty = io_worksheet->get_row( lv_current_row ). + CHECK lo_row_empty->get_row_height( ) >= 0 OR + lo_row_empty->get_collapsed( io_worksheet ) = abap_true OR + lo_row_empty->get_outline_level( io_worksheet ) > 0 OR + lo_row_empty->get_xf_index( ) <> 0. + " Dummyentry A1 + ls_sheet_content_empty-cell_row = lv_current_row. + ls_sheet_content_empty-cell_column = 1. + ASSIGN ls_sheet_content_empty TO . + ENDIF. - IF ls_last_row-cell_row NE -cell_row. - IF lo_autofilter IS BOUND. - IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header - ls_area-row_end < ls_last_row-cell_row . + IF ls_last_row-cell_row NE -cell_row. + IF lo_autofilter IS BOUND. + IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header + ls_area-row_end < ls_last_row-cell_row . + CLEAR l_autofilter_hidden. + ENDIF. + ELSE. CLEAR l_autofilter_hidden. ENDIF. - ELSE. - CLEAR l_autofilter_hidden. - ENDIF. - IF ls_last_row-cell_row IS NOT INITIAL. - " Row visibility of previos row. - IF lo_row->get_visible( io_worksheet ) = abap_false OR - l_autofilter_hidden = abap_true. - lo_element_2->set_attribute_ns( name = 'hidden' value = 'true' ). - ENDIF. + IF ls_last_row-cell_row IS NOT INITIAL. + " Row visibility of previos row. + IF lo_row->get_visible( io_worksheet ) = abap_false OR + l_autofilter_hidden = abap_true. + lo_element_2->set_attribute_ns( name = 'hidden' value = 'true' ). + ENDIF. * lv_xstring_partial = render_ixml_element_no_header( lo_element_2 ). * CONCATENATE lv_xstring lv_xstring_partial * INTO lv_xstring IN BYTE MODE. - rv_ixml_sheet_data_root->append_child( new_child = lo_element_2 ). " row node - ENDIF. - " Add new row - lo_element_2 = io_document->create_simple_element( name = lc_xml_node_row - parent = io_document ). - " r - lv_value = -cell_row. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. + rv_ixml_sheet_data_root->append_child( new_child = lo_element_2 ). " row node + ENDIF. + " Add new row + lo_element_2 = io_document->create_simple_element( name = lc_xml_node_row + parent = io_document ). + " r + lv_value = -cell_row. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. - lo_element_2->set_attribute_ns( name = lc_xml_attr_r - value = lv_value ). - " Spans - lv_value = col_count. - CONCATENATE '1:' lv_value INTO lv_value. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_2->set_attribute_ns( name = lc_xml_attr_spans - value = lv_value ). - lo_row = io_worksheet->get_row( -cell_row ). - " Row dimensions + lo_element_2->set_attribute_ns( name = lc_xml_attr_r + value = lv_value ). + " Spans + lv_value = col_count. + CONCATENATE '1:' lv_value INTO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_spans + value = lv_value ). + lo_row = io_worksheet->get_row( -cell_row ). + " Row dimensions IF lo_row->get_custom_height( ) = abap_true. lo_element_2->set_attribute_ns( name = 'customHeight' value = '1' ). ENDIF. @@ -5871,142 +5871,142 @@ METHOD create_xl_sheet_sheet_data. lo_element_2->set_attribute_ns( name = 's' value = lv_value ). lo_element_2->set_attribute_ns( name = 'customFormat' value = '1' ). ENDIF. - IF lt_values IS INITIAL. " no values attached to autofilter " issue #368 autofilter filtering too much - CLEAR l_autofilter_hidden. + IF lt_values IS INITIAL. " no values attached to autofilter " issue #368 autofilter filtering too much + CLEAR l_autofilter_hidden. + ELSE. + l_autofilter_hidden = abap_true. " First default is not showing + ENDIF. ELSE. - l_autofilter_hidden = abap_true. " First default is not showing - ENDIF. - ELSE. - ENDIF. - ENDWHILE. + ENDIF. + ENDWHILE. - lo_element_3 = io_document->create_simple_element( name = lc_xml_node_c - parent = io_document ). + lo_element_3 = io_document->create_simple_element( name = lc_xml_node_c + parent = io_document ). - lo_element_3->set_attribute_ns( name = lc_xml_attr_r - value = -cell_coords ). + lo_element_3->set_attribute_ns( name = lc_xml_attr_r + value = -cell_coords ). *begin of change issue #157 - allow column cellstyle *if no cellstyle is set, look into column, then into sheet - IF -cell_style IS NOT INITIAL. - lv_style_guid = -cell_style. - ELSE. + IF -cell_style IS NOT INITIAL. + lv_style_guid = -cell_style. + ELSE. *--------------------------------------------------------------------* *issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 2 - start *--------------------------------------------------------------------* *Check if cell in any of the table areas - LOOP AT lt_table_areas TRANSPORTING NO FIELDS WHERE top <= -cell_row - AND bottom >= -cell_row - AND left <= -cell_column - AND right >= -cell_column. - EXIT. - ENDLOOP. - IF sy-subrc = 0. - CLEAR lv_style_guid. " No style --> EXCEL will use built-in-styles as declared in the tables-section - ELSE. + LOOP AT lt_table_areas TRANSPORTING NO FIELDS WHERE top <= -cell_row + AND bottom >= -cell_row + AND left <= -cell_column + AND right >= -cell_column. + EXIT. + ENDLOOP. + IF sy-subrc = 0. + CLEAR lv_style_guid. " No style --> EXCEL will use built-in-styles as declared in the tables-section + ELSE. *--------------------------------------------------------------------* *issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 2 - end *--------------------------------------------------------------------* - lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). - lo_column ?= io_worksheet->get_column( -cell_column ). - IF lo_column->get_column_index( ) = -cell_column. - lv_style_guid = lo_column->get_column_style_guid( ). - IF lv_style_guid IS INITIAL. - lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + lo_column ?= io_worksheet->get_column( -cell_column ). + IF lo_column->get_column_index( ) = -cell_column. + lv_style_guid = lo_column->get_column_style_guid( ). + IF lv_style_guid IS INITIAL. + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. ENDIF. - ENDIF. *--------------------------------------------------------------------* *issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 3 - start *--------------------------------------------------------------------* - ENDIF. + ENDIF. *--------------------------------------------------------------------* *issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 3 - end -*--------------------------------------------------------------------* - ENDIF. -* IF -cell_style IS NOT INITIAL. -* READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = -cell_style. - IF lv_style_guid IS NOT INITIAL. - READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. -*end of change issue #157 - allow column cellstyles - lv_value = ls_style_mapping-style. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_3->set_attribute_ns( name = lc_xml_attr_s - value = lv_value ). - ENDIF. - - " For cells with formula ignore the value - Excel will calculate it - IF -cell_formula IS NOT INITIAL. - " fomula node - lo_element_4 = io_document->create_simple_element( name = lc_xml_node_f - parent = io_document ). - lv_value = -cell_formula. - CONDENSE lv_value. - lo_element_4->set_value( value = lv_value ). - lo_element_3->append_child( new_child = lo_element_4 ). " fomula node - ELSEIF -cell_value IS NOT INITIAL "cell can have just style or formula - AND -cell_value <> lc_dummy_cell_content. - IF -data_type IS NOT INITIAL. - IF -data_type EQ 's_leading_blanks'. - lo_element_3->set_attribute_ns( name = lc_xml_attr_t - value = 's' ). - ELSE. - lo_element_3->set_attribute_ns( name = lc_xml_attr_t - value = -data_type ). - ENDIF. +*--------------------------------------------------------------------* + ENDIF. +* IF -cell_style IS NOT INITIAL. +* READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = -cell_style. + IF lv_style_guid IS NOT INITIAL. + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. +*end of change issue #157 - allow column cellstyles + lv_value = ls_style_mapping-style. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_3->set_attribute_ns( name = lc_xml_attr_s + value = lv_value ). ENDIF. - " value node - lo_element_4 = io_document->create_simple_element( name = lc_xml_node_v - parent = io_document ). - - IF -data_type EQ 's' OR -data_type EQ 's_leading_blanks'. - lv_value = me->get_shared_string_index( -cell_value ). - CONDENSE lv_value. - lo_element_4->set_value( value = lv_value ). - ELSE. - lv_value = -cell_value. + " For cells with formula ignore the value - Excel will calculate it + IF -cell_formula IS NOT INITIAL. + " fomula node + lo_element_4 = io_document->create_simple_element( name = lc_xml_node_f + parent = io_document ). + lv_value = -cell_formula. CONDENSE lv_value. lo_element_4->set_value( value = lv_value ). - ENDIF. + lo_element_3->append_child( new_child = lo_element_4 ). " fomula node + ELSEIF -cell_value IS NOT INITIAL "cell can have just style or formula + AND -cell_value <> lc_dummy_cell_content. + IF -data_type IS NOT INITIAL. + IF -data_type EQ 's_leading_blanks'. + lo_element_3->set_attribute_ns( name = lc_xml_attr_t + value = 's' ). + ELSE. + lo_element_3->set_attribute_ns( name = lc_xml_attr_t + value = -data_type ). + ENDIF. + ENDIF. - lo_element_3->append_child( new_child = lo_element_4 ). " value node - ENDIF. + " value node + lo_element_4 = io_document->create_simple_element( name = lc_xml_node_v + parent = io_document ). - lo_element_2->append_child( new_child = lo_element_3 ). " column node - ls_last_row = . - ENDLOOP. - IF sy-subrc = 0. - READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. - IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. - CLEAR l_autofilter_hidden. - ENDIF. - IF lo_autofilter IS BOUND. - IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header - ls_area-row_end < ls_last_row-cell_row . + IF -data_type EQ 's' OR -data_type EQ 's_leading_blanks'. + lv_value = me->get_shared_string_index( -cell_value ). + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + ELSE. + lv_value = -cell_value. + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + ENDIF. + + lo_element_3->append_child( new_child = lo_element_4 ). " value node + ENDIF. + + lo_element_2->append_child( new_child = lo_element_3 ). " column node + ls_last_row = . + ENDLOOP. + IF sy-subrc = 0. + READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. + IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. CLEAR l_autofilter_hidden. ENDIF. - ELSE. - CLEAR l_autofilter_hidden. - ENDIF. - " Row visibility of previos row. - IF lo_row->get_visible( ) = abap_false OR - l_autofilter_hidden = abap_true. - lo_element_2->set_attribute_ns( name = 'hidden' value = 'true' ). - ENDIF. + IF lo_autofilter IS BOUND. + IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header + ls_area-row_end < ls_last_row-cell_row . + CLEAR l_autofilter_hidden. + ENDIF. + ELSE. + CLEAR l_autofilter_hidden. + ENDIF. + " Row visibility of previos row. + IF lo_row->get_visible( ) = abap_false OR + l_autofilter_hidden = abap_true. + lo_element_2->set_attribute_ns( name = 'hidden' value = 'true' ). + ENDIF. * lv_xstring_partial = render_ixml_element_no_header( lo_element_2 ). * CONCATENATE lv_xstring lv_xstring_partial * INTO lv_xstring IN BYTE MODE. - rv_ixml_sheet_data_root->append_child( new_child = lo_element_2 ). " row node - ENDIF. - DELETE io_worksheet->sheet_content WHERE cell_value = lc_dummy_cell_content. " Get rid of dummyentries + rv_ixml_sheet_data_root->append_child( new_child = lo_element_2 ). " row node + ENDIF. + DELETE io_worksheet->sheet_content WHERE cell_value = lc_dummy_cell_content. " Get rid of dummyentries -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_styles. + METHOD create_xl_styles. *--------------------------------------------------------------------* * ToDos: * 2do§1 dxfs-cellstyles are used in conditional formats: @@ -6016,1216 +6016,1216 @@ METHOD create_xl_styles. ** Constant node name - CONSTANTS: lc_xml_node_stylesheet TYPE string VALUE 'styleSheet', - " font - lc_xml_node_fonts TYPE string VALUE 'fonts', - lc_xml_node_font TYPE string VALUE 'font', - lc_xml_node_b TYPE string VALUE 'b', "bold - lc_xml_node_i TYPE string VALUE 'i', "italic - lc_xml_node_u TYPE string VALUE 'u', "underline - lc_xml_node_strike TYPE string VALUE 'strike', "strikethrough - lc_xml_node_sz TYPE string VALUE 'sz', - lc_xml_node_color TYPE string VALUE 'color', - lc_xml_node_name TYPE string VALUE 'name', - lc_xml_node_family TYPE string VALUE 'family', - lc_xml_node_scheme TYPE string VALUE 'scheme', - " fill - lc_xml_node_fills TYPE string VALUE 'fills', - lc_xml_node_fill TYPE string VALUE 'fill', - lc_xml_node_patternfill TYPE string VALUE 'patternFill', - lc_xml_node_fgcolor TYPE string VALUE 'fgColor', - lc_xml_node_bgcolor TYPE string VALUE 'bgColor', - lc_xml_node_gradientfill TYPE string VALUE 'gradientFill', - lc_xml_node_stop TYPE string VALUE 'stop', - " borders - lc_xml_node_borders TYPE string VALUE 'borders', - lc_xml_node_border TYPE string VALUE 'border', - lc_xml_node_left TYPE string VALUE 'left', - lc_xml_node_right TYPE string VALUE 'right', - lc_xml_node_top TYPE string VALUE 'top', - lc_xml_node_bottom TYPE string VALUE 'bottom', - lc_xml_node_diagonal TYPE string VALUE 'diagonal', - " numfmt - lc_xml_node_numfmts TYPE string VALUE 'numFmts', - lc_xml_node_numfmt TYPE string VALUE 'numFmt', - " Styles - lc_xml_node_cellstylexfs TYPE string VALUE 'cellStyleXfs', - lc_xml_node_xf TYPE string VALUE 'xf', - lc_xml_node_cellxfs TYPE string VALUE 'cellXfs', - lc_xml_node_cellstyles TYPE string VALUE 'cellStyles', - lc_xml_node_cellstyle TYPE string VALUE 'cellStyle', - lc_xml_node_dxfs TYPE string VALUE 'dxfs', - lc_xml_node_tablestyles TYPE string VALUE 'tableStyles', - " Colors - lc_xml_node_colors TYPE string VALUE 'colors', - lc_xml_node_indexedcolors TYPE string VALUE 'indexedColors', - lc_xml_node_rgbcolor TYPE string VALUE 'rgbColor', - lc_xml_node_mrucolors TYPE string VALUE 'mruColors', - " Alignment - lc_xml_node_alignment TYPE string VALUE 'alignment', - " Protection - lc_xml_node_protection TYPE string VALUE 'protection', - " Node attributes - lc_xml_attr_count TYPE string VALUE 'count', - lc_xml_attr_val TYPE string VALUE 'val', - lc_xml_attr_theme TYPE string VALUE 'theme', - lc_xml_attr_rgb TYPE string VALUE 'rgb', - lc_xml_attr_indexed TYPE string VALUE 'indexed', - lc_xml_attr_tint TYPE string VALUE 'tint', - lc_xml_attr_style TYPE string VALUE 'style', - lc_xml_attr_position TYPE string VALUE 'position', - lc_xml_attr_degree TYPE string VALUE 'degree', - lc_xml_attr_patterntype TYPE string VALUE 'patternType', - lc_xml_attr_numfmtid TYPE string VALUE 'numFmtId', - lc_xml_attr_fontid TYPE string VALUE 'fontId', - lc_xml_attr_fillid TYPE string VALUE 'fillId', - lc_xml_attr_borderid TYPE string VALUE 'borderId', - lc_xml_attr_xfid TYPE string VALUE 'xfId', - lc_xml_attr_applynumberformat TYPE string VALUE 'applyNumberFormat', - lc_xml_attr_applyprotection TYPE string VALUE 'applyProtection', - lc_xml_attr_applyfont TYPE string VALUE 'applyFont', - lc_xml_attr_applyfill TYPE string VALUE 'applyFill', - lc_xml_attr_applyborder TYPE string VALUE 'applyBorder', - lc_xml_attr_name TYPE string VALUE 'name', - lc_xml_attr_builtinid TYPE string VALUE 'builtinId', - lc_xml_attr_defaulttablestyle TYPE string VALUE 'defaultTableStyle', - lc_xml_attr_defaultpivotstyle TYPE string VALUE 'defaultPivotStyle', - lc_xml_attr_applyalignment TYPE string VALUE 'applyAlignment', - lc_xml_attr_horizontal TYPE string VALUE 'horizontal', - lc_xml_attr_formatcode TYPE string VALUE 'formatCode', - lc_xml_attr_vertical TYPE string VALUE 'vertical', - lc_xml_attr_wraptext TYPE string VALUE 'wrapText', - lc_xml_attr_textrotation TYPE string VALUE 'textRotation', - lc_xml_attr_shrinktofit TYPE string VALUE 'shrinkToFit', - lc_xml_attr_indent TYPE string VALUE 'indent', - lc_xml_attr_locked TYPE string VALUE 'locked', - lc_xml_attr_hidden TYPE string VALUE 'hidden', - lc_xml_attr_diagonalup TYPE string VALUE 'diagonalUp', - lc_xml_attr_diagonaldown TYPE string VALUE 'diagonalDown', - " Node namespace - lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - lc_xml_attr_type TYPE string VALUE 'type', - lc_xml_attr_bottom TYPE string VALUE 'bottom', - lc_xml_attr_top TYPE string VALUE 'top', - lc_xml_attr_right TYPE string VALUE 'right', - lc_xml_attr_left TYPE string VALUE 'left'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element_fonts TYPE REF TO if_ixml_element, - lo_element_font TYPE REF TO if_ixml_element, - lo_element_fills TYPE REF TO if_ixml_element, - lo_element_fill TYPE REF TO if_ixml_element, - lo_element_borders TYPE REF TO if_ixml_element, - lo_element_border TYPE REF TO if_ixml_element, - lo_element_numfmts TYPE REF TO if_ixml_element, - lo_element_numfmt TYPE REF TO if_ixml_element, - lo_element_cellxfs TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_sub_element TYPE REF TO if_ixml_element, - lo_sub_element_2 TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_iterator2 TYPE REF TO cl_object_collection_iterator, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_style_cond TYPE REF TO zcl_excel_style_cond, - lo_style TYPE REF TO zcl_excel_style. - - - DATA: lt_fonts TYPE zexcel_t_style_font, - ls_font TYPE zexcel_s_style_font, - lt_fills TYPE zexcel_t_style_fill, - ls_fill TYPE zexcel_s_style_fill, - lt_borders TYPE zexcel_t_style_border, - ls_border TYPE zexcel_s_style_border, - lt_numfmts TYPE zexcel_t_style_numfmt, - ls_numfmt TYPE zexcel_s_style_numfmt, - lt_protections TYPE zexcel_t_style_protection, - ls_protection TYPE zexcel_s_style_protection, - lt_alignments TYPE zexcel_t_style_alignment, - ls_alignment TYPE zexcel_s_style_alignment, - lt_cellxfs TYPE zexcel_t_cellxfs, - ls_cellxfs TYPE zexcel_s_cellxfs, - ls_styles_mapping TYPE zexcel_s_styles_mapping, - lt_colors TYPE zexcel_t_style_color_argb, - ls_color LIKE LINE OF lt_colors. - - DATA: lv_value TYPE string, - lv_dfx_count TYPE i, - lv_fonts_count TYPE i, - lv_fills_count TYPE i, - lv_borders_count TYPE i, - lv_cellxfs_count TYPE i. - - TYPES: BEGIN OF ts_built_in_format, - num_format TYPE zexcel_number_format, - id TYPE sytabix, - END OF ts_built_in_format. - - DATA: lt_built_in_num_formats TYPE HASHED TABLE OF ts_built_in_format WITH UNIQUE KEY num_format, - ls_built_in_num_format LIKE LINE OF lt_built_in_num_formats. - FIELD-SYMBOLS: LIKE LINE OF lt_built_in_num_formats, - LIKE LINE OF zcl_excel_style_number_format=>mt_built_in_num_formats. + CONSTANTS: lc_xml_node_stylesheet TYPE string VALUE 'styleSheet', + " font + lc_xml_node_fonts TYPE string VALUE 'fonts', + lc_xml_node_font TYPE string VALUE 'font', + lc_xml_node_b TYPE string VALUE 'b', "bold + lc_xml_node_i TYPE string VALUE 'i', "italic + lc_xml_node_u TYPE string VALUE 'u', "underline + lc_xml_node_strike TYPE string VALUE 'strike', "strikethrough + lc_xml_node_sz TYPE string VALUE 'sz', + lc_xml_node_color TYPE string VALUE 'color', + lc_xml_node_name TYPE string VALUE 'name', + lc_xml_node_family TYPE string VALUE 'family', + lc_xml_node_scheme TYPE string VALUE 'scheme', + " fill + lc_xml_node_fills TYPE string VALUE 'fills', + lc_xml_node_fill TYPE string VALUE 'fill', + lc_xml_node_patternfill TYPE string VALUE 'patternFill', + lc_xml_node_fgcolor TYPE string VALUE 'fgColor', + lc_xml_node_bgcolor TYPE string VALUE 'bgColor', + lc_xml_node_gradientfill TYPE string VALUE 'gradientFill', + lc_xml_node_stop TYPE string VALUE 'stop', + " borders + lc_xml_node_borders TYPE string VALUE 'borders', + lc_xml_node_border TYPE string VALUE 'border', + lc_xml_node_left TYPE string VALUE 'left', + lc_xml_node_right TYPE string VALUE 'right', + lc_xml_node_top TYPE string VALUE 'top', + lc_xml_node_bottom TYPE string VALUE 'bottom', + lc_xml_node_diagonal TYPE string VALUE 'diagonal', + " numfmt + lc_xml_node_numfmts TYPE string VALUE 'numFmts', + lc_xml_node_numfmt TYPE string VALUE 'numFmt', + " Styles + lc_xml_node_cellstylexfs TYPE string VALUE 'cellStyleXfs', + lc_xml_node_xf TYPE string VALUE 'xf', + lc_xml_node_cellxfs TYPE string VALUE 'cellXfs', + lc_xml_node_cellstyles TYPE string VALUE 'cellStyles', + lc_xml_node_cellstyle TYPE string VALUE 'cellStyle', + lc_xml_node_dxfs TYPE string VALUE 'dxfs', + lc_xml_node_tablestyles TYPE string VALUE 'tableStyles', + " Colors + lc_xml_node_colors TYPE string VALUE 'colors', + lc_xml_node_indexedcolors TYPE string VALUE 'indexedColors', + lc_xml_node_rgbcolor TYPE string VALUE 'rgbColor', + lc_xml_node_mrucolors TYPE string VALUE 'mruColors', + " Alignment + lc_xml_node_alignment TYPE string VALUE 'alignment', + " Protection + lc_xml_node_protection TYPE string VALUE 'protection', + " Node attributes + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_attr_theme TYPE string VALUE 'theme', + lc_xml_attr_rgb TYPE string VALUE 'rgb', + lc_xml_attr_indexed TYPE string VALUE 'indexed', + lc_xml_attr_tint TYPE string VALUE 'tint', + lc_xml_attr_style TYPE string VALUE 'style', + lc_xml_attr_position TYPE string VALUE 'position', + lc_xml_attr_degree TYPE string VALUE 'degree', + lc_xml_attr_patterntype TYPE string VALUE 'patternType', + lc_xml_attr_numfmtid TYPE string VALUE 'numFmtId', + lc_xml_attr_fontid TYPE string VALUE 'fontId', + lc_xml_attr_fillid TYPE string VALUE 'fillId', + lc_xml_attr_borderid TYPE string VALUE 'borderId', + lc_xml_attr_xfid TYPE string VALUE 'xfId', + lc_xml_attr_applynumberformat TYPE string VALUE 'applyNumberFormat', + lc_xml_attr_applyprotection TYPE string VALUE 'applyProtection', + lc_xml_attr_applyfont TYPE string VALUE 'applyFont', + lc_xml_attr_applyfill TYPE string VALUE 'applyFill', + lc_xml_attr_applyborder TYPE string VALUE 'applyBorder', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_builtinid TYPE string VALUE 'builtinId', + lc_xml_attr_defaulttablestyle TYPE string VALUE 'defaultTableStyle', + lc_xml_attr_defaultpivotstyle TYPE string VALUE 'defaultPivotStyle', + lc_xml_attr_applyalignment TYPE string VALUE 'applyAlignment', + lc_xml_attr_horizontal TYPE string VALUE 'horizontal', + lc_xml_attr_formatcode TYPE string VALUE 'formatCode', + lc_xml_attr_vertical TYPE string VALUE 'vertical', + lc_xml_attr_wraptext TYPE string VALUE 'wrapText', + lc_xml_attr_textrotation TYPE string VALUE 'textRotation', + lc_xml_attr_shrinktofit TYPE string VALUE 'shrinkToFit', + lc_xml_attr_indent TYPE string VALUE 'indent', + lc_xml_attr_locked TYPE string VALUE 'locked', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_diagonalup TYPE string VALUE 'diagonalUp', + lc_xml_attr_diagonaldown TYPE string VALUE 'diagonalDown', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_bottom TYPE string VALUE 'bottom', + lc_xml_attr_top TYPE string VALUE 'top', + lc_xml_attr_right TYPE string VALUE 'right', + lc_xml_attr_left TYPE string VALUE 'left'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_fonts TYPE REF TO if_ixml_element, + lo_element_font TYPE REF TO if_ixml_element, + lo_element_fills TYPE REF TO if_ixml_element, + lo_element_fill TYPE REF TO if_ixml_element, + lo_element_borders TYPE REF TO if_ixml_element, + lo_element_border TYPE REF TO if_ixml_element, + lo_element_numfmts TYPE REF TO if_ixml_element, + lo_element_numfmt TYPE REF TO if_ixml_element, + lo_element_cellxfs TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + lo_sub_element_2 TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_iterator2 TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_cond TYPE REF TO zcl_excel_style_cond, + lo_style TYPE REF TO zcl_excel_style. + + + DATA: lt_fonts TYPE zexcel_t_style_font, + ls_font TYPE zexcel_s_style_font, + lt_fills TYPE zexcel_t_style_fill, + ls_fill TYPE zexcel_s_style_fill, + lt_borders TYPE zexcel_t_style_border, + ls_border TYPE zexcel_s_style_border, + lt_numfmts TYPE zexcel_t_style_numfmt, + ls_numfmt TYPE zexcel_s_style_numfmt, + lt_protections TYPE zexcel_t_style_protection, + ls_protection TYPE zexcel_s_style_protection, + lt_alignments TYPE zexcel_t_style_alignment, + ls_alignment TYPE zexcel_s_style_alignment, + lt_cellxfs TYPE zexcel_t_cellxfs, + ls_cellxfs TYPE zexcel_s_cellxfs, + ls_styles_mapping TYPE zexcel_s_styles_mapping, + lt_colors TYPE zexcel_t_style_color_argb, + ls_color LIKE LINE OF lt_colors. + + DATA: lv_value TYPE string, + lv_dfx_count TYPE i, + lv_fonts_count TYPE i, + lv_fills_count TYPE i, + lv_borders_count TYPE i, + lv_cellxfs_count TYPE i. + + TYPES: BEGIN OF ts_built_in_format, + num_format TYPE zexcel_number_format, + id TYPE sytabix, + END OF ts_built_in_format. + + DATA: lt_built_in_num_formats TYPE HASHED TABLE OF ts_built_in_format WITH UNIQUE KEY num_format, + ls_built_in_num_format LIKE LINE OF lt_built_in_num_formats. + FIELD-SYMBOLS: LIKE LINE OF lt_built_in_num_formats, + LIKE LINE OF zcl_excel_style_number_format=>mt_built_in_num_formats. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). *********************************************************************** * STEP 3: Create main node relationships - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_stylesheet - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_stylesheet + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). ********************************************************************** * STEP 4: Create subnodes - lo_element_fonts = lo_document->create_simple_element( name = lc_xml_node_fonts - parent = lo_document ). - - lo_element_fills = lo_document->create_simple_element( name = lc_xml_node_fills - parent = lo_document ). - - lo_element_borders = lo_document->create_simple_element( name = lc_xml_node_borders + lo_element_fonts = lo_document->create_simple_element( name = lc_xml_node_fonts parent = lo_document ). - lo_element_cellxfs = lo_document->create_simple_element( name = lc_xml_node_cellxfs + lo_element_fills = lo_document->create_simple_element( name = lc_xml_node_fills parent = lo_document ). - lo_element_numfmts = lo_document->create_simple_element( name = lc_xml_node_numfmts - parent = lo_document ). + lo_element_borders = lo_document->create_simple_element( name = lc_xml_node_borders + parent = lo_document ). + + lo_element_cellxfs = lo_document->create_simple_element( name = lc_xml_node_cellxfs + parent = lo_document ). + + lo_element_numfmts = lo_document->create_simple_element( name = lc_xml_node_numfmts + parent = lo_document ). * Prepare built-in number formats. - LOOP AT zcl_excel_style_number_format=>mt_built_in_num_formats ASSIGNING . - ls_built_in_num_format-id = -id. - ls_built_in_num_format-num_format = -format->format_code. - INSERT ls_built_in_num_format INTO TABLE lt_built_in_num_formats. - ENDLOOP. + LOOP AT zcl_excel_style_number_format=>mt_built_in_num_formats ASSIGNING . + ls_built_in_num_format-id = -id. + ls_built_in_num_format-num_format = -format->format_code. + INSERT ls_built_in_num_format INTO TABLE lt_built_in_num_formats. + ENDLOOP. * Compress styles - lo_iterator = excel->get_styles_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_style ?= lo_iterator->get_next( ). - ls_font = lo_style->font->get_structure( ). - ls_fill = lo_style->fill->get_structure( ). - ls_border = lo_style->borders->get_structure( ). - ls_alignment = lo_style->alignment->get_structure( ). - ls_protection = lo_style->protection->get_structure( ). - ls_numfmt = lo_style->number_format->get_structure( ). + lo_iterator = excel->get_styles_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_style ?= lo_iterator->get_next( ). + ls_font = lo_style->font->get_structure( ). + ls_fill = lo_style->fill->get_structure( ). + ls_border = lo_style->borders->get_structure( ). + ls_alignment = lo_style->alignment->get_structure( ). + ls_protection = lo_style->protection->get_structure( ). + ls_numfmt = lo_style->number_format->get_structure( ). - CLEAR ls_cellxfs. + CLEAR ls_cellxfs. * Compress fonts - READ TABLE lt_fonts FROM ls_font TRANSPORTING NO FIELDS. - IF sy-subrc EQ 0. - ls_cellxfs-fontid = sy-tabix. - ELSE. - APPEND ls_font TO lt_fonts. - DESCRIBE TABLE lt_fonts LINES ls_cellxfs-fontid. - ENDIF. - SUBTRACT 1 FROM ls_cellxfs-fontid. + READ TABLE lt_fonts FROM ls_font TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-fontid = sy-tabix. + ELSE. + APPEND ls_font TO lt_fonts. + DESCRIBE TABLE lt_fonts LINES ls_cellxfs-fontid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-fontid. * Compress alignment - READ TABLE lt_alignments FROM ls_alignment TRANSPORTING NO FIELDS. - IF sy-subrc EQ 0. - ls_cellxfs-alignmentid = sy-tabix. - ELSE. - APPEND ls_alignment TO lt_alignments. - DESCRIBE TABLE lt_alignments LINES ls_cellxfs-alignmentid. - ENDIF. - SUBTRACT 1 FROM ls_cellxfs-alignmentid. + READ TABLE lt_alignments FROM ls_alignment TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-alignmentid = sy-tabix. + ELSE. + APPEND ls_alignment TO lt_alignments. + DESCRIBE TABLE lt_alignments LINES ls_cellxfs-alignmentid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-alignmentid. * Compress fills - READ TABLE lt_fills FROM ls_fill TRANSPORTING NO FIELDS. - IF sy-subrc EQ 0. - ls_cellxfs-fillid = sy-tabix. - ELSE. - APPEND ls_fill TO lt_fills. - DESCRIBE TABLE lt_fills LINES ls_cellxfs-fillid. - ENDIF. - SUBTRACT 1 FROM ls_cellxfs-fillid. + READ TABLE lt_fills FROM ls_fill TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-fillid = sy-tabix. + ELSE. + APPEND ls_fill TO lt_fills. + DESCRIBE TABLE lt_fills LINES ls_cellxfs-fillid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-fillid. * Compress borders - READ TABLE lt_borders FROM ls_border TRANSPORTING NO FIELDS. - IF sy-subrc EQ 0. - ls_cellxfs-borderid = sy-tabix. - ELSE. - APPEND ls_border TO lt_borders. - DESCRIBE TABLE lt_borders LINES ls_cellxfs-borderid. - ENDIF. - SUBTRACT 1 FROM ls_cellxfs-borderid. + READ TABLE lt_borders FROM ls_border TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-borderid = sy-tabix. + ELSE. + APPEND ls_border TO lt_borders. + DESCRIBE TABLE lt_borders LINES ls_cellxfs-borderid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-borderid. * Compress protection - IF ls_protection-locked EQ c_on AND ls_protection-hidden EQ c_off. - ls_cellxfs-applyprotection = 0. - ELSE. - READ TABLE lt_protections FROM ls_protection TRANSPORTING NO FIELDS. - IF sy-subrc EQ 0. - ls_cellxfs-protectionid = sy-tabix. + IF ls_protection-locked EQ c_on AND ls_protection-hidden EQ c_off. + ls_cellxfs-applyprotection = 0. ELSE. - APPEND ls_protection TO lt_protections. - DESCRIBE TABLE lt_protections LINES ls_cellxfs-protectionid. + READ TABLE lt_protections FROM ls_protection TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-protectionid = sy-tabix. + ELSE. + APPEND ls_protection TO lt_protections. + DESCRIBE TABLE lt_protections LINES ls_cellxfs-protectionid. + ENDIF. + ls_cellxfs-applyprotection = 1. ENDIF. - ls_cellxfs-applyprotection = 1. - ENDIF. - SUBTRACT 1 FROM ls_cellxfs-protectionid. + SUBTRACT 1 FROM ls_cellxfs-protectionid. * Compress number formats - "----------- - IF ls_numfmt-numfmt NE zcl_excel_style_number_format=>c_format_date_std." and ls_numfmt-NUMFMT ne 'STD_NDEC'. " ALE Changes on going - "--- - IF ls_numfmt IS NOT INITIAL. + "----------- + IF ls_numfmt-numfmt NE zcl_excel_style_number_format=>c_format_date_std." and ls_numfmt-NUMFMT ne 'STD_NDEC'. " ALE Changes on going + "--- + IF ls_numfmt IS NOT INITIAL. * issue #389 - Problem with built-in format ( those are not being taken account of ) * There are some internal number formats built-in into EXCEL * Use these instead of duplicating the entries here, since they seem to be language-dependant and adjust to user settings in excel - READ TABLE lt_built_in_num_formats ASSIGNING WITH TABLE KEY num_format = ls_numfmt-numfmt. - IF sy-subrc = 0. - ls_cellxfs-numfmtid = -id. - ELSE. - READ TABLE lt_numfmts FROM ls_numfmt TRANSPORTING NO FIELDS. - IF sy-subrc EQ 0. - ls_cellxfs-numfmtid = sy-tabix. + READ TABLE lt_built_in_num_formats ASSIGNING WITH TABLE KEY num_format = ls_numfmt-numfmt. + IF sy-subrc = 0. + ls_cellxfs-numfmtid = -id. ELSE. - APPEND ls_numfmt TO lt_numfmts. - DESCRIBE TABLE lt_numfmts LINES ls_cellxfs-numfmtid. + READ TABLE lt_numfmts FROM ls_numfmt TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-numfmtid = sy-tabix. + ELSE. + APPEND ls_numfmt TO lt_numfmts. + DESCRIBE TABLE lt_numfmts LINES ls_cellxfs-numfmtid. + ENDIF. + ADD zcl_excel_common=>c_excel_numfmt_offset TO ls_cellxfs-numfmtid. " Add OXML offset for custom styles ENDIF. - ADD zcl_excel_common=>c_excel_numfmt_offset TO ls_cellxfs-numfmtid. " Add OXML offset for custom styles + ls_cellxfs-applynumberformat = 1. + ELSE. + ls_cellxfs-applynumberformat = 0. ENDIF. - ls_cellxfs-applynumberformat = 1. + "----------- " ALE changes on going ELSE. - ls_cellxfs-applynumberformat = 0. - ENDIF. - "----------- " ALE changes on going - ELSE. - ls_cellxfs-applynumberformat = 1. - IF ls_numfmt-numfmt EQ zcl_excel_style_number_format=>c_format_date_std. - ls_cellxfs-numfmtid = 14. + ls_cellxfs-applynumberformat = 1. + IF ls_numfmt-numfmt EQ zcl_excel_style_number_format=>c_format_date_std. + ls_cellxfs-numfmtid = 14. * elseif ls_numfmt-NUMFMT eq 'STD_NDEC'. * ls_cellxfs-numfmtid = 2. + ENDIF. ENDIF. - ENDIF. - "--- + "--- - IF ls_cellxfs-fontid NE 0. - ls_cellxfs-applyfont = 1. - ELSE. - ls_cellxfs-applyfont = 0. - ENDIF. - IF ls_cellxfs-alignmentid NE 0. - ls_cellxfs-applyalignment = 1. - ELSE. - ls_cellxfs-applyalignment = 0. - ENDIF. - IF ls_cellxfs-fillid NE 0. - ls_cellxfs-applyfill = 1. - ELSE. - ls_cellxfs-applyfill = 0. - ENDIF. - IF ls_cellxfs-borderid NE 0. - ls_cellxfs-applyborder = 1. - ELSE. - ls_cellxfs-applyborder = 0. - ENDIF. + IF ls_cellxfs-fontid NE 0. + ls_cellxfs-applyfont = 1. + ELSE. + ls_cellxfs-applyfont = 0. + ENDIF. + IF ls_cellxfs-alignmentid NE 0. + ls_cellxfs-applyalignment = 1. + ELSE. + ls_cellxfs-applyalignment = 0. + ENDIF. + IF ls_cellxfs-fillid NE 0. + ls_cellxfs-applyfill = 1. + ELSE. + ls_cellxfs-applyfill = 0. + ENDIF. + IF ls_cellxfs-borderid NE 0. + ls_cellxfs-applyborder = 1. + ELSE. + ls_cellxfs-applyborder = 0. + ENDIF. * Remap styles - READ TABLE lt_cellxfs FROM ls_cellxfs TRANSPORTING NO FIELDS. - IF sy-subrc EQ 0. - ls_styles_mapping-style = sy-tabix. - ELSE. - APPEND ls_cellxfs TO lt_cellxfs. - DESCRIBE TABLE lt_cellxfs LINES ls_styles_mapping-style. - ENDIF. - SUBTRACT 1 FROM ls_styles_mapping-style. - ls_styles_mapping-guid = lo_style->get_guid( ). - APPEND ls_styles_mapping TO me->styles_mapping. - ENDWHILE. - - " create numfmt elements - LOOP AT lt_numfmts INTO ls_numfmt. - lo_element_numfmt = lo_document->create_simple_element( name = lc_xml_node_numfmt - parent = lo_document ). - lv_value = sy-tabix + zcl_excel_common=>c_excel_numfmt_offset. - CONDENSE lv_value. - lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_numfmtid - value = lv_value ). - lv_value = ls_numfmt-numfmt. + READ TABLE lt_cellxfs FROM ls_cellxfs TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_styles_mapping-style = sy-tabix. + ELSE. + APPEND ls_cellxfs TO lt_cellxfs. + DESCRIBE TABLE lt_cellxfs LINES ls_styles_mapping-style. + ENDIF. + SUBTRACT 1 FROM ls_styles_mapping-style. + ls_styles_mapping-guid = lo_style->get_guid( ). + APPEND ls_styles_mapping TO me->styles_mapping. + ENDWHILE. + + " create numfmt elements + LOOP AT lt_numfmts INTO ls_numfmt. + lo_element_numfmt = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_document ). + lv_value = sy-tabix + zcl_excel_common=>c_excel_numfmt_offset. + CONDENSE lv_value. + lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_numfmtid + value = lv_value ). + lv_value = ls_numfmt-numfmt. * REPLACE ALL OCCURRENCES OF '.' IN lv_value WITH '\.'. - lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_formatcode - value = lv_value ). - lo_element_numfmts->append_child( new_child = lo_element_numfmt ). - ENDLOOP. - - " create font elements - LOOP AT lt_fonts INTO ls_font. - lo_element_font = lo_document->create_simple_element( name = lc_xml_node_font - parent = lo_document ). - IF ls_font-bold EQ abap_true. - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_b - parent = lo_document ). - lo_element_font->append_child( new_child = lo_sub_element ). - ENDIF. - IF ls_font-italic EQ abap_true. - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_i - parent = lo_document ). - lo_element_font->append_child( new_child = lo_sub_element ). - ENDIF. - IF ls_font-underline EQ abap_true. - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_u + lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_formatcode + value = lv_value ). + lo_element_numfmts->append_child( new_child = lo_element_numfmt ). + ENDLOOP. + + " create font elements + LOOP AT lt_fonts INTO ls_font. + lo_element_font = lo_document->create_simple_element( name = lc_xml_node_font + parent = lo_document ). + IF ls_font-bold EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_b + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-italic EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_i + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-underline EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_u + parent = lo_document ). + lv_value = ls_font-underline_mode. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-strikethrough EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_strike + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + "size + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_sz parent = lo_document ). - lv_value = ls_font-underline_mode. + lv_value = ls_font-size. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. lo_sub_element->set_attribute_ns( name = lc_xml_attr_val value = lv_value ). lo_element_font->append_child( new_child = lo_sub_element ). - ENDIF. - IF ls_font-strikethrough EQ abap_true. - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_strike + "color + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_element_font + is_color = ls_font-color ). + + "name + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_name parent = lo_document ). + lv_value = ls_font-name. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). lo_element_font->append_child( new_child = lo_sub_element ). - ENDIF. - "size - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_sz - parent = lo_document ). - lv_value = ls_font-size. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_val - value = lv_value ). - lo_element_font->append_child( new_child = lo_sub_element ). - "color - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_element_font - is_color = ls_font-color ). - - "name - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_name - parent = lo_document ). - lv_value = ls_font-name. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_val - value = lv_value ). - lo_element_font->append_child( new_child = lo_sub_element ). - "family - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_family - parent = lo_document ). - lv_value = ls_font-family. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_val - value = lv_value ). - lo_element_font->append_child( new_child = lo_sub_element ). - "scheme - IF ls_font-scheme IS NOT INITIAL. - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_scheme + "family + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_family parent = lo_document ). - lv_value = ls_font-scheme. + lv_value = ls_font-family. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. lo_sub_element->set_attribute_ns( name = lc_xml_attr_val value = lv_value ). lo_element_font->append_child( new_child = lo_sub_element ). - ENDIF. - lo_element_fonts->append_child( new_child = lo_element_font ). - ENDLOOP. - - " create fill elements - LOOP AT lt_fills INTO ls_fill. - lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill - parent = lo_document ). - - IF ls_fill-gradtype IS NOT INITIAL. - "gradient - - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_gradientfill - parent = lo_document ). - IF ls_fill-gradtype-degree IS NOT INITIAL. - lv_value = ls_fill-gradtype-degree. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_degree value = lv_value ). - ENDIF. - IF ls_fill-gradtype-type IS NOT INITIAL. - lv_value = ls_fill-gradtype-type. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_type value = lv_value ). - ENDIF. - IF ls_fill-gradtype-bottom IS NOT INITIAL. - lv_value = ls_fill-gradtype-bottom. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_bottom value = lv_value ). - ENDIF. - IF ls_fill-gradtype-top IS NOT INITIAL. - lv_value = ls_fill-gradtype-top. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_top value = lv_value ). - ENDIF. - IF ls_fill-gradtype-right IS NOT INITIAL. - lv_value = ls_fill-gradtype-right. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_right value = lv_value ). - ENDIF. - IF ls_fill-gradtype-left IS NOT INITIAL. - lv_value = ls_fill-gradtype-left. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_left value = lv_value ). + "scheme + IF ls_font-scheme IS NOT INITIAL. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_scheme + parent = lo_document ). + lv_value = ls_font-scheme. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). ENDIF. + lo_element_fonts->append_child( new_child = lo_element_font ). + ENDLOOP. - IF ls_fill-gradtype-position3 IS NOT INITIAL. - "create elements for gradients, we can have 2 or 3 stops in each gradient - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop - parent = lo_sub_element ). - lv_value = ls_fill-gradtype-position1. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position value = lv_value ). - - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element_2 - is_color = ls_fill-bgcolor - iv_color_elem_name = lc_xml_node_color ). - lo_sub_element->append_child( new_child = lo_sub_element_2 ). - - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop - parent = lo_sub_element ). - - lv_value = ls_fill-gradtype-position2. - - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position - value = lv_value ). + " create fill elements + LOOP AT lt_fills INTO ls_fill. + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill + parent = lo_document ). - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element_2 - is_color = ls_fill-fgcolor - iv_color_elem_name = lc_xml_node_color ). - lo_sub_element->append_child( new_child = lo_sub_element_2 ). + IF ls_fill-gradtype IS NOT INITIAL. + "gradient - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop - parent = lo_sub_element ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_gradientfill + parent = lo_document ). + IF ls_fill-gradtype-degree IS NOT INITIAL. + lv_value = ls_fill-gradtype-degree. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_degree value = lv_value ). + ENDIF. + IF ls_fill-gradtype-type IS NOT INITIAL. + lv_value = ls_fill-gradtype-type. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_type value = lv_value ). + ENDIF. + IF ls_fill-gradtype-bottom IS NOT INITIAL. + lv_value = ls_fill-gradtype-bottom. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_bottom value = lv_value ). + ENDIF. + IF ls_fill-gradtype-top IS NOT INITIAL. + lv_value = ls_fill-gradtype-top. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_top value = lv_value ). + ENDIF. + IF ls_fill-gradtype-right IS NOT INITIAL. + lv_value = ls_fill-gradtype-right. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_right value = lv_value ). + ENDIF. + IF ls_fill-gradtype-left IS NOT INITIAL. + lv_value = ls_fill-gradtype-left. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_left value = lv_value ). + ENDIF. - lv_value = ls_fill-gradtype-position3. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position - value = lv_value ). + IF ls_fill-gradtype-position3 IS NOT INITIAL. + "create elements for gradients, we can have 2 or 3 stops in each gradient + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop + parent = lo_sub_element ). + lv_value = ls_fill-gradtype-position1. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position value = lv_value ). + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_color ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). + + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop + parent = lo_sub_element ). + + lv_value = ls_fill-gradtype-position2. + + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position + value = lv_value ). + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_color ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). + + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop + parent = lo_sub_element ). + + lv_value = ls_fill-gradtype-position3. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position + value = lv_value ). + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_color ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element_2 - is_color = ls_fill-bgcolor - iv_color_elem_name = lc_xml_node_color ). - lo_sub_element->append_child( new_child = lo_sub_element_2 ). + ELSE. + "create elements for gradients, we can have 2 or 3 stops in each gradient + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop + parent = lo_sub_element ). + lv_value = ls_fill-gradtype-position1. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position value = lv_value ). + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_color ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). + + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop + parent = lo_sub_element ). + + lv_value = ls_fill-gradtype-position2. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position + value = lv_value ). + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_color ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). + ENDIF. ELSE. - "create elements for gradients, we can have 2 or 3 stops in each gradient - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop - parent = lo_sub_element ). - lv_value = ls_fill-gradtype-position1. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position value = lv_value ). - - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element_2 - is_color = ls_fill-bgcolor - iv_color_elem_name = lc_xml_node_color ). - lo_sub_element->append_child( new_child = lo_sub_element_2 ). - - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_stop - parent = lo_sub_element ). - - lv_value = ls_fill-gradtype-position2. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_position - value = lv_value ). - - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element_2 - is_color = ls_fill-fgcolor - iv_color_elem_name = lc_xml_node_color ). - lo_sub_element->append_child( new_child = lo_sub_element_2 ). - ENDIF. - - ELSE. - "pattern - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_patternfill - parent = lo_document ). - lv_value = ls_fill-filltype. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_patterntype - value = lv_value ). - " fgcolor - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element - is_color = ls_fill-fgcolor - iv_color_elem_name = lc_xml_node_fgcolor ). - - IF ls_fill-fgcolor-rgb IS INITIAL AND - ls_fill-fgcolor-indexed EQ zcl_excel_style_color=>c_indexed_not_set AND - ls_fill-fgcolor-theme EQ zcl_excel_style_color=>c_theme_not_set AND - ls_fill-fgcolor-tint IS INITIAL AND ls_fill-bgcolor-indexed EQ zcl_excel_style_color=>c_indexed_sys_foreground. - - " bgcolor + "pattern + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_patternfill + parent = lo_document ). + lv_value = ls_fill-filltype. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor create_xl_styles_color_node( io_document = lo_document io_parent = lo_sub_element - is_color = ls_fill-bgcolor - iv_color_elem_name = lc_xml_node_bgcolor ). - - ENDIF. - ENDIF. + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). - lo_element_fill->append_child( new_child = lo_sub_element )."pattern - lo_element_fills->append_child( new_child = lo_element_fill ). - ENDLOOP. + IF ls_fill-fgcolor-rgb IS INITIAL AND + ls_fill-fgcolor-indexed EQ zcl_excel_style_color=>c_indexed_not_set AND + ls_fill-fgcolor-theme EQ zcl_excel_style_color=>c_theme_not_set AND + ls_fill-fgcolor-tint IS INITIAL AND ls_fill-bgcolor-indexed EQ zcl_excel_style_color=>c_indexed_sys_foreground. - " create border elements - LOOP AT lt_borders INTO ls_border. - lo_element_border = lo_document->create_simple_element( name = lc_xml_node_border - parent = lo_document ). + " bgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). - IF ls_border-diagonalup IS NOT INITIAL. - lv_value = ls_border-diagonalup. - CONDENSE lv_value. - lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonalup - value = lv_value ). - ENDIF. + ENDIF. + ENDIF. - IF ls_border-diagonaldown IS NOT INITIAL. - lv_value = ls_border-diagonaldown. - CONDENSE lv_value. - lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonaldown - value = lv_value ). - ENDIF. + lo_element_fill->append_child( new_child = lo_sub_element )."pattern + lo_element_fills->append_child( new_child = lo_element_fill ). + ENDLOOP. - "left - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_left - parent = lo_document ). - IF ls_border-left_style IS NOT INITIAL. - lv_value = ls_border-left_style. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_style - value = lv_value ). - ENDIF. + " create border elements + LOOP AT lt_borders INTO ls_border. + lo_element_border = lo_document->create_simple_element( name = lc_xml_node_border + parent = lo_document ). - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element - is_color = ls_border-left_color ). + IF ls_border-diagonalup IS NOT INITIAL. + lv_value = ls_border-diagonalup. + CONDENSE lv_value. + lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonalup + value = lv_value ). + ENDIF. - lo_element_border->append_child( new_child = lo_sub_element ). + IF ls_border-diagonaldown IS NOT INITIAL. + lv_value = ls_border-diagonaldown. + CONDENSE lv_value. + lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonaldown + value = lv_value ). + ENDIF. - "right - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_right - parent = lo_document ). - IF ls_border-right_style IS NOT INITIAL. - lv_value = ls_border-right_style. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_style - value = lv_value ). - ENDIF. + "left + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_left + parent = lo_document ). + IF ls_border-left_style IS NOT INITIAL. + lv_value = ls_border-left_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element - is_color = ls_border-right_color ). + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-left_color ). - lo_element_border->append_child( new_child = lo_sub_element ). + lo_element_border->append_child( new_child = lo_sub_element ). - "top - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_top - parent = lo_document ). - IF ls_border-top_style IS NOT INITIAL. - lv_value = ls_border-top_style. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_style - value = lv_value ). - ENDIF. + "right + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_right + parent = lo_document ). + IF ls_border-right_style IS NOT INITIAL. + lv_value = ls_border-right_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element - is_color = ls_border-top_color ). + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-right_color ). - lo_element_border->append_child( new_child = lo_sub_element ). + lo_element_border->append_child( new_child = lo_sub_element ). - "bottom - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_bottom - parent = lo_document ). - IF ls_border-bottom_style IS NOT INITIAL. - lv_value = ls_border-bottom_style. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_style - value = lv_value ). - ENDIF. + "top + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_top + parent = lo_document ). + IF ls_border-top_style IS NOT INITIAL. + lv_value = ls_border-top_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element - is_color = ls_border-bottom_color ). + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-top_color ). - lo_element_border->append_child( new_child = lo_sub_element ). + lo_element_border->append_child( new_child = lo_sub_element ). - "diagonal - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_diagonal - parent = lo_document ). - IF ls_border-diagonal_style IS NOT INITIAL. - lv_value = ls_border-diagonal_style. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_style - value = lv_value ). - ENDIF. + "bottom + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_bottom + parent = lo_document ). + IF ls_border-bottom_style IS NOT INITIAL. + lv_value = ls_border-bottom_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. - create_xl_styles_color_node( - io_document = lo_document - io_parent = lo_sub_element - is_color = ls_border-diagonal_color ). - - lo_element_border->append_child( new_child = lo_sub_element ). - lo_element_borders->append_child( new_child = lo_element_border ). - ENDLOOP. - - " update attribute "count" - DESCRIBE TABLE lt_fonts LINES lv_fonts_count. - MOVE lv_fonts_count TO lv_value. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_fonts->set_attribute_ns( name = lc_xml_attr_count - value = lv_value ). - DESCRIBE TABLE lt_fills LINES lv_fills_count. - MOVE lv_fills_count TO lv_value. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_fills->set_attribute_ns( name = lc_xml_attr_count - value = lv_value ). - DESCRIBE TABLE lt_borders LINES lv_borders_count. - MOVE lv_borders_count TO lv_value. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_borders->set_attribute_ns( name = lc_xml_attr_count - value = lv_value ). - DESCRIBE TABLE lt_cellxfs LINES lv_cellxfs_count. - MOVE lv_cellxfs_count TO lv_value. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element_cellxfs->set_attribute_ns( name = lc_xml_attr_count - value = lv_value ). + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-bottom_color ). - " Append to root node - lo_element_root->append_child( new_child = lo_element_numfmts ). - lo_element_root->append_child( new_child = lo_element_fonts ). - lo_element_root->append_child( new_child = lo_element_fills ). - lo_element_root->append_child( new_child = lo_element_borders ). + lo_element_border->append_child( new_child = lo_sub_element ). - " cellstylexfs node - lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstylexfs - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_count - value = '1' ). - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_xf - parent = lo_document ). + "diagonal + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_diagonal + parent = lo_document ). + IF ls_border-diagonal_style IS NOT INITIAL. + lv_value = ls_border-diagonal_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_numfmtid - value = c_off ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_fontid - value = c_off ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_fillid - value = c_off ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_borderid - value = c_off ). + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-diagonal_color ). - lo_element->append_child( new_child = lo_sub_element ). - lo_element_root->append_child( new_child = lo_element ). + lo_element_border->append_child( new_child = lo_sub_element ). + lo_element_borders->append_child( new_child = lo_element_border ). + ENDLOOP. - LOOP AT lt_cellxfs INTO ls_cellxfs. - lo_element = lo_document->create_simple_element( name = lc_xml_node_xf - parent = lo_document ). - MOVE ls_cellxfs-numfmtid TO lv_value. - SHIFT lv_value RIGHT DELETING TRAILING space. - SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_numfmtid - value = lv_value ). - MOVE ls_cellxfs-fontid TO lv_value. + " update attribute "count" + DESCRIBE TABLE lt_fonts LINES lv_fonts_count. + MOVE lv_fonts_count TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_fontid - value = lv_value ). - MOVE ls_cellxfs-fillid TO lv_value. + lo_element_fonts->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_fills LINES lv_fills_count. + MOVE lv_fills_count TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_fillid - value = lv_value ). - MOVE ls_cellxfs-borderid TO lv_value. + lo_element_fills->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_borders LINES lv_borders_count. + MOVE lv_borders_count TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_borderid - value = lv_value ). - MOVE ls_cellxfs-xfid TO lv_value. + lo_element_borders->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_cellxfs LINES lv_cellxfs_count. + MOVE lv_cellxfs_count TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_xfid - value = lv_value ). - IF ls_cellxfs-applynumberformat EQ 1. - MOVE ls_cellxfs-applynumberformat TO lv_value. + lo_element_cellxfs->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + + " Append to root node + lo_element_root->append_child( new_child = lo_element_numfmts ). + lo_element_root->append_child( new_child = lo_element_fonts ). + lo_element_root->append_child( new_child = lo_element_fills ). + lo_element_root->append_child( new_child = lo_element_borders ). + + " cellstylexfs node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstylexfs + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '1' ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_xf + parent = lo_document ). + + lo_sub_element->set_attribute_ns( name = lc_xml_attr_numfmtid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_fontid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_fillid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_borderid + value = c_off ). + + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + + LOOP AT lt_cellxfs INTO ls_cellxfs. + lo_element = lo_document->create_simple_element( name = lc_xml_node_xf + parent = lo_document ). + MOVE ls_cellxfs-numfmtid TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_applynumberformat + lo_element->set_attribute_ns( name = lc_xml_attr_numfmtid value = lv_value ). - ENDIF. - IF ls_cellxfs-applyfont EQ 1. - MOVE ls_cellxfs-applyfont TO lv_value. + MOVE ls_cellxfs-fontid TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_applyfont + lo_element->set_attribute_ns( name = lc_xml_attr_fontid value = lv_value ). - ENDIF. - IF ls_cellxfs-applyfill EQ 1. - MOVE ls_cellxfs-applyfill TO lv_value. + MOVE ls_cellxfs-fillid TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_applyfill + lo_element->set_attribute_ns( name = lc_xml_attr_fillid value = lv_value ). - ENDIF. - IF ls_cellxfs-applyborder EQ 1. - MOVE ls_cellxfs-applyborder TO lv_value. + MOVE ls_cellxfs-borderid TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_applyborder + lo_element->set_attribute_ns( name = lc_xml_attr_borderid value = lv_value ). - ENDIF. - IF ls_cellxfs-applyalignment EQ 1. " depends on each style not for all the sheet - MOVE ls_cellxfs-applyalignment TO lv_value. + MOVE ls_cellxfs-xfid TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_element->set_attribute_ns( name = lc_xml_attr_applyalignment + lo_element->set_attribute_ns( name = lc_xml_attr_xfid value = lv_value ). - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_alignment - parent = lo_document ). - ADD 1 TO ls_cellxfs-alignmentid. "Table index starts from 1 - READ TABLE lt_alignments INTO ls_alignment INDEX ls_cellxfs-alignmentid. - SUBTRACT 1 FROM ls_cellxfs-alignmentid. - IF ls_alignment-horizontal IS NOT INITIAL. - MOVE ls_alignment-horizontal TO lv_value. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_horizontal - value = lv_value ). - ENDIF. - IF ls_alignment-vertical IS NOT INITIAL. - MOVE ls_alignment-vertical TO lv_value. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_vertical - value = lv_value ). - ENDIF. - IF ls_alignment-wraptext EQ abap_true. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_wraptext - value = c_on ). + IF ls_cellxfs-applynumberformat EQ 1. + MOVE ls_cellxfs-applynumberformat TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applynumberformat + value = lv_value ). ENDIF. - IF ls_alignment-textrotation IS NOT INITIAL. - MOVE ls_alignment-textrotation TO lv_value. + IF ls_cellxfs-applyfont EQ 1. + MOVE ls_cellxfs-applyfont TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_textrotation - value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_applyfont + value = lv_value ). ENDIF. - IF ls_alignment-shrinktofit EQ abap_true. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_shrinktofit - value = c_on ). + IF ls_cellxfs-applyfill EQ 1. + MOVE ls_cellxfs-applyfill TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyfill + value = lv_value ). ENDIF. - IF ls_alignment-indent IS NOT INITIAL. - MOVE ls_alignment-indent TO lv_value. + IF ls_cellxfs-applyborder EQ 1. + MOVE ls_cellxfs-applyborder TO lv_value. SHIFT lv_value RIGHT DELETING TRAILING space. SHIFT lv_value LEFT DELETING LEADING space. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_indent - value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_applyborder + value = lv_value ). ENDIF. + IF ls_cellxfs-applyalignment EQ 1. " depends on each style not for all the sheet + MOVE ls_cellxfs-applyalignment TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyalignment + value = lv_value ). + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_alignment + parent = lo_document ). + ADD 1 TO ls_cellxfs-alignmentid. "Table index starts from 1 + READ TABLE lt_alignments INTO ls_alignment INDEX ls_cellxfs-alignmentid. + SUBTRACT 1 FROM ls_cellxfs-alignmentid. + IF ls_alignment-horizontal IS NOT INITIAL. + MOVE ls_alignment-horizontal TO lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_horizontal + value = lv_value ). + ENDIF. + IF ls_alignment-vertical IS NOT INITIAL. + MOVE ls_alignment-vertical TO lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_vertical + value = lv_value ). + ENDIF. + IF ls_alignment-wraptext EQ abap_true. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_wraptext + value = c_on ). + ENDIF. + IF ls_alignment-textrotation IS NOT INITIAL. + MOVE ls_alignment-textrotation TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_textrotation + value = lv_value ). + ENDIF. + IF ls_alignment-shrinktofit EQ abap_true. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_shrinktofit + value = c_on ). + ENDIF. + IF ls_alignment-indent IS NOT INITIAL. + MOVE ls_alignment-indent TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_indent + value = lv_value ). + ENDIF. - lo_element->append_child( new_child = lo_sub_element_2 ). - ENDIF. - IF ls_cellxfs-applyprotection EQ 1. - MOVE ls_cellxfs-applyprotection TO lv_value. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_applyprotection - value = lv_value ). - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_protection - parent = lo_document ). - ADD 1 TO ls_cellxfs-protectionid. "Table index starts from 1 - READ TABLE lt_protections INTO ls_protection INDEX ls_cellxfs-protectionid. - SUBTRACT 1 FROM ls_cellxfs-protectionid. - IF ls_protection-locked IS NOT INITIAL. - MOVE ls_protection-locked TO lv_value. - CONDENSE lv_value. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_locked - value = lv_value ). + lo_element->append_child( new_child = lo_sub_element_2 ). ENDIF. - IF ls_protection-hidden IS NOT INITIAL. - MOVE ls_protection-hidden TO lv_value. - CONDENSE lv_value. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_hidden - value = lv_value ). + IF ls_cellxfs-applyprotection EQ 1. + MOVE ls_cellxfs-applyprotection TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_applyprotection + value = lv_value ). + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_protection + parent = lo_document ). + ADD 1 TO ls_cellxfs-protectionid. "Table index starts from 1 + READ TABLE lt_protections INTO ls_protection INDEX ls_cellxfs-protectionid. + SUBTRACT 1 FROM ls_cellxfs-protectionid. + IF ls_protection-locked IS NOT INITIAL. + MOVE ls_protection-locked TO lv_value. + CONDENSE lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_locked + value = lv_value ). + ENDIF. + IF ls_protection-hidden IS NOT INITIAL. + MOVE ls_protection-hidden TO lv_value. + CONDENSE lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_hidden + value = lv_value ). + ENDIF. + lo_element->append_child( new_child = lo_sub_element_2 ). ENDIF. - lo_element->append_child( new_child = lo_sub_element_2 ). - ENDIF. - lo_element_cellxfs->append_child( new_child = lo_element ). - ENDLOOP. + lo_element_cellxfs->append_child( new_child = lo_element ). + ENDLOOP. - lo_element_root->append_child( new_child = lo_element_cellxfs ). + lo_element_root->append_child( new_child = lo_element_cellxfs ). - " cellStyles node - lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstyles - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_count - value = '1' ). - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_cellstyle - parent = lo_document ). + " cellStyles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstyles + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '1' ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_cellstyle + parent = lo_document ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_name - value = 'Normal' ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_xfid - value = c_off ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_builtinid - value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = 'Normal' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_xfid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_builtinid + value = c_off ). - lo_element->append_child( new_child = lo_sub_element ). - lo_element_root->append_child( new_child = lo_element ). + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). - " dxfs node - lo_element = lo_document->create_simple_element( name = lc_xml_node_dxfs - parent = lo_document ). + " dxfs node + lo_element = lo_document->create_simple_element( name = lc_xml_node_dxfs + parent = lo_document ). - lo_iterator = me->excel->get_worksheets_iterator( ). - " get sheets - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->get_next( ). - " Conditional formatting styles into exch sheet - lo_iterator2 = lo_worksheet->get_style_cond_iterator( ). - WHILE lo_iterator2->has_next( ) EQ abap_true. - lo_style_cond ?= lo_iterator2->get_next( ). - CASE lo_style_cond->rule. + lo_iterator = me->excel->get_worksheets_iterator( ). + " get sheets + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->get_next( ). + " Conditional formatting styles into exch sheet + lo_iterator2 = lo_worksheet->get_style_cond_iterator( ). + WHILE lo_iterator2->has_next( ) EQ abap_true. + lo_style_cond ?= lo_iterator2->get_next( ). + CASE lo_style_cond->rule. * begin of change issue #366 - missing conditional rules: top10, move dfx-styles to own method - WHEN zcl_excel_style_cond=>c_rule_cellis. - me->create_dxf_style( EXPORTING - iv_cell_style = lo_style_cond->mode_cellis-cell_style - io_dxf_element = lo_element - io_ixml_document = lo_document - it_cellxfs = lt_cellxfs - it_fonts = lt_fonts - it_fills = lt_fills - CHANGING - cv_dfx_count = lv_dfx_count ). - - WHEN zcl_excel_style_cond=>c_rule_expression. - me->create_dxf_style( EXPORTING - iv_cell_style = lo_style_cond->mode_expression-cell_style - io_dxf_element = lo_element - io_ixml_document = lo_document - it_cellxfs = lt_cellxfs - it_fonts = lt_fonts - it_fills = lt_fills - CHANGING - cv_dfx_count = lv_dfx_count ). - - - - WHEN zcl_excel_style_cond=>c_rule_top10. - me->create_dxf_style( EXPORTING - iv_cell_style = lo_style_cond->mode_top10-cell_style - io_dxf_element = lo_element - io_ixml_document = lo_document - it_cellxfs = lt_cellxfs - it_fonts = lt_fonts - it_fills = lt_fills - CHANGING - cv_dfx_count = lv_dfx_count ). - - WHEN zcl_excel_style_cond=>c_rule_above_average. - me->create_dxf_style( EXPORTING - iv_cell_style = lo_style_cond->mode_above_average-cell_style - io_dxf_element = lo_element - io_ixml_document = lo_document - it_cellxfs = lt_cellxfs - it_fonts = lt_fonts - it_fills = lt_fills - CHANGING - cv_dfx_count = lv_dfx_count ). + WHEN zcl_excel_style_cond=>c_rule_cellis. + me->create_dxf_style( EXPORTING + iv_cell_style = lo_style_cond->mode_cellis-cell_style + io_dxf_element = lo_element + io_ixml_document = lo_document + it_cellxfs = lt_cellxfs + it_fonts = lt_fonts + it_fills = lt_fills + CHANGING + cv_dfx_count = lv_dfx_count ). + + WHEN zcl_excel_style_cond=>c_rule_expression. + me->create_dxf_style( EXPORTING + iv_cell_style = lo_style_cond->mode_expression-cell_style + io_dxf_element = lo_element + io_ixml_document = lo_document + it_cellxfs = lt_cellxfs + it_fonts = lt_fonts + it_fills = lt_fills + CHANGING + cv_dfx_count = lv_dfx_count ). + + + + WHEN zcl_excel_style_cond=>c_rule_top10. + me->create_dxf_style( EXPORTING + iv_cell_style = lo_style_cond->mode_top10-cell_style + io_dxf_element = lo_element + io_ixml_document = lo_document + it_cellxfs = lt_cellxfs + it_fonts = lt_fonts + it_fills = lt_fills + CHANGING + cv_dfx_count = lv_dfx_count ). + + WHEN zcl_excel_style_cond=>c_rule_above_average. + me->create_dxf_style( EXPORTING + iv_cell_style = lo_style_cond->mode_above_average-cell_style + io_dxf_element = lo_element + io_ixml_document = lo_document + it_cellxfs = lt_cellxfs + it_fonts = lt_fonts + it_fills = lt_fills + CHANGING + cv_dfx_count = lv_dfx_count ). * begin of change issue #366 - missing conditional rules: top10, move dfx-styles to own method - WHEN OTHERS. - CONTINUE. - ENDCASE. + WHEN OTHERS. + CONTINUE. + ENDCASE. + ENDWHILE. ENDWHILE. - ENDWHILE. - lv_value = lv_dfx_count. - CONDENSE lv_value. - lo_element->set_attribute_ns( name = lc_xml_attr_count - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). + lv_value = lv_dfx_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). - " tableStyles node - lo_element = lo_document->create_simple_element( name = lc_xml_node_tablestyles - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_count - value = '0' ). - lo_element->set_attribute_ns( name = lc_xml_attr_defaulttablestyle - value = zcl_excel_table=>builtinstyle_medium9 ). - lo_element->set_attribute_ns( name = lc_xml_attr_defaultpivotstyle - value = zcl_excel_table=>builtinstyle_pivot_light16 ). - lo_element_root->append_child( new_child = lo_element ). - - "write legacy color palette in case any indexed color was changed - IF excel->legacy_palette->is_modified( ) = abap_true. - lo_element = lo_document->create_simple_element( name = lc_xml_node_colors - parent = lo_document ). - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_indexedcolors - parent = lo_document ). - lo_element->append_child( new_child = lo_sub_element ). + " tableStyles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_tablestyles + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '0' ). + lo_element->set_attribute_ns( name = lc_xml_attr_defaulttablestyle + value = zcl_excel_table=>builtinstyle_medium9 ). + lo_element->set_attribute_ns( name = lc_xml_attr_defaultpivotstyle + value = zcl_excel_table=>builtinstyle_pivot_light16 ). + lo_element_root->append_child( new_child = lo_element ). - lt_colors = excel->legacy_palette->get_colors( ). - LOOP AT lt_colors INTO ls_color. - lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_rgbcolor - parent = lo_document ). - lv_value = ls_color. - lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_rgb - value = lv_value ). - lo_sub_element->append_child( new_child = lo_sub_element_2 ). - ENDLOOP. + "write legacy color palette in case any indexed color was changed + IF excel->legacy_palette->is_modified( ) = abap_true. + lo_element = lo_document->create_simple_element( name = lc_xml_node_colors + parent = lo_document ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_indexedcolors + parent = lo_document ). + lo_element->append_child( new_child = lo_sub_element ). + + lt_colors = excel->legacy_palette->get_colors( ). + LOOP AT lt_colors INTO ls_color. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_rgbcolor + parent = lo_document ). + lv_value = ls_color. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_rgb + value = lv_value ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). + ENDLOOP. - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lo_element_root->append_child( new_child = lo_element ). + ENDIF. ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_styles_color_node. - DATA: lo_sub_element TYPE REF TO if_ixml_element, - lv_value TYPE string. + METHOD create_xl_styles_color_node. + DATA: lo_sub_element TYPE REF TO if_ixml_element, + lv_value TYPE string. - CONSTANTS: lc_xml_attr_theme TYPE string VALUE 'theme', - lc_xml_attr_rgb TYPE string VALUE 'rgb', - lc_xml_attr_indexed TYPE string VALUE 'indexed', - lc_xml_attr_tint TYPE string VALUE 'tint'. + CONSTANTS: lc_xml_attr_theme TYPE string VALUE 'theme', + lc_xml_attr_rgb TYPE string VALUE 'rgb', + lc_xml_attr_indexed TYPE string VALUE 'indexed', + lc_xml_attr_tint TYPE string VALUE 'tint'. - "add node only if at least one attribute is set - CHECK is_color-rgb IS NOT INITIAL OR - is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set OR - is_color-theme <> zcl_excel_style_color=>c_theme_not_set OR - is_color-tint IS NOT INITIAL. + "add node only if at least one attribute is set + CHECK is_color-rgb IS NOT INITIAL OR + is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set OR + is_color-theme <> zcl_excel_style_color=>c_theme_not_set OR + is_color-tint IS NOT INITIAL. - lo_sub_element = io_document->create_simple_element( - name = iv_color_elem_name - parent = io_parent ). + lo_sub_element = io_document->create_simple_element( + name = iv_color_elem_name + parent = io_parent ). - IF is_color-rgb IS NOT INITIAL. - lv_value = is_color-rgb. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_rgb - value = lv_value ). - ENDIF. + IF is_color-rgb IS NOT INITIAL. + lv_value = is_color-rgb. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_rgb + value = lv_value ). + ENDIF. - IF is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set. - lv_value = zcl_excel_common=>number_to_excel_string( is_color-indexed ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_indexed - value = lv_value ). - ENDIF. + IF is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-indexed ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_indexed + value = lv_value ). + ENDIF. - IF is_color-theme <> zcl_excel_style_color=>c_theme_not_set. - lv_value = zcl_excel_common=>number_to_excel_string( is_color-theme ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_theme - value = lv_value ). - ENDIF. + IF is_color-theme <> zcl_excel_style_color=>c_theme_not_set. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-theme ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_theme + value = lv_value ). + ENDIF. + + IF is_color-tint IS NOT INITIAL. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-tint ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_tint + value = lv_value ). + ENDIF. + + io_parent->append_child( new_child = lo_sub_element ). + ENDMETHOD. - IF is_color-tint IS NOT INITIAL. - lv_value = zcl_excel_common=>number_to_excel_string( is_color-tint ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_tint - value = lv_value ). - ENDIF. - - io_parent->append_child( new_child = lo_sub_element ). -ENDMETHOD. - - -METHOD create_xl_table. - - DATA: lc_xml_node_table TYPE string VALUE 'table', - lc_xml_node_relationship TYPE string VALUE 'Relationship', - " Node attributes - lc_xml_attr_id TYPE string VALUE 'id', - lc_xml_attr_name TYPE string VALUE 'name', - lc_xml_attr_display_name TYPE string VALUE 'displayName', - lc_xml_attr_ref TYPE string VALUE 'ref', - lc_xml_attr_totals TYPE string VALUE 'totalsRowShown', - " Node namespace - lc_xml_node_table_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - " Node id - lc_xml_node_ridx_id TYPE string VALUE 'rId#'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_element2 TYPE REF TO if_ixml_element, - lv_table_name TYPE string, - lv_id TYPE i, - lv_match TYPE i, - lv_ref TYPE string, - lv_value TYPE string, - lv_num_columns TYPE i, - ls_fieldcat TYPE zexcel_s_fieldcatalog. + + METHOD create_xl_table. + + DATA: lc_xml_node_table TYPE string VALUE 'table', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'id', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_display_name TYPE string VALUE 'displayName', + lc_xml_attr_ref TYPE string VALUE 'ref', + lc_xml_attr_totals TYPE string VALUE 'totalsRowShown', + " Node namespace + lc_xml_node_table_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element2 TYPE REF TO if_ixml_element, + lv_table_name TYPE string, + lv_id TYPE i, + lv_match TYPE i, + lv_ref TYPE string, + lv_value TYPE string, + lv_num_columns TYPE i, + ls_fieldcat TYPE zexcel_s_fieldcatalog. ********************************************************************** * STEP 1: Create xml - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node table - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_table - parent = lo_document ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_table + parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_table_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_table_ns ). - lv_id = io_table->get_id( ). - lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_id ). - lo_element_root->set_attribute_ns( name = lc_xml_attr_id - value = lv_value ). + lv_id = io_table->get_id( ). + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_id ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). - FIND ALL OCCURRENCES OF REGEX '[^_a-zA-Z0-9]' IN io_table->settings-table_name IGNORING CASE MATCH COUNT lv_match. - IF io_table->settings-table_name IS NOT INITIAL AND lv_match EQ 0. - lv_table_name = io_table->settings-table_name. - ELSE. - lv_table_name = io_table->get_name( ). - ENDIF. - lo_element_root->set_attribute_ns( name = lc_xml_attr_name - value = lv_table_name ). - - lo_element_root->set_attribute_ns( name = lc_xml_attr_display_name - value = lv_table_name ). - - lv_ref = io_table->get_reference( ). - lo_element_root->set_attribute_ns( name = lc_xml_attr_ref - value = lv_ref ). - IF io_table->has_totals( ) = abap_true. - lo_element_root->set_attribute_ns( name = 'totalsRowCount' - value = '1' ). - ELSE. - lo_element_root->set_attribute_ns( name = lc_xml_attr_totals - value = '0' ). - ENDIF. + FIND ALL OCCURRENCES OF REGEX '[^_a-zA-Z0-9]' IN io_table->settings-table_name IGNORING CASE MATCH COUNT lv_match. + IF io_table->settings-table_name IS NOT INITIAL AND lv_match EQ 0. + lv_table_name = io_table->settings-table_name. + ELSE. + lv_table_name = io_table->get_name( ). + ENDIF. + lo_element_root->set_attribute_ns( name = lc_xml_attr_name + value = lv_table_name ). + + lo_element_root->set_attribute_ns( name = lc_xml_attr_display_name + value = lv_table_name ). + + lv_ref = io_table->get_reference( ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_ref + value = lv_ref ). + IF io_table->has_totals( ) = abap_true. + lo_element_root->set_attribute_ns( name = 'totalsRowCount' + value = '1' ). + ELSE. + lo_element_root->set_attribute_ns( name = lc_xml_attr_totals + value = '0' ). + ENDIF. ********************************************************************** * STEP 4: Create subnodes - " autoFilter - IF io_table->settings-nofilters EQ abap_false. - lo_element = lo_document->create_simple_element( name = 'autoFilter' - parent = lo_document ). + " autoFilter + IF io_table->settings-nofilters EQ abap_false. + lo_element = lo_document->create_simple_element( name = 'autoFilter' + parent = lo_document ). - lv_ref = io_table->get_reference( ip_include_totals_row = abap_false ). - lo_element->set_attribute_ns( name = 'ref' - value = lv_ref ). + lv_ref = io_table->get_reference( ip_include_totals_row = abap_false ). + lo_element->set_attribute_ns( name = 'ref' + value = lv_ref ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. + lo_element_root->append_child( new_child = lo_element ). + ENDIF. - "columns - lo_element = lo_document->create_simple_element( name = 'tableColumns' - parent = lo_document ). + "columns + lo_element = lo_document->create_simple_element( name = 'tableColumns' + parent = lo_document ). * lo_columns = io_table->get_columns( ). - LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. - ADD 1 TO lv_num_columns. - ENDLOOP. - - lv_value = lv_num_columns. - CONDENSE lv_value. - lo_element->set_attribute_ns( name = 'count' - value = lv_value ). + LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. + ADD 1 TO lv_num_columns. + ENDLOOP. - lo_element_root->append_child( new_child = lo_element ). + lv_value = lv_num_columns. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = 'count' + value = lv_value ). - LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. - lo_element2 = lo_document->create_simple_element_ns( name = 'tableColumn' - parent = lo_element ). + lo_element_root->append_child( new_child = lo_element ). - lv_value = ls_fieldcat-position. - SHIFT lv_value LEFT DELETING LEADING '0'. - lo_element2->set_attribute_ns( name = 'id' - value = lv_value ). - lv_value = ls_fieldcat-scrtext_l. + LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. + lo_element2 = lo_document->create_simple_element_ns( name = 'tableColumn' + parent = lo_element ). - " The text "_x...._", with "_x" not "_X", with exactly 4 ".", each being 0-9 a-f or A-F (case insensitive), is interpreted - " like Unicode character U+.... (e.g. "_x0041_" is rendered like "A") is for characters. - " To not interpret it, Excel replaces the first "_" is to be replaced with "_x005f_". - IF lv_value CS '_x'. - REPLACE ALL OCCURRENCES OF REGEX '_(x[0-9a-fA-F]{4}_)' IN lv_value WITH '_x005f_$1' RESPECTING CASE. - ENDIF. + lv_value = ls_fieldcat-position. + SHIFT lv_value LEFT DELETING LEADING '0'. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lv_value = ls_fieldcat-scrtext_l. - " XML chapter 2.2: Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] - " NB: although Excel supports _x0009_, it's not rendered except if you edit the text. - " Excel considers _x000d_ as being an error (_x000a_ is sufficient and rendered). - sy-fdpos = 0. - WHILE sy-fdpos < strlen( lv_value ). - IF lv_value CA |\r\n\t|. "table_special_characters. - CASE lv_value+sy-fdpos(1). - WHEN cl_abap_char_utilities=>newline. - REPLACE SECTION OFFSET sy-fdpos LENGTH 1 OF lv_value WITH '_x000a_'. - WHEN cl_abap_char_utilities=>cr_lf(1). - REPLACE SECTION OFFSET sy-fdpos LENGTH 1 OF lv_value WITH ``. - WHEN cl_abap_char_utilities=>horizontal_tab. - REPLACE SECTION OFFSET sy-fdpos LENGTH 1 OF lv_value WITH '_x0009_'. - ENDCASE. + " The text "_x...._", with "_x" not "_X", with exactly 4 ".", each being 0-9 a-f or A-F (case insensitive), is interpreted + " like Unicode character U+.... (e.g. "_x0041_" is rendered like "A") is for characters. + " To not interpret it, Excel replaces the first "_" is to be replaced with "_x005f_". + IF lv_value CS '_x'. + REPLACE ALL OCCURRENCES OF REGEX '_(x[0-9a-fA-F]{4}_)' IN lv_value WITH '_x005f_$1' RESPECTING CASE. ENDIF. - ENDWHILE. - lo_element2->set_attribute_ns( name = 'name' - value = lv_value ). + " XML chapter 2.2: Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] + " NB: although Excel supports _x0009_, it's not rendered except if you edit the text. + " Excel considers _x000d_ as being an error (_x000a_ is sufficient and rendered). + sy-fdpos = 0. + WHILE sy-fdpos < strlen( lv_value ). + IF lv_value CA |\r\n\t|. "table_special_characters. + CASE lv_value+sy-fdpos(1). + WHEN cl_abap_char_utilities=>newline. + REPLACE SECTION OFFSET sy-fdpos LENGTH 1 OF lv_value WITH '_x000a_'. + WHEN cl_abap_char_utilities=>cr_lf(1). + REPLACE SECTION OFFSET sy-fdpos LENGTH 1 OF lv_value WITH ``. + WHEN cl_abap_char_utilities=>horizontal_tab. + REPLACE SECTION OFFSET sy-fdpos LENGTH 1 OF lv_value WITH '_x0009_'. + ENDCASE. + ENDIF. + ENDWHILE. - IF ls_fieldcat-totals_function IS NOT INITIAL. - lo_element2->set_attribute_ns( name = 'totalsRowFunction' - value = ls_fieldcat-totals_function ). - ENDIF. + lo_element2->set_attribute_ns( name = 'name' + value = lv_value ). - lo_element->append_child( new_child = lo_element2 ). - ENDLOOP. + IF ls_fieldcat-totals_function IS NOT INITIAL. + lo_element2->set_attribute_ns( name = 'totalsRowFunction' + value = ls_fieldcat-totals_function ). + ENDIF. + lo_element->append_child( new_child = lo_element2 ). + ENDLOOP. - lo_element = lo_document->create_simple_element( name = 'tableStyleInfo' - parent = lo_element_root ). - lo_element->set_attribute_ns( name = 'name' - value = io_table->settings-table_style ). + lo_element = lo_document->create_simple_element( name = 'tableStyleInfo' + parent = lo_element_root ). - lo_element->set_attribute_ns( name = 'showFirstColumn' - value = '0' ). + lo_element->set_attribute_ns( name = 'name' + value = io_table->settings-table_style ). - lo_element->set_attribute_ns( name = 'showLastColumn' - value = '0' ). + lo_element->set_attribute_ns( name = 'showFirstColumn' + value = '0' ). - IF io_table->settings-show_row_stripes = abap_true. - lv_value = '1'. - ELSE. - lv_value = '0'. - ENDIF. + lo_element->set_attribute_ns( name = 'showLastColumn' + value = '0' ). - lo_element->set_attribute_ns( name = 'showRowStripes' - value = lv_value ). + IF io_table->settings-show_row_stripes = abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. - IF io_table->settings-show_column_stripes = abap_true. - lv_value = '1'. - ELSE. - lv_value = '0'. - ENDIF. + lo_element->set_attribute_ns( name = 'showRowStripes' + value = lv_value ). - lo_element->set_attribute_ns( name = 'showColumnStripes' - value = lv_value ). + IF io_table->settings-show_column_stripes = abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. - lo_element_root->append_child( new_child = lo_element ). + lo_element->set_attribute_ns( name = 'showColumnStripes' + value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -method create_xl_theme. - data: lo_theme type ref to zcl_excel_theme. + METHOD create_xl_theme. + DATA: lo_theme TYPE REF TO zcl_excel_theme. - excel->get_theme( - importing - eo_theme = lo_theme - ). - if lo_theme is initial. - create object lo_theme. - endif. - ep_content = lo_theme->write_theme( ). + excel->get_theme( + IMPORTING + eo_theme = lo_theme + ). + IF lo_theme IS INITIAL. + CREATE OBJECT lo_theme. + ENDIF. + ep_content = lo_theme->write_theme( ). -endmethod. + ENDMETHOD. -METHOD create_xl_workbook. + METHOD create_xl_workbook. *--------------------------------------------------------------------* * issue #230 - Pimp my Code * - Stefan Schmoecker, (done) 2012-11-07 @@ -7239,228 +7239,228 @@ METHOD create_xl_workbook. *--------------------------------------------------------------------* ** Constant node name - DATA: lc_xml_node_workbook TYPE string VALUE 'workbook', - lc_xml_node_fileversion TYPE string VALUE 'fileVersion', - lc_xml_node_workbookpr TYPE string VALUE 'workbookPr', - lc_xml_node_bookviews TYPE string VALUE 'bookViews', - lc_xml_node_workbookview TYPE string VALUE 'workbookView', - lc_xml_node_sheets TYPE string VALUE 'sheets', - lc_xml_node_sheet TYPE string VALUE 'sheet', - lc_xml_node_calcpr TYPE string VALUE 'calcPr', - lc_xml_node_workbookprotection TYPE string VALUE 'workbookProtection', - lc_xml_node_definednames TYPE string VALUE 'definedNames', - lc_xml_node_definedname TYPE string VALUE 'definedName', - " Node attributes - lc_xml_attr_appname TYPE string VALUE 'appName', - lc_xml_attr_lastedited TYPE string VALUE 'lastEdited', - lc_xml_attr_lowestedited TYPE string VALUE 'lowestEdited', - lc_xml_attr_rupbuild TYPE string VALUE 'rupBuild', - lc_xml_attr_xwindow TYPE string VALUE 'xWindow', - lc_xml_attr_ywindow TYPE string VALUE 'yWindow', - lc_xml_attr_windowwidth TYPE string VALUE 'windowWidth', - lc_xml_attr_windowheight TYPE string VALUE 'windowHeight', - lc_xml_attr_activetab TYPE string VALUE 'activeTab', - lc_xml_attr_name TYPE string VALUE 'name', - lc_xml_attr_sheetid TYPE string VALUE 'sheetId', - lc_xml_attr_state TYPE string VALUE 'state', - lc_xml_attr_id TYPE string VALUE 'id', - lc_xml_attr_calcid TYPE string VALUE 'calcId', - lc_xml_attr_lockrevision TYPE string VALUE 'lockRevision', - lc_xml_attr_lockstructure TYPE string VALUE 'lockStructure', - lc_xml_attr_lockwindows TYPE string VALUE 'lockWindows', - lc_xml_attr_revisionspassword TYPE string VALUE 'revisionsPassword', - lc_xml_attr_workbookpassword TYPE string VALUE 'workbookPassword', - lc_xml_attr_hidden TYPE string VALUE 'hidden', - lc_xml_attr_localsheetid TYPE string VALUE 'localSheetId', - " Node namespace - lc_r_ns TYPE string VALUE 'r', - lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', - lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', - " Node id - lc_xml_node_ridx_id TYPE string VALUE 'rId#'. - - DATA: lo_document TYPE REF TO if_ixml_document, - lo_element_root TYPE REF TO if_ixml_element, - lo_element TYPE REF TO if_ixml_element, - lo_element_range TYPE REF TO if_ixml_element, - lo_sub_element TYPE REF TO if_ixml_element, - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_iterator_range TYPE REF TO cl_object_collection_iterator, - lo_worksheet TYPE REF TO zcl_excel_worksheet, - lo_range TYPE REF TO zcl_excel_range, - lo_autofilters TYPE REF TO zcl_excel_autofilters, - lo_autofilter TYPE REF TO zcl_excel_autofilter. - - DATA: lv_xml_node_ridx_id TYPE string, - lv_value TYPE string, - lv_syindex TYPE string, - l_guid TYPE sysuuid_x16, - lv_active_sheet TYPE zexcel_active_worksheet. + DATA: lc_xml_node_workbook TYPE string VALUE 'workbook', + lc_xml_node_fileversion TYPE string VALUE 'fileVersion', + lc_xml_node_workbookpr TYPE string VALUE 'workbookPr', + lc_xml_node_bookviews TYPE string VALUE 'bookViews', + lc_xml_node_workbookview TYPE string VALUE 'workbookView', + lc_xml_node_sheets TYPE string VALUE 'sheets', + lc_xml_node_sheet TYPE string VALUE 'sheet', + lc_xml_node_calcpr TYPE string VALUE 'calcPr', + lc_xml_node_workbookprotection TYPE string VALUE 'workbookProtection', + lc_xml_node_definednames TYPE string VALUE 'definedNames', + lc_xml_node_definedname TYPE string VALUE 'definedName', + " Node attributes + lc_xml_attr_appname TYPE string VALUE 'appName', + lc_xml_attr_lastedited TYPE string VALUE 'lastEdited', + lc_xml_attr_lowestedited TYPE string VALUE 'lowestEdited', + lc_xml_attr_rupbuild TYPE string VALUE 'rupBuild', + lc_xml_attr_xwindow TYPE string VALUE 'xWindow', + lc_xml_attr_ywindow TYPE string VALUE 'yWindow', + lc_xml_attr_windowwidth TYPE string VALUE 'windowWidth', + lc_xml_attr_windowheight TYPE string VALUE 'windowHeight', + lc_xml_attr_activetab TYPE string VALUE 'activeTab', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_sheetid TYPE string VALUE 'sheetId', + lc_xml_attr_state TYPE string VALUE 'state', + lc_xml_attr_id TYPE string VALUE 'id', + lc_xml_attr_calcid TYPE string VALUE 'calcId', + lc_xml_attr_lockrevision TYPE string VALUE 'lockRevision', + lc_xml_attr_lockstructure TYPE string VALUE 'lockStructure', + lc_xml_attr_lockwindows TYPE string VALUE 'lockWindows', + lc_xml_attr_revisionspassword TYPE string VALUE 'revisionsPassword', + lc_xml_attr_workbookpassword TYPE string VALUE 'workbookPassword', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_localsheetid TYPE string VALUE 'localSheetId', + " Node namespace + lc_r_ns TYPE string VALUE 'r', + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#'. + + DATA: lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element_range TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_iterator_range TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_autofilters TYPE REF TO zcl_excel_autofilters, + lo_autofilter TYPE REF TO zcl_excel_autofilter. + + DATA: lv_xml_node_ridx_id TYPE string, + lv_value TYPE string, + lv_syindex TYPE string, + l_guid TYPE sysuuid_x16, + lv_active_sheet TYPE zexcel_active_worksheet. ********************************************************************** * STEP 1: Create [Content_Types].xml into the root of the ZIP - lo_document = create_xml_document( ). + lo_document = create_xml_document( ). ********************************************************************** * STEP 3: Create main node - lo_element_root = lo_document->create_simple_element( name = lc_xml_node_workbook - parent = lo_document ). - lo_element_root->set_attribute_ns( name = 'xmlns' - value = lc_xml_node_ns ). - lo_element_root->set_attribute_ns( name = 'xmlns:r' - value = lc_xml_node_r_ns ). + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_workbook + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_r_ns ). ********************************************************************** * STEP 4: Create subnode - " fileVersion node - lo_element = lo_document->create_simple_element( name = lc_xml_node_fileversion - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_appname - value = 'xl' ). - lo_element->set_attribute_ns( name = lc_xml_attr_lastedited - value = '4' ). - lo_element->set_attribute_ns( name = lc_xml_attr_lowestedited - value = '4' ). - lo_element->set_attribute_ns( name = lc_xml_attr_rupbuild - value = '4506' ). - lo_element_root->append_child( new_child = lo_element ). - - " fileVersion node - lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookpr - parent = lo_document ). + " fileVersion node + lo_element = lo_document->create_simple_element( name = lc_xml_node_fileversion + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_appname + value = 'xl' ). + lo_element->set_attribute_ns( name = lc_xml_attr_lastedited + value = '4' ). + lo_element->set_attribute_ns( name = lc_xml_attr_lowestedited + value = '4' ). + lo_element->set_attribute_ns( name = lc_xml_attr_rupbuild + value = '4506' ). + lo_element_root->append_child( new_child = lo_element ). + + " fileVersion node + lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookpr + parent = lo_document ). * lo_element->set_attribute_ns( name = lc_xml_attr_themeversion * value = '124226' ). - lo_element_root->append_child( new_child = lo_element ). + lo_element_root->append_child( new_child = lo_element ). - " workbookProtection node - IF me->excel->zif_excel_book_protection~protected EQ abap_true. - lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookprotection - parent = lo_document ). - MOVE me->excel->zif_excel_book_protection~workbookpassword TO lv_value. - IF lv_value IS NOT INITIAL. - lo_element->set_attribute_ns( name = lc_xml_attr_workbookpassword + " workbookProtection node + IF me->excel->zif_excel_book_protection~protected EQ abap_true. + lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookprotection + parent = lo_document ). + MOVE me->excel->zif_excel_book_protection~workbookpassword TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_workbookpassword + value = lv_value ). + ENDIF. + MOVE me->excel->zif_excel_book_protection~revisionspassword TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_revisionspassword + value = lv_value ). + ENDIF. + MOVE me->excel->zif_excel_book_protection~lockrevision TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockrevision value = lv_value ). - ENDIF. - MOVE me->excel->zif_excel_book_protection~revisionspassword TO lv_value. - IF lv_value IS NOT INITIAL. - lo_element->set_attribute_ns( name = lc_xml_attr_revisionspassword + MOVE me->excel->zif_excel_book_protection~lockstructure TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockstructure + value = lv_value ). + MOVE me->excel->zif_excel_book_protection~lockwindows TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockwindows value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). ENDIF. - MOVE me->excel->zif_excel_book_protection~lockrevision TO lv_value. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_lockrevision - value = lv_value ). - MOVE me->excel->zif_excel_book_protection~lockstructure TO lv_value. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_lockstructure - value = lv_value ). - MOVE me->excel->zif_excel_book_protection~lockwindows TO lv_value. - CONDENSE lv_value NO-GAPS. - lo_element->set_attribute_ns( name = lc_xml_attr_lockwindows - value = lv_value ). - lo_element_root->append_child( new_child = lo_element ). - ENDIF. - " bookviews node - lo_element = lo_document->create_simple_element( name = lc_xml_node_bookviews - parent = lo_document ). - " bookview node - lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_workbookview - parent = lo_document ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_xwindow - value = '120' ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_ywindow - value = '120' ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowwidth - value = '19035' ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowheight - value = '8445' ). - " Set Active Sheet - lv_active_sheet = excel->get_active_sheet_index( ). + " bookviews node + lo_element = lo_document->create_simple_element( name = lc_xml_node_bookviews + parent = lo_document ). + " bookview node + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_workbookview + parent = lo_document ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_xwindow + value = '120' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_ywindow + value = '120' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowwidth + value = '19035' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowheight + value = '8445' ). + " Set Active Sheet + lv_active_sheet = excel->get_active_sheet_index( ). * issue #365 - test if sheet exists - otherwise set active worksheet to 1 - lo_worksheet = excel->get_worksheet_by_index( lv_active_sheet ). - IF lo_worksheet IS NOT BOUND. - lv_active_sheet = 1. - excel->SET_ACTIVE_SHEET_INDEX( lv_active_sheet ). - ENDIF. - IF lv_active_sheet > 1. - lv_active_sheet = lv_active_sheet - 1. - lv_value = lv_active_sheet. - CONDENSE lv_value. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_activetab - value = lv_value ). - ENDIF. - lo_element->append_child( new_child = lo_sub_element )." bookview node - lo_element_root->append_child( new_child = lo_element )." bookviews node + lo_worksheet = excel->get_worksheet_by_index( lv_active_sheet ). + IF lo_worksheet IS NOT BOUND. + lv_active_sheet = 1. + excel->set_active_sheet_index( lv_active_sheet ). + ENDIF. + IF lv_active_sheet > 1. + lv_active_sheet = lv_active_sheet - 1. + lv_value = lv_active_sheet. + CONDENSE lv_value. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_activetab + value = lv_value ). + ENDIF. + lo_element->append_child( new_child = lo_sub_element )." bookview node + lo_element_root->append_child( new_child = lo_element )." bookviews node - " sheets node - lo_element = lo_document->create_simple_element( name = lc_xml_node_sheets - parent = lo_document ). - lo_iterator = excel->get_worksheets_iterator( ). + " sheets node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheets + parent = lo_document ). + lo_iterator = excel->get_worksheets_iterator( ). - " ranges node - lo_element_range = lo_document->create_simple_element( name = lc_xml_node_definednames " issue 163 + - parent = lo_document ). " issue 163 + + " ranges node + lo_element_range = lo_document->create_simple_element( name = lc_xml_node_definednames " issue 163 + + parent = lo_document ). " issue 163 + - WHILE lo_iterator->has_next( ) EQ abap_true. - " sheet node - lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_sheet - parent = lo_document ). - lo_worksheet ?= lo_iterator->get_next( ). - lv_syindex = sy-index. " question by Stefan Schmöcker 2012-12-02: sy-index seems to do the job - but is it proven to work or purely coincedence - lv_value = lo_worksheet->get_title( ). - SHIFT lv_syindex RIGHT DELETING TRAILING space. - SHIFT lv_syindex LEFT DELETING LEADING space. - lv_xml_node_ridx_id = lc_xml_node_ridx_id. - REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_name - value = lv_value ). - lo_sub_element->set_attribute_ns( name = lc_xml_attr_sheetid - value = lv_syindex ). - IF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_hidden. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_state - value = 'hidden' ). - ELSEIF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_veryhidden. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_state - value = 'veryHidden' ). - ENDIF. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_id - prefix = lc_r_ns - value = lv_xml_node_ridx_id ). - lo_element->append_child( new_child = lo_sub_element ). " sheet node + WHILE lo_iterator->has_next( ) EQ abap_true. + " sheet node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_sheet + parent = lo_document ). + lo_worksheet ?= lo_iterator->get_next( ). + lv_syindex = sy-index. " question by Stefan Schmöcker 2012-12-02: sy-index seems to do the job - but is it proven to work or purely coincedence + lv_value = lo_worksheet->get_title( ). + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_sheetid + value = lv_syindex ). + IF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_hidden. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_state + value = 'hidden' ). + ELSEIF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_veryhidden. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_state + value = 'veryHidden' ). + ENDIF. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_id + prefix = lc_r_ns + value = lv_xml_node_ridx_id ). + lo_element->append_child( new_child = lo_sub_element ). " sheet node - " issue 163 >>> - lo_iterator_range = lo_worksheet->get_ranges_iterator( ). + " issue 163 >>> + lo_iterator_range = lo_worksheet->get_ranges_iterator( ). *--------------------------------------------------------------------* * Defined names sheetlocal: Ranges, Repeat rows and columns *--------------------------------------------------------------------* - WHILE lo_iterator_range->has_next( ) EQ abap_true. - " range node - lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname - parent = lo_document ). - lo_range ?= lo_iterator_range->get_next( ). - lv_value = lo_range->name. + WHILE lo_iterator_range->has_next( ) EQ abap_true. + " range node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lo_range ?= lo_iterator_range->get_next( ). + lv_value = lo_range->name. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_name - value = lv_value ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). * lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid "del #235 Repeat rows/cols - EXCEL starts couting from zero * value = lv_xml_node_ridx_id ). "del #235 Repeat rows/cols - and needs absolute referencing to localSheetId - lv_value = lv_syindex - 1. "ins #235 Repeat rows/cols - CONDENSE lv_value NO-GAPS. "ins #235 Repeat rows/cols - lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid - value = lv_value ). + lv_value = lv_syindex - 1. "ins #235 Repeat rows/cols + CONDENSE lv_value NO-GAPS. "ins #235 Repeat rows/cols + lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid + value = lv_value ). - lv_value = lo_range->get_value( ). - lo_sub_element->set_value( value = lv_value ). - lo_element_range->append_child( new_child = lo_sub_element ). " range node + lv_value = lo_range->get_value( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node - ENDWHILE. - " issue 163 <<< + ENDWHILE. + " issue 163 <<< - ENDWHILE. - lo_element_root->append_child( new_child = lo_element )." sheets node + ENDWHILE. + lo_element_root->append_child( new_child = lo_element )." sheets node *--------------------------------------------------------------------* @@ -7469,313 +7469,313 @@ METHOD create_xl_workbook. * " ranges node * lo_element = lo_document->create_simple_element( name = lc_xml_node_definednames " issue 163 - * parent = lo_document ). " issue 163 - - lo_iterator = excel->get_ranges_iterator( ). + lo_iterator = excel->get_ranges_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - " range node - lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname - parent = lo_document ). - lo_range ?= lo_iterator->get_next( ). - lv_value = lo_range->name. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_name - value = lv_value ). - lv_value = lo_range->get_value( ). - lo_sub_element->set_value( value = lv_value ). - lo_element_range->append_child( new_child = lo_sub_element ). " range node + WHILE lo_iterator->has_next( ) EQ abap_true. + " range node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lo_range ?= lo_iterator->get_next( ). + lv_value = lo_range->name. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lv_value = lo_range->get_value( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node - ENDWHILE. + ENDWHILE. *--------------------------------------------------------------------* * Defined names - Autofilters ( also sheetlocal ) *--------------------------------------------------------------------* - lo_autofilters = excel->get_autofilters_reference( ). - IF lo_autofilters->is_empty( ) = abap_false. - lo_iterator = excel->get_worksheets_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - - lo_worksheet ?= lo_iterator->get_next( ). - lv_syindex = sy-index - 1 . - l_guid = lo_worksheet->get_guid( ). - lo_autofilter = lo_autofilters->get( i_sheet_guid = l_guid ) . - IF lo_autofilter IS BOUND. - lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname - parent = lo_document ). - lv_value = lo_autofilters->c_autofilter. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_name - value = lv_value ). - lv_value = lv_syindex. - CONDENSE lv_value NO-GAPS. - lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid - value = lv_value ). - lv_value = '1'. " Always hidden - lo_sub_element->set_attribute_ns( name = lc_xml_attr_hidden - value = lv_value ). - lv_value = lo_autofilter->get_filter_reference( ). - lo_sub_element->set_value( value = lv_value ). - lo_element_range->append_child( new_child = lo_sub_element ). " range node - ENDIF. + lo_autofilters = excel->get_autofilters_reference( ). + IF lo_autofilters->is_empty( ) = abap_false. + lo_iterator = excel->get_worksheets_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + + lo_worksheet ?= lo_iterator->get_next( ). + lv_syindex = sy-index - 1 . + l_guid = lo_worksheet->get_guid( ). + lo_autofilter = lo_autofilters->get( i_sheet_guid = l_guid ) . + IF lo_autofilter IS BOUND. + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lv_value = lo_autofilters->c_autofilter. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lv_value = lv_syindex. + CONDENSE lv_value NO-GAPS. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid + value = lv_value ). + lv_value = '1'. " Always hidden + lo_sub_element->set_attribute_ns( name = lc_xml_attr_hidden + value = lv_value ). + lv_value = lo_autofilter->get_filter_reference( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node + ENDIF. - ENDWHILE. - ENDIF. - lo_element_root->append_child( new_child = lo_element_range ). " ranges node + ENDWHILE. + ENDIF. + lo_element_root->append_child( new_child = lo_element_range ). " ranges node - " calcPr node - lo_element = lo_document->create_simple_element( name = lc_xml_node_calcpr - parent = lo_document ). - lo_element->set_attribute_ns( name = lc_xml_attr_calcid - value = '125725' ). - lo_element_root->append_child( new_child = lo_element ). + " calcPr node + lo_element = lo_document->create_simple_element( name = lc_xml_node_calcpr + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_calcid + value = '125725' ). + lo_element_root->append_child( new_child = lo_element ). ********************************************************************** * STEP 5: Create xstring stream - ep_content = render_xml_document( lo_document ). + ep_content = render_xml_document( lo_document ). -ENDMETHOD. + ENDMETHOD. -method FLAG2BOOL. + METHOD flag2bool. - IF ip_flag EQ abap_true. - ep_boolean = 'true'. - ELSE. - ep_boolean = 'false'. - ENDIF. - endmethod. + IF ip_flag EQ abap_true. + ep_boolean = 'true'. + ELSE. + ep_boolean = 'false'. + ENDIF. + ENDMETHOD. -METHOD get_shared_string_index. + METHOD get_shared_string_index. - DATA ls_shared_string TYPE zexcel_s_shared_string. + DATA ls_shared_string TYPE zexcel_s_shared_string. * READ TABLE shared_strings INTO ls_shared_string WITH KEY string_value = ip_cell_value BINARY SEARCH. - READ TABLE shared_strings INTO ls_shared_string WITH TABLE KEY string_value = ip_cell_value. - ep_index = ls_shared_string-string_no. - -ENDMETHOD. - -METHOD set_vml_shape_footer. - - CONSTANTS: lc_shape TYPE string VALUE '', - lc_shape_image TYPE string VALUE '', - lc_shape_header_center TYPE string VALUE 'CH', - lc_shape_header_left TYPE string VALUE 'LH', - lc_shape_header_right TYPE string VALUE 'RH', - lc_shape_footer_center TYPE string VALUE 'CF', - lc_shape_footer_left TYPE string VALUE 'LF', - lc_shape_footer_right TYPE string VALUE 'RF'. - - DATA: lv_content_left TYPE string, - lv_content_center TYPE string, - lv_content_right TYPE string, - lv_content_image_left TYPE string, - lv_content_image_center TYPE string, - lv_content_image_right TYPE string, - lv_value TYPE string, - ls_drawing_position TYPE zexcel_drawing_position. - - IF is_footer-left_image IS NOT INITIAL. - lv_content_left = lc_shape. - REPLACE '{ID}' IN lv_content_left WITH lc_shape_footer_left. - ls_drawing_position = is_footer-left_image->get_position( ). - IF ls_drawing_position-size-height IS NOT INITIAL. - lv_value = ls_drawing_position-size-height. - ELSE. - lv_value = '100'. - ENDIF. - CONDENSE lv_value. - REPLACE '{HEIGHT}' IN lv_content_left WITH lv_value. - IF ls_drawing_position-size-width IS NOT INITIAL. - lv_value = ls_drawing_position-size-width. - ELSE. - lv_value = '100'. - ENDIF. - CONDENSE lv_value. - REPLACE '{WIDTH}' IN lv_content_left WITH lv_value. - lv_content_image_left = lc_shape_image. - lv_value = is_footer-left_image->get_index( ). - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - REPLACE '{RID}' IN lv_content_image_left WITH lv_value. - ENDIF. - IF is_footer-center_image IS NOT INITIAL. - lv_content_center = lc_shape. - REPLACE '{ID}' IN lv_content_center WITH lc_shape_footer_center. - ls_drawing_position = is_footer-left_image->get_position( ). - IF ls_drawing_position-size-height IS NOT INITIAL. - lv_value = ls_drawing_position-size-height. - ELSE. - lv_value = '100'. - ENDIF. - CONDENSE lv_value. - REPLACE '{HEIGHT}' IN lv_content_center WITH lv_value. - IF ls_drawing_position-size-width IS NOT INITIAL. - lv_value = ls_drawing_position-size-width. - ELSE. - lv_value = '100'. + READ TABLE shared_strings INTO ls_shared_string WITH TABLE KEY string_value = ip_cell_value. + ep_index = ls_shared_string-string_no. + + ENDMETHOD. + + METHOD set_vml_shape_footer. + + CONSTANTS: lc_shape TYPE string VALUE '', + lc_shape_image TYPE string VALUE '', + lc_shape_header_center TYPE string VALUE 'CH', + lc_shape_header_left TYPE string VALUE 'LH', + lc_shape_header_right TYPE string VALUE 'RH', + lc_shape_footer_center TYPE string VALUE 'CF', + lc_shape_footer_left TYPE string VALUE 'LF', + lc_shape_footer_right TYPE string VALUE 'RF'. + + DATA: lv_content_left TYPE string, + lv_content_center TYPE string, + lv_content_right TYPE string, + lv_content_image_left TYPE string, + lv_content_image_center TYPE string, + lv_content_image_right TYPE string, + lv_value TYPE string, + ls_drawing_position TYPE zexcel_drawing_position. + + IF is_footer-left_image IS NOT INITIAL. + lv_content_left = lc_shape. + REPLACE '{ID}' IN lv_content_left WITH lc_shape_footer_left. + ls_drawing_position = is_footer-left_image->get_position( ). + IF ls_drawing_position-size-height IS NOT INITIAL. + lv_value = ls_drawing_position-size-height. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{HEIGHT}' IN lv_content_left WITH lv_value. + IF ls_drawing_position-size-width IS NOT INITIAL. + lv_value = ls_drawing_position-size-width. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{WIDTH}' IN lv_content_left WITH lv_value. + lv_content_image_left = lc_shape_image. + lv_value = is_footer-left_image->get_index( ). + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + REPLACE '{RID}' IN lv_content_image_left WITH lv_value. ENDIF. - CONDENSE lv_value. - REPLACE '{WIDTH}' IN lv_content_center WITH lv_value. - lv_content_image_center = lc_shape_image. - lv_value = is_footer-center_image->get_index( ). - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - REPLACE '{RID}' IN lv_content_image_center WITH lv_value. - ENDIF. - IF is_footer-right_image IS NOT INITIAL. - lv_content_right = lc_shape. - REPLACE '{ID}' IN lv_content_right WITH lc_shape_footer_right. - ls_drawing_position = is_footer-left_image->get_position( ). - IF ls_drawing_position-size-height IS NOT INITIAL. - lv_value = ls_drawing_position-size-height. - ELSE. - lv_value = '100'. + IF is_footer-center_image IS NOT INITIAL. + lv_content_center = lc_shape. + REPLACE '{ID}' IN lv_content_center WITH lc_shape_footer_center. + ls_drawing_position = is_footer-left_image->get_position( ). + IF ls_drawing_position-size-height IS NOT INITIAL. + lv_value = ls_drawing_position-size-height. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{HEIGHT}' IN lv_content_center WITH lv_value. + IF ls_drawing_position-size-width IS NOT INITIAL. + lv_value = ls_drawing_position-size-width. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{WIDTH}' IN lv_content_center WITH lv_value. + lv_content_image_center = lc_shape_image. + lv_value = is_footer-center_image->get_index( ). + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + REPLACE '{RID}' IN lv_content_image_center WITH lv_value. ENDIF. - CONDENSE lv_value. - REPLACE '{HEIGHT}' IN lv_content_right WITH lv_value. - IF ls_drawing_position-size-width IS NOT INITIAL. - lv_value = ls_drawing_position-size-width. - ELSE. - lv_value = '100'. + IF is_footer-right_image IS NOT INITIAL. + lv_content_right = lc_shape. + REPLACE '{ID}' IN lv_content_right WITH lc_shape_footer_right. + ls_drawing_position = is_footer-left_image->get_position( ). + IF ls_drawing_position-size-height IS NOT INITIAL. + lv_value = ls_drawing_position-size-height. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{HEIGHT}' IN lv_content_right WITH lv_value. + IF ls_drawing_position-size-width IS NOT INITIAL. + lv_value = ls_drawing_position-size-width. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{WIDTH}' IN lv_content_right WITH lv_value. + lv_content_image_right = lc_shape_image. + lv_value = is_footer-right_image->get_index( ). + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + REPLACE '{RID}' IN lv_content_image_right WITH lv_value. ENDIF. - CONDENSE lv_value. - REPLACE '{WIDTH}' IN lv_content_right WITH lv_value. - lv_content_image_right = lc_shape_image. - lv_value = is_footer-right_image->get_index( ). - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - REPLACE '{RID}' IN lv_content_image_right WITH lv_value. - ENDIF. - - CONCATENATE lv_content_left - lv_content_image_left - lv_content_center - lv_content_image_center - lv_content_right - lv_content_image_right - INTO ep_content. -ENDMETHOD. + CONCATENATE lv_content_left + lv_content_image_left + lv_content_center + lv_content_image_center + lv_content_right + lv_content_image_right + INTO ep_content. + + ENDMETHOD. -METHOD set_vml_shape_header. + METHOD set_vml_shape_header. * CONSTANTS: lc_shape TYPE string VALUE '', - CONSTANTS: lc_shape TYPE string VALUE '', - lc_shape_image TYPE string VALUE '', - lc_shape_header_center TYPE string VALUE 'CH', - lc_shape_header_left TYPE string VALUE 'LH', - lc_shape_header_right TYPE string VALUE 'RH', - lc_shape_footer_center TYPE string VALUE 'CF', - lc_shape_footer_left TYPE string VALUE 'LF', - lc_shape_footer_right TYPE string VALUE 'RF'. - - DATA: lv_content_left TYPE string, - lv_content_center TYPE string, - lv_content_right TYPE string, - lv_content_image_left TYPE string, - lv_content_image_center TYPE string, - lv_content_image_right TYPE string, - lv_value TYPE string, - ls_drawing_position TYPE zexcel_drawing_position. - - CLEAR ep_content. - - IF is_header-left_image IS NOT INITIAL. - lv_content_left = lc_shape. - REPLACE '{ID}' IN lv_content_left WITH lc_shape_header_left. - ls_drawing_position = is_header-left_image->get_position( ). - IF ls_drawing_position-size-height IS NOT INITIAL. - lv_value = ls_drawing_position-size-height. - ELSE. - lv_value = '100'. - ENDIF. - CONDENSE lv_value. - REPLACE '{HEIGHT}' IN lv_content_left WITH lv_value. - IF ls_drawing_position-size-width IS NOT INITIAL. - lv_value = ls_drawing_position-size-width. - ELSE. - lv_value = '100'. - ENDIF. - CONDENSE lv_value. - REPLACE '{WIDTH}' IN lv_content_left WITH lv_value. - lv_content_image_left = lc_shape_image. - lv_value = is_header-left_image->get_index( ). - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - REPLACE '{RID}' IN lv_content_image_left WITH lv_value. - ENDIF. - IF is_header-center_image IS NOT INITIAL. - lv_content_center = lc_shape. - REPLACE '{ID}' IN lv_content_center WITH lc_shape_header_center. - ls_drawing_position = is_header-center_image->get_position( ). - IF ls_drawing_position-size-height IS NOT INITIAL. - lv_value = ls_drawing_position-size-height. - ELSE. - lv_value = '100'. - ENDIF. - CONDENSE lv_value. - REPLACE '{HEIGHT}' IN lv_content_center WITH lv_value. - IF ls_drawing_position-size-width IS NOT INITIAL. - lv_value = ls_drawing_position-size-width. - ELSE. - lv_value = '100'. + CONSTANTS: lc_shape TYPE string VALUE '', + lc_shape_image TYPE string VALUE '', + lc_shape_header_center TYPE string VALUE 'CH', + lc_shape_header_left TYPE string VALUE 'LH', + lc_shape_header_right TYPE string VALUE 'RH', + lc_shape_footer_center TYPE string VALUE 'CF', + lc_shape_footer_left TYPE string VALUE 'LF', + lc_shape_footer_right TYPE string VALUE 'RF'. + + DATA: lv_content_left TYPE string, + lv_content_center TYPE string, + lv_content_right TYPE string, + lv_content_image_left TYPE string, + lv_content_image_center TYPE string, + lv_content_image_right TYPE string, + lv_value TYPE string, + ls_drawing_position TYPE zexcel_drawing_position. + + CLEAR ep_content. + + IF is_header-left_image IS NOT INITIAL. + lv_content_left = lc_shape. + REPLACE '{ID}' IN lv_content_left WITH lc_shape_header_left. + ls_drawing_position = is_header-left_image->get_position( ). + IF ls_drawing_position-size-height IS NOT INITIAL. + lv_value = ls_drawing_position-size-height. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{HEIGHT}' IN lv_content_left WITH lv_value. + IF ls_drawing_position-size-width IS NOT INITIAL. + lv_value = ls_drawing_position-size-width. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{WIDTH}' IN lv_content_left WITH lv_value. + lv_content_image_left = lc_shape_image. + lv_value = is_header-left_image->get_index( ). + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + REPLACE '{RID}' IN lv_content_image_left WITH lv_value. ENDIF. - CONDENSE lv_value. - REPLACE '{WIDTH}' IN lv_content_center WITH lv_value. - lv_content_image_center = lc_shape_image. - lv_value = is_header-center_image->get_index( ). - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - REPLACE '{RID}' IN lv_content_image_center WITH lv_value. - ENDIF. - IF is_header-right_image IS NOT INITIAL. - lv_content_right = lc_shape. - REPLACE '{ID}' IN lv_content_right WITH lc_shape_header_right. - ls_drawing_position = is_header-right_image->get_position( ). - IF ls_drawing_position-size-height IS NOT INITIAL. - lv_value = ls_drawing_position-size-height. - ELSE. - lv_value = '100'. + IF is_header-center_image IS NOT INITIAL. + lv_content_center = lc_shape. + REPLACE '{ID}' IN lv_content_center WITH lc_shape_header_center. + ls_drawing_position = is_header-center_image->get_position( ). + IF ls_drawing_position-size-height IS NOT INITIAL. + lv_value = ls_drawing_position-size-height. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{HEIGHT}' IN lv_content_center WITH lv_value. + IF ls_drawing_position-size-width IS NOT INITIAL. + lv_value = ls_drawing_position-size-width. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{WIDTH}' IN lv_content_center WITH lv_value. + lv_content_image_center = lc_shape_image. + lv_value = is_header-center_image->get_index( ). + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + REPLACE '{RID}' IN lv_content_image_center WITH lv_value. ENDIF. - CONDENSE lv_value. - REPLACE '{HEIGHT}' IN lv_content_right WITH lv_value. - IF ls_drawing_position-size-width IS NOT INITIAL. - lv_value = ls_drawing_position-size-width. - ELSE. - lv_value = '100'. + IF is_header-right_image IS NOT INITIAL. + lv_content_right = lc_shape. + REPLACE '{ID}' IN lv_content_right WITH lc_shape_header_right. + ls_drawing_position = is_header-right_image->get_position( ). + IF ls_drawing_position-size-height IS NOT INITIAL. + lv_value = ls_drawing_position-size-height. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{HEIGHT}' IN lv_content_right WITH lv_value. + IF ls_drawing_position-size-width IS NOT INITIAL. + lv_value = ls_drawing_position-size-width. + ELSE. + lv_value = '100'. + ENDIF. + CONDENSE lv_value. + REPLACE '{WIDTH}' IN lv_content_right WITH lv_value. + lv_content_image_right = lc_shape_image. + lv_value = is_header-right_image->get_index( ). + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + REPLACE '{RID}' IN lv_content_image_right WITH lv_value. ENDIF. - CONDENSE lv_value. - REPLACE '{WIDTH}' IN lv_content_right WITH lv_value. - lv_content_image_right = lc_shape_image. - lv_value = is_header-right_image->get_index( ). - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - REPLACE '{RID}' IN lv_content_image_right WITH lv_value. - ENDIF. - - CONCATENATE lv_content_left - lv_content_image_left - lv_content_center - lv_content_image_center - lv_content_right - lv_content_image_right - INTO ep_content. -ENDMETHOD. + CONCATENATE lv_content_left + lv_content_image_left + lv_content_center + lv_content_image_center + lv_content_right + lv_content_image_right + INTO ep_content. + + ENDMETHOD. -METHOD set_vml_string. + METHOD set_vml_string. - DATA: - ld_1 TYPE string, - ld_2 TYPE string, - ld_3 TYPE string, - ld_4 TYPE string, - ld_5 TYPE string, - ld_7 TYPE string, + DATA: + ld_1 TYPE string, + ld_2 TYPE string, + ld_3 TYPE string, + ld_4 TYPE string, + ld_5 TYPE string, + ld_7 TYPE string, lv_relation_id TYPE i, lo_iterator TYPE REF TO cl_object_collection_iterator, @@ -7787,138 +7787,138 @@ METHOD set_vml_string. * INIT_RESULT - CLEAR ep_content. + CLEAR ep_content. * BODY - ld_1 = ''. - ld_2 = ''. - ld_3 = ''. - ld_4 = ''. + ld_1 = ''. + ld_2 = ''. + ld_3 = ''. + ld_4 = ''. - CONCATENATE ld_1 - ld_2 - ld_3 - ld_4 - INTO ep_content. + CONCATENATE ld_1 + ld_2 + ld_3 + ld_4 + INTO ep_content. + + lv_relation_id = 0. + lo_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->get_next( ). - lv_relation_id = 0. - lo_iterator = me->excel->get_worksheets_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->get_next( ). + lo_worksheet->sheet_setup->get_header_footer( IMPORTING ep_odd_header = ls_odd_header + ep_odd_footer = ls_odd_footer + ep_even_header = ls_even_header + ep_even_footer = ls_even_footer ). + + ld_5 = me->set_vml_shape_header( ls_odd_header ). + CONCATENATE ep_content + ld_5 + INTO ep_content. + ld_5 = me->set_vml_shape_header( ls_even_header ). + CONCATENATE ep_content + ld_5 + INTO ep_content. + ld_5 = me->set_vml_shape_footer( ls_odd_footer ). + CONCATENATE ep_content + ld_5 + INTO ep_content. + ld_5 = me->set_vml_shape_footer( ls_even_footer ). + CONCATENATE ep_content + ld_5 + INTO ep_content. + ENDWHILE. - lo_worksheet->sheet_setup->get_header_footer( IMPORTING ep_odd_header = ls_odd_header - ep_odd_footer = ls_odd_footer - ep_even_header = ls_even_header - ep_even_footer = ls_even_footer ). + ld_7 = ''. - ld_5 = me->set_vml_shape_header( ls_odd_header ). - CONCATENATE ep_content - ld_5 - INTO ep_content. - ld_5 = me->set_vml_shape_header( ls_even_header ). - CONCATENATE ep_content - ld_5 - INTO ep_content. - ld_5 = me->set_vml_shape_footer( ls_odd_footer ). - CONCATENATE ep_content - ld_5 - INTO ep_content. - ld_5 = me->set_vml_shape_footer( ls_even_footer ). CONCATENATE ep_content - ld_5 + ld_7 INTO ep_content. - ENDWHILE. - ld_7 = ''. + ENDMETHOD. + + METHOD create_xml_document. + DATA lo_encoding TYPE REF TO if_ixml_encoding. + lo_encoding = me->ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + ro_document = me->ixml->create_document( ). + ro_document->set_encoding( lo_encoding ). + ro_document->set_standalone( abap_true ). + ENDMETHOD. + + METHOD render_xml_document. + DATA lo_streamfactory TYPE REF TO if_ixml_stream_factory. + DATA lo_ostream TYPE REF TO if_ixml_ostream. + DATA lo_renderer TYPE REF TO if_ixml_renderer. + DATA lv_string TYPE string. + + " So that the rendering of io_document to a XML text in UTF-8 XSTRING works for all Unicode characters (Chinese, + " emoticons, etc.) the method CREATE_OSTREAM_CSTRING must be used instead of CREATE_OSTREAM_XSTRING as explained + " in note 2922674 below (original there: https://launchpad.support.sap.com/#/notes/2922674), and then the STRING + " variable can be converted into UTF-8. + " + " Excerpt from Note 2922674 - Support for Unicode Characters U+10000 to U+10FFFF in the iXML kernel library / ABAP package SIXML. + " + " You are running a unicode system with SAP Netweaver / SAP_BASIS release equal or lower than 7.51. + " + " Some functions in the iXML kernel library / ABAP package SIXML does not fully or incorrectly support unicode + " characters of the supplementary planes. This is caused by using UCS-2 in codepage conversion functions. + " Therefore, when reading from iXML input steams, the characters from the supplementary planes, that are not + " supported by UCS-2, might be replaced by the character #. When writing to iXML output streams, UTF-16 surrogate + " pairs, representing characters from the supplementary planes, might be incorrectly encoded in UTF-8. + " + " The characters incorrectly encoded in UTF-8, might be accepted as input for the iXML parser or external parsers, + " but might also be rejected. + " + " Support for unicode characters of the supplementary planes was introduced for SAP_BASIS 7.51 or lower with note + " 2220720, but later withdrawn with note 2346627 for functional issues. + " + " Characters of the supplementary planes are supported with ABAP Platform 1709 / SAP_BASIS 7.52 and higher. + " + " Please note, that the iXML runtime behaves like the ABAP runtime concerning the handling of unicode characters of + " the supplementary planes. In iXML and ABAP, these characters have length 2 (as returned by ABAP build-in function + " STRLEN), and string processing functions like SUBSTRING might split these characters into 2 invalid characters + " with length 1. These invalid characters are commonly referred to as broken surrogate pairs. + " + " A workaround for the incorrect UTF-8 encoding in SAP_BASIS 7.51 or lower is to render the document to an ABAP + " variable with type STRING using a output stream created with factory method IF_IXML_STREAM_FACTORY=>CREATE_OSTREAM_CSTRING + " and then to convert the STRING variable to UTF-8 using method CL_ABAP_CODEPAGE=>CONVERT_TO. + + " 1) RENDER TO XML STRING + lo_streamfactory = me->ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_cstring( string = lv_string ). + lo_renderer = me->ixml->create_renderer( ostream = lo_ostream document = io_document ). + lo_renderer->render( ). + + " 2) CONVERT IT TO UTF-8 + "----------------- + " The beginning of the XML string has these 57 characters: + " X + " (where "X" is the special character corresponding to the utf-16 BOM, hexadecimal FFFE or FEFF, + " but there's no "X" in non-Unicode SAP systems) + " The encoding must be removed otherwise Excel would fail to decode correctly the UTF-8 XML. + " For a better performance, it's assumed that "encoding" is in the first 100 characters. + IF strlen( lv_string ) < 100. + REPLACE REGEX 'encoding="[^"]+"' IN lv_string WITH ``. + ELSE. + REPLACE REGEX 'encoding="[^"]+"' IN SECTION LENGTH 100 OF lv_string WITH ``. + ENDIF. + " Convert XML text to UTF-8 (NB: if 2 first bytes are the UTF-16 BOM, they are converted into 3 bytes of UTF-8 BOM) + ep_content = cl_abap_codepage=>convert_to( source = lv_string ). + " Add the UTF-8 Byte Order Mark if missing (NB: that serves as substitute of "encoding") + IF xstrlen( ep_content ) >= 3 AND ep_content(3) <> cl_abap_char_utilities=>byte_order_mark_utf8. + CONCATENATE cl_abap_char_utilities=>byte_order_mark_utf8 ep_content INTO ep_content IN BYTE MODE. + ENDIF. + + ENDMETHOD. - CONCATENATE ep_content - ld_7 - INTO ep_content. -ENDMETHOD. - -METHOD create_xml_document. - DATA lo_encoding TYPE REF TO if_ixml_encoding. - lo_encoding = me->ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian - character_set = 'utf-8' ). - ro_document = me->ixml->create_document( ). - ro_document->set_encoding( lo_encoding ). - ro_document->set_standalone( abap_true ). -ENDMETHOD. - -METHOD render_xml_document. - DATA lo_streamfactory TYPE REF TO if_ixml_stream_factory. - DATA lo_ostream TYPE REF TO if_ixml_ostream. - DATA lo_renderer TYPE REF TO if_ixml_renderer. - DATA lv_string TYPE string. - - " So that the rendering of io_document to a XML text in UTF-8 XSTRING works for all Unicode characters (Chinese, - " emoticons, etc.) the method CREATE_OSTREAM_CSTRING must be used instead of CREATE_OSTREAM_XSTRING as explained - " in note 2922674 below (original there: https://launchpad.support.sap.com/#/notes/2922674), and then the STRING - " variable can be converted into UTF-8. - " - " Excerpt from Note 2922674 - Support for Unicode Characters U+10000 to U+10FFFF in the iXML kernel library / ABAP package SIXML. - " - " You are running a unicode system with SAP Netweaver / SAP_BASIS release equal or lower than 7.51. - " - " Some functions in the iXML kernel library / ABAP package SIXML does not fully or incorrectly support unicode - " characters of the supplementary planes. This is caused by using UCS-2 in codepage conversion functions. - " Therefore, when reading from iXML input steams, the characters from the supplementary planes, that are not - " supported by UCS-2, might be replaced by the character #. When writing to iXML output streams, UTF-16 surrogate - " pairs, representing characters from the supplementary planes, might be incorrectly encoded in UTF-8. - " - " The characters incorrectly encoded in UTF-8, might be accepted as input for the iXML parser or external parsers, - " but might also be rejected. - " - " Support for unicode characters of the supplementary planes was introduced for SAP_BASIS 7.51 or lower with note - " 2220720, but later withdrawn with note 2346627 for functional issues. - " - " Characters of the supplementary planes are supported with ABAP Platform 1709 / SAP_BASIS 7.52 and higher. - " - " Please note, that the iXML runtime behaves like the ABAP runtime concerning the handling of unicode characters of - " the supplementary planes. In iXML and ABAP, these characters have length 2 (as returned by ABAP build-in function - " STRLEN), and string processing functions like SUBSTRING might split these characters into 2 invalid characters - " with length 1. These invalid characters are commonly referred to as broken surrogate pairs. - " - " A workaround for the incorrect UTF-8 encoding in SAP_BASIS 7.51 or lower is to render the document to an ABAP - " variable with type STRING using a output stream created with factory method IF_IXML_STREAM_FACTORY=>CREATE_OSTREAM_CSTRING - " and then to convert the STRING variable to UTF-8 using method CL_ABAP_CODEPAGE=>CONVERT_TO. - - " 1) RENDER TO XML STRING - lo_streamfactory = me->ixml->create_stream_factory( ). - lo_ostream = lo_streamfactory->create_ostream_cstring( string = lv_string ). - lo_renderer = me->ixml->create_renderer( ostream = lo_ostream document = io_document ). - lo_renderer->render( ). - - " 2) CONVERT IT TO UTF-8 - "----------------- - " The beginning of the XML string has these 57 characters: - " X - " (where "X" is the special character corresponding to the utf-16 BOM, hexadecimal FFFE or FEFF, - " but there's no "X" in non-Unicode SAP systems) - " The encoding must be removed otherwise Excel would fail to decode correctly the UTF-8 XML. - " For a better performance, it's assumed that "encoding" is in the first 100 characters. - IF strlen( lv_string ) < 100. - REPLACE REGEX 'encoding="[^"]+"' IN lv_string WITH ``. - ELSE. - REPLACE REGEX 'encoding="[^"]+"' IN SECTION LENGTH 100 OF lv_string WITH ``. - ENDIF. - " Convert XML text to UTF-8 (NB: if 2 first bytes are the UTF-16 BOM, they are converted into 3 bytes of UTF-8 BOM) - ep_content = cl_abap_codepage=>convert_to( source = lv_string ). - " Add the UTF-8 Byte Order Mark if missing (NB: that serves as substitute of "encoding") - IF xstrlen( ep_content ) >= 3 AND ep_content(3) <> cl_abap_char_utilities=>byte_order_mark_utf8. - CONCATENATE cl_abap_char_utilities=>byte_order_mark_utf8 ep_content INTO ep_content IN BYTE MODE. - ENDIF. - -ENDMETHOD. - - -method ZIF_EXCEL_WRITER~WRITE_FILE. - me->excel = io_excel. - - ep_file = me->create( ). - endmethod. + METHOD zif_excel_writer~write_file. + me->excel = io_excel. + + ep_file = me->create( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_writer_csv.clas.abap b/src/zcl_excel_writer_csv.clas.abap index 9d2c858d5..5defa9231 100644 --- a/src/zcl_excel_writer_csv.clas.abap +++ b/src/zcl_excel_writer_csv.clas.abap @@ -1,312 +1,310 @@ -class ZCL_EXCEL_WRITER_CSV definition - public - final - create public . +CLASS zcl_excel_writer_csv DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . *"* public components of class ZCL_EXCEL_WRITER_CSV *"* do not include other source files here!!! -public section. - - interfaces ZIF_EXCEL_WRITER . - - class-methods SET_DELIMITER - importing - value(IP_VALUE) type c default ';' . - class-methods SET_ENCLOSURE - importing - value(IP_VALUE) type c default '"' . - class-methods SET_ENDOFLINE - importing - value(IP_VALUE) type ANY default CL_ABAP_CHAR_UTILITIES=>CR_LF . - class-methods SET_ACTIVE_SHEET_INDEX - importing - !I_ACTIVE_WORKSHEET type ZEXCEL_ACTIVE_WORKSHEET . - class-methods SET_ACTIVE_SHEET_INDEX_BY_NAME - importing - !I_WORKSHEET_NAME type ZEXCEL_WORKSHEETS_NAME . + PUBLIC SECTION. + + INTERFACES zif_excel_writer . + + CLASS-METHODS set_delimiter + IMPORTING + VALUE(ip_value) TYPE c DEFAULT ';' . + CLASS-METHODS set_enclosure + IMPORTING + VALUE(ip_value) TYPE c DEFAULT '"' . + CLASS-METHODS set_endofline + IMPORTING + VALUE(ip_value) TYPE any DEFAULT cl_abap_char_utilities=>cr_lf . + CLASS-METHODS set_active_sheet_index + IMPORTING + !i_active_worksheet TYPE zexcel_active_worksheet . + CLASS-METHODS set_active_sheet_index_by_name + IMPORTING + !i_worksheet_name TYPE zexcel_worksheets_name . *"* protected components of class ZCL_EXCEL_WRITER_2007 *"* do not include other source files here!!! -protected section. + PROTECTED SECTION. *"* private components of class ZCL_EXCEL_WRITER_CSV *"* do not include other source files here!!! -private section. - - data EXCEL type ref to ZCL_EXCEL . - class-data DELIMITER type c value ';'. "#EC NOTEXT . . . . . . . . . " . - class-data ENCLOSURE type c value '"'. "#EC NOTEXT . . . . . . . . . " . - class-data EOL type c LENGTH 2 value CL_ABAP_CHAR_UTILITIES=>CR_LF. "#EC NOTEXT . . . . . . . . . " . - class-data WORKSHEET_NAME type ZEXCEL_WORKSHEETS_NAME . - class-data WORKSHEET_INDEX type ZEXCEL_ACTIVE_WORKSHEET . - - methods CREATE - returning - value(EP_EXCEL) type XSTRING . - methods CREATE_CSV - returning - value(EP_CONTENT) type XSTRING . + PRIVATE SECTION. + + DATA excel TYPE REF TO zcl_excel . + CLASS-DATA delimiter TYPE c VALUE ';'. "#EC NOTEXT . . . . . . . . . " . + CLASS-DATA enclosure TYPE c VALUE '"'. "#EC NOTEXT . . . . . . . . . " . + CLASS-DATA eol TYPE c LENGTH 2 VALUE cl_abap_char_utilities=>cr_lf. "#EC NOTEXT . . . . . . . . . " . + CLASS-DATA worksheet_name TYPE zexcel_worksheets_name . + CLASS-DATA worksheet_index TYPE zexcel_active_worksheet . + + METHODS create + RETURNING + VALUE(ep_excel) TYPE xstring . + METHODS create_csv + RETURNING + VALUE(ep_content) TYPE xstring . ENDCLASS. -CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. +CLASS zcl_excel_writer_csv IMPLEMENTATION. -method CREATE. + METHOD create. * .csv format with ; delimiter - ep_excel = me->CREATE_CSV( ). + ep_excel = me->create_csv( ). - endmethod. + ENDMETHOD. -method CREATE_CSV. + METHOD create_csv. - TYPES: BEGIN OF lty_format, - cmpname TYPE SEOCMPNAME, - attvalue TYPE SEOVALUE, - END OF lty_format. - DATA: lt_format TYPE STANDARD TABLE OF lty_format, - ls_format LIKE LINE OF lt_format, - lv_date TYPE DATS, - lv_tmp TYPE string, - lv_time TYPE C LENGTH 8. + TYPES: BEGIN OF lty_format, + cmpname TYPE seocmpname, + attvalue TYPE seovalue, + END OF lty_format. + DATA: lt_format TYPE STANDARD TABLE OF lty_format, + ls_format LIKE LINE OF lt_format, + lv_date TYPE dats, + lv_tmp TYPE string, + lv_time TYPE c LENGTH 8. - DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_worksheet TYPE REF TO zcl_excel_worksheet. + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. - DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, - lv_row TYPE sytabix, - lv_col TYPE sytabix, - lv_string TYPE string, - lc_value TYPE string, - lv_attrname TYPE SEOCMPNAME. + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, + lv_row TYPE sytabix, + lv_col TYPE sytabix, + lv_string TYPE string, + lc_value TYPE string, + lv_attrname TYPE seocmpname. - DATA: ls_numfmt TYPE zexcel_s_style_numfmt, - lo_style TYPE REF TO zcl_excel_style. + DATA: ls_numfmt TYPE zexcel_s_style_numfmt, + lo_style TYPE REF TO zcl_excel_style. - FIELD-SYMBOLS: TYPE zexcel_s_cell_data. + FIELD-SYMBOLS: TYPE zexcel_s_cell_data. * --- Retrieve supported cell format - REFRESH lt_format. - SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_format - FROM seocompodf - WHERE clsname = 'ZCL_EXCEL_STYLE_NUMBER_FORMAT' - AND typtype = 1 - AND type = 'ZEXCEL_NUMBER_FORMAT'. + REFRESH lt_format. + SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_format + FROM seocompodf + WHERE clsname = 'ZCL_EXCEL_STYLE_NUMBER_FORMAT' + AND typtype = 1 + AND type = 'ZEXCEL_NUMBER_FORMAT'. * --- Retrieve SAP date format - CLEAR ls_format. - SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' - AND ddlanguage = sy-langu. - ls_format-cmpname = 'DATE'. - CONDENSE ls_format-attvalue. - CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. - APPEND ls_format TO lt_format. - ENDSELECT. + CLEAR ls_format. + SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' + AND ddlanguage = sy-langu. + ls_format-cmpname = 'DATE'. + CONDENSE ls_format-attvalue. + CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. + APPEND ls_format TO lt_format. + ENDSELECT. - LOOP AT lt_format INTO ls_format. - TRANSLATE ls_format-attvalue TO UPPER CASE. - MODIFY lt_format FROM ls_format. - ENDLOOP. + LOOP AT lt_format INTO ls_format. + TRANSLATE ls_format-attvalue TO UPPER CASE. + MODIFY lt_format FROM ls_format. + ENDLOOP. * STEP 1: Collect strings from the first worksheet - lo_iterator = excel->get_worksheets_iterator( ). - data: current_worksheet_title type ZEXCEL_SHEET_TITLE. - - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->get_next( ). - - IF worksheet_name IS NOT INITIAL. - current_worksheet_title = lo_worksheet->get_title( ). - CHECK current_worksheet_title = worksheet_name. - ELSE. - IF worksheet_index IS INITIAL. - worksheet_index = 1. + lo_iterator = excel->get_worksheets_iterator( ). + DATA: current_worksheet_title TYPE zexcel_sheet_title. + + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->get_next( ). + + IF worksheet_name IS NOT INITIAL. + current_worksheet_title = lo_worksheet->get_title( ). + CHECK current_worksheet_title = worksheet_name. + ELSE. + IF worksheet_index IS INITIAL. + worksheet_index = 1. + ENDIF. + CHECK worksheet_index = sy-index. ENDIF. - CHECK worksheet_index = sy-index. - ENDIF. - APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. - EXIT. " Take first worksheet only - ENDWHILE. + APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. + EXIT. " Take first worksheet only + ENDWHILE. - DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content + DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content - SORT lt_cell_data BY cell_row - cell_column. - lv_row = 1. - lv_col = 1. - CLEAR lv_string. - LOOP AT lt_cell_data ASSIGNING . + SORT lt_cell_data BY cell_row + cell_column. + lv_row = 1. + lv_col = 1. + CLEAR lv_string. + LOOP AT lt_cell_data ASSIGNING . * --- Retrieve Cell Style format and data type - CLEAR ls_numfmt. - IF -data_type IS INITIAL AND -cell_style IS NOT INITIAL. - lo_iterator = excel->get_styles_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_style ?= lo_iterator->get_next( ). - CHECK lo_style->get_guid( ) = -cell_style. - ls_numfmt = lo_style->number_format->get_structure( ). - EXIT. - ENDWHILE. - ENDIF. - IF -data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. - " determine data-type - CLEAR lv_attrname. - CONCATENATE '''' ls_numfmt-NUMFMT '''' INTO ls_numfmt-NUMFMT. - TRANSLATE ls_numfmt-numfmt TO UPPER CASE. - READ TABLE lt_format INTO ls_format WITH KEY attvalue = ls_numfmt-NUMFMT. - IF sy-subrc = 0. - lv_attrname = ls_format-cmpname. + CLEAR ls_numfmt. + IF -data_type IS INITIAL AND -cell_style IS NOT INITIAL. + lo_iterator = excel->get_styles_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_style ?= lo_iterator->get_next( ). + CHECK lo_style->get_guid( ) = -cell_style. + ls_numfmt = lo_style->number_format->get_structure( ). + EXIT. + ENDWHILE. ENDIF. - - IF lv_attrname IS NOT INITIAL. - FIND FIRST OCCURRENCE OF 'DATETIME' IN lv_attrname. + IF -data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. + " determine data-type + CLEAR lv_attrname. + CONCATENATE '''' ls_numfmt-numfmt '''' INTO ls_numfmt-numfmt. + TRANSLATE ls_numfmt-numfmt TO UPPER CASE. + READ TABLE lt_format INTO ls_format WITH KEY attvalue = ls_numfmt-numfmt. IF sy-subrc = 0. - -data_type = 'd'. - ELSE. - FIND FIRST OCCURRENCE OF 'TIME' IN lv_attrname. + lv_attrname = ls_format-cmpname. + ENDIF. + + IF lv_attrname IS NOT INITIAL. + FIND FIRST OCCURRENCE OF 'DATETIME' IN lv_attrname. IF sy-subrc = 0. - -data_type = 't'. + -data_type = 'd'. ELSE. - FIND FIRST OCCURRENCE OF 'DATE' IN lv_attrname. + FIND FIRST OCCURRENCE OF 'TIME' IN lv_attrname. IF sy-subrc = 0. - -data_type = 'd'. + -data_type = 't'. ELSE. - FIND FIRST OCCURRENCE OF 'CURRENCY' IN lv_attrname. + FIND FIRST OCCURRENCE OF 'DATE' IN lv_attrname. IF sy-subrc = 0. - -data_type = 'n'. + -data_type = 'd'. ELSE. - FIND FIRST OCCURRENCE OF 'NUMBER' IN lv_attrname. + FIND FIRST OCCURRENCE OF 'CURRENCY' IN lv_attrname. IF sy-subrc = 0. -data_type = 'n'. ELSE. - FIND FIRST OCCURRENCE OF 'PERCENTAGE' IN lv_attrname. + FIND FIRST OCCURRENCE OF 'NUMBER' IN lv_attrname. IF sy-subrc = 0. -data_type = 'n'. - ENDIF. " Purcentage - ENDIF. " Number - ENDIF. " Currency - ENDIF. " Date - ENDIF. " TIME - ENDIF. " DATETIME - ENDIF. " lv_attrname IS NOT INITIAL. - ENDIF. " -data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. + ELSE. + FIND FIRST OCCURRENCE OF 'PERCENTAGE' IN lv_attrname. + IF sy-subrc = 0. + -data_type = 'n'. + ENDIF. " Purcentage + ENDIF. " Number + ENDIF. " Currency + ENDIF. " Date + ENDIF. " TIME + ENDIF. " DATETIME + ENDIF. " lv_attrname IS NOT INITIAL. + ENDIF. " -data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. * --- Add empty rows - WHILE lv_row < -cell_row. + WHILE lv_row < -cell_row. * CONCATENATE lv_string cl_abap_char_utilities=>newline INTO lv_string. * CONCATENATE lv_string cl_abap_char_utilities=>cr_lf INTO lv_string. - CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. - lv_row = lv_row + 1. - lv_col = 1. - ENDWHILE. + CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. + lv_row = lv_row + 1. + lv_col = 1. + ENDWHILE. * --- Add empty columns - WHILE lv_col < -cell_column. + WHILE lv_col < -cell_column. * CONCATENATE lv_string ';' INTO lv_string. - CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. - lv_col = lv_col + 1. - ENDWHILE. + CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. + lv_col = lv_col + 1. + ENDWHILE. * ----- Use format to determine the data type and display format. - CASE -data_type. + CASE -data_type. * WHEN 'n' OR 'N'. * lc_value = zcl_excel_common=>excel_number_to_string( ip_value = -cell_value ). - WHEN 'd' OR 'D'. - lc_value = zcl_excel_common=>excel_string_to_date( ip_value = -cell_value ). - TRY. - lv_date = lc_value. - CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL' - EXPORTING - DATE_INTERNAL = lv_date - IMPORTING - DATE_EXTERNAL = lv_tmp - EXCEPTIONS - DATE_INTERNAL_IS_INVALID = 1 - OTHERS = 2 - . - IF SY-SUBRC = 0. - lc_value = lv_tmp. - ENDIF. - - CATCH CX_SY_CONVERSION_NO_NUMBER. - - ENDTRY. - - WHEN 't' OR 'T'. - lc_value = zcl_excel_common=>excel_string_to_time( ip_value = -cell_value ). - write lc_value to lv_time USING EDIT MASK '__:__:__'. - lc_value = lv_time. - WHEN OTHERS. - lc_value = -cell_value. - - ENDCASE. + WHEN 'd' OR 'D'. + lc_value = zcl_excel_common=>excel_string_to_date( ip_value = -cell_value ). + TRY. + lv_date = lc_value. + CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL' + EXPORTING + date_internal = lv_date + IMPORTING + date_external = lv_tmp + EXCEPTIONS + date_internal_is_invalid = 1 + OTHERS = 2. + IF sy-subrc = 0. + lc_value = lv_tmp. + ENDIF. + + CATCH cx_sy_conversion_no_number. + + ENDTRY. + + WHEN 't' OR 'T'. + lc_value = zcl_excel_common=>excel_string_to_time( ip_value = -cell_value ). + WRITE lc_value TO lv_time USING EDIT MASK '__:__:__'. + lc_value = lv_time. + WHEN OTHERS. + lc_value = -cell_value. + + ENDCASE. * REPLACE ALL OCCURRENCES OF '"' in lc_value with '""'. - CONCATENATE zcl_excel_writer_csv=>enclosure zcl_excel_writer_csv=>enclosure INTO lv_tmp. - CONDENSE lv_tmp. - REPLACE ALL OCCURRENCES OF zcl_excel_writer_csv=>enclosure in lc_value with lv_tmp. + CONCATENATE zcl_excel_writer_csv=>enclosure zcl_excel_writer_csv=>enclosure INTO lv_tmp. + CONDENSE lv_tmp. + REPLACE ALL OCCURRENCES OF zcl_excel_writer_csv=>enclosure IN lc_value WITH lv_tmp. * FIND FIRST OCCURRENCE OF ';' IN lc_value. - FIND FIRST OCCURRENCE OF zcl_excel_writer_csv=>delimiter IN lc_value. - IF sy-subrc = 0. - CONCATENATE lv_string zcl_excel_writer_csv=>enclosure lc_value zcl_excel_writer_csv=>enclosure INTO lv_string. - ELSE. - CONCATENATE lv_string lc_value INTO lv_string. - ENDIF. + FIND FIRST OCCURRENCE OF zcl_excel_writer_csv=>delimiter IN lc_value. + IF sy-subrc = 0. + CONCATENATE lv_string zcl_excel_writer_csv=>enclosure lc_value zcl_excel_writer_csv=>enclosure INTO lv_string. + ELSE. + CONCATENATE lv_string lc_value INTO lv_string. + ENDIF. - ENDLOOP. " AT lt_cell_data + ENDLOOP. " AT lt_cell_data - CLEAR ep_content. + CLEAR ep_content. - CALL FUNCTION 'SCMS_STRING_TO_XSTRING' - EXPORTING - TEXT = lv_string -* MIMETYPE = ' ' -* ENCODING = - IMPORTING - BUFFER = ep_content - EXCEPTIONS - FAILED = 1 - OTHERS = 2 - . + CALL FUNCTION 'SCMS_STRING_TO_XSTRING' + EXPORTING + text = lv_string +* MIMETYPE = ' ' +* ENCODING = + IMPORTING + buffer = ep_content + EXCEPTIONS + failed = 1 + OTHERS = 2. - endmethod. + ENDMETHOD. -method SET_ACTIVE_SHEET_INDEX. - CLEAR WORKSHEET_NAME. - WORKSHEET_INDEX = i_active_worksheet. - endmethod. + METHOD set_active_sheet_index. + CLEAR worksheet_name. + worksheet_index = i_active_worksheet. + ENDMETHOD. -method SET_ACTIVE_SHEET_INDEX_BY_NAME. - CLEAR WORKSHEET_INDEX. - WORKSHEET_NAME = i_worksheet_name. - endmethod. + METHOD set_active_sheet_index_by_name. + CLEAR worksheet_index. + worksheet_name = i_worksheet_name. + ENDMETHOD. -method SET_DELIMITER. - delimiter = ip_value. - endmethod. + METHOD set_delimiter. + delimiter = ip_value. + ENDMETHOD. -method SET_ENCLOSURE. - zcl_excel_writer_csv=>enclosure = ip_value. - endmethod. + METHOD set_enclosure. + zcl_excel_writer_csv=>enclosure = ip_value. + ENDMETHOD. -method SET_ENDOFLINE. - zcl_excel_writer_csv=>eol = ip_value. - endmethod. + METHOD set_endofline. + zcl_excel_writer_csv=>eol = ip_value. + ENDMETHOD. -method ZIF_EXCEL_WRITER~WRITE_FILE. - me->excel = io_excel. - ep_file = me->create( ). - endmethod. + METHOD zif_excel_writer~write_file. + me->excel = io_excel. + ep_file = me->create( ). + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_writer_huge_file.clas.abap b/src/zcl_excel_writer_huge_file.clas.abap index 854fbeb6b..2c17a3192 100644 --- a/src/zcl_excel_writer_huge_file.clas.abap +++ b/src/zcl_excel_writer_huge_file.clas.abap @@ -1,127 +1,127 @@ -class ZCL_EXCEL_WRITER_HUGE_FILE definition - public - inheriting from ZCL_EXCEL_WRITER_2007 - final - create public . - -public section. - - types: - BEGIN OF ty_cell, - name TYPE c LENGTH 10, "AAA1234567" - style TYPE i, - type TYPE c LENGTH 9, +CLASS zcl_excel_writer_huge_file DEFINITION + PUBLIC + INHERITING FROM zcl_excel_writer_2007 + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + TYPES: + BEGIN OF ty_cell, + name TYPE c LENGTH 10, "AAA1234567" + style TYPE i, + type TYPE c LENGTH 9, formula TYPE string, - value TYPE string, + value TYPE string, END OF ty_cell . - data: - cells TYPE STANDARD TABLE OF ty_cell . + DATA: + cells TYPE STANDARD TABLE OF ty_cell . - methods GET_CELLS - importing - !I_ROW type I - !I_INDEX type I . -protected section. + METHODS get_cells + IMPORTING + !i_row TYPE i + !i_index TYPE i . + PROTECTED SECTION. - methods CREATE_XL_SHAREDSTRINGS - redefinition . - methods CREATE_XL_SHEET - redefinition . -private section. + METHODS create_xl_sharedstrings + REDEFINITION . + METHODS create_xl_sheet + REDEFINITION . + PRIVATE SECTION. - data WORKSHEET type ref to ZCL_EXCEL_WORKSHEET . + DATA worksheet TYPE REF TO zcl_excel_worksheet . ENDCLASS. -CLASS ZCL_EXCEL_WRITER_HUGE_FILE IMPLEMENTATION. +CLASS zcl_excel_writer_huge_file IMPLEMENTATION. -METHOD create_xl_sharedstrings. + METHOD create_xl_sharedstrings. * * Redefinition using simple transformation instead of CL_IXML * ** Constant node name - TYPES: - BEGIN OF ts_root, - count TYPE string, - unique_count TYPE string, - END OF ts_root. + TYPES: + BEGIN OF ts_root, + count TYPE string, + unique_count TYPE string, + END OF ts_root. - DATA: - lv_last_allowed_char TYPE char1, - lv_invalid TYPE string. + DATA: + lv_last_allowed_char TYPE char1, + lv_invalid TYPE string. - DATA: - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_worksheet TYPE REF TO zcl_excel_worksheet. + DATA: + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. - DATA: - ls_root TYPE ts_root, - lt_cell_data TYPE zexcel_t_cell_data_unsorted, - ls_shared_string TYPE zexcel_s_shared_string, - lv_sytabix TYPE sytabix. + DATA: + ls_root TYPE ts_root, + lt_cell_data TYPE zexcel_t_cell_data_unsorted, + ls_shared_string TYPE zexcel_s_shared_string, + lv_sytabix TYPE sytabix. - FIELD-SYMBOLS: - TYPE zexcel_s_cell_data. + FIELD-SYMBOLS: + TYPE zexcel_s_cell_data. ********************************************************************** * STEP 0: Build Regex for invalid characters - CASE cl_abap_char_utilities=>charsize. - WHEN 1.lv_last_allowed_char = cl_abap_conv_in_ce=>uccpi( 255 ). " FF in non-Unicode - WHEN 2.lv_last_allowed_char = cl_abap_conv_in_ce=>uccpi( 65533 )." FFFD in Unicode - ENDCASE. - CONCATENATE '[^\n\t\r -' lv_last_allowed_char ']' INTO lv_invalid. + CASE cl_abap_char_utilities=>charsize. + WHEN 1.lv_last_allowed_char = cl_abap_conv_in_ce=>uccpi( 255 ). " FF in non-Unicode + WHEN 2.lv_last_allowed_char = cl_abap_conv_in_ce=>uccpi( 65533 )." FFFD in Unicode + ENDCASE. + CONCATENATE '[^\n\t\r -' lv_last_allowed_char ']' INTO lv_invalid. ********************************************************************** * STEP 1: Collect strings from each worksheet - lo_iterator = excel->get_worksheets_iterator( ). + lo_iterator = excel->get_worksheets_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_worksheet ?= lo_iterator->get_next( ). - APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. - ENDWHILE. + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->get_next( ). + APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. + ENDWHILE. - DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL " delete formula content - OR data_type NE 's'. " MvC: Only shared strings + DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL " delete formula content + OR data_type NE 's'. " MvC: Only shared strings - ls_root-count = lines( lt_cell_data ). - CONDENSE ls_root-count. + ls_root-count = lines( lt_cell_data ). + CONDENSE ls_root-count. - SORT lt_cell_data BY cell_value data_type. - DELETE ADJACENT DUPLICATES FROM lt_cell_data COMPARING cell_value data_type. + SORT lt_cell_data BY cell_value data_type. + DELETE ADJACENT DUPLICATES FROM lt_cell_data COMPARING cell_value data_type. - ls_root-unique_count = lines( lt_cell_data ). - CONDENSE ls_root-unique_count. + ls_root-unique_count = lines( lt_cell_data ). + CONDENSE ls_root-unique_count. - LOOP AT lt_cell_data ASSIGNING . + LOOP AT lt_cell_data ASSIGNING . - lv_sytabix = sy-tabix - 1. - MOVE lv_sytabix TO ls_shared_string-string_no. - MOVE -cell_value TO ls_shared_string-string_value. - REPLACE ALL OCCURRENCES OF REGEX lv_invalid - IN ls_shared_string-string_value WITH ` `. - APPEND ls_shared_string TO shared_strings. + lv_sytabix = sy-tabix - 1. + MOVE lv_sytabix TO ls_shared_string-string_no. + MOVE -cell_value TO ls_shared_string-string_value. + REPLACE ALL OCCURRENCES OF REGEX lv_invalid + IN ls_shared_string-string_value WITH ` `. + APPEND ls_shared_string TO shared_strings. - ENDLOOP. + ENDLOOP. ********************************************************************** * STEP 2: Create XML - CALL TRANSFORMATION zexcel_tr_shared_strings - SOURCE root = ls_root - shared_strings = shared_strings - OPTIONS xml_header = 'full' - RESULT XML ep_content. + CALL TRANSFORMATION zexcel_tr_shared_strings + SOURCE root = ls_root + shared_strings = shared_strings + OPTIONS xml_header = 'full' + RESULT XML ep_content. -ENDMETHOD. + ENDMETHOD. -METHOD create_xl_sheet. + METHOD create_xl_sheet. * * Build Sheet#.xml with Simple Transformation ZEXCEL_TR_SHEET * @@ -131,332 +131,332 @@ METHOD create_xl_sheet. * * Bug reports to marcus.voncube AT deutschebahn.com * - TYPES: - lty_bool TYPE c LENGTH 5. - - CONSTANTS: - lc_true TYPE lty_bool VALUE 'true', - lc_zero TYPE c LENGTH 1 VALUE '0', - lc_one TYPE c LENGTH 1 VALUE '1', - lc_default_col_width TYPE float VALUE '9.10'. - - TYPES: - BEGIN OF lty_column, - min TYPE i, - max TYPE i, - width TYPE float, - hidden TYPE lty_bool, - customwidth TYPE lty_bool, - bestfit TYPE lty_bool, - collapsed TYPE lty_bool, - outlinelevel TYPE i, - style TYPE i, - END OF lty_column, - - BEGIN OF lty_row, - row TYPE i, - index TYPE i, - spans TYPE c LENGTH 11, "12345:12345" - hidden TYPE lty_bool, - customheight TYPE lty_bool, - height TYPE float, - collapsed TYPE lty_bool, - outlinelevel TYPE i, - customformat TYPE lty_bool, - style TYPE i, - END OF lty_row, - - BEGIN OF lty_mergecell, - ref TYPE c LENGTH 21, "AAA1234567:BBB1234567" - END OF lty_mergecell, - - BEGIN OF lty_hyperlink, - ref TYPE string, - location TYPE string, - r_id TYPE string, - END OF lty_hyperlink, - - BEGIN OF lty_table, - r_id TYPE string, - END OF lty_table, - - BEGIN OF lty_table_area, - left TYPE i, - right TYPE i, - top TYPE i, - bottom TYPE i, - END OF lty_table_area, - - BEGIN OF ty_missing_columns, - first_column TYPE zexcel_cell_column, - last_column TYPE zexcel_cell_column, - END OF ty_missing_columns. + TYPES: + lty_bool TYPE c LENGTH 5. + + CONSTANTS: + lc_true TYPE lty_bool VALUE 'true', + lc_zero TYPE c LENGTH 1 VALUE '0', + lc_one TYPE c LENGTH 1 VALUE '1', + lc_default_col_width TYPE float VALUE '9.10'. + + TYPES: + BEGIN OF lty_column, + min TYPE i, + max TYPE i, + width TYPE float, + hidden TYPE lty_bool, + customwidth TYPE lty_bool, + bestfit TYPE lty_bool, + collapsed TYPE lty_bool, + outlinelevel TYPE i, + style TYPE i, + END OF lty_column, + + BEGIN OF lty_row, + row TYPE i, + index TYPE i, + spans TYPE c LENGTH 11, "12345:12345" + hidden TYPE lty_bool, + customheight TYPE lty_bool, + height TYPE float, + collapsed TYPE lty_bool, + outlinelevel TYPE i, + customformat TYPE lty_bool, + style TYPE i, + END OF lty_row, + + BEGIN OF lty_mergecell, + ref TYPE c LENGTH 21, "AAA1234567:BBB1234567" + END OF lty_mergecell, + + BEGIN OF lty_hyperlink, + ref TYPE string, + location TYPE string, + r_id TYPE string, + END OF lty_hyperlink, + + BEGIN OF lty_table, + r_id TYPE string, + END OF lty_table, + + BEGIN OF lty_table_area, + left TYPE i, + right TYPE i, + top TYPE i, + bottom TYPE i, + END OF lty_table_area, + + BEGIN OF ty_missing_columns, + first_column TYPE zexcel_cell_column, + last_column TYPE zexcel_cell_column, + END OF ty_missing_columns. * * Root node for transformation * - DATA: - BEGIN OF l_worksheet, - dimension TYPE string, - tabcolor TYPE string, - summarybelow TYPE c, - summaryright TYPE c, - fittopage TYPE c, - showzeros TYPE c, - tabselected TYPE c, - zoomscale TYPE i, - zoomscalenormal TYPE i, - zoomscalepageview TYPE i, - zoomscalesheetview TYPE i, - workbookviewid TYPE c, - showgridlines TYPE c, - showrowcolheaders TYPE c, - activepane TYPE string, - state TYPE string, - ysplit TYPE i, - xsplit TYPE i, - topleftcell TYPE c LENGTH 10, - activecell TYPE c LENGTH 10, - customheight TYPE lty_bool, - defaultrowheight TYPE float, - defaultcolwidth TYPE float, - outlinelevelrow TYPE i, - outlinelevelcol TYPE i, - cols TYPE STANDARD TABLE OF lty_column, - rows TYPE STANDARD TABLE OF lty_row, - mergecells_count TYPE i, - mergecells TYPE STANDARD TABLE OF lty_mergecell, - hyperlinks_count TYPE i, - hyperlinks TYPE STANDARD TABLE OF lty_hyperlink, - BEGIN OF printoptions, - gridlines TYPE lty_bool, - horizontalcentered TYPE lty_bool, - verticalcentered TYPE lty_bool, - END OF printoptions, - BEGIN OF pagemargins, - left TYPE zexcel_dec_8_2, - right TYPE zexcel_dec_8_2, - top TYPE zexcel_dec_8_2, - bottom TYPE zexcel_dec_8_2, - header TYPE zexcel_dec_8_2, - footer TYPE zexcel_dec_8_2, - END OF pagemargins, - BEGIN OF pagesetup, - blackandwhite TYPE c, - cellcomments TYPE string, - copies TYPE i, - draft TYPE c, - errors TYPE string, - firstpagenumber TYPE i, - fittopage TYPE c, - fittoheight TYPE i, - fittowidth TYPE i, - horizontaldpi TYPE i, - orientation TYPE string, - pageorder TYPE string, - paperheight TYPE string, - papersize TYPE i, - paperwidth TYPE string, - scale TYPE i, - usefirstpagenumber TYPE c, - useprinterdefaults TYPE c, - verticaldpi TYPE i, - END OF pagesetup, - BEGIN OF headerfooter, - differentoddeven TYPE c, - oddheader TYPE string, - oddfooter TYPE string, - evenheader TYPE string, - evenfooter TYPE string, - END OF headerfooter, - drawings TYPE string, - tables_count TYPE i, - tables TYPE STANDARD TABLE OF lty_table, - END OF l_worksheet. + DATA: + BEGIN OF l_worksheet, + dimension TYPE string, + tabcolor TYPE string, + summarybelow TYPE c, + summaryright TYPE c, + fittopage TYPE c, + showzeros TYPE c, + tabselected TYPE c, + zoomscale TYPE i, + zoomscalenormal TYPE i, + zoomscalepageview TYPE i, + zoomscalesheetview TYPE i, + workbookviewid TYPE c, + showgridlines TYPE c, + showrowcolheaders TYPE c, + activepane TYPE string, + state TYPE string, + ysplit TYPE i, + xsplit TYPE i, + topleftcell TYPE c LENGTH 10, + activecell TYPE c LENGTH 10, + customheight TYPE lty_bool, + defaultrowheight TYPE float, + defaultcolwidth TYPE float, + outlinelevelrow TYPE i, + outlinelevelcol TYPE i, + cols TYPE STANDARD TABLE OF lty_column, + rows TYPE STANDARD TABLE OF lty_row, + mergecells_count TYPE i, + mergecells TYPE STANDARD TABLE OF lty_mergecell, + hyperlinks_count TYPE i, + hyperlinks TYPE STANDARD TABLE OF lty_hyperlink, + BEGIN OF printoptions, + gridlines TYPE lty_bool, + horizontalcentered TYPE lty_bool, + verticalcentered TYPE lty_bool, + END OF printoptions, + BEGIN OF pagemargins, + left TYPE zexcel_dec_8_2, + right TYPE zexcel_dec_8_2, + top TYPE zexcel_dec_8_2, + bottom TYPE zexcel_dec_8_2, + header TYPE zexcel_dec_8_2, + footer TYPE zexcel_dec_8_2, + END OF pagemargins, + BEGIN OF pagesetup, + blackandwhite TYPE c, + cellcomments TYPE string, + copies TYPE i, + draft TYPE c, + errors TYPE string, + firstpagenumber TYPE i, + fittopage TYPE c, + fittoheight TYPE i, + fittowidth TYPE i, + horizontaldpi TYPE i, + orientation TYPE string, + pageorder TYPE string, + paperheight TYPE string, + papersize TYPE i, + paperwidth TYPE string, + scale TYPE i, + usefirstpagenumber TYPE c, + useprinterdefaults TYPE c, + verticaldpi TYPE i, + END OF pagesetup, + BEGIN OF headerfooter, + differentoddeven TYPE c, + oddheader TYPE string, + oddfooter TYPE string, + evenheader TYPE string, + evenfooter TYPE string, + END OF headerfooter, + drawings TYPE string, + tables_count TYPE i, + tables TYPE STANDARD TABLE OF lty_table, + END OF l_worksheet. * * Local data * - DATA: - lo_iterator TYPE REF TO cl_object_collection_iterator, - lo_table TYPE REF TO zcl_excel_table, - lo_column_default TYPE REF TO zcl_excel_column, - lo_row_default TYPE REF TO zcl_excel_row, - lv_value TYPE string, - lv_index TYPE i, - lv_spans TYPE string, - lt_range_merge TYPE string_table, - lv_column TYPE zexcel_cell_column, - lv_style_guid TYPE zexcel_cell_style, - ls_last_row TYPE zexcel_s_cell_data, - lv_freeze_cell_row TYPE zexcel_cell_row, - lv_freeze_cell_column TYPE zexcel_cell_column, - lv_freeze_cell_column_alpha TYPE zexcel_cell_column_alpha, - lo_column_iterator TYPE REF TO cl_object_collection_iterator, - lo_column TYPE REF TO zcl_excel_column, - lo_row_iterator TYPE REF TO cl_object_collection_iterator, - lo_row TYPE REF TO zcl_excel_row, - lv_relation_id TYPE i VALUE 0, - outline_level_row TYPE i VALUE 0, - outline_level_col TYPE i VALUE 0, - col_count TYPE int4, - lt_table_areas TYPE SORTED TABLE OF lty_table_area - WITH NON-UNIQUE KEY left right top bottom, - ls_table_area LIKE LINE OF lt_table_areas, - lts_sorted_columns TYPE SORTED TABLE OF zexcel_cell_column - WITH UNIQUE KEY table_line, - t_missing_columns TYPE STANDARD TABLE OF ty_missing_columns - WITH NON-UNIQUE DEFAULT KEY, - missing_column LIKE LINE OF t_missing_columns, - lo_link TYPE REF TO zcl_excel_hyperlink, - lo_drawings TYPE REF TO zcl_excel_drawings. - - FIELD-SYMBOLS: - TYPE zexcel_s_cell_data, - LIKE LINE OF lt_range_merge, - TYPE lty_column, - TYPE lty_row, - TYPE lty_hyperlink, - TYPE lty_mergecell, - TYPE lty_table. + DATA: + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lo_column_default TYPE REF TO zcl_excel_column, + lo_row_default TYPE REF TO zcl_excel_row, + lv_value TYPE string, + lv_index TYPE i, + lv_spans TYPE string, + lt_range_merge TYPE string_table, + lv_column TYPE zexcel_cell_column, + lv_style_guid TYPE zexcel_cell_style, + ls_last_row TYPE zexcel_s_cell_data, + lv_freeze_cell_row TYPE zexcel_cell_row, + lv_freeze_cell_column TYPE zexcel_cell_column, + lv_freeze_cell_column_alpha TYPE zexcel_cell_column_alpha, + lo_column_iterator TYPE REF TO cl_object_collection_iterator, + lo_column TYPE REF TO zcl_excel_column, + lo_row_iterator TYPE REF TO cl_object_collection_iterator, + lo_row TYPE REF TO zcl_excel_row, + lv_relation_id TYPE i VALUE 0, + outline_level_row TYPE i VALUE 0, + outline_level_col TYPE i VALUE 0, + col_count TYPE int4, + lt_table_areas TYPE SORTED TABLE OF lty_table_area + WITH NON-UNIQUE KEY left right top bottom, + ls_table_area LIKE LINE OF lt_table_areas, + lts_sorted_columns TYPE SORTED TABLE OF zexcel_cell_column + WITH UNIQUE KEY table_line, + t_missing_columns TYPE STANDARD TABLE OF ty_missing_columns + WITH NON-UNIQUE DEFAULT KEY, + missing_column LIKE LINE OF t_missing_columns, + lo_link TYPE REF TO zcl_excel_hyperlink, + lo_drawings TYPE REF TO zcl_excel_drawings. + + FIELD-SYMBOLS: + TYPE zexcel_s_cell_data, + LIKE LINE OF lt_range_merge, + TYPE lty_column, + TYPE lty_row, + TYPE lty_hyperlink, + TYPE lty_mergecell, +
TYPE lty_table. ********************************************************************** * STEP 1: Fill root node * - l_worksheet-tabcolor = io_worksheet->tabcolor-rgb. - l_worksheet-summarybelow = io_worksheet->zif_excel_sheet_properties~summarybelow. - l_worksheet-summaryright = io_worksheet->zif_excel_sheet_properties~summaryright. - - IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. - l_worksheet-fittopage = lc_one. - ENDIF. - - l_worksheet-dimension = io_worksheet->get_dimension_range( ). - - IF io_worksheet->zif_excel_sheet_properties~show_zeros EQ abap_true. - l_worksheet-showzeros = lc_one. - ELSE. - l_worksheet-showzeros = lc_zero. - ENDIF. - - IF iv_active = abap_true - OR io_worksheet->zif_excel_sheet_properties~selected EQ abap_true. - l_worksheet-tabselected = lc_one. - ELSE. - l_worksheet-tabselected = lc_zero. - ENDIF. - - IF io_worksheet->zif_excel_sheet_properties~zoomscale GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale = 10. - ENDIF. - l_worksheet-zoomscale = io_worksheet->zif_excel_sheet_properties~zoomscale. - - IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_normal LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 10. + l_worksheet-tabcolor = io_worksheet->tabcolor-rgb. + l_worksheet-summarybelow = io_worksheet->zif_excel_sheet_properties~summarybelow. + l_worksheet-summaryright = io_worksheet->zif_excel_sheet_properties~summaryright. + + IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. + l_worksheet-fittopage = lc_one. + ENDIF. + + l_worksheet-dimension = io_worksheet->get_dimension_range( ). + + IF io_worksheet->zif_excel_sheet_properties~show_zeros EQ abap_true. + l_worksheet-showzeros = lc_one. + ELSE. + l_worksheet-showzeros = lc_zero. + ENDIF. + + IF iv_active = abap_true + OR io_worksheet->zif_excel_sheet_properties~selected EQ abap_true. + l_worksheet-tabselected = lc_one. + ELSE. + l_worksheet-tabselected = lc_zero. + ENDIF. + + IF io_worksheet->zif_excel_sheet_properties~zoomscale GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale = 10. + ENDIF. + l_worksheet-zoomscale = io_worksheet->zif_excel_sheet_properties~zoomscale. + + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_normal LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 10. + ENDIF. + l_worksheet-zoomscalenormal = io_worksheet->zif_excel_sheet_properties~zoomscale_normal. ENDIF. - l_worksheet-zoomscalenormal = io_worksheet->zif_excel_sheet_properties~zoomscale_normal. - ENDIF. - - IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview NE 0. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 10. + + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 10. + ENDIF. + l_worksheet-zoomscalepageview = io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview. ENDIF. - l_worksheet-zoomscalepageview = io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview. - ENDIF. - - IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview NE 0. - IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview GT 400. - io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 400. - ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview LT 10. - io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 10. + + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 10. + ENDIF. + l_worksheet-zoomscalesheetview = io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview. ENDIF. - l_worksheet-zoomscalesheetview = io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview. - ENDIF. - l_worksheet-workbookviewid = lc_zero. + l_worksheet-workbookviewid = lc_zero. - IF io_worksheet->show_gridlines = abap_true. - l_worksheet-showgridlines = lc_one. - ELSE. - l_worksheet-showgridlines = lc_zero. - ENDIF. + IF io_worksheet->show_gridlines = abap_true. + l_worksheet-showgridlines = lc_one. + ELSE. + l_worksheet-showgridlines = lc_zero. + ENDIF. - IF io_worksheet->show_rowcolheaders = abap_true. - l_worksheet-showrowcolheaders = lc_one. - ELSE. - l_worksheet-showrowcolheaders = lc_zero. - ENDIF. + IF io_worksheet->show_rowcolheaders = abap_true. + l_worksheet-showrowcolheaders = lc_one. + ELSE. + l_worksheet-showrowcolheaders = lc_zero. + ENDIF. * * Freeze * - io_worksheet->get_freeze_cell( - IMPORTING ep_row = lv_freeze_cell_row - ep_column = lv_freeze_cell_column ). + io_worksheet->get_freeze_cell( + IMPORTING ep_row = lv_freeze_cell_row + ep_column = lv_freeze_cell_column ). - IF lv_freeze_cell_row IS NOT INITIAL AND lv_freeze_cell_column IS NOT INITIAL. - IF lv_freeze_cell_row > 1. - l_worksheet-ysplit = lv_freeze_cell_row - 1. - ENDIF. + IF lv_freeze_cell_row IS NOT INITIAL AND lv_freeze_cell_column IS NOT INITIAL. + IF lv_freeze_cell_row > 1. + l_worksheet-ysplit = lv_freeze_cell_row - 1. + ENDIF. - IF lv_freeze_cell_column > 1. - lv_value = lv_freeze_cell_column - 1. - l_worksheet-xsplit = lv_freeze_cell_row - 1. - ENDIF. + IF lv_freeze_cell_column > 1. + lv_value = lv_freeze_cell_column - 1. + l_worksheet-xsplit = lv_freeze_cell_row - 1. + ENDIF. - lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ). - lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ). - CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value. - l_worksheet-topleftcell = lv_value. + lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ). + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ). + CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value. + l_worksheet-topleftcell = lv_value. - l_worksheet-activepane = 'bottomRight'. - l_worksheet-state = 'frozen'. - ENDIF. + l_worksheet-activepane = 'bottomRight'. + l_worksheet-state = 'frozen'. + ENDIF. - l_worksheet-activecell = io_worksheet->get_active_cell( ). + l_worksheet-activecell = io_worksheet->get_active_cell( ). * * Row and column info * - lo_column_iterator = io_worksheet->get_columns_iterator( ). - IF NOT lo_column_iterator IS BOUND. - io_worksheet->calculate_column_widths( ). lo_column_iterator = io_worksheet->get_columns_iterator( ). - ENDIF. - - lo_column_default = io_worksheet->get_default_column( ). - IF lo_column_default IS BOUND AND lo_column_default->get_width( ) >= 0. - l_worksheet-defaultcolwidth = lo_column_default->get_width( ). - ENDIF. - - lo_row_default = io_worksheet->get_default_row( ). - IF lo_row_default IS BOUND. - IF lo_row_default->get_row_height( ) >= 0. - l_worksheet-customheight = lc_true. - lv_value = lo_row_default->get_row_height( ). + IF NOT lo_column_iterator IS BOUND. + io_worksheet->calculate_column_widths( ). + lo_column_iterator = io_worksheet->get_columns_iterator( ). + ENDIF. + + lo_column_default = io_worksheet->get_default_column( ). + IF lo_column_default IS BOUND AND lo_column_default->get_width( ) >= 0. + l_worksheet-defaultcolwidth = lo_column_default->get_width( ). + ENDIF. + + lo_row_default = io_worksheet->get_default_row( ). + IF lo_row_default IS BOUND. + IF lo_row_default->get_row_height( ) >= 0. + l_worksheet-customheight = lc_true. + lv_value = lo_row_default->get_row_height( ). + ELSE. + lv_value = '12.75'. + ENDIF. ELSE. lv_value = '12.75'. ENDIF. - ELSE. - lv_value = '12.75'. - ENDIF. - CONDENSE lv_value. - l_worksheet-defaultrowheight = lv_value. - - lo_row_iterator = io_worksheet->get_rows_iterator( ). - WHILE lo_row_iterator->has_next( ) = abap_true. - lo_row ?= lo_row_iterator->get_next( ). - IF lo_row->get_outline_level( ) > outline_level_row. - l_worksheet-outlinelevelrow = lo_row->get_outline_level( ). - ENDIF. - ENDWHILE. + CONDENSE lv_value. + l_worksheet-defaultrowheight = lv_value. + + lo_row_iterator = io_worksheet->get_rows_iterator( ). + WHILE lo_row_iterator->has_next( ) = abap_true. + lo_row ?= lo_row_iterator->get_next( ). + IF lo_row->get_outline_level( ) > outline_level_row. + l_worksheet-outlinelevelrow = lo_row->get_outline_level( ). + ENDIF. + ENDWHILE. * Set column information (width, style, ...) * IF lo_column_iterator->has_next( ) = abap_true. @@ -505,315 +505,315 @@ METHOD create_xl_sheet. * * Now find all columns that were missing so far * - missing_column-first_column = 1. + missing_column-first_column = 1. - LOOP AT lts_sorted_columns INTO lv_column. - IF lv_column > missing_column-first_column. - missing_column-last_column = lv_column - 1. - APPEND missing_column TO t_missing_columns. - ENDIF. - missing_column-first_column = lv_column + 1. - ENDLOOP. + LOOP AT lts_sorted_columns INTO lv_column. + IF lv_column > missing_column-first_column. + missing_column-last_column = lv_column - 1. + APPEND missing_column TO t_missing_columns. + ENDIF. + missing_column-first_column = lv_column + 1. + ENDLOOP. - missing_column-last_column = zcl_excel_common=>c_excel_sheet_max_col. - APPEND missing_column TO t_missing_columns. + missing_column-last_column = zcl_excel_common=>c_excel_sheet_max_col. + APPEND missing_column TO t_missing_columns. * * Now apply stylesetting and other defaults * - LOOP AT t_missing_columns INTO missing_column. - APPEND INITIAL LINE TO l_worksheet-cols ASSIGNING . - -min = missing_column-first_column. - -max = missing_column-last_column. - IF lo_column_default IS BOUND AND lo_column_default->get_width( ) >= 0. - -width = lo_column_default->get_width( ). - ELSE. - -width = lc_default_col_width. - ENDIF. - lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). - -style = me->excel->get_style_index_in_styles( lv_style_guid ) - 1. - ENDLOOP. + LOOP AT t_missing_columns INTO missing_column. + APPEND INITIAL LINE TO l_worksheet-cols ASSIGNING . + -min = missing_column-first_column. + -max = missing_column-last_column. + IF lo_column_default IS BOUND AND lo_column_default->get_width( ) >= 0. + -width = lo_column_default->get_width( ). + ELSE. + -width = lc_default_col_width. + ENDIF. + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + -style = me->excel->get_style_index_in_styles( lv_style_guid ) - 1. + ENDLOOP. * * Build table to hold all table-areas attached to this sheet * - lo_iterator = io_worksheet->get_tables_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_table ?= lo_iterator->get_next( ). - ls_table_area-left = zcl_excel_common=>convert_column2int( lo_table->settings-top_left_column ). - ls_table_area-right = lo_table->get_right_column_integer( ). - ls_table_area-top = lo_table->settings-top_left_row. - ls_table_area-bottom = lo_table->get_bottom_row_integer( ). - INSERT ls_table_area INTO TABLE lt_table_areas. - ENDWHILE. + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_table ?= lo_iterator->get_next( ). + ls_table_area-left = zcl_excel_common=>convert_column2int( lo_table->settings-top_left_column ). + ls_table_area-right = lo_table->get_right_column_integer( ). + ls_table_area-top = lo_table->settings-top_left_row. + ls_table_area-bottom = lo_table->get_bottom_row_integer( ). + INSERT ls_table_area INTO TABLE lt_table_areas. + ENDWHILE. * * Build sheet data node * * Spans is constant amongst all rows * - col_count = io_worksheet->get_highest_column( ). - lv_spans = col_count. - CONCATENATE '1:' lv_spans INTO lv_spans. - CONDENSE lv_spans. + col_count = io_worksheet->get_highest_column( ). + lv_spans = col_count. + CONCATENATE '1:' lv_spans INTO lv_spans. + CONDENSE lv_spans. - LOOP AT io_worksheet->sheet_content ASSIGNING . + LOOP AT io_worksheet->sheet_content ASSIGNING . - IF ls_last_row-cell_row NE -cell_row. + IF ls_last_row-cell_row NE -cell_row. * * Fill row information. * Cell data is filled in by callback GET_CELLS called from transformation * - lv_index = sy-tabix. - APPEND INITIAL LINE TO l_worksheet-rows ASSIGNING . - -row = -cell_row. - -index = lv_index. - -spans = lv_spans. + lv_index = sy-tabix. + APPEND INITIAL LINE TO l_worksheet-rows ASSIGNING . + -row = -cell_row. + -index = lv_index. + -spans = lv_spans. * * Row dimension attributes * - lo_row = io_worksheet->get_row( -cell_row ). - IF lo_row->get_visible( ) = abap_false. - -hidden = lc_true. - ENDIF. + lo_row = io_worksheet->get_row( -cell_row ). + IF lo_row->get_visible( ) = abap_false. + -hidden = lc_true. + ENDIF. - IF lo_row->get_row_height( ) >= 0. - -customheight = lc_one. - -height = lo_row->get_row_height( ). - ENDIF. + IF lo_row->get_row_height( ) >= 0. + -customheight = lc_one. + -height = lo_row->get_row_height( ). + ENDIF. * * Collapsed * - IF lo_row->get_collapsed( ) = abap_true. - -collapsed = lc_true. - ENDIF. + IF lo_row->get_collapsed( ) = abap_true. + -collapsed = lc_true. + ENDIF. * * Outline level * - -outlinelevel = lo_row->get_outline_level( ). + -outlinelevel = lo_row->get_outline_level( ). * * Style * - -style = lo_row->get_xf_index( ). - IF -style <> 0. - -customformat = lc_one. + -style = lo_row->get_xf_index( ). + IF -style <> 0. + -customformat = lc_one. + ENDIF. ENDIF. - ENDIF. - ls_last_row = . - ENDLOOP. + ls_last_row = . + ENDLOOP. * * Merged cells * - lt_range_merge = io_worksheet->get_merge( ). - IF lt_range_merge IS NOT INITIAL. - l_worksheet-mergecells_count = lines( lt_range_merge ). + lt_range_merge = io_worksheet->get_merge( ). + IF lt_range_merge IS NOT INITIAL. + l_worksheet-mergecells_count = lines( lt_range_merge ). - LOOP AT lt_range_merge ASSIGNING . - APPEND INITIAL LINE TO l_worksheet-mergecells ASSIGNING . - -ref = . - io_worksheet->delete_merge( ). - ENDLOOP. - ENDIF. + LOOP AT lt_range_merge ASSIGNING . + APPEND INITIAL LINE TO l_worksheet-mergecells ASSIGNING . + -ref = . + io_worksheet->delete_merge( ). + ENDLOOP. + ENDIF. * * Hyperlinks * - l_worksheet-hyperlinks_count = io_worksheet->get_hyperlinks_size( ). - IF l_worksheet-hyperlinks_count > 0. - lo_iterator = io_worksheet->get_hyperlinks_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_link ?= lo_iterator->get_next( ). - - APPEND INITIAL LINE TO l_worksheet-hyperlinks ASSIGNING . - -ref = lo_link->get_ref( ). - IF lo_link->is_internal( ) = abap_true. - -location = lo_link->get_url( ). - ELSE. - ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO lv_value. - -r_id = lv_value. - ENDIF. - ENDWHILE. - ENDIF. + l_worksheet-hyperlinks_count = io_worksheet->get_hyperlinks_size( ). + IF l_worksheet-hyperlinks_count > 0. + lo_iterator = io_worksheet->get_hyperlinks_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_link ?= lo_iterator->get_next( ). + + APPEND INITIAL LINE TO l_worksheet-hyperlinks ASSIGNING . + -ref = lo_link->get_ref( ). + IF lo_link->is_internal( ) = abap_true. + -location = lo_link->get_url( ). + ELSE. + ADD 1 TO lv_relation_id. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + -r_id = lv_value. + ENDIF. + ENDWHILE. + ENDIF. * * Print options * - IF io_worksheet->print_gridlines = abap_true. - l_worksheet-printoptions-gridlines = lc_true. - ENDIF. + IF io_worksheet->print_gridlines = abap_true. + l_worksheet-printoptions-gridlines = lc_true. + ENDIF. - IF io_worksheet->sheet_setup->horizontal_centered = abap_true. - l_worksheet-printoptions-horizontalcentered = lc_true. - ENDIF. + IF io_worksheet->sheet_setup->horizontal_centered = abap_true. + l_worksheet-printoptions-horizontalcentered = lc_true. + ENDIF. - IF io_worksheet->sheet_setup->vertical_centered = abap_true. - l_worksheet-printoptions-verticalcentered = lc_true. - ENDIF. + IF io_worksheet->sheet_setup->vertical_centered = abap_true. + l_worksheet-printoptions-verticalcentered = lc_true. + ENDIF. * * Page margins * - l_worksheet-pagemargins-left = io_worksheet->sheet_setup->margin_left. - l_worksheet-pagemargins-right = io_worksheet->sheet_setup->margin_right. - l_worksheet-pagemargins-top = io_worksheet->sheet_setup->margin_top. - l_worksheet-pagemargins-bottom = io_worksheet->sheet_setup->margin_bottom. - l_worksheet-pagemargins-header = io_worksheet->sheet_setup->margin_header. - l_worksheet-pagemargins-footer = io_worksheet->sheet_setup->margin_footer. + l_worksheet-pagemargins-left = io_worksheet->sheet_setup->margin_left. + l_worksheet-pagemargins-right = io_worksheet->sheet_setup->margin_right. + l_worksheet-pagemargins-top = io_worksheet->sheet_setup->margin_top. + l_worksheet-pagemargins-bottom = io_worksheet->sheet_setup->margin_bottom. + l_worksheet-pagemargins-header = io_worksheet->sheet_setup->margin_header. + l_worksheet-pagemargins-footer = io_worksheet->sheet_setup->margin_footer. * * Page setup * - l_worksheet-pagesetup-cellcomments = io_worksheet->sheet_setup->cell_comments. - l_worksheet-pagesetup-copies = io_worksheet->sheet_setup->copies. - l_worksheet-pagesetup-firstpagenumber = io_worksheet->sheet_setup->first_page_number. - l_worksheet-pagesetup-fittopage = io_worksheet->sheet_setup->fit_to_page. - l_worksheet-pagesetup-fittoheight = io_worksheet->sheet_setup->fit_to_height. - l_worksheet-pagesetup-fittowidth = io_worksheet->sheet_setup->fit_to_width. - l_worksheet-pagesetup-horizontaldpi = io_worksheet->sheet_setup->horizontal_dpi. - l_worksheet-pagesetup-orientation = io_worksheet->sheet_setup->orientation. - l_worksheet-pagesetup-pageorder = io_worksheet->sheet_setup->page_order. - l_worksheet-pagesetup-paperheight = io_worksheet->sheet_setup->paper_height. - l_worksheet-pagesetup-papersize = io_worksheet->sheet_setup->paper_size. - l_worksheet-pagesetup-paperwidth = io_worksheet->sheet_setup->paper_width. - l_worksheet-pagesetup-scale = io_worksheet->sheet_setup->scale. - l_worksheet-pagesetup-usefirstpagenumber = io_worksheet->sheet_setup->use_first_page_num. - l_worksheet-pagesetup-verticaldpi = io_worksheet->sheet_setup->vertical_dpi. - - IF io_worksheet->sheet_setup->black_and_white IS NOT INITIAL. - l_worksheet-pagesetup-blackandwhite = lc_one. - ENDIF. - - IF io_worksheet->sheet_setup->draft IS NOT INITIAL. - l_worksheet-pagesetup-draft = lc_one. - ENDIF. - - IF io_worksheet->sheet_setup->errors IS NOT INITIAL. - l_worksheet-pagesetup-errors = io_worksheet->sheet_setup->errors. - ENDIF. - - IF io_worksheet->sheet_setup->use_printer_defaults IS NOT INITIAL. - l_worksheet-pagesetup-useprinterdefaults = lc_one. - ENDIF. + l_worksheet-pagesetup-cellcomments = io_worksheet->sheet_setup->cell_comments. + l_worksheet-pagesetup-copies = io_worksheet->sheet_setup->copies. + l_worksheet-pagesetup-firstpagenumber = io_worksheet->sheet_setup->first_page_number. + l_worksheet-pagesetup-fittopage = io_worksheet->sheet_setup->fit_to_page. + l_worksheet-pagesetup-fittoheight = io_worksheet->sheet_setup->fit_to_height. + l_worksheet-pagesetup-fittowidth = io_worksheet->sheet_setup->fit_to_width. + l_worksheet-pagesetup-horizontaldpi = io_worksheet->sheet_setup->horizontal_dpi. + l_worksheet-pagesetup-orientation = io_worksheet->sheet_setup->orientation. + l_worksheet-pagesetup-pageorder = io_worksheet->sheet_setup->page_order. + l_worksheet-pagesetup-paperheight = io_worksheet->sheet_setup->paper_height. + l_worksheet-pagesetup-papersize = io_worksheet->sheet_setup->paper_size. + l_worksheet-pagesetup-paperwidth = io_worksheet->sheet_setup->paper_width. + l_worksheet-pagesetup-scale = io_worksheet->sheet_setup->scale. + l_worksheet-pagesetup-usefirstpagenumber = io_worksheet->sheet_setup->use_first_page_num. + l_worksheet-pagesetup-verticaldpi = io_worksheet->sheet_setup->vertical_dpi. + + IF io_worksheet->sheet_setup->black_and_white IS NOT INITIAL. + l_worksheet-pagesetup-blackandwhite = lc_one. + ENDIF. + + IF io_worksheet->sheet_setup->draft IS NOT INITIAL. + l_worksheet-pagesetup-draft = lc_one. + ENDIF. + + IF io_worksheet->sheet_setup->errors IS NOT INITIAL. + l_worksheet-pagesetup-errors = io_worksheet->sheet_setup->errors. + ENDIF. + + IF io_worksheet->sheet_setup->use_printer_defaults IS NOT INITIAL. + l_worksheet-pagesetup-useprinterdefaults = lc_one. + ENDIF. * * Header and footer * - IF io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. - l_worksheet-headerfooter-differentoddeven = lc_one. - ENDIF. + IF io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + l_worksheet-headerfooter-differentoddeven = lc_one. + ENDIF. - io_worksheet->sheet_setup->get_header_footer_string( - IMPORTING - ep_odd_header = l_worksheet-headerfooter-oddheader - ep_odd_footer = l_worksheet-headerfooter-oddfooter - ep_even_header = l_worksheet-headerfooter-evenheader - ep_even_footer = l_worksheet-headerfooter-evenfooter ). + io_worksheet->sheet_setup->get_header_footer_string( + IMPORTING + ep_odd_header = l_worksheet-headerfooter-oddheader + ep_odd_footer = l_worksheet-headerfooter-oddfooter + ep_even_header = l_worksheet-headerfooter-evenheader + ep_even_footer = l_worksheet-headerfooter-evenfooter ). * * Drawings * - lo_drawings = io_worksheet->get_drawings( ). - IF lo_drawings->is_empty( ) = abap_false. - ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO l_worksheet-drawings. - ENDIF. + lo_drawings = io_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + ADD 1 TO lv_relation_id. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO l_worksheet-drawings. + ENDIF. * * Tables * - l_worksheet-tables_count = io_worksheet->get_tables_size( ). - IF l_worksheet-tables_count > 0. - lo_iterator = io_worksheet->get_tables_iterator( ). - WHILE lo_iterator->has_next( ) EQ abap_true. - lo_table ?= lo_iterator->get_next( ). - APPEND INITIAL LINE TO l_worksheet-tables ASSIGNING
. - ADD 1 TO lv_relation_id. - lv_value = lv_relation_id. - CONDENSE lv_value. - CONCATENATE 'rId' lv_value INTO
-r_id. - ENDWHILE. - ENDIF. + l_worksheet-tables_count = io_worksheet->get_tables_size( ). + IF l_worksheet-tables_count > 0. + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->has_next( ) EQ abap_true. + lo_table ?= lo_iterator->get_next( ). + APPEND INITIAL LINE TO l_worksheet-tables ASSIGNING
. + ADD 1 TO lv_relation_id. + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO
-r_id. + ENDWHILE. + ENDIF. ********************************************************************** * STEP 2: Create XML - me->worksheet = io_worksheet. "Neccessary for callback GET_CELL + me->worksheet = io_worksheet. "Neccessary for callback GET_CELL - CALL TRANSFORMATION zexcel_tr_sheet - SOURCE worksheet = l_worksheet - cells = me->cells - writer = me - OPTIONS xml_header = 'full' - RESULT XML ep_content. + CALL TRANSFORMATION zexcel_tr_sheet + SOURCE worksheet = l_worksheet + cells = me->cells + writer = me + OPTIONS xml_header = 'full' + RESULT XML ep_content. -ENDMETHOD. "CREATE_XL_SHEET + ENDMETHOD. "CREATE_XL_SHEET -METHOD get_cells. + METHOD get_cells. * * Callback method from transformation ZEXCEL_TR_SHEET * * The method fills the data cells for each row. * This saves memory if there are many rows. * - DATA: - lv_cell_style TYPE zexcel_cell_style. + DATA: + lv_cell_style TYPE zexcel_cell_style. - FIELD-SYMBOLS: - TYPE ty_cell, - TYPE zexcel_s_cell_data, -