diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index acd45fb..5d7ef2f 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -1304,6 +1304,8 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. ld_flag_italic TYPE abap_bool VALUE abap_false, ld_date TYPE d, ld_date_char TYPE c LENGTH 50, + ld_time TYPE t, + ld_time_char TYPE c LENGTH 20, ld_font_height TYPE zcl_excel_font=>ty_font_height VALUE zcl_excel_font=>lc_default_font_height, ld_font_name TYPE zexcel_style_font_name VALUE zcl_excel_font=>lc_default_font_name. @@ -1349,20 +1351,27 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. " If the current cell contains the default date format, " convert the cell value to a date and calculate its length - IF ls_stylemapping-complete_style-number_format-format_code = - zcl_excel_style_number_format=>c_format_date_std. + CASE ls_stylemapping-complete_style-number_format-format_code. + WHEN zcl_excel_style_number_format=>c_format_date_std. - " Convert excel date to ABAP date - ld_date = - zcl_excel_common=>excel_string_to_date( ld_cell_value ). + " Convert excel date to ABAP date + ld_date = + zcl_excel_common=>excel_string_to_date( ld_cell_value ). - " Format ABAP date using user's formatting settings - WRITE ld_date TO ld_date_char. + " Format ABAP date using user's formatting settings + WRITE ld_date TO ld_date_char. - " Remember the formatted date to calculate the cell size - ld_cell_value = ld_date_char. + " Remember the formatted date to calculate the cell size + ld_cell_value = ld_date_char. + + WHEN get_default_excel_time_format( ). + + ld_time = zcl_excel_common=>excel_string_to_time( ld_cell_value ). + WRITE ld_time TO ld_time_char. + ld_cell_value = ld_time_char. + + ENDCASE. - ENDIF. " Read the font size and convert it to the font height " used by SAPscript (multiplication by 10) @@ -4474,7 +4483,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. METHOD set_table. - DATA: lo_structdescr TYPE REF TO cl_abap_structdescr, + DATA: lo_structdescr TYPE REF TO cl_abap_structdescr, lr_data TYPE REF TO data, lt_dfies TYPE ddfields, lv_row_int TYPE zexcel_cell_row, diff --git a/src/zcl_excel_writer_2007.clas.abap b/src/zcl_excel_writer_2007.clas.abap index 06e0b62..a9952bf 100644 --- a/src/zcl_excel_writer_2007.clas.abap +++ b/src/zcl_excel_writer_2007.clas.abap @@ -1234,13 +1234,15 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. CHECK iv_cell_style IS NOT INITIAL. + "Don't insert guid twice or even more + READ TABLE me->styles_cond_mapping TRANSPORTING NO FIELDS WITH KEY guid = iv_cell_style. + CHECK sy-subrc NE 0. + 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. + "The content of this style is equal to an existing one. Share its dxfid. ls_style_cond_mapping-guid = iv_cell_style. APPEND ls_style_cond_mapping TO me->styles_cond_mapping. ELSE. @@ -1254,6 +1256,9 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. lo_sub_element = io_ixml_document->create_simple_element( name = lc_xml_node_dxf parent = io_ixml_document ). + lv_index = ls_styles_mapping-style + 1. + READ TABLE it_cellxfs INTO ls_cellxfs INDEX lv_index. + "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. @@ -1293,7 +1298,8 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. "---Conditional formatting font style correction by Alessandro Iannacci END - READ TABLE it_fills INTO ls_fill INDEX ls_cellxfs-fillid. + lv_index = ls_cellxfs-fillid + 1. + READ TABLE it_fills INTO ls_fill INDEX lv_index. IF ls_fill IS NOT INITIAL. " fill properties lo_element_fill = io_ixml_document->create_simple_element( name = lc_xml_node_fill @@ -1329,9 +1335,9 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. lo_sub_element->append_child( new_child = lo_element_fill ). ENDIF. - ENDIF. - io_dxf_element->append_child( new_child = lo_sub_element ). + io_dxf_element->append_child( new_child = lo_sub_element ). + ENDIF. ENDMETHOD. @@ -5401,6 +5407,17 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. cv_dfx_count = lv_dfx_count ). * begin of change issue #366 - missing conditional rules: top10, move dfx-styles to own method + WHEN zcl_excel_style_cond=>c_rule_textfunction. + me->create_dxf_style( EXPORTING + iv_cell_style = lo_style_cond->mode_textfunction-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 OTHERS. CONTINUE. ENDCASE. diff --git a/src/zcl_excel_writer_2007.clas.locals_imp.abap b/src/zcl_excel_writer_2007.clas.locals_imp.abap index ae9def7..b8afbff 100644 --- a/src/zcl_excel_writer_2007.clas.locals_imp.abap +++ b/src/zcl_excel_writer_2007.clas.locals_imp.abap @@ -1171,7 +1171,7 @@ CLASS lcl_create_xl_sheet IMPLEMENTATION. *--------------------------------------------------------------------------------------* WHEN zcl_excel_style_cond=>c_rule_textfunction. ls_textfunction = lo_style_cond->mode_textfunction. - READ TABLE o_excel_ref->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_cellis-cell_style. + READ TABLE o_excel_ref->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_textfunction-cell_style. lv_value = ls_style_cond_mapping-dxf. CONDENSE lv_value. lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid diff --git a/src/zexcel_s_cstyle_fill.tabl.xml b/src/zexcel_s_cstyle_fill.tabl.xml index 3e511ec..0000e06 100644 --- a/src/zexcel_s_cstyle_fill.tabl.xml +++ b/src/zexcel_s_cstyle_fill.tabl.xml @@ -40,7 +40,7 @@ GRADTYPE - ZEXCEL_S_CSTYLEX_GRADTYPE + ZEXCEL_S_GRADIENT_TYPE 0 STRU STRUS