mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 14:02:38 +08:00
fix-#687-for-reading-range-of-hyperlinks Co-authored-by: sandraros <sandra.rossi@gmail.com> Co-authored-by: Gregor Wolf <gregor.wolf@gmail.com>
This commit is contained in:
parent
6eac42678c
commit
7b48cd0d90
|
@ -3414,9 +3414,12 @@ METHOD load_worksheet_hyperlinks.
|
||||||
DATA: lo_ixml_hyperlinks TYPE REF TO if_ixml_node_collection,
|
DATA: lo_ixml_hyperlinks TYPE REF TO if_ixml_node_collection,
|
||||||
lo_ixml_hyperlink TYPE REF TO if_ixml_element,
|
lo_ixml_hyperlink TYPE REF TO if_ixml_element,
|
||||||
lo_ixml_iterator TYPE REF TO if_ixml_node_iterator,
|
lo_ixml_iterator TYPE REF TO if_ixml_node_iterator,
|
||||||
lv_row TYPE zexcel_cell_row,
|
lv_row_start TYPE zexcel_cell_row,
|
||||||
lv_column TYPE zexcel_cell_column_alpha,
|
lv_row_end TYPE zexcel_cell_row,
|
||||||
lo_hyperlink TYPE REF TO zcl_excel_hyperlink,
|
lv_column_start TYPE zexcel_cell_column_alpha,
|
||||||
|
lv_column_end TYPE zexcel_cell_column_alpha,
|
||||||
|
lv_is_internal TYPE abap_bool,
|
||||||
|
lv_url TYPE string,
|
||||||
lv_value TYPE zexcel_cell_value.
|
lv_value TYPE zexcel_cell_value.
|
||||||
|
|
||||||
DATA: BEGIN OF ls_hyperlink,
|
DATA: BEGIN OF ls_hyperlink,
|
||||||
|
@ -3435,7 +3438,7 @@ METHOD load_worksheet_hyperlinks.
|
||||||
WHILE lo_ixml_hyperlink IS BOUND.
|
WHILE lo_ixml_hyperlink IS BOUND.
|
||||||
|
|
||||||
CLEAR ls_hyperlink.
|
CLEAR ls_hyperlink.
|
||||||
CLEAR lo_hyperlink.
|
CLEAR lv_url.
|
||||||
|
|
||||||
ls_hyperlink-ref = lo_ixml_hyperlink->get_attribute_ns( 'ref' ).
|
ls_hyperlink-ref = lo_ixml_hyperlink->get_attribute_ns( 'ref' ).
|
||||||
ls_hyperlink-display = lo_ixml_hyperlink->get_attribute_ns( 'display' ).
|
ls_hyperlink-display = lo_ixml_hyperlink->get_attribute_ns( 'display' ).
|
||||||
|
@ -3444,31 +3447,36 @@ METHOD load_worksheet_hyperlinks.
|
||||||
ls_hyperlink-r_id = lo_ixml_hyperlink->get_attribute( name = 'id'
|
ls_hyperlink-r_id = lo_ixml_hyperlink->get_attribute( name = 'id'
|
||||||
namespace = 'r' ).
|
namespace = 'r' ).
|
||||||
IF ls_hyperlink-r_id IS INITIAL. " Internal link
|
IF ls_hyperlink-r_id IS INITIAL. " Internal link
|
||||||
lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = ls_hyperlink-location ).
|
lv_is_internal = abap_true.
|
||||||
|
lv_url = ls_hyperlink-location.
|
||||||
ELSE. " External link
|
ELSE. " External link
|
||||||
READ TABLE it_external_hyperlinks ASSIGNING <ls_external_hyperlink> WITH TABLE KEY id = ls_hyperlink-r_id.
|
READ TABLE it_external_hyperlinks ASSIGNING <ls_external_hyperlink> WITH TABLE KEY id = ls_hyperlink-r_id.
|
||||||
IF sy-subrc = 0.
|
IF sy-subrc = 0.
|
||||||
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = <ls_external_hyperlink>-target ).
|
lv_is_internal = abap_false.
|
||||||
|
lv_url = <ls_external_hyperlink>-target.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
IF lo_hyperlink IS BOUND. " because of unsupported external links
|
|
||||||
|
|
||||||
zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING
|
IF lv_url IS NOT INITIAL. " because of unsupported external links
|
||||||
i_columnrow = ls_hyperlink-ref
|
|
||||||
IMPORTING
|
zcl_excel_common=>convert_range2column_a_row(
|
||||||
e_row = lv_row
|
EXPORTING
|
||||||
e_column = lv_column ).
|
i_range = ls_hyperlink-ref
|
||||||
* Currently it is not allowed to pass a hyperlink w/o text, but text has already been read.
|
IMPORTING
|
||||||
* So just reread it and be done with it
|
e_column_start = lv_column_start
|
||||||
io_worksheet->get_cell( EXPORTING
|
e_column_end = lv_column_end
|
||||||
ip_column = lv_column
|
e_row_start = lv_row_start
|
||||||
ip_row = lv_row
|
e_row_end = lv_row_end ).
|
||||||
IMPORTING
|
|
||||||
ep_value = lv_value ).
|
io_worksheet->set_area_hyperlink(
|
||||||
io_worksheet->set_cell( ip_column = lv_column
|
EXPORTING
|
||||||
ip_row = lv_row
|
ip_column_start = lv_column_start
|
||||||
ip_value = lv_value
|
ip_column_end = lv_column_end
|
||||||
ip_hyperlink = lo_hyperlink ).
|
ip_row = lv_row_start
|
||||||
|
ip_row_to = lv_row_end
|
||||||
|
ip_url = lv_url
|
||||||
|
ip_is_internal = lv_is_internal ).
|
||||||
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
lo_ixml_hyperlink ?= lo_ixml_iterator->get_next( ).
|
lo_ixml_hyperlink ?= lo_ixml_iterator->get_next( ).
|
||||||
|
|
|
@ -545,6 +545,16 @@ CLASS zcl_excel_worksheet DEFINITION
|
||||||
METHODS get_header_footer_drawings
|
METHODS get_header_footer_drawings
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_drawings) TYPE zexcel_t_drawings .
|
VALUE(rt_drawings) TYPE zexcel_t_drawings .
|
||||||
|
METHODS set_area_hyperlink
|
||||||
|
IMPORTING
|
||||||
|
!ip_column_start TYPE simple
|
||||||
|
!ip_column_end TYPE simple OPTIONAL
|
||||||
|
!ip_row TYPE zexcel_cell_row
|
||||||
|
!ip_row_to TYPE zexcel_cell_row OPTIONAL
|
||||||
|
!ip_url TYPE string
|
||||||
|
!ip_is_internal TYPE abap_bool
|
||||||
|
RAISING
|
||||||
|
zcx_excel .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
@ -4818,6 +4828,52 @@ CLASS zcl_excel_worksheet IMPLEMENTATION.
|
||||||
ENDMETHOD. "SET_AREA_STYLE
|
ENDMETHOD. "SET_AREA_STYLE
|
||||||
|
|
||||||
|
|
||||||
|
METHOD set_area_hyperlink.
|
||||||
|
DATA: ld_row_start TYPE zexcel_cell_row,
|
||||||
|
ld_row_end TYPE zexcel_cell_row,
|
||||||
|
ld_column_start_int TYPE zexcel_cell_column,
|
||||||
|
ld_column_end_int TYPE zexcel_cell_column,
|
||||||
|
ld_current_column TYPE zexcel_cell_column_alpha,
|
||||||
|
ld_current_row TYPE zexcel_cell_row,
|
||||||
|
ld_value TYPE string.
|
||||||
|
DATA: lv_column TYPE zexcel_cell_column,
|
||||||
|
lo_hyperlink TYPE REF TO zcl_excel_hyperlink.
|
||||||
|
|
||||||
|
MOVE: ip_row_to TO ld_row_end,
|
||||||
|
ip_row TO ld_row_start.
|
||||||
|
IF ld_row_end IS INITIAL OR ip_row_to IS NOT SUPPLIED.
|
||||||
|
ld_row_end = ld_row_start.
|
||||||
|
ENDIF.
|
||||||
|
ld_column_start_int = zcl_excel_common=>convert_column2int( ip_column_start ).
|
||||||
|
ld_column_end_int = zcl_excel_common=>convert_column2int( ip_column_end ).
|
||||||
|
IF ld_column_end_int IS INITIAL OR ip_column_end IS NOT SUPPLIED.
|
||||||
|
ld_column_end_int = ld_column_start_int.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
WHILE ld_column_start_int <= ld_column_end_int.
|
||||||
|
ld_current_column = zcl_excel_common=>convert_column2alpha( ld_column_start_int ).
|
||||||
|
ld_current_row = ld_row_start.
|
||||||
|
WHILE ld_current_row <= ld_row_end.
|
||||||
|
|
||||||
|
me->get_cell( EXPORTING ip_column = ld_current_column ip_row = ld_current_row
|
||||||
|
IMPORTING ep_value = ld_value ).
|
||||||
|
|
||||||
|
IF ip_is_internal = abap_true.
|
||||||
|
lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = ip_url ).
|
||||||
|
ELSE.
|
||||||
|
lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = ip_url ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
me->set_cell( ip_column = ld_current_column ip_row = ld_current_row ip_value = ld_value ip_hyperlink = lo_hyperlink ).
|
||||||
|
|
||||||
|
ADD 1 TO ld_current_row.
|
||||||
|
ENDWHILE.
|
||||||
|
ADD 1 TO ld_column_start_int.
|
||||||
|
ENDWHILE.
|
||||||
|
|
||||||
|
ENDMETHOD. "SET_AREA_HYPERLINK
|
||||||
|
|
||||||
|
|
||||||
METHOD set_cell.
|
METHOD set_cell.
|
||||||
|
|
||||||
DATA: lv_column TYPE zexcel_cell_column,
|
DATA: lv_column TYPE zexcel_cell_column,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user