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.