From 1455f6e4363c8c7529de32e6040aa30cf8a0fc5d Mon Sep 17 00:00:00 2001 From: Ivan Femia Date: Thu, 11 Nov 2010 22:10:14 +0000 Subject: [PATCH] Fix issue #35 git-svn-id: https://subversion.assembla.com/svn/abap2xlsx/trunk@43 b7d68dce-7c3c-4a99-8ce0-9ea847f5d049 --- ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk | 68 ++-- ZA2X/CLAS/ZCL_EXCEL_STYLE_NUMBER_FORMAT.slnk | 112 ++++--- ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk | 335 ++++++++----------- 3 files changed, 228 insertions(+), 287 deletions(-) diff --git a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk index cd598a1..169b333 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_COMMON.slnk @@ -1,5 +1,5 @@ - + class ZCL_EXCEL_COMMON definition public final @@ -10,6 +10,7 @@ public section. class-data C_EXCEL_NUMFMT_OFFSET type INT1 value 164. "#EC NOTEXT . + class-data C_SPRAS_EN type SPRAS value 'EN'. "#EC NOTEXT . class-methods GET_FIELDCATALOG importing @@ -57,11 +58,12 @@ 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 CONVERT_COLUMN2ALPHA. DATA: lo_conv TYPE REF TO cl_abap_conv_in_ce, @@ -83,9 +85,9 @@ private section. endmethod. - - - + + + method CONVERT_COLUMN2INT. DATA: lv_uccpi TYPE i, @@ -113,9 +115,20 @@ endmethod. endmethod. - - - + + + + method DATE_TO_EXCEL_STRING. + DATA: lv_date_diff TYPE i, + lc_date_baseline TYPE d VALUE '19000101'. + + lv_date_diff = ip_value - lc_date_baseline + 2. + ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_date_diff ). +endmethod. + + + + method GET_FIELDCATALOG. DATA: lr_data TYPE REF TO data, @@ -140,21 +153,10 @@ endmethod. endmethod. - - - - METHOD date_to_excel_string. - DATA: lv_date_diff TYPE i, - lc_date_baseline TYPE d VALUE '19000101'. - - lv_date_diff = ip_value - lc_date_baseline + 2. - ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_date_diff ). -ENDMETHOD. - - - - - METHOD number_to_excel_string. + + + + method NUMBER_TO_EXCEL_STRING. DATA: lv_value_c TYPE c LENGTH 100. WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN. @@ -166,12 +168,12 @@ ENDMETHOD. IF ip_value < 0. CONCATENATE '-' ep_value INTO ep_value. ENDIF. -ENDMETHOD. +endmethod. - - - - METHOD time_to_excel_string. + + + + method TIME_TO_EXCEL_STRING. DATA: lv_seconds_in_day TYPE i, lv_day_fraction TYPE f, lc_time_baseline TYPE t VALUE '000000', @@ -180,6 +182,6 @@ ENDMETHOD. lv_seconds_in_day = ip_value - lc_time_baseline. lv_day_fraction = lv_seconds_in_day / lc_seconds_in_day. ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_day_fraction ). -ENDMETHOD. +endmethod. diff --git a/ZA2X/CLAS/ZCL_EXCEL_STYLE_NUMBER_FORMAT.slnk b/ZA2X/CLAS/ZCL_EXCEL_STYLE_NUMBER_FORMAT.slnk index 763ef8e..034e888 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_STYLE_NUMBER_FORMAT.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_STYLE_NUMBER_FORMAT.slnk @@ -9,25 +9,16 @@ *"* do not include other source files here!!! public section. - constants C_FORMAT_NUMBER type ZEXCEL_NUMBER_FORMAT value '0'. "#EC NOTEXT - constants C_FORMAT_NUMBER_00 type ZEXCEL_NUMBER_FORMAT value '0.00'. "#EC NOTEXT - constants C_FORMAT_NUMBER_COMMA_SEP1 type ZEXCEL_NUMBER_FORMAT value '#,##0.00'. "#EC NOTEXT - constants C_FORMAT_NUMBER_COMMA_SEP2 type ZEXCEL_NUMBER_FORMAT value '#,##0.00_-'. "#EC NOTEXT - constants C_FORMAT_PERCENTAGE type ZEXCEL_NUMBER_FORMAT value '0%'. "#EC NOTEXT - constants C_FORMAT_PERCENTAGE_00 type ZEXCEL_NUMBER_FORMAT value '0.00%'. "#EC NOTEXT - constants C_FORMAT_DATE_YYYYMMDD2 type ZEXCEL_NUMBER_FORMAT value 'yyyy-mm-dd'. "#EC NOTEXT - constants C_FORMAT_DATE_YYYYMMDD type ZEXCEL_NUMBER_FORMAT value 'yy-mm-dd'. "#EC NOTEXT - constants C_FORMAT_DATE_DDMMYYYY type ZEXCEL_NUMBER_FORMAT value 'dd/mm/yy'. "#EC NOTEXT - constants C_FORMAT_DATE_DMYSLASH type ZEXCEL_NUMBER_FORMAT value 'd/m/y'. "#EC NOTEXT - constants C_FORMAT_DATE_DMYMINUS type ZEXCEL_NUMBER_FORMAT value 'd-m-y'. "#EC NOTEXT - constants C_FORMAT_DATE_DMMINUS type ZEXCEL_NUMBER_FORMAT value 'd-m'. "#EC NOTEXT - constants C_FORMAT_DATE_MYMINUS type ZEXCEL_NUMBER_FORMAT value 'm-y'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX14 type ZEXCEL_NUMBER_FORMAT value 'mm-dd-yy'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX15 type ZEXCEL_NUMBER_FORMAT value 'd-mmm-yy'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX16 type ZEXCEL_NUMBER_FORMAT value 'd-mmm'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX17 type ZEXCEL_NUMBER_FORMAT value 'mmm-yy'. "#EC NOTEXT - constants C_FORMAT_DATE_XLSX22 type ZEXCEL_NUMBER_FORMAT value 'm/d/yy h:mm'. "#EC NOTEXT + constants C_FORMAT_CURRENCY_EUR_SIMPLE type ZEXCEL_NUMBER_FORMAT value '[$EUR ]#,##0.00_-'. "#EC NOTEXT + constants C_FORMAT_CURRENCY_USD type ZEXCEL_NUMBER_FORMAT value '$#,##0_-'. "#EC NOTEXT + constants C_FORMAT_CURRENCY_USD_SIMPLE type ZEXCEL_NUMBER_FORMAT value '"$"#,##0.00_-'. "#EC NOTEXT constants C_FORMAT_DATE_DATETIME type ZEXCEL_NUMBER_FORMAT value 'd/m/y h:mm'. "#EC NOTEXT + constants C_FORMAT_DATE_DDMMYYYY type ZEXCEL_NUMBER_FORMAT value 'dd/mm/yy'. "#EC NOTEXT + constants C_FORMAT_DATE_DDMMYYYYDOT type ZEXCEL_NUMBER_FORMAT value 'DD.MM.YYYY'. "#EC NOTEXT + constants C_FORMAT_DATE_DMMINUS type ZEXCEL_NUMBER_FORMAT value 'd-m'. "#EC NOTEXT + constants C_FORMAT_DATE_DMYMINUS type ZEXCEL_NUMBER_FORMAT value 'd-m-y'. "#EC NOTEXT + constants C_FORMAT_DATE_DMYSLASH type ZEXCEL_NUMBER_FORMAT value 'd/m/y'. "#EC NOTEXT + constants C_FORMAT_DATE_MYMINUS type ZEXCEL_NUMBER_FORMAT value 'm-y'. "#EC NOTEXT constants C_FORMAT_DATE_TIME1 type ZEXCEL_NUMBER_FORMAT value 'h:mm AM/PM'. "#EC NOTEXT constants C_FORMAT_DATE_TIME2 type ZEXCEL_NUMBER_FORMAT value 'h:mm:ss AM/PM'. "#EC NOTEXT constants C_FORMAT_DATE_TIME3 type ZEXCEL_NUMBER_FORMAT value 'h:mm'. "#EC NOTEXT @@ -36,10 +27,20 @@ public section. constants C_FORMAT_DATE_TIME6 type ZEXCEL_NUMBER_FORMAT value 'h:mm:ss'. "#EC NOTEXT constants C_FORMAT_DATE_TIME7 type ZEXCEL_NUMBER_FORMAT value 'i:s.S'. "#EC NOTEXT constants C_FORMAT_DATE_TIME8 type ZEXCEL_NUMBER_FORMAT value 'h:mm:ss@'. "#EC NOTEXT + constants C_FORMAT_DATE_XLSX14 type ZEXCEL_NUMBER_FORMAT value 'mm-dd-yy'. "#EC NOTEXT + constants C_FORMAT_DATE_XLSX15 type ZEXCEL_NUMBER_FORMAT value 'd-mmm-yy'. "#EC NOTEXT + constants C_FORMAT_DATE_XLSX16 type ZEXCEL_NUMBER_FORMAT value 'd-mmm'. "#EC NOTEXT + constants C_FORMAT_DATE_XLSX17 type ZEXCEL_NUMBER_FORMAT value 'mmm-yy'. "#EC NOTEXT + constants C_FORMAT_DATE_XLSX22 type ZEXCEL_NUMBER_FORMAT value 'm/d/yy h:mm'. "#EC NOTEXT + constants C_FORMAT_DATE_YYYYMMDD type ZEXCEL_NUMBER_FORMAT value 'yy-mm-dd'. "#EC NOTEXT + constants C_FORMAT_DATE_YYYYMMDD2 type ZEXCEL_NUMBER_FORMAT value 'yyyy-mm-dd'. "#EC NOTEXT constants C_FORMAT_DATE_YYYYMMDDSLASH type ZEXCEL_NUMBER_FORMAT value 'yy/mm/dd@'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_USD_SIMPLE type ZEXCEL_NUMBER_FORMAT value '"$"#,##0.00_-'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_USD type ZEXCEL_NUMBER_FORMAT value '$#,##0_-'. "#EC NOTEXT - constants C_FORMAT_CURRENCY_EUR_SIMPLE type ZEXCEL_NUMBER_FORMAT value '[$EUR ]#,##0.00_-'. "#EC NOTEXT + constants C_FORMAT_NUMBER type ZEXCEL_NUMBER_FORMAT value '0'. "#EC NOTEXT + constants C_FORMAT_NUMBER_00 type ZEXCEL_NUMBER_FORMAT value '0.00'. "#EC NOTEXT + constants C_FORMAT_NUMBER_COMMA_SEP1 type ZEXCEL_NUMBER_FORMAT value '#,##0.00'. "#EC NOTEXT + constants C_FORMAT_NUMBER_COMMA_SEP2 type ZEXCEL_NUMBER_FORMAT value '#,##0.00_-'. "#EC NOTEXT + constants C_FORMAT_PERCENTAGE type ZEXCEL_NUMBER_FORMAT value '0%'. "#EC NOTEXT + constants C_FORMAT_PERCENTAGE_00 type ZEXCEL_NUMBER_FORMAT value '0.00%'. "#EC NOTEXT data FORMAT_CODE type ZEXCEL_NUMBER_FORMAT . methods CONSTRUCTOR . @@ -63,40 +64,41 @@ 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 CONSTRUCTOR. format_code = me->c_format_general. diff --git a/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk b/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk index 55d1d43..fa630e4 100644 --- a/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk +++ b/ZA2X/CLAS/ZCL_EXCEL_WORKSHEET.slnk @@ -1,6 +1,6 @@ - - - + + + class ZCL_EXCEL_WORKSHEET definition public final @@ -116,9 +116,6 @@ public section. methods GET_ROW_DIMENSIONS returning value(R_ROW_DIMENSION) type ZEXCEL_T_WORKSHEET_ROWDIMENSIO . - methods GET_HYPERLINKS_SIZE - returning - value(EP_SIZE) type I . methods GET_TABLES_ITERATOR returning value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . @@ -133,9 +130,6 @@ public section. !IP_FORMULA type ZEXCEL_CELL_FORMULA optional !IP_STYLE type ZEXCEL_CELL_STYLE optional !IP_HYPERLINK type ref to ZCL_EXCEL_HYPERLINK optional . - methods GET_HYPERLINKS_ITERATOR - returning - value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . methods SET_CELL_STYLE importing !IP_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA @@ -156,7 +150,12 @@ public section. !IP_TABLE_TITLE type STRING !IP_TOP_LEFT_COLUMN type ZEXCEL_CELL_COLUMN_ALPHA default 'B' !IP_TOP_LEFT_ROW type ZEXCEL_CELL_ROW default 3 . - methods CALCULATE_COLUMN_WIDTHS . + methods GET_HYPERLINKS_SIZE + returning + value(EP_SIZE) type I . + methods GET_HYPERLINKS_ITERATOR + returning + value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR . *"* protected components of class ZCL_EXCEL_WORKSHEET *"* do not include other source files here!!! protected section. @@ -190,38 +189,37 @@ 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 - ABAP - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - method ZIF_EXCEL_SHEET_PROTECTION~INITIALIZE. + METHOD zif_excel_sheet_protection~initialize. me->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_unprotected. CLEAR me->zif_excel_sheet_protection~password. @@ -244,34 +242,34 @@ private section. me->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_noactive. me->zif_excel_sheet_protection~sort = zif_excel_sheet_protection=>c_noactive. -endmethod. +ENDMETHOD. - - + + method ADD_DRAWING. drawings->add( ip_drawing ). endmethod. - - + + method ADD_NEW_CONDITIONAL_STYLE. CREATE OBJECT eo_conditional_style. conditional_styles->add( eo_conditional_style ). endmethod. - - + + method ADD_NEW_DATA_VALIDATION. CREATE OBJECT eo_data_validation. data_validations->add( eo_data_validation ). endmethod. - - - - + + + + method BIND_TABLE. DATA: @@ -394,71 +392,9 @@ endmethod. endmethod. - - METHOD calculate_column_widths. - TYPES: - BEGIN OF t_auto_size, - col_index TYPE int4, - width TYPE float, - END OF t_auto_size. - TYPES: tt_auto_size TYPE TABLE OF t_auto_size. - - DATA: column_dimensions TYPE zexcel_t_worksheet_columndime. - DATA: column_dimension TYPE REF TO zcl_excel_worksheet_columndime. - - DATA: auto_size TYPE flag. - DATA: auto_sizes TYPE tt_auto_size. - DATA: col_alpha TYPE zexcel_cell_column_alpha. - DATA: cell_value TYPE zexcel_cell_value. - DATA: count TYPE int4. - DATA: highest_row TYPE int4. - DATA: width TYPE i. - - FIELD-SYMBOLS: <column_dimension> LIKE LINE OF column_dimensions. - FIELD-SYMBOLS: <auto_size> LIKE LINE OF auto_sizes. - - column_dimensions[] = me->get_column_dimensions( ). - LOOP AT column_dimensions ASSIGNING <column_dimension>. - auto_size = <column_dimension>-column_dimension->get_auto_size( ). - IF auto_size = abap_true. - APPEND INITIAL LINE TO auto_sizes ASSIGNING <auto_size>. - <auto_size>-col_index = <column_dimension>-column_dimension->get_column_index( ). - <auto_size>-width = -1. - ENDIF. - ENDLOOP. - - " There is only something to do if there are some auto-size columns - IF NOT auto_sizes IS INITIAL. - highest_row = me->get_highest_row( ). - LOOP AT auto_sizes ASSIGNING <auto_size>. - col_alpha = zcl_excel_common=>convert_column2alpha( <auto_size>-col_index ). - count = 1. - WHILE count <= highest_row. - me->get_cell( - EXPORTING - ip_column = col_alpha " Cell Column - ip_row = count " Cell Row - IMPORTING - ep_value = cell_value " Cell Value - ). - " For an easy start we just take the number of characters as the width - " TODO: Calculate width using Font Size and Font Type - width = STRLEN( cell_value ). - IF width > <auto_size>-width. - <auto_size>-width = width. - ENDIF. - count = count + 1. - ENDWHILE. - column_dimension = me->get_column_dimension( col_alpha ). - column_dimension->set_width( <auto_size>-width ). - ENDLOOP. - ENDIF. - -ENDMETHOD. - - - - + + + method CONSTRUCTOR. me->excel = ip_excel. @@ -494,7 +430,7 @@ ENDMETHOD. upper_cell-cell_column = 1. endmethod. - + method DELETE_MERGE. DELETE sheet_content_merge INDEX 1. @@ -502,10 +438,10 @@ endmethod. endmethod. - - - - + + + + method FREEZE_PANES. data: lv_xsplit type i, lv_ysplit type i. @@ -532,8 +468,8 @@ endmethod. freeze_pane_cell_row = ip_num_rows + 1. endmethod. - - + + method GET_ACTIVE_CELL. DATA: lv_active_column TYPE zexcel_cell_column_alpha, @@ -547,11 +483,11 @@ endmethod. endmethod. - - - - - + + + + + method GET_CELL. DATA: lv_column TYPE zexcel_cell_column, @@ -568,9 +504,9 @@ endmethod. ep_value = ls_sheet_content-cell_value. endmethod. - - - + + + method GET_COLUMN_DIMENSION. FIELD-SYMBOLS: <fs_column_dimension> LIKE LINE OF column_dimensions. @@ -590,46 +526,46 @@ endmethod. endmethod. - - + + method GET_COLUMN_DIMENSIONS. r_column_dimension[] = me->column_dimensions[]. endmethod. - - + + method GET_COND_STYLES_ITERATOR. eo_iterator = me->conditional_styles->get_iterator( ). endmethod. - - + + method GET_DATA_VALIDATIONS_ITERATOR. eo_iterator = me->data_validations->get_iterator( ). endmethod. - - + + method GET_DATA_VALIDATIONS_SIZE. ep_size = me->data_validations->size( ). endmethod. - - + + method GET_DEFAULT_COLUMN_DIMENSION. r_column_dimension = me->default_column_dimension. endmethod. - - + + method GET_DEFAULT_ROW_DIMENSION. r_row_dimension = me->default_row_dimension. endmethod. - - + + method GET_DIMENSION_RANGE. me->update_dimension_range( ). @@ -641,62 +577,62 @@ endmethod. endmethod. - - + + method GET_DRAWINGS. r_drawings = drawings. endmethod. - - + + method GET_DRAWINGS_ITERATOR. eo_iterator = drawings->get_iterator( ). endmethod. - - - + + + method GET_FREEZE_CELL. ep_row = me->freeze_pane_cell_row. ep_column = me->freeze_pane_cell_column. endmethod. - - + + method GET_GUID. ep_guid = me->guid. endmethod. - - + + method GET_HIGHEST_COLUMN. me->update_dimension_range( ). r_highest_column = me->lower_cell-cell_column. endmethod. - - + + method GET_HIGHEST_ROW. me->update_dimension_range( ). r_highest_row = me->lower_cell-cell_row. endmethod. - - + + method GET_HYPERLINKS_ITERATOR. eo_iterator = hyperlinks->get_iterator( ). endmethod. - - + + method GET_HYPERLINKS_SIZE. ep_size = hyperlinks->size( ). endmethod. - - + + method GET_MERGE. DATA: lv_column_start TYPE string, @@ -767,9 +703,9 @@ endmethod. endmethod. - - - + + + method GET_ROW_DIMENSION. FIELD-SYMBOLS: <fs_row_dimension> LIKE LINE OF row_dimensions. @@ -789,32 +725,32 @@ endmethod. endmethod. - - + + method GET_ROW_DIMENSIONS. r_row_dimension[] = me->row_dimensions[]. endmethod. - - + + method GET_TABLES_ITERATOR. eo_iterator = tables->if_object_collection~get_iterator( ). endmethod. - - + + method GET_TABLES_SIZE. ep_size = tables->if_object_collection~size( ). endmethod. - - - - - - - - method SET_CELL. + + + + + + + + METHOD set_cell. DATA: lv_column TYPE zexcel_cell_column, ls_sheet_content TYPE zexcel_s_cell_data, @@ -851,7 +787,8 @@ endmethod. IF ip_style IS NOT SUPPLIED. "get default date format for user in case parameter is initial lo_style = excel->add_new_style( ). - cl_abap_datfm=>get_date_format_des( IMPORTING ex_dateformat = lo_style->number_format->format_code ). +* cl_abap_datfm=>get_date_format_des( IMPORTING ex_dateformat = lo_style->number_format->format_code ). "IF Issue #35 - + lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_date_ddmmyyyydot. "IF Issue #35 + lv_style_guid = lo_style->get_guid( ). ENDIF. @@ -904,13 +841,13 @@ endmethod. ENDIF. -endmethod. +ENDMETHOD. - - - - - + + + + + method SET_CELL_STYLE. DATA: lv_column TYPE zexcel_cell_column, @@ -938,10 +875,10 @@ endmethod. endmethod. - - - - + + + + method SET_MERGE. DATA: lv_column_start TYPE zexcel_cell_column, @@ -972,13 +909,13 @@ endmethod. endmethod. - - - - - - - + + + + + + + method SET_TABLE. DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr, @@ -1035,7 +972,7 @@ endmethod. endmethod. - + method UPDATE_DIMENSION_RANGE. DATA: ls_sheet_content TYPE zexcel_s_cell_data,