From 56cfd1dd546a98835d4464c5441242e40e4ae356 Mon Sep 17 00:00:00 2001 From: Gregor Wolf Date: Sat, 29 Jan 2011 21:14:42 +0000 Subject: [PATCH] Fill count attribute of mergeCells dynamically to fix issue #64. The demo report ZDEMO_EXCEL13 was adjusted to test also if merge works when oher merged chells are empty. git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@115 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049 --- ZA2X/CLAS/ZCL_EXCEL_WRITER_2007.slnk | 154 +++++++++++++++------------ ZA2X/PROG/ZDEMO_EXCEL13.slnk | 10 +- 2 files changed, 95 insertions(+), 69 deletions(-) diff --git a/ZA2X/CLAS/ZCL_EXCEL_WRITER_2007.slnk b/ZA2X/CLAS/ZCL_EXCEL_WRITER_2007.slnk index 97a9b9c..d78b88c 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_WRITER_2007.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_WRITER_2007.slnk @@ -1,6 +1,6 @@ - - + + class ZCL_EXCEL_WRITER_2007 definition public final @@ -112,32 +112,34 @@ private section. *"* implementation or private method's signature *"* use this source file for any macro definitions you need *"* in the implementation part of the class - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + method ZIF_EXCEL_WRITER~WRITE_FILE. me->excel = io_excel. ep_file = me->create( ). endmethod. - - + + method CREATE. @@ -306,9 +308,10 @@ endmethod. ep_excel = lo_zip->save( ). endmethod. + - - + + method CREATE_CONTENT_TYPES. @@ -560,9 +563,10 @@ endmethod. lo_renderer->render( ). endmethod. + - - + + method CREATE_DOCPROPS_APP. @@ -781,9 +785,10 @@ endmethod. lo_renderer->render( ). endmethod. + - - + + method CREATE_DOCPROPS_CORE. @@ -897,9 +902,10 @@ endmethod. lo_renderer->render( ). endmethod. + - - + + method CREATE_RELATIONSHIPS. @@ -996,10 +1002,11 @@ endmethod. lo_renderer->render( ). endmethod. + - - - + + + method CREATE_XL_DRAWINGS. @@ -1226,10 +1233,11 @@ endmethod. lo_renderer->render( ). endmethod. + - - - + + + method CREATE_XL_DRAWINGS_RELS. ** Constant node name @@ -1312,9 +1320,10 @@ endmethod. lo_renderer->render( ). endmethod. + - - + + method CREATE_XL_RELATIONSHIPS. @@ -1460,9 +1469,10 @@ endmethod. lo_renderer->render( ). endmethod. + - - + + method CREATE_XL_SHAREDSTRINGS. @@ -1577,12 +1587,13 @@ endmethod. lo_renderer->render( ). endmethod. + - - - - - METHOD create_xl_sheet. + + + + + method CREATE_XL_SHEET. ** Constant node name DATA: lc_xml_node_worksheet TYPE string VALUE 'worksheet', @@ -1747,6 +1758,7 @@ endmethod. outline_level_row TYPE i VALUE 0, outline_level_col TYPE i VALUE 0, col_count TYPE int4, + merge_count TYPE int4, write_current_row TYPE boolean. FIELD-SYMBOLS: <ls_sheet_content> TYPE zexcel_s_cell_data, @@ -2416,8 +2428,10 @@ endmethod. IF t_range_merge IS NOT INITIAL. lo_element = lo_document->create_simple_element( name = lc_xml_node_mergecells parent = lo_document ). + DESCRIBE TABLE t_range_merge LINES merge_count. + lv_value = merge_count. lo_element->set_attribute_ns( name = lc_xml_attr_count - value = '1' ). + value = lv_value ). LOOP AT t_range_merge ASSIGNING <fs_range_merge>. lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_mergecell parent = lo_document ). @@ -2703,12 +2717,13 @@ endmethod. lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). lo_renderer->render( ). -ENDMETHOD. +endmethod. + - - - - + + + + method CREATE_XL_SHEET_RELS. @@ -2849,9 +2864,10 @@ ENDMETHOD. lo_renderer->render( ). endmethod. + - - + + method CREATE_XL_STYLES. @@ -3583,10 +3599,11 @@ endmethod. lo_renderer->render( ). endmethod. + - - - + + + method CREATE_XL_TABLE. DATA: lc_xml_node_table TYPE string VALUE 'table', @@ -3754,9 +3771,10 @@ endmethod. lo_renderer->render( ). endmethod. + - - + + method CREATE_XL_THEME. @@ -3843,9 +3861,10 @@ endmethod. endmethod. + - - + + method CREATE_XL_WORKBOOK. @@ -4066,10 +4085,11 @@ endmethod. lo_renderer->render( ). endmethod. + - - - + + + method FLAG2BOOL. @@ -4079,10 +4099,11 @@ endmethod. ep_boolean = 'false'. ENDIF. endmethod. + - - - + + + method GET_SHARED_STRING_INDEX. @@ -4092,5 +4113,6 @@ endmethod. ep_index = ls_shared_string-string_no. endmethod. + diff --git a/ZA2X/PROG/ZDEMO_EXCEL13.slnk b/ZA2X/PROG/ZDEMO_EXCEL13.slnk index 3e9b117..7457f85 100644 --- a/ZA2X/PROG/ZDEMO_EXCEL13.slnk +++ b/ZA2X/PROG/ZDEMO_EXCEL13.slnk @@ -1,5 +1,5 @@ - + @@ -87,9 +87,13 @@ START-OF-SELECTION. lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = '' ip_style = lv_style_bold_border_guid ). lo_worksheet->set_cell( ip_row = 4 ip_column = 'F' ip_value = '' ip_style = lv_style_bold_border_guid ). lo_worksheet->set_cell( ip_row = 4 ip_column = 'G' ip_value = '' ip_style = lv_style_bold_border_guid ). - lo_worksheet->set_merge( ip_row = 4 ip_column_start = 'B' ip_column_end = 'G' ). - lo_worksheet->set_merge( ip_row = 2 ip_column_start = 'B' ip_column_end = 'G' ). + lo_worksheet->set_merge( ip_row = 4 ip_column_start = 'B' ip_column_end = 'G' ). + lo_worksheet->set_merge( ip_row = 6 ip_column_start = 'B' ip_column_end = 'G' ). + + " Test also if merge works when oher merged chells are empty + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Tomato' ). + lo_worksheet->set_merge( ip_row = 2 ip_column_start = 'B' ip_column_end = 'G' ). CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. lv_file = lo_excel_writer->write_file( lo_excel ).