mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 14:06:24 +08:00
223 lines
5.8 KiB
ABAP
223 lines
5.8 KiB
ABAP
class ZCL_EXCEL_ROW definition
|
|
public
|
|
final
|
|
create public .
|
|
|
|
*"* public components of class ZCL_EXCEL_ROW
|
|
*"* do not include other source files here!!!
|
|
public section.
|
|
type-pools ABAP .
|
|
|
|
methods CONSTRUCTOR
|
|
importing
|
|
!IP_INDEX type INT4 default 0 .
|
|
methods GET_COLLAPSED
|
|
importing
|
|
!IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional
|
|
returning
|
|
value(R_COLLAPSED) type BOOLEAN .
|
|
methods GET_OUTLINE_LEVEL
|
|
importing
|
|
!IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional
|
|
returning
|
|
value(R_OUTLINE_LEVEL) type INT4 .
|
|
methods GET_ROW_HEIGHT
|
|
returning
|
|
value(R_ROW_HEIGHT) type FLOAT .
|
|
methods GET_ROW_INDEX
|
|
returning
|
|
value(R_ROW_INDEX) type INT4 .
|
|
methods GET_VISIBLE
|
|
importing
|
|
!IO_WORKSHEET type ref to ZCL_EXCEL_WORKSHEET optional
|
|
returning
|
|
value(R_VISIBLE) type BOOLEAN .
|
|
methods GET_XF_INDEX
|
|
returning
|
|
value(R_XF_INDEX) type INT4 .
|
|
methods SET_COLLAPSED
|
|
importing
|
|
!IP_COLLAPSED type BOOLEAN .
|
|
methods SET_OUTLINE_LEVEL
|
|
importing
|
|
!IP_OUTLINE_LEVEL type INT4
|
|
raising
|
|
ZCX_EXCEL .
|
|
methods SET_ROW_HEIGHT
|
|
importing
|
|
!IP_ROW_HEIGHT type SIMPLE
|
|
raising
|
|
ZCX_EXCEL .
|
|
methods SET_ROW_INDEX
|
|
importing
|
|
!IP_INDEX type INT4 .
|
|
methods SET_VISIBLE
|
|
importing
|
|
!IP_VISIBLE type BOOLEAN .
|
|
methods SET_XF_INDEX
|
|
importing
|
|
!IP_XF_INDEX type INT4 .
|
|
*"* protected components of class ZCL_EXCEL_ROW
|
|
*"* do not include other source files here!!!
|
|
protected section.
|
|
*"* private components of class ZCL_EXCEL_ROW
|
|
*"* do not include other source files here!!!
|
|
private section.
|
|
|
|
data ROW_INDEX type INT4 .
|
|
data ROW_HEIGHT type FLOAT .
|
|
data VISIBLE type BOOLEAN .
|
|
data OUTLINE_LEVEL type INT4 value 0. "#EC NOTEXT . . . . . . . . . " .
|
|
data COLLAPSED type BOOLEAN .
|
|
data XF_INDEX type INT4 .
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_EXCEL_ROW IMPLEMENTATION.
|
|
|
|
|
|
method CONSTRUCTOR.
|
|
" Initialise values
|
|
me->row_index = ip_index.
|
|
me->row_height = -1.
|
|
me->visible = abap_true.
|
|
me->outline_level = 0.
|
|
me->collapsed = abap_false.
|
|
|
|
" set row dimension as unformatted by default
|
|
me->xf_index = 0.
|
|
endmethod.
|
|
|
|
|
|
METHOD GET_COLLAPSED.
|
|
|
|
DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row,
|
|
lv_previous_row TYPE i,
|
|
lv_following_row TYPE i.
|
|
|
|
r_collapsed = me->collapsed.
|
|
|
|
CHECK r_collapsed = abap_false. " Maybe new method for outlines is being used
|
|
CHECK io_worksheet IS BOUND.
|
|
|
|
* If an outline is collapsed ( even inside an outer outline ) the line following the last line
|
|
* of the group gets the flag "collapsed"
|
|
IF io_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_off.
|
|
lv_following_row = me->row_index + 1.
|
|
lt_row_outlines = io_worksheet->get_row_outlines( ).
|
|
READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_from = lv_following_row " first line of an outline
|
|
collapsed = abap_true. " that is collapsed
|
|
ELSE.
|
|
lv_previous_row = me->row_index - 1.
|
|
lt_row_outlines = io_worksheet->get_row_outlines( ).
|
|
READ TABLE lt_row_outlines TRANSPORTING NO FIELDS WITH KEY row_to = lv_previous_row " last line of an outline
|
|
collapsed = abap_true. " that is collapsed
|
|
ENDIF.
|
|
CHECK sy-subrc = 0. " ok - we found it
|
|
r_collapsed = abap_true.
|
|
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD GET_OUTLINE_LEVEL.
|
|
|
|
DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row.
|
|
FIELD-SYMBOLS: <ls_row_outline> LIKE LINE OF lt_row_outlines.
|
|
|
|
* if someone has set the outline level explicitly - just use that
|
|
IF me->outline_level IS NOT INITIAL.
|
|
r_outline_level = me->outline_level.
|
|
RETURN.
|
|
ENDIF.
|
|
* Maybe we can use the outline information in the worksheet
|
|
CHECK io_worksheet IS BOUND.
|
|
|
|
lt_row_outlines = io_worksheet->get_row_outlines( ).
|
|
LOOP AT lt_row_outlines ASSIGNING <ls_row_outline> WHERE row_from <= me->row_index
|
|
AND row_to >= me->row_index.
|
|
|
|
ADD 1 TO r_outline_level.
|
|
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
method GET_ROW_HEIGHT.
|
|
r_row_height = me->row_height.
|
|
endmethod.
|
|
|
|
|
|
method GET_ROW_INDEX.
|
|
r_row_index = me->row_index.
|
|
endmethod.
|
|
|
|
|
|
METHOD GET_VISIBLE.
|
|
|
|
DATA: lt_row_outlines TYPE zcl_excel_worksheet=>mty_ts_outlines_row.
|
|
FIELD-SYMBOLS: <ls_row_outline> LIKE LINE OF lt_row_outlines.
|
|
|
|
r_visible = me->visible.
|
|
CHECK r_visible = 'X'. " Currently visible --> but maybe the new outline methodology will hide it implicitly
|
|
CHECK io_worksheet IS BOUND. " But we have to see the worksheet to make sure
|
|
|
|
lt_row_outlines = io_worksheet->get_row_outlines( ).
|
|
LOOP AT lt_row_outlines ASSIGNING <ls_row_outline> WHERE row_from <= me->row_index
|
|
AND row_to >= me->row_index
|
|
AND collapsed = abap_true. " row is in a collapsed outline --> not visible
|
|
CLEAR r_visible.
|
|
RETURN. " one hit is enough to ensure invisibility
|
|
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
method GET_XF_INDEX.
|
|
r_xf_index = me->xf_index.
|
|
endmethod.
|
|
|
|
|
|
method SET_COLLAPSED.
|
|
me->collapsed = ip_collapsed.
|
|
endmethod.
|
|
|
|
|
|
method SET_OUTLINE_LEVEL.
|
|
IF ip_outline_level < 0
|
|
OR ip_outline_level > 7.
|
|
|
|
zcx_excel=>raise_text( 'Outline level must range between 0 and 7.' ).
|
|
|
|
ENDIF.
|
|
me->outline_level = ip_outline_level.
|
|
endmethod.
|
|
|
|
|
|
method SET_ROW_HEIGHT.
|
|
TRY.
|
|
me->row_height = ip_row_height.
|
|
CATCH cx_sy_conversion_no_number.
|
|
zcx_excel=>raise_text( 'Unable to interpret ip_row_height as number' ).
|
|
ENDTRY.
|
|
endmethod.
|
|
|
|
|
|
method SET_ROW_INDEX.
|
|
me->row_index = ip_index.
|
|
endmethod.
|
|
|
|
|
|
method SET_VISIBLE.
|
|
me->visible = ip_visible.
|
|
endmethod.
|
|
|
|
|
|
method SET_XF_INDEX.
|
|
me->XF_INDEX = ip_XF_INDEX.
|
|
endmethod.
|
|
ENDCLASS.
|