diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index 248d3e1..c1b63d3 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -665,6 +665,15 @@ CLASS zcl_excel_worksheet DEFINITION RAISING zcx_excel . PROTECTED SECTION. + METHODS set_table_reference + IMPORTING + !ip_column TYPE zexcel_cell_column + !ip_row TYPE zexcel_cell_row + !ir_table TYPE REF TO zcl_excel_table + !ip_fieldname TYPE zexcel_fieldname + !ip_header TYPE abap_bool + RAISING + zcx_excel . PRIVATE SECTION. *"* private components of class ZCL_EXCEL_WORKSHEET @@ -1050,14 +1059,20 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. IF -style_header IS NOT INITIAL. me->set_cell( ip_column = lv_column_alpha ip_row = lv_row_int - ip_value = -scrtext_l + ip_value = -column_name ip_style = -style_header ). ELSE. me->set_cell( ip_column = lv_column_alpha ip_row = lv_row_int - ip_value = -scrtext_l ). + ip_value = -column_name ). ENDIF. + me->set_table_reference( ip_column = lv_column_int + ip_row = lv_row_int + ir_table = lo_table + ip_fieldname = -fieldname + ip_header = abap_true ). + IF -column_formula IS NOT INITIAL. ls_column_formula-id = lines( column_formulas ) + 1. ls_column_formula-column = lv_column_int. @@ -1168,7 +1183,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. " totals *--------------------------------------------------------------------* IF -totals_function IS NOT INITIAL. - lv_formula = lo_table->get_totals_formula( ip_column = -scrtext_l ip_function = -totals_function ). + lv_formula = lo_table->get_totals_formula( ip_column = -column_name ip_function = -totals_function ). IF -style_total IS NOT INITIAL. me->set_cell( ip_column = lv_column_alpha ip_row = lv_row_int @@ -2966,7 +2981,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, lv_value_lowercase TYPE string, - lv_scrtext_l_initial TYPE scrtext_l, + lv_scrtext_l_initial TYPE zexcel_column_name, lv_long_text TYPE string, lv_max_length TYPE i, lv_temp_length TYPE i, @@ -2985,39 +3000,42 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. LOOP AT lt_field_catalog ASSIGNING WHERE dynpfld EQ abap_true. - CASE iv_default_descr. - WHEN 'M'. - ASSIGN -scrtext_m TO . - ASSIGN -scrtext_s TO . - ASSIGN -scrtext_l TO . - WHEN 'S'. - ASSIGN -scrtext_s TO . - ASSIGN -scrtext_m TO . - ASSIGN -scrtext_l TO . - WHEN 'L'. - ASSIGN -scrtext_l TO . - ASSIGN -scrtext_m TO . - ASSIGN -scrtext_s TO . - WHEN OTHERS. - ASSIGN -scrtext_m TO . - ASSIGN -scrtext_s TO . - ASSIGN -scrtext_l TO . - ENDCASE. + IF -column_name IS INITIAL. - IF IS NOT INITIAL. - -scrtext_l = . - ELSEIF IS NOT INITIAL. - -scrtext_l = . - ELSEIF IS NOT INITIAL. - -scrtext_l = . - ELSE. - -scrtext_l = 'Column'. " default value as Excel does + CASE iv_default_descr. + WHEN 'M'. + ASSIGN -scrtext_m TO . + ASSIGN -scrtext_s TO . + ASSIGN -scrtext_l TO . + WHEN 'S'. + ASSIGN -scrtext_s TO . + ASSIGN -scrtext_m TO . + ASSIGN -scrtext_l TO . + WHEN 'L'. + ASSIGN -scrtext_l TO . + ASSIGN -scrtext_m TO . + ASSIGN -scrtext_s TO . + WHEN OTHERS. + ASSIGN -scrtext_m TO . + ASSIGN -scrtext_s TO . + ASSIGN -scrtext_l TO . + ENDCASE. + + IF IS NOT INITIAL. + -column_name = . + ELSEIF IS NOT INITIAL. + -column_name = . + ELSEIF IS NOT INITIAL. + -column_name = . + ELSE. + -column_name = 'Column'. " default value as Excel does + ENDIF. ENDIF. - lv_scrtext_l_initial = -scrtext_l. - DESCRIBE FIELD -scrtext_l LENGTH lv_max_length IN CHARACTER MODE. + lv_scrtext_l_initial = -column_name. + DESCRIBE FIELD -column_name LENGTH lv_max_length IN CHARACTER MODE. DO. - lv_value_lowercase = -scrtext_l. + lv_value_lowercase = -column_name. TRANSLATE lv_value_lowercase TO LOWER CASE. READ TABLE lt_column_name_buffer TRANSPORTING NO FIELDS WITH KEY table_line = lv_value_lowercase BINARY SEARCH. IF sy-subrc <> 0. @@ -3027,11 +3045,11 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. lv_syindex = sy-index. CONCATENATE lv_scrtext_l_initial lv_syindex INTO lv_long_text. IF strlen( lv_long_text ) <= lv_max_length. - -scrtext_l = lv_long_text. + -column_name = lv_long_text. ELSE. lv_temp_length = strlen( lv_scrtext_l_initial ) - 1. lv_scrtext_l_initial = substring( val = lv_scrtext_l_initial len = lv_temp_length ). - CONCATENATE lv_scrtext_l_initial lv_syindex INTO -scrtext_l. + CONCATENATE lv_scrtext_l_initial lv_syindex INTO -column_name. ENDIF. ENDIF. ENDDO. @@ -3501,7 +3519,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. TYPE simple, TYPE abap_typekind. FIELD-SYMBOLS: TYPE mty_s_column_formula. - + FIELD-SYMBOLS: TYPE zexcel_s_fieldcatalog. IF ip_value IS NOT SUPPLIED AND ip_formula IS NOT SUPPLIED @@ -3644,6 +3662,16 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. ENDCASE. ENDIF. + IF IS ASSIGNED AND -table_header IS NOT INITIAL AND lv_value IS NOT INITIAL. + READ TABLE -table->fieldcat ASSIGNING WITH KEY fieldname = -table_fieldname. + IF sy-subrc = 0. + -column_name = lv_value. + IF -column_name <> lv_value. + zcx_excel=>raise_text( 'Cell is table column header - this value is not allowed' ). + ENDIF. + ENDIF. + ENDIF. + ENDIF. IF ip_hyperlink IS BOUND. @@ -3814,6 +3842,23 @@ CLASS zcl_excel_worksheet IMPLEMENTATION. ENDMETHOD. "SET_CELL_STYLE + METHOD set_table_reference. + + FIELD-SYMBOLS: TYPE zexcel_s_cell_data. + + READ TABLE sheet_content ASSIGNING WITH KEY cell_row = ip_row + cell_column = ip_column. + IF sy-subrc = 0. + -table = ir_table. + -table_fieldname = ip_fieldname. + -table_header = ip_header. + ELSE. + zcx_excel=>raise_text( 'Cell not found' ). + ENDIF. + + ENDMETHOD. + + METHOD set_column_width. DATA: lo_column TYPE REF TO zcl_excel_column. DATA: width TYPE f. diff --git a/src/zcl_excel_writer_2007.clas.abap b/src/zcl_excel_writer_2007.clas.abap index a5a1580..46154e7 100644 --- a/src/zcl_excel_writer_2007.clas.abap +++ b/src/zcl_excel_writer_2007.clas.abap @@ -7432,7 +7432,8 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. SHIFT lv_value LEFT DELETING LEADING '0'. lo_element2->set_attribute_ns( name = 'id' value = lv_value ). - lv_value = ls_fieldcat-scrtext_l. + + lv_value = ls_fieldcat-column_name. " 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. @@ -7469,8 +7470,8 @@ CLASS zcl_excel_writer_2007 IMPLEMENTATION. ENDLOOP. - lo_element = lo_document->create_simple_element( name = 'tableStyleInfo' - parent = lo_element_root ). + 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 ). diff --git a/src/zexcel_column_name.dtel.xml b/src/zexcel_column_name.dtel.xml new file mode 100644 index 0000000..835a522 --- /dev/null +++ b/src/zexcel_column_name.dtel.xml @@ -0,0 +1,24 @@ + + + + + + ZEXCEL_COLUMN_NAME + E + 15 + 10 + 11 + 16 + Cell Column + Column Name + ColumnName + Column Name + Column Name + E + CHAR + 000255 + 000255 + + + + diff --git a/src/zexcel_s_cell_data.tabl.xml b/src/zexcel_s_cell_data.tabl.xml index 124995e..377f0a9 100644 --- a/src/zexcel_s_cell_data.tabl.xml +++ b/src/zexcel_s_cell_data.tabl.xml @@ -71,6 +71,29 @@ TTYPL L + + TABLE + ZCL_EXCEL_TABLE + 0 + REF + REF RC + R + C + + + TABLE_FIELDNAME + ZEXCEL_FIELDNAME + 0 + E + + + TABLE_HEADER + FLAG + 0 + X + F + E + diff --git a/src/zexcel_s_fieldcatalog.tabl.xml b/src/zexcel_s_fieldcatalog.tabl.xml index 78dbd1f..b7958b7 100644 --- a/src/zexcel_s_fieldcatalog.tabl.xml +++ b/src/zexcel_s_fieldcatalog.tabl.xml @@ -111,6 +111,12 @@ STRG Column Formula + + COLUMN_NAME + ZEXCEL_COLUMN_NAME + 0 + E +