mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 13:46:17 +08:00
Merge branch 'main' into patch-autofilter-alv
This commit is contained in:
commit
9b7932d5c7
|
@ -54,6 +54,7 @@
|
||||||
{"object": "ZCL_EXCEL_WRITER_2007", "class": "ltc_column_formula", "method": "one_column_formula", "note": "?? CALL TRANSFORMATION xml_header = 'no'"},
|
{"object": "ZCL_EXCEL_WRITER_2007", "class": "ltc_column_formula", "method": "one_column_formula", "note": "?? CALL TRANSFORMATION xml_header = 'no'"},
|
||||||
{"object": "ZCL_EXCEL_WRITER_2007", "class": "ltc_column_formula", "method": "two_column_formulas", "note": "??"},
|
{"object": "ZCL_EXCEL_WRITER_2007", "class": "ltc_column_formula", "method": "two_column_formulas", "note": "??"},
|
||||||
|
|
||||||
|
{"object": "ZCL_EXCEL_COMMON", "class": "ltc_utclong_to_excel_string", "method": "simple", "note": "?? missing method CL_ABAP_TSTMP=>UTCLONG2TSTMP_SHORT, I'm too lazy to add it today"},
|
||||||
{"object": "ZCL_EXCEL_COMMON", "class": "lcl_excel_common_test", "method": "convert_column2int_oob_empty", "note": "?? sy value defaults"}
|
{"object": "ZCL_EXCEL_COMMON", "class": "lcl_excel_common_test", "method": "convert_column2int_oob_empty", "note": "?? sy value defaults"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
"url": "git+https://github.com/abap2xlsx/abap2xlsx.git"
|
"url": "git+https://github.com/abap2xlsx/abap2xlsx.git"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@abaplint/cli": "^2.105.14",
|
"@abaplint/cli": "^2.112.10",
|
||||||
"@abaplint/transpiler-cli": "^2.7.153",
|
"@abaplint/transpiler-cli": "^2.10.9",
|
||||||
"@abaplint/runtime": "^2.7.153"
|
"@abaplint/runtime": "^2.10.9"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,6 +166,11 @@ CLASS zcl_excel_common DEFINITION
|
||||||
!ip_value TYPE t
|
!ip_value TYPE t
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ep_value) TYPE zexcel_cell_value .
|
VALUE(ep_value) TYPE zexcel_cell_value .
|
||||||
|
CLASS-METHODS utclong_to_excel_string
|
||||||
|
IMPORTING
|
||||||
|
!ip_utclong TYPE any
|
||||||
|
RETURNING
|
||||||
|
VALUE(ep_value) TYPE zexcel_cell_value .
|
||||||
TYPES: t_char10 TYPE c LENGTH 10.
|
TYPES: t_char10 TYPE c LENGTH 10.
|
||||||
TYPES: t_char255 TYPE c LENGTH 255.
|
TYPES: t_char255 TYPE c LENGTH 255.
|
||||||
CLASS-METHODS split_file
|
CLASS-METHODS split_file
|
||||||
|
@ -1725,4 +1730,19 @@ CLASS zcl_excel_common IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD utclong_to_excel_string.
|
||||||
|
DATA lv_timestamp TYPE timestamp.
|
||||||
|
DATA lv_date TYPE d.
|
||||||
|
DATA lv_time TYPE t.
|
||||||
|
|
||||||
|
" The data type UTCLONG and the method UTCLONG2TSTMP_SHORT are not available before ABAP 7.54
|
||||||
|
" -> Need of a dynamic call to avoid compilation error before ABAP 7.54
|
||||||
|
|
||||||
|
CALL METHOD cl_abap_tstmp=>('UTCLONG2TSTMP_SHORT')
|
||||||
|
EXPORTING utclong = ip_utclong
|
||||||
|
RECEIVING timestamp = lv_timestamp.
|
||||||
|
CONVERT TIME STAMP lv_timestamp TIME ZONE 'UTC ' INTO DATE lv_date TIME lv_time.
|
||||||
|
ep_value = |{ date_to_excel_string( lv_date ) + time_to_excel_string( lv_time ) }|.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -136,6 +136,17 @@ CLASS lcl_excel_common_test DEFINITION FOR TESTING
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltc_utclong_to_excel_string DEFINITION
|
||||||
|
FOR TESTING
|
||||||
|
RISK LEVEL HARMLESS
|
||||||
|
DURATION SHORT.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
METHODS simple FOR TESTING.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_Excel_Common_Test IMPLEMENTATION
|
* CLASS lcl_Excel_Common_Test IMPLEMENTATION
|
||||||
|
@ -1812,3 +1823,33 @@ CLASS lcl_excel_common_test IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
CLASS ltc_utclong_to_excel_string IMPLEMENTATION.
|
||||||
|
METHOD simple.
|
||||||
|
FIELD-SYMBOLS <lv_typekind_utclong> TYPE abap_typekind.
|
||||||
|
FIELD-SYMBOLS <lv_utclong> TYPE simple.
|
||||||
|
DATA lo_rtti_utclong TYPE REF TO cl_abap_datadescr.
|
||||||
|
DATA lv_variable_utclong TYPE REF TO data.
|
||||||
|
DATA lv_excel_string TYPE zexcel_cell_value.
|
||||||
|
|
||||||
|
" Skip this test before ABAP 7.54 (UTCLONG does not exist).
|
||||||
|
" Need of dynamic referencing and dynamic call to avoid compilation error before ABAP 7.54.
|
||||||
|
|
||||||
|
ASSIGN ('CL_ABAP_TYPEDESCR=>TYPEKIND_UTCLONG') TO <lv_typekind_utclong>.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CALL METHOD cl_abap_elemdescr=>('GET_UTCLONG')
|
||||||
|
RECEIVING p_result = lo_rtti_utclong.
|
||||||
|
CREATE DATA lv_variable_utclong TYPE HANDLE lo_rtti_utclong.
|
||||||
|
ASSIGN lv_variable_utclong->* TO <lv_utclong>.
|
||||||
|
|
||||||
|
<lv_utclong> = '2024-08-04 19:47:00.9999999'.
|
||||||
|
lv_excel_string = zcl_excel_common=>utclong_to_excel_string( <lv_utclong> ).
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals( exp = '45508.82430555555556'
|
||||||
|
act = lv_excel_string ).
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
|
@ -5,6 +5,21 @@ CLASS zcl_excel_font DEFINITION
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
TYPES ty_font_height TYPE n LENGTH 3.
|
||||||
|
CONSTANTS lc_default_font_height TYPE ty_font_height VALUE '110' ##NO_TEXT.
|
||||||
|
CONSTANTS lc_default_font_name TYPE zexcel_style_font_name VALUE 'Calibri' ##NO_TEXT.
|
||||||
|
|
||||||
|
CLASS-METHODS calculate_text_width
|
||||||
|
IMPORTING
|
||||||
|
!iv_font_name TYPE zexcel_style_font_name
|
||||||
|
!iv_font_height TYPE ty_font_height
|
||||||
|
!iv_flag_bold TYPE abap_bool
|
||||||
|
!iv_flag_italic TYPE abap_bool
|
||||||
|
!iv_cell_value TYPE zexcel_cell_value
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_width) TYPE f .
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
TYPES:
|
TYPES:
|
||||||
BEGIN OF mty_s_font_metric,
|
BEGIN OF mty_s_font_metric,
|
||||||
char TYPE c LENGTH 1,
|
char TYPE c LENGTH 1,
|
||||||
|
@ -17,7 +32,7 @@ CLASS zcl_excel_font DEFINITION
|
||||||
TYPES:
|
TYPES:
|
||||||
BEGIN OF mty_s_font_cache,
|
BEGIN OF mty_s_font_cache,
|
||||||
font_name TYPE zexcel_style_font_name,
|
font_name TYPE zexcel_style_font_name,
|
||||||
font_height TYPE tdfontsize,
|
font_height TYPE ty_font_height,
|
||||||
flag_bold TYPE abap_bool,
|
flag_bold TYPE abap_bool,
|
||||||
flag_italic TYPE abap_bool,
|
flag_italic TYPE abap_bool,
|
||||||
th_font_metrics TYPE mty_th_font_metrics,
|
th_font_metrics TYPE mty_th_font_metrics,
|
||||||
|
@ -27,21 +42,8 @@ CLASS zcl_excel_font DEFINITION
|
||||||
TYPE HASHED TABLE OF mty_s_font_cache
|
TYPE HASHED TABLE OF mty_s_font_cache
|
||||||
WITH UNIQUE KEY font_name font_height flag_bold flag_italic .
|
WITH UNIQUE KEY font_name font_height flag_bold flag_italic .
|
||||||
|
|
||||||
CONSTANTS lc_default_font_height TYPE tdfontsize VALUE '110' ##NO_TEXT.
|
|
||||||
CONSTANTS lc_default_font_name TYPE zexcel_style_font_name VALUE 'Calibri' ##NO_TEXT.
|
|
||||||
CLASS-DATA mth_font_cache TYPE mty_th_font_cache .
|
CLASS-DATA mth_font_cache TYPE mty_th_font_cache .
|
||||||
|
|
||||||
CLASS-METHODS calculate_text_width
|
|
||||||
IMPORTING
|
|
||||||
!iv_font_name TYPE zexcel_style_font_name
|
|
||||||
!iv_font_height TYPE tdfontsize
|
|
||||||
!iv_flag_bold TYPE abap_bool
|
|
||||||
!iv_flag_italic TYPE abap_bool
|
|
||||||
!iv_cell_value TYPE zexcel_cell_value
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_width) TYPE f .
|
|
||||||
PROTECTED SECTION.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -135,10 +135,10 @@ CLASS zcl_excel_style_fill IMPLEMENTATION.
|
||||||
gradtype-type = c_fill_gradient_path.
|
gradtype-type = c_fill_gradient_path.
|
||||||
gradtype-position1 = '0'.
|
gradtype-position1 = '0'.
|
||||||
gradtype-position2 = '1'.
|
gradtype-position2 = '1'.
|
||||||
gradtype-bottom = '0.5'.
|
gradtype-bottom = '1'.
|
||||||
gradtype-top = '0.5'.
|
gradtype-top = '1'.
|
||||||
gradtype-left = '0.5'.
|
gradtype-left = '1'.
|
||||||
gradtype-right = '0.5'.
|
gradtype-right = '1'.
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
|
|
||||||
ENDMETHOD. "build_gradient
|
ENDMETHOD. "build_gradient
|
||||||
|
|
|
@ -708,6 +708,11 @@ CLASS zcl_excel_worksheet DEFINITION
|
||||||
*"* private components of class ZCL_EXCEL_WORKSHEET
|
*"* private components of class ZCL_EXCEL_WORKSHEET
|
||||||
*"* do not include other source files here!!!
|
*"* do not include other source files here!!!
|
||||||
TYPES ty_table_settings TYPE STANDARD TABLE OF zexcel_s_table_settings WITH DEFAULT KEY.
|
TYPES ty_table_settings TYPE STANDARD TABLE OF zexcel_s_table_settings WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
CONSTANTS typekind_utclong TYPE abap_typekind VALUE 'p'.
|
||||||
|
|
||||||
|
CLASS-DATA variable_utclong TYPE REF TO data.
|
||||||
|
|
||||||
DATA active_cell TYPE zexcel_s_cell_data .
|
DATA active_cell TYPE zexcel_s_cell_data .
|
||||||
DATA charts TYPE REF TO zcl_excel_drawings .
|
DATA charts TYPE REF TO zcl_excel_drawings .
|
||||||
DATA columns TYPE REF TO zcl_excel_columns .
|
DATA columns TYPE REF TO zcl_excel_columns .
|
||||||
|
@ -1299,7 +1304,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
|
||||||
ld_flag_italic TYPE abap_bool VALUE abap_false,
|
ld_flag_italic TYPE abap_bool VALUE abap_false,
|
||||||
ld_date TYPE d,
|
ld_date TYPE d,
|
||||||
ld_date_char TYPE c LENGTH 50,
|
ld_date_char TYPE c LENGTH 50,
|
||||||
ld_font_height TYPE tdfontsize VALUE zcl_excel_font=>lc_default_font_height,
|
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.
|
ld_font_name TYPE zexcel_style_font_name VALUE zcl_excel_font=>lc_default_font_name.
|
||||||
|
|
||||||
" Determine cell content and cell style
|
" Determine cell content and cell style
|
||||||
|
@ -2023,12 +2028,20 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD class_constructor.
|
METHOD class_constructor.
|
||||||
|
FIELD-SYMBOLS <lv_typekind> TYPE abap_typekind.
|
||||||
|
DATA lo_rtti TYPE REF TO cl_abap_datadescr.
|
||||||
|
|
||||||
c_messages-formula_id_only_is_possible = |{ 'If Formula ID is used, value and formula must be empty'(008) }|.
|
c_messages-formula_id_only_is_possible = |{ 'If Formula ID is used, value and formula must be empty'(008) }|.
|
||||||
c_messages-column_formula_id_not_found = |{ 'The Column Formula does not exist'(009) }|.
|
c_messages-column_formula_id_not_found = |{ 'The Column Formula does not exist'(009) }|.
|
||||||
c_messages-formula_not_in_this_table = |{ 'The cell uses a Column Formula which should be part of the same table'(010) }|.
|
c_messages-formula_not_in_this_table = |{ 'The cell uses a Column Formula which should be part of the same table'(010) }|.
|
||||||
c_messages-formula_in_other_column = |{ 'The cell uses a Column Formula which is in a different column'(011) }|.
|
c_messages-formula_in_other_column = |{ 'The cell uses a Column Formula which is in a different column'(011) }|.
|
||||||
|
|
||||||
|
ASSIGN ('CL_ABAP_TYPEDESCR=>TYPEKIND_UTCLONG') TO <lv_typekind>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
CALL METHOD cl_abap_elemdescr=>('GET_UTCLONG') RECEIVING p_result = lo_rtti.
|
||||||
|
CREATE DATA variable_utclong TYPE HANDLE lo_rtti.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -3847,6 +3860,7 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
|
||||||
<fs_typekind_int8> TYPE abap_typekind.
|
<fs_typekind_int8> TYPE abap_typekind.
|
||||||
FIELD-SYMBOLS: <fs_column_formula> TYPE mty_s_column_formula.
|
FIELD-SYMBOLS: <fs_column_formula> TYPE mty_s_column_formula.
|
||||||
FIELD-SYMBOLS: <ls_fieldcat> TYPE zexcel_s_fieldcatalog.
|
FIELD-SYMBOLS: <ls_fieldcat> TYPE zexcel_s_fieldcatalog.
|
||||||
|
FIELD-SYMBOLS <lv_utclong> TYPE simple.
|
||||||
|
|
||||||
IF ip_value IS NOT SUPPLIED
|
IF ip_value IS NOT SUPPLIED
|
||||||
AND ip_formula IS NOT SUPPLIED
|
AND ip_formula IS NOT SUPPLIED
|
||||||
|
@ -3990,6 +4004,13 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
|
||||||
* ENDIF.
|
* ENDIF.
|
||||||
* End of change issue #152 - don't touch exisiting style if only value is passed
|
* End of change issue #152 - don't touch exisiting style if only value is passed
|
||||||
|
|
||||||
|
WHEN typekind_utclong.
|
||||||
|
ASSIGN variable_utclong->* TO <lv_utclong>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
<lv_utclong> = <fs_value>.
|
||||||
|
lv_value = zcl_excel_common=>utclong_to_excel_string( <lv_utclong> ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
WHEN OTHERS.
|
WHEN OTHERS.
|
||||||
zcx_excel=>raise_text( 'Invalid data type of input value' ).
|
zcx_excel=>raise_text( 'Invalid data type of input value' ).
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
|
@ -4095,6 +4116,21 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
|
||||||
ip_row = lv_row
|
ip_row = lv_row
|
||||||
ip_number_format_format_code = lo_format_code_datetime ).
|
ip_number_format_format_code = lo_format_code_datetime ).
|
||||||
|
|
||||||
|
WHEN typekind_utclong.
|
||||||
|
TRY.
|
||||||
|
stylemapping = me->excel->get_style_to_guid( <fs_sheet_content>-cell_style ).
|
||||||
|
CATCH zcx_excel .
|
||||||
|
ENDTRY.
|
||||||
|
IF stylemapping-complete_stylex-number_format-format_code IS INITIAL OR
|
||||||
|
stylemapping-complete_style-number_format-format_code IS INITIAL.
|
||||||
|
lo_format_code_datetime = zcl_excel_style_number_format=>c_format_date_datetime.
|
||||||
|
ELSE.
|
||||||
|
lo_format_code_datetime = stylemapping-complete_style-number_format-format_code.
|
||||||
|
ENDIF.
|
||||||
|
me->change_cell_style( ip_column = lv_column
|
||||||
|
ip_row = lv_row
|
||||||
|
ip_number_format_format_code = lo_format_code_datetime ).
|
||||||
|
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
* End of change issue #152 - don't touch exisiting style if only value is passed
|
* End of change issue #152 - don't touch exisiting style if only value is passed
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user