mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 06:16:14 +08:00
486 lines
16 KiB
XML
486 lines
16 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<PROG NAME="ZDEMO_EXCEL39" VARCL="X" SUBC="1" RSTAT="T" RMAND="001" RLOAD="E" FIXPT="X" UCCHECK="X">
|
|
<textPool>
|
|
<language SPRAS="E">
|
|
<textElement ID="R" ENTRY="abap2xlsx Demo: Drawings" LENGTH="25 "/>
|
|
<textElement ID="S" KEY="POBJTYPE" ENTRY="D ." LENGTH="9 "/>
|
|
<textElement ID="S" KEY="P_CLASS" ENTRY="D ." LENGTH="9 "/>
|
|
<textElement ID="S" KEY="P_OBJID" ENTRY="D ." LENGTH="9 "/>
|
|
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="9 "/>
|
|
</language>
|
|
</textPool>
|
|
<source>*&---------------------------------------------------------------------*
|
|
*& Report ZDEMO_EXCEL16
|
|
*&
|
|
*&---------------------------------------------------------------------*
|
|
*&
|
|
*&
|
|
*&---------------------------------------------------------------------*
|
|
|
|
REPORT zdemo_excel39.
|
|
|
|
DATA: lo_excel TYPE REF TO zcl_excel,
|
|
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
|
lo_drawing TYPE REF TO zcl_excel_drawing.
|
|
|
|
DATA lv_value TYPE i.
|
|
|
|
DATA: ls_io TYPE skwf_io.
|
|
|
|
DATA: ls_upper TYPE zexcel_drawing_location,
|
|
ls_lower TYPE zexcel_drawing_location.
|
|
|
|
DATA: lo_bar1 TYPE REF TO zcl_excel_graph_bars,
|
|
lo_bar1_stacked TYPE REF TO zcl_excel_graph_bars,
|
|
lo_bar2 TYPE REF TO zcl_excel_graph_bars,
|
|
lo_pie TYPE REF TO zcl_excel_graph_pie,
|
|
lo_line TYPE REF TO zcl_excel_graph_line.
|
|
|
|
CONSTANTS: gc_save_file_name TYPE string VALUE '39_Charts.xlsx'.
|
|
INCLUDE zdemo_excel_outputopt_incl.
|
|
|
|
START-OF-SELECTION.
|
|
|
|
" Create a pie chart and series
|
|
CREATE OBJECT lo_pie.
|
|
|
|
CALL METHOD lo_pie->create_serie
|
|
EXPORTING
|
|
ip_order = 0
|
|
ip_sheet = 'Values'
|
|
ip_lbl_from_col = 'B'
|
|
ip_lbl_from_row = '1'
|
|
ip_lbl_to_col = 'B'
|
|
ip_lbl_to_row = '3'
|
|
ip_ref_from_col = 'A'
|
|
ip_ref_from_row = '1'
|
|
ip_ref_to_col = 'A'
|
|
ip_ref_to_row = '3'
|
|
ip_sername = 'My serie 1'.
|
|
|
|
" Set style
|
|
lo_pie->set_style( zcl_excel_graph=>c_style_15 ).
|
|
|
|
" Create a bar chart, series and axes
|
|
CREATE OBJECT lo_bar1.
|
|
|
|
CALL METHOD lo_bar1->create_serie
|
|
EXPORTING
|
|
ip_order = 0
|
|
ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no
|
|
ip_lbl = 'Values!$D$1:$D$3'
|
|
ip_ref = 'Values!$C$1:$C$3'
|
|
ip_sername = 'My serie 1'.
|
|
|
|
CALL METHOD lo_bar1->create_serie
|
|
EXPORTING
|
|
ip_order = 1
|
|
ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no
|
|
ip_lbl = 'Values!$B$1:$B$3'
|
|
ip_ref = 'Values!$A$1:$A$3'
|
|
ip_sername = 'My serie 2'.
|
|
|
|
CALL METHOD lo_bar1->create_ax
|
|
EXPORTING
|
|
* ip_axid =
|
|
ip_type = zcl_excel_graph_bars=>c_catax
|
|
* ip_orientation =
|
|
* ip_delete =
|
|
* ip_axpos =
|
|
* ip_formatcode =
|
|
* ip_sourcelinked =
|
|
* ip_majortickmark =
|
|
* ip_minortickmark =
|
|
* ip_ticklblpos =
|
|
* ip_crossax =
|
|
* ip_crosses =
|
|
* ip_auto =
|
|
* ip_lblalgn =
|
|
* ip_lbloffset =
|
|
* ip_nomultilvllbl =
|
|
* ip_crossbetween =
|
|
.
|
|
|
|
CALL METHOD lo_bar1->create_ax
|
|
EXPORTING
|
|
* ip_axid =
|
|
ip_type = zcl_excel_graph_bars=>c_valax
|
|
* ip_orientation =
|
|
* ip_delete =
|
|
* ip_axpos =
|
|
* ip_formatcode =
|
|
* ip_sourcelinked =
|
|
* ip_majortickmark =
|
|
* ip_minortickmark =
|
|
* ip_ticklblpos =
|
|
* ip_crossax =
|
|
* ip_crosses =
|
|
* ip_auto =
|
|
* ip_lblalgn =
|
|
* ip_lbloffset =
|
|
* ip_nomultilvllbl =
|
|
* ip_crossbetween =
|
|
.
|
|
|
|
" Set style
|
|
lo_bar1->set_style( zcl_excel_graph=>c_style_default ).
|
|
|
|
" Set label to none
|
|
lo_bar1->set_print_lbl( zcl_excel_graph_bars=>c_show_false ).
|
|
|
|
* Same barchart - but this time stacked
|
|
CREATE OBJECT lo_bar1_stacked.
|
|
|
|
CALL METHOD lo_bar1_stacked->create_serie
|
|
EXPORTING
|
|
ip_order = 0
|
|
ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no
|
|
ip_lbl = 'Values!$D$1:$D$3'
|
|
ip_ref = 'Values!$C$1:$C$3'
|
|
ip_sername = 'My serie 1'.
|
|
|
|
CALL METHOD lo_bar1_stacked->create_serie
|
|
EXPORTING
|
|
ip_order = 1
|
|
ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no
|
|
ip_lbl = 'Values!$B$1:$B$3'
|
|
ip_ref = 'Values!$A$1:$A$3'
|
|
ip_sername = 'My serie 2'.
|
|
|
|
CALL METHOD lo_bar1_stacked->create_ax
|
|
EXPORTING
|
|
ip_type = zcl_excel_graph_bars=>c_catax .
|
|
|
|
CALL METHOD lo_bar1_stacked->create_ax
|
|
EXPORTING
|
|
ip_type = zcl_excel_graph_bars=>c_valax.
|
|
|
|
" Set style
|
|
lo_bar1_stacked->set_style( zcl_excel_graph=>c_style_default ).
|
|
|
|
" Set label to none
|
|
lo_bar1_stacked->set_print_lbl( zcl_excel_graph_bars=>c_show_false ).
|
|
|
|
" Make it stacked
|
|
lo_bar1_stacked->ns_groupingval = zcl_excel_graph_bars=>c_groupingval_stacked.
|
|
|
|
|
|
" Create a bar chart, series and axes
|
|
CREATE OBJECT lo_bar2.
|
|
|
|
CALL METHOD lo_bar2->create_serie
|
|
EXPORTING
|
|
ip_order = 0
|
|
ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_yes
|
|
ip_lbl = 'Values!$D$1:$D$3'
|
|
ip_ref = 'Values!$C$1:$C$3'
|
|
ip_sername = 'My serie 1'.
|
|
|
|
CALL METHOD lo_bar2->create_ax
|
|
EXPORTING
|
|
* ip_axid =
|
|
ip_type = zcl_excel_graph_bars=>c_catax
|
|
* ip_orientation =
|
|
* ip_delete =
|
|
* ip_axpos =
|
|
* ip_formatcode =
|
|
* ip_sourcelinked =
|
|
* ip_majortickmark =
|
|
* ip_minortickmark =
|
|
* ip_ticklblpos =
|
|
* ip_crossax =
|
|
* ip_crosses =
|
|
* ip_auto =
|
|
* ip_lblalgn =
|
|
* ip_lbloffset =
|
|
* ip_nomultilvllbl =
|
|
* ip_crossbetween =
|
|
.
|
|
|
|
CALL METHOD lo_bar2->create_ax
|
|
EXPORTING
|
|
* ip_axid =
|
|
ip_type = zcl_excel_graph_bars=>c_valax
|
|
* ip_orientation =
|
|
* ip_delete =
|
|
* ip_axpos =
|
|
* ip_formatcode =
|
|
* ip_sourcelinked =
|
|
* ip_majortickmark =
|
|
* ip_minortickmark =
|
|
* ip_ticklblpos =
|
|
* ip_crossax =
|
|
* ip_crosses =
|
|
* ip_auto =
|
|
* ip_lblalgn =
|
|
* ip_lbloffset =
|
|
* ip_nomultilvllbl =
|
|
* ip_crossbetween =
|
|
.
|
|
|
|
" Set layout
|
|
lo_bar2->set_show_legend_key( zcl_excel_graph_bars=>c_show_true ).
|
|
lo_bar2->set_show_values( zcl_excel_graph_bars=>c_show_true ).
|
|
lo_bar2->set_show_cat_name( zcl_excel_graph_bars=>c_show_true ).
|
|
lo_bar2->set_show_ser_name( zcl_excel_graph_bars=>c_show_true ).
|
|
lo_bar2->set_show_percent( zcl_excel_graph_bars=>c_show_true ).
|
|
lo_bar2->set_varycolor( zcl_excel_graph_bars=>c_show_true ).
|
|
|
|
" Create a line chart, series and axes
|
|
CREATE OBJECT lo_line.
|
|
|
|
CALL METHOD lo_line->create_serie
|
|
EXPORTING
|
|
ip_order = 0
|
|
ip_symbol = zcl_excel_graph_line=>c_symbol_auto
|
|
ip_smooth = zcl_excel_graph_line=>c_show_false
|
|
ip_lbl = 'Values!$D$1:$D$3'
|
|
ip_ref = 'Values!$C$1:$C$3'
|
|
ip_sername = 'My serie 1'.
|
|
|
|
CALL METHOD lo_line->create_serie
|
|
EXPORTING
|
|
ip_order = 1
|
|
ip_symbol = zcl_excel_graph_line=>c_symbol_none
|
|
ip_smooth = zcl_excel_graph_line=>c_show_false
|
|
ip_lbl = 'Values!$B$1:$B$3'
|
|
ip_ref = 'Values!$A$1:$A$3'
|
|
ip_sername = 'My serie 2'.
|
|
|
|
CALL METHOD lo_line->create_serie
|
|
EXPORTING
|
|
ip_order = 2
|
|
ip_symbol = zcl_excel_graph_line=>c_symbol_auto
|
|
ip_smooth = zcl_excel_graph_line=>c_show_false
|
|
ip_lbl = 'Values!$F$1:$F$3'
|
|
ip_ref = 'Values!$E$1:$E$3'
|
|
ip_sername = 'My serie 3'.
|
|
|
|
CALL METHOD lo_line->create_ax
|
|
EXPORTING
|
|
* ip_axid =
|
|
ip_type = zcl_excel_graph_line=>c_catax
|
|
* ip_orientation =
|
|
* ip_delete =
|
|
* ip_axpos =
|
|
* ip_majortickmark =
|
|
* ip_minortickmark =
|
|
* ip_ticklblpos =
|
|
* ip_crossax =
|
|
* ip_crosses =
|
|
* ip_auto =
|
|
* ip_lblalgn =
|
|
* ip_lbloffset =
|
|
* ip_nomultilvllbl =
|
|
* ip_crossbetween =
|
|
.
|
|
|
|
CALL METHOD lo_line->create_ax
|
|
EXPORTING
|
|
* ip_axid =
|
|
ip_type = zcl_excel_graph_line=>c_valax
|
|
* ip_orientation =
|
|
* ip_delete =
|
|
* ip_axpos =
|
|
* ip_formatcode =
|
|
* ip_sourcelinked =
|
|
* ip_majortickmark =
|
|
* ip_minortickmark =
|
|
* ip_ticklblpos =
|
|
* ip_crossax =
|
|
* ip_crosses =
|
|
* ip_auto =
|
|
* ip_lblalgn =
|
|
* ip_lbloffset =
|
|
* ip_nomultilvllbl =
|
|
* ip_crossbetween =
|
|
.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
" Creates active sheet
|
|
CREATE OBJECT lo_excel.
|
|
|
|
" Get active sheet (Pie sheet)
|
|
lo_worksheet = lo_excel->get_active_worksheet( ).
|
|
lo_worksheet->set_title( 'PieChart' ).
|
|
|
|
" Create global drawing, set type as pie chart, assign chart, set position and media type
|
|
lo_drawing = lo_worksheet->excel->add_new_drawing(
|
|
ip_type = zcl_excel_drawing=>type_chart
|
|
ip_title = 'CHART PIE' ).
|
|
lo_drawing->graph = lo_pie.
|
|
lo_drawing->graph_type = zcl_excel_drawing=>c_graph_pie.
|
|
|
|
"Set chart position (anchor 2 cells)
|
|
ls_lower-row = 30.
|
|
ls_lower-col = 20.
|
|
lo_drawing->set_position2(
|
|
EXPORTING
|
|
ip_from = ls_upper
|
|
ip_to = ls_lower ).
|
|
|
|
lo_drawing->set_media(
|
|
EXPORTING
|
|
ip_media_type = zcl_excel_drawing=>c_media_type_xml ).
|
|
|
|
lo_worksheet->add_drawing( lo_drawing ).
|
|
|
|
" BarChart1 sheet
|
|
|
|
lo_worksheet = lo_excel->add_new_worksheet( ).
|
|
lo_worksheet->set_title( ip_title = 'BarChart1' ).
|
|
|
|
" Create global drawing, set type as bar chart, assign chart, set position and media type
|
|
lo_drawing = lo_worksheet->excel->add_new_drawing(
|
|
ip_type = zcl_excel_drawing=>type_chart
|
|
ip_title = 'CHART BARS WITH 2 SERIES' ).
|
|
lo_drawing->graph = lo_bar1.
|
|
lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars.
|
|
|
|
"Set chart position (anchor 2 cells)
|
|
ls_upper-row = 0.
|
|
ls_upper-col = 11.
|
|
ls_lower-row = 22.
|
|
ls_lower-col = 21.
|
|
lo_drawing->set_position2(
|
|
EXPORTING
|
|
ip_from = ls_upper
|
|
ip_to = ls_lower ).
|
|
|
|
lo_drawing->set_media(
|
|
EXPORTING
|
|
ip_media_type = zcl_excel_drawing=>c_media_type_xml ).
|
|
|
|
lo_worksheet->add_drawing( lo_drawing ).
|
|
|
|
lo_drawing = lo_worksheet->excel->add_new_drawing(
|
|
ip_type = zcl_excel_drawing=>type_chart
|
|
ip_title = 'Stacked CHART BARS WITH 2 SER.' ).
|
|
lo_drawing->graph = lo_bar1_stacked.
|
|
lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars.
|
|
|
|
"Set chart position (anchor 2 cells)
|
|
ls_upper-row = 0.
|
|
ls_upper-col = 1.
|
|
ls_lower-row = 22.
|
|
ls_lower-col = 10.
|
|
lo_drawing->set_position2(
|
|
EXPORTING
|
|
ip_from = ls_upper
|
|
ip_to = ls_lower ).
|
|
|
|
lo_drawing->set_media(
|
|
EXPORTING
|
|
ip_media_type = zcl_excel_drawing=>c_media_type_xml ).
|
|
|
|
lo_worksheet->add_drawing( lo_drawing ).
|
|
|
|
" BarChart2 sheet
|
|
|
|
lo_worksheet = lo_excel->add_new_worksheet( ).
|
|
lo_worksheet->set_title( ip_title = 'BarChart2' ).
|
|
|
|
" Create global drawing, set type as bar chart, assign chart, set position and media type
|
|
lo_drawing = lo_worksheet->excel->add_new_drawing(
|
|
ip_type = zcl_excel_drawing=>type_chart
|
|
ip_title = 'CHART BARS WITH 1 SERIE' ).
|
|
lo_drawing->graph = lo_bar2.
|
|
lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars.
|
|
|
|
"Set chart position (anchor 2 cells)
|
|
ls_upper-row = 0.
|
|
ls_upper-col = 0.
|
|
ls_lower-row = 30.
|
|
ls_lower-col = 20.
|
|
lo_drawing->set_position2(
|
|
EXPORTING
|
|
ip_from = ls_upper
|
|
ip_to = ls_lower ).
|
|
|
|
lo_drawing->set_media(
|
|
EXPORTING
|
|
ip_media_type = zcl_excel_drawing=>c_media_type_xml ).
|
|
|
|
lo_worksheet->add_drawing( lo_drawing ).
|
|
|
|
" LineChart sheet
|
|
|
|
lo_worksheet = lo_excel->add_new_worksheet( ).
|
|
lo_worksheet->set_title( ip_title = 'LineChart' ).
|
|
|
|
" Create global drawing, set type as line chart, assign chart, set position and media type
|
|
lo_drawing = lo_worksheet->excel->add_new_drawing(
|
|
ip_type = zcl_excel_drawing=>type_chart
|
|
ip_title = 'CHART LINES' ).
|
|
lo_drawing->graph = lo_line.
|
|
lo_drawing->graph_type = zcl_excel_drawing=>c_graph_line.
|
|
|
|
"Set chart position (anchor 2 cells)
|
|
ls_upper-row = 0.
|
|
ls_upper-col = 0.
|
|
ls_lower-row = 30.
|
|
ls_lower-col = 20.
|
|
lo_drawing->set_position2(
|
|
EXPORTING
|
|
ip_from = ls_upper
|
|
ip_to = ls_lower ).
|
|
|
|
lo_drawing->set_media(
|
|
EXPORTING
|
|
ip_media_type = zcl_excel_drawing=>c_media_type_xml ).
|
|
|
|
lo_worksheet->add_drawing( lo_drawing ).
|
|
|
|
" Values sheet
|
|
lo_worksheet = lo_excel->add_new_worksheet( ).
|
|
lo_worksheet->set_title( ip_title = 'Values' ).
|
|
|
|
" Set values for chart
|
|
lv_value = 1.
|
|
lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = lv_value ).
|
|
lv_value = 2.
|
|
lo_worksheet->set_cell( ip_column = 'A' ip_row = 2 ip_value = lv_value ).
|
|
lv_value = 3.
|
|
lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = lv_value ).
|
|
|
|
" Set labels for chart
|
|
lo_worksheet->set_cell( ip_column = 'B' ip_row = 1 ip_value = 'One' ).
|
|
lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Two' ).
|
|
lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'Three' ).
|
|
|
|
" Set values for chart
|
|
lv_value = 3.
|
|
lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_value = lv_value ).
|
|
lv_value = 2.
|
|
lo_worksheet->set_cell( ip_column = 'C' ip_row = 2 ip_value = lv_value ).
|
|
lv_value = -1.
|
|
lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = lv_value ).
|
|
|
|
" Set labels for chart
|
|
lo_worksheet->set_cell( ip_column = 'D' ip_row = 3 ip_value = 'One (Minus)' ).
|
|
lo_worksheet->set_cell( ip_column = 'D' ip_row = 2 ip_value = 'Two' ).
|
|
lo_worksheet->set_cell( ip_column = 'D' ip_row = 1 ip_value = 'Three' ).
|
|
|
|
" Set values for chart
|
|
lv_value = 3.
|
|
lo_worksheet->set_cell( ip_column = 'E' ip_row = 1 ip_value = lv_value ).
|
|
lv_value = 1.
|
|
lo_worksheet->set_cell( ip_column = 'E' ip_row = 2 ip_value = lv_value ).
|
|
lv_value = 2.
|
|
lo_worksheet->set_cell( ip_column = 'E' ip_row = 3 ip_value = lv_value ).
|
|
|
|
" Set labels for chart
|
|
lo_worksheet->set_cell( ip_column = 'F' ip_row = 3 ip_value = 'Two' ).
|
|
lo_worksheet->set_cell( ip_column = 'F' ip_row = 2 ip_value = 'One' ).
|
|
lo_worksheet->set_cell( ip_column = 'F' ip_row = 1 ip_value = 'Three' ).
|
|
|
|
|
|
*** Create output
|
|
lcl_output=>output( lo_excel ).</source>
|
|
</PROG>
|