diff --git a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk index 8c74d8a..34bbeaf 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk @@ -1175,7 +1175,7 @@ ENDCLASS. "lcl_Excel_Common_Test - + @@ -1225,7 +1225,7 @@ ENDCLASS. "lcl_Excel_Common_Test ENDIF. endmethod. - + @@ -1278,7 +1278,7 @@ endmethod. ENDIF. ENDMETHOD. - + @@ -1727,7 +1727,7 @@ endmethod. ENDIF. endmethod. - + @@ -1871,6 +1871,19 @@ endmethod. EXPORTING error = 'Index out of bounds'. ENDTRY. +endmethod. + + + + + + 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. + endmethod. @@ -1896,7 +1909,7 @@ endmethod. ENDTRY. endmethod. - + @@ -1936,7 +1949,7 @@ endmethod. endmethod. - + method GET_FIELDCATALOG. @@ -1997,7 +2010,7 @@ endmethod. endmethod. - + @@ -2037,7 +2050,7 @@ endmethod. ENDIF. endmethod. - + method NUMBER_TO_EXCEL_STRING. @@ -2056,7 +2069,7 @@ endmethod. ENDIF. endmethod. - + @@ -2115,7 +2128,7 @@ endmethod. endmethod. - + @@ -2179,7 +2192,7 @@ endmethod. endmethod. - + @@ -2520,7 +2533,7 @@ endmethod. ENDMETHOD. - + method SHL01. @@ -2540,7 +2553,7 @@ ENDMETHOD. endmethod. - + method SHR14. @@ -2567,7 +2580,7 @@ endmethod. endmethod. - + @@ -2654,7 +2667,7 @@ endmethod. endmethod. - + method TIME_TO_EXCEL_STRING. diff --git a/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk b/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk index bf7082d..5da9c8a 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_READER_2007.slnk @@ -462,7 +462,7 @@ endmethod. ENDMETHOD. - + @@ -493,7 +493,7 @@ ENDMETHOD. ENDMETHOD. - + @@ -1930,6 +1930,11 @@ ENDMETHOD. * aligning code (started) * add a list of open ToDos here * adding comments to explain what we are trying to achieve (started) +*--------------------------------------------------------------------* +* issue #345 - Dump on small pagemargins +* Took the chance to modularize this very long method +* by extracting the code that needed correction into +* own method ( load_worksheet_pagemargins ) *--------------------------------------------------------------------* TYPES: BEGIN OF lty_cell, r TYPE string, @@ -1980,15 +1985,6 @@ ENDMETHOD. scale TYPE string, END OF lty_page_setup. - 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_sheetformatpr, customheight TYPE string, defaultrowheight TYPE string, @@ -2083,8 +2079,6 @@ ENDMETHOD. ls_even_footer TYPE zexcel_s_worksheet_head_foot, lo_ixml_hf_value_elem TYPE REF TO if_ixml_element, - lo_ixml_pagemargins_elem TYPE REF TO if_ixml_element, - ls_pagemargins TYPE lty_page_margins, lo_ixml_pagesetup_elem TYPE REF TO if_ixml_element, ls_pagesetup TYPE lty_page_setup, @@ -2102,7 +2096,7 @@ ENDMETHOD. 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_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_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, @@ -2502,19 +2496,9 @@ ENDMETHOD. ENDIF. " Read in page margins - lo_ixml_pagemargins_elem = lo_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 = ls_pagemargins-bottom. - io_worksheet->sheet_setup->margin_footer = ls_pagemargins-footer. - io_worksheet->sheet_setup->margin_header = ls_pagemargins-header. - io_worksheet->sheet_setup->margin_left = ls_pagemargins-left. - io_worksheet->sheet_setup->margin_right = ls_pagemargins-right. - io_worksheet->sheet_setup->margin_top = ls_pagemargins-top. - ENDIF. + me->load_worksheet_pagemargins( EXPORTING + io_ixml_worksheet = lo_ixml_worksheet + io_worksheet = io_worksheet ). " Read in page setup lo_ixml_pagesetup_elem = lo_ixml_worksheet->find_from_name( 'pageSetup' ). @@ -2757,7 +2741,7 @@ ENDMETHOD. endmethod. - + @@ -2829,6 +2813,41 @@ ENDMETHOD. ENDWHILE. +ENDMETHOD. + + + + + + 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. + + 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. + ENDMETHOD. diff --git a/ZA2X/PROG/ZDEMO_EXCEL37.slnk b/ZA2X/PROG/ZDEMO_EXCEL37.slnk index 5555dbc..40de160 100644 --- a/ZA2X/PROG/ZDEMO_EXCEL37.slnk +++ b/ZA2X/PROG/ZDEMO_EXCEL37.slnk @@ -2,12 +2,23 @@ - + + + + + + + + - + + + + + @@ -15,14 +26,17 @@ REPORT zdemo_excel37. -DATA: excel TYPE REF TO zcl_excel, - reader TYPE REF TO zif_excel_reader, - go_error TYPE REF TO cx_root, - gv_message TYPE string, - lv_extension TYPE string. +DATA: excel TYPE REF TO zcl_excel, + reader TYPE REF TO zif_excel_reader, + go_error TYPE REF TO cx_root, + gv_message TYPE string, + lv_extension TYPE string, + gv_error_program_name TYPE syrepid, + gv_error_include_name TYPE syrepid, + gv_error_line TYPE i. -CONSTANTS: gc_save_file_name TYPE string VALUE '37-passthrough.xlsx'. +CONSTANTS: gc_save_file_name TYPE string VALUE '37- Read template and output.xlsx'. SELECTION-SCREEN BEGIN OF BLOCK blx WITH FRAME. PARAMETERS: p_upfile TYPE string DEFAULT 'c:\temp\whatever.xlsx' LOWER CASE. @@ -35,82 +49,51 @@ PARAMETERS: lb_read TYPE seoclsname AS LISTBOX VISIBLE LENGTH 40 LOWER CASE OB 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. +PARAMETERS: cb_errl AS CHECKBOX DEFAULT 'X'. +SELECTION-SCREEN BEGIN OF LINE. +PARAMETERS: cb_dump AS CHECKBOX DEFAULT space. +SELECTION-SCREEN COMMENT (60) cmt_dump FOR FIELD cb_dump. +SELECTION-SCREEN END OF LINE. +SELECTION-SCREEN END OF BLOCK bl_err. + INITIALIZATION. PERFORM setup_listboxes. + cmt_dump = text-dum. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_upfile. PERFORM f4_p_upfile CHANGING p_upfile. START-OF-SELECTION. - - TRY. - CASE lb_read. - WHEN 'Autodetect'(001). - FIND REGEX '(\.xlsx|\.xlsm)\s*$' IN p_upfile SUBMATCHES lv_extension. - TRANSLATE lv_extension TO UPPER CASE. - CASE lv_extension. - - WHEN '.XLSX'. - CREATE OBJECT reader TYPE zcl_excel_reader_2007. - excel = reader->load_file( p_upfile ). - "Use template for charts - excel->use_template = abap_true. - - WHEN '.XLSM'. - CREATE OBJECT reader TYPE zcl_excel_reader_xlsm. - excel = reader->load_file( p_upfile ). - "Use template for charts - excel->use_template = abap_true. - - WHEN OTHERS. - MESSAGE 'Unsupported filetype' TYPE 'I'. - RETURN. - - ENDCASE. - - WHEN OTHERS. - CREATE OBJECT reader TYPE (lb_read). - "Use template for charts - excel->use_template = abap_true. - - ENDCASE. - - CASE lb_write. - - WHEN 'Autodetect'(001). - FIND REGEX '(\.xlsx|\.xlsm)\s*$' IN p_upfile SUBMATCHES lv_extension. - TRANSLATE lv_extension TO UPPER CASE. - CASE lv_extension. - - WHEN '.XLSX'. - lcl_output=>output( excel ). - - WHEN '.XLSM'. - lcl_output=>output( cl_excel = excel - iv_writerclass_name = 'ZCL_EXCEL_WRITER_XLSM' ). - - WHEN OTHERS. - MESSAGE 'Unsupported filetype' TYPE 'I'. - RETURN. - - ENDCASE. - - WHEN OTHERS. - lcl_output=>output( cl_excel = excel - iv_writerclass_name = lb_write ). - ENDCASE. - - - + IF cb_dump IS INITIAL. + TRY. + PERFORM read_template. + PERFORM write_template. *** Create output - CATCH cx_root INTO go_error. - MESSAGE 'Error reading excelfile' TYPE 'I'. - gv_message = go_error->get_text( ). - IF gv_message IS NOT INITIAL. - MESSAGE gv_message TYPE 'I'. - ENDIF. - ENDTRY. + CATCH cx_root INTO go_error. + MESSAGE 'Error reading excelfile' TYPE 'I'. + gv_message = go_error->get_text( ). + IF cb_errl = ' '. + IF gv_message IS NOT INITIAL. + MESSAGE gv_message TYPE 'I'. + ENDIF. + ELSE. + go_error->get_source_position( IMPORTING program_name = gv_error_program_name + include_name = gv_error_include_name + source_line = gv_error_line ). + WRITE:/ 'Errormessage:' ,gv_message. + WRITE:/ 'Errorposition:', + AT /10 'Program:' ,gv_error_program_name, + AT /10 'include_name:' ,gv_error_include_name, + AT /10 'source_line:' ,gv_error_line. + ENDIF. + ENDTRY. + ELSE. " This will dump if an error occurs. In some cases the information given in cx_root is not helpful - this will show exactly where the problem is + PERFORM read_template. + PERFORM write_template. + ENDIF. + *&---------------------------------------------------------------------* @@ -258,5 +241,77 @@ FORM get_implementing_classds USING iv_interface_name TYPE clike ENDLOOP. -ENDFORM. " GET_IMPLEMENTING_CLASSDS +ENDFORM. " GET_IMPLEMENTING_CLASSDS + + +*&---------------------------------------------------------------------* +*& Form READ_TEMPLATE +*&---------------------------------------------------------------------* +FORM read_template RAISING zcx_excel . + + CASE lb_read. + WHEN 'Autodetect'(001). + FIND REGEX '(\.xlsx|\.xlsm)\s*$' IN p_upfile SUBMATCHES lv_extension. + TRANSLATE lv_extension TO UPPER CASE. + CASE lv_extension. + + WHEN '.XLSX'. + CREATE OBJECT reader TYPE zcl_excel_reader_2007. + excel = reader->load_file( p_upfile ). + "Use template for charts + excel->use_template = abap_true. + + WHEN '.XLSM'. + CREATE OBJECT reader TYPE zcl_excel_reader_xlsm. + excel = reader->load_file( p_upfile ). + "Use template for charts + excel->use_template = abap_true. + + WHEN OTHERS. + MESSAGE 'Unsupported filetype' TYPE 'I'. + RETURN. + + ENDCASE. + + WHEN OTHERS. + CREATE OBJECT reader TYPE (lb_read). + "Use template for charts + excel->use_template = abap_true. + + ENDCASE. + +ENDFORM. " READ_TEMPLATE + + +*&---------------------------------------------------------------------* +*& Form WRITE_TEMPLATE +*&---------------------------------------------------------------------* +FORM write_template RAISING zcx_excel. + + CASE lb_write. + + WHEN 'Autodetect'(001). + FIND REGEX '(\.xlsx|\.xlsm)\s*$' IN p_upfile SUBMATCHES lv_extension. + TRANSLATE lv_extension TO UPPER CASE. + CASE lv_extension. + + WHEN '.XLSX'. + lcl_output=>output( excel ). + + WHEN '.XLSM'. + lcl_output=>output( cl_excel = excel + iv_writerclass_name = 'ZCL_EXCEL_WRITER_XLSM' ). + + WHEN OTHERS. + MESSAGE 'Unsupported filetype' TYPE 'I'. + RETURN. + + ENDCASE. + + WHEN OTHERS. + lcl_output=>output( cl_excel = excel + iv_writerclass_name = lb_write ). + ENDCASE. + +ENDFORM. " WRITE_TEMPLATE diff --git a/ZA2X/PROG/ZDEMO_EXCEL_OUTPUTOPT_INCL.slnk b/ZA2X/PROG/ZDEMO_EXCEL_OUTPUTOPT_INCL.slnk index 9328afa..2df396a 100644 --- a/ZA2X/PROG/ZDEMO_EXCEL_OUTPUTOPT_INCL.slnk +++ b/ZA2X/PROG/ZDEMO_EXCEL_OUTPUTOPT_INCL.slnk @@ -39,7 +39,7 @@ PARAMETERS: rb_show RADIOBUTTON GROUP rb1 DEFAULT 'X' . PARAMETERS: rb_send RADIOBUTTON GROUP rb1. PARAMETERS: p_path TYPE string LOWER CASE MODIF ID pat. -PARAMETERS: p_email TYPE string LOWER CASE MODIF ID ema. +PARAMETERS: p_email TYPE string LOWER CASE MODIF ID ema OBLIGATORY DEFAULT 'insert_your_emailadress@here'. PARAMETERS: p_backfn TYPE text40 NO-DISPLAY. SELECTION-SCREEN END OF BLOCK bl1.