Skip to main content

umya_spreadsheet/structs/
chart.rs

1use crate::{
2    drawing::charts::{NumericValue, RichText}, office2010::drawing::charts::Style, structs::{
3        drawing::{
4            charts::{
5                Area3DChart,
6                AreaChart,
7                AreaChartSeries,
8                AreaChartSeriesList,
9                AxisId,
10                AxisPositionValues,
11                Bar3DChart,
12                BarChart,
13                BarDirectionValues,
14                Bubble3D,
15                BubbleChart,
16                BubbleSize,
17                CategoryAxis,
18                CategoryAxisData,
19                ChartSpace,
20                ChartText,
21                CrossBetweenValues,
22                DisplayBlanksAsValues,
23                DoughnutChart,
24                GroupingValues,
25                InvertIfNegative,
26                Layout,
27                LegendPositionValues,
28                Line3DChart,
29                LineChart,
30                MajorGridlines,
31                OfPieChart,
32                OfPieValues,
33                OrientationValues,
34                Pie3DChart,
35                PieChart,
36                PlotArea,
37                PrintSettings,
38                RadarChart,
39                RightAngleAxes,
40                RotateX,
41                RotateY,
42                ScatterChart,
43                ShapeValues,
44                ShowLeaderLines,
45                Smooth,
46                StringLiteral,
47                StringPoint,
48                StringReference,
49                TextProperties,
50                TickLabelPositionValues,
51                TickMarkValues,
52                Title,
53                ValueAxis,
54                Values,
55                View3D,
56                XValues,
57                YValues,
58            }, spreadsheet::{
59                GraphicFrame,
60                MarkerType,
61                TwoCellAnchor,
62            }, Paragraph, Run, RunProperties
63        }, ChartType
64    }, traits::{
65        AdjustmentCoordinate,
66        AdjustmentCoordinateWithSheet,
67    }
68};
69
70/// ## Supported chart types
71/// * `AreaChart`
72/// * `Area3DChart`
73/// * `BarChart`
74/// * `Bar3DChart`
75/// * `BubbleChart`
76/// * `DoughnutChart`
77/// * `LineChart`
78/// * `Line3DChart`
79/// * `OfPieChart`
80/// * `PieChart`
81/// * `RadarChart`
82/// * `ScatterChart`
83///
84/// Other types will be supported sequentially.
85///
86/// ## Example
87/// ![Result Image](https://github.com/MathNya/umya-spreadsheet/raw/master/images/chart/chart_title.png)
88/// ```rust
89/// extern crate umya_spreadsheet;
90/// let mut book = umya_spreadsheet::new_file();
91///
92/// // Add Chart
93/// let mut from_marker = umya_spreadsheet::structs::drawing::spreadsheet::MarkerType::default();
94/// let mut to_marker = umya_spreadsheet::structs::drawing::spreadsheet::MarkerType::default();
95/// from_marker.set_coordinate("C1");
96/// to_marker.set_coordinate("D11");
97/// let area_chart_series_list = vec!["Sheet1!$A$1:$A$10", "Sheet1!$B$1:$B$10"];
98/// let mut chart = umya_spreadsheet::structs::Chart::default();
99/// chart.new_chart(
100///     &umya_spreadsheet::structs::ChartType::LineChart,
101///     from_marker,
102///     to_marker,
103///     area_chart_series_list,
104/// );
105/// book.sheet_by_name_mut("Sheet1").unwrap().add_chart(chart);
106///
107/// // Get Chart by Worksheet.
108/// let mut worksheet = book.sheet_by_name_mut("Sheet1").unwrap();
109/// let chart = worksheet.chart("C1");
110/// let chart = worksheet.chart_mut("C1");
111///
112/// // Use this if there are multiple Charts in a given cell.
113/// let charts = worksheet.charts("C1");
114/// let charts = worksheet.charts_mut("C1");
115///
116/// // Set Chart Title, Series Title, Horizontal Title and Vertical Title.
117/// let mut chart = book
118///     .sheet_by_name_mut("Sheet1")
119///     .unwrap()
120///     .chart_mut("C1")
121///     .unwrap();
122/// chart
123///     .set_series_title(vec!["Line1", "Line2"])
124///     .set_series_point_title(vec!["Point1", "Point2", "Point3", "Point4"])
125///     .set_title("Chart Title")
126///     .set_horizontal_title("Horizontal Title")
127///     .set_vertical_title("Vertical Title");
128///
129/// // line chart is a stack line chart by default.
130/// // To change it to an actual line chart, configure as follows
131/// chart.set_grouping(umya_spreadsheet::drawing::charts::GroupingValues::Standard);
132/// ```
133#[derive(Clone, Debug)]
134pub struct Chart {
135    two_cell_anchor:  Box<TwoCellAnchor>,
136    default_language: String,
137}
138
139impl Default for Chart {
140    #[inline]
141    fn default() -> Self {
142        Self {
143            two_cell_anchor:  Box::new(TwoCellAnchor::default()),
144            default_language: "en-GB".into(),
145        }
146    }
147}
148impl Chart {
149    #[inline]
150    pub fn set_title<S: Into<String>>(&mut self, value: S) -> &mut Self {
151        let title = self.make_title(value);
152        self.chart_space_mut().chart_mut().set_title(title);
153        self
154    }
155
156    #[inline]
157    pub fn set_grouping(&mut self, value: GroupingValues) -> &mut Self {
158        self.plot_area_mut().set_grouping(value);
159        self
160    }
161
162    pub fn set_vertical_title<S: Into<String>>(&mut self, value: S) -> &mut Self {
163        let title = self.make_title(value);
164        let plot_area = self.plot_area_mut();
165        match plot_area.value_axis_mut().len() {
166            1 => {
167                if let Some(v) = plot_area.value_axis_mut().get_mut(0) {
168                    v.set_title(title);
169                }
170            }
171            2 => {
172                if let Some(v) = plot_area.value_axis_mut().get_mut(1) {
173                    v.set_title(title);
174                }
175            }
176            _ => {}
177        }
178        self
179    }
180
181    pub fn set_horizontal_title<S: Into<String>>(&mut self, value: S) -> &mut Self {
182        let title = self.make_title(value);
183        let plot_area = self.plot_area_mut();
184        match plot_area.value_axis_mut().len() {
185            1 => {
186                if let Some(v) = plot_area.category_axis_mut().get_mut(0) {
187                    v.set_title(title);
188                }
189            }
190            2 => {
191                if let Some(v) = plot_area.value_axis_mut().get_mut(0) {
192                    v.set_title(title);
193                }
194            }
195            _ => {}
196        }
197        self
198    }
199
200    pub fn set_series_title<S: Into<String>>(&mut self, value: Vec<S>) -> &mut Self {
201        let mut value_iter = value.into_iter().map(Into::into);
202        for series in self.area_chart_series_list_mut().area_chart_series_mut() {
203            let value_raw = value_iter.next();
204            if let Some(v) = value_raw {
205                let mut chart_text = ChartText::default();
206                let mut numeric_value = NumericValue::default();
207                numeric_value.set_text(v);
208                chart_text.set_numeric_value(numeric_value);
209                series.set_chart_text(chart_text);
210            }
211        }
212        self
213    }
214
215    pub fn set_series_point_title<S: Into<String>>(&mut self, value: Vec<S>) -> &mut Self {
216        let mut string_literal = StringLiteral::default();
217        for v in value {
218            let mut string_point = StringPoint::default();
219            string_point.numeric_value_mut().set_text(v);
220            string_literal.add_string_point_list(string_point);
221        }
222        for series in self.area_chart_series_list_mut().area_chart_series_mut() {
223            if let Some(v) = series.category_axis_data_mut() {
224                v.remove_string_reference();
225                v.set_string_literal(string_literal.clone());
226            } else {
227                let mut obj = CategoryAxisData::default();
228                obj.set_string_literal(string_literal.clone());
229                series.set_category_axis_data(obj);
230            }
231        }
232        self
233    }
234
235    #[inline]
236    pub fn plot_area_mut(&mut self) -> &mut PlotArea {
237        self.chart_space_mut().chart_mut().plot_area_mut()
238    }
239
240    #[inline]
241    #[deprecated(since = "3.0.0", note = "Use plot_area_mut()")]
242    pub fn get_plot_area_mut(&mut self) -> &mut PlotArea {
243        self.plot_area_mut()
244    }
245
246    #[inline]
247    pub fn area_chart_series_list_mut(&mut self) -> &mut AreaChartSeriesList {
248        self.chart_space_mut()
249            .chart_mut()
250            .plot_area_mut()
251            .area_chart_series_list_mut()
252    }
253
254    #[inline]
255    #[deprecated(since = "3.0.0", note = "Use area_chart_series_list_mut()")]
256    pub fn get_area_chart_series_list_mut(&mut self) -> &mut AreaChartSeriesList {
257        self.area_chart_series_list_mut()
258    }
259
260    #[inline]
261    #[must_use]
262    pub fn two_cell_anchor(&self) -> &TwoCellAnchor {
263        &self.two_cell_anchor
264    }
265
266    #[inline]
267    #[must_use]
268    #[deprecated(since = "3.0.0", note = "Use two_cell_anchor()")]
269    pub fn get_two_cell_anchor(&self) -> &TwoCellAnchor {
270        self.two_cell_anchor()
271    }
272
273    #[inline]
274    pub fn two_cell_anchor_mut(&mut self) -> &mut TwoCellAnchor {
275        &mut self.two_cell_anchor
276    }
277
278    #[inline]
279    #[deprecated(since = "3.0.0", note = "Use two_cell_anchor_mut()")]
280    pub fn get_two_cell_anchor_mut(&mut self) -> &mut TwoCellAnchor {
281        self.two_cell_anchor_mut()
282    }
283
284    #[inline]
285    pub fn set_two_cell_anchor(&mut self, value: TwoCellAnchor) -> &mut Self {
286        *self.two_cell_anchor = value;
287        self
288    }
289
290    #[inline]
291    pub fn set_default_language<S: Into<String>>(&mut self, value: S) -> &mut Self {
292        self.default_language = value.into();
293        self
294    }
295
296    #[inline]
297    #[must_use]
298    pub fn chart_space(&self) -> &ChartSpace {
299        self.two_cell_anchor
300            .graphic_frame()
301            .expect("Non-ChartSpace.")
302            .graphic()
303            .graphic_data()
304            .chart_space()
305    }
306
307    #[inline]
308    #[must_use]
309    #[deprecated(since = "3.0.0", note = "Use chart_space()")]
310    pub fn get_chart_space(&self) -> &ChartSpace {
311        self.chart_space()
312    }
313
314    #[inline]
315    pub fn chart_space_mut(&mut self) -> &mut ChartSpace {
316        self.two_cell_anchor
317            .graphic_frame_mut()
318            .expect("Non-ChartSpace.")
319            .graphic_mut()
320            .graphic_data_mut()
321            .chart_space_mut()
322    }
323
324    #[inline]
325    #[deprecated(since = "3.0.0", note = "Use chart_space_mut()")]
326    pub fn get_chart_space_mut(&mut self) -> &mut ChartSpace {
327        self.chart_space_mut()
328    }
329
330    #[allow(clippy::needless_pass_by_value)]
331    pub fn new_chart(
332        &mut self,
333        chart_type: &ChartType,
334        from_marker: MarkerType,
335        to_marker: MarkerType,
336        area_chart_series_list: Vec<&str>,
337    ) -> &mut Self {
338        self.two_cell_anchor.set_from_marker(from_marker);
339        self.two_cell_anchor.set_to_marker(to_marker);
340
341        match chart_type {
342            ChartType::LineChart => {
343                self.new_chart_line_chart(&area_chart_series_list);
344            }
345            ChartType::Line3DChart => {
346                self.new_chart_line_3d_chart(&area_chart_series_list);
347            }
348            ChartType::PieChart => {
349                self.new_chart_pie_chart(&area_chart_series_list);
350            }
351            ChartType::Pie3DChart => {
352                self.new_chart_pie_3d_chart(&area_chart_series_list);
353            }
354            ChartType::DoughnutChart => {
355                self.new_chart_doughnut_chart(&area_chart_series_list);
356            }
357            ChartType::AreaChart => {
358                self.new_chart_area_chart(&area_chart_series_list);
359            }
360            ChartType::Area3DChart => {
361                self.new_chart_area_3d_chart(&area_chart_series_list);
362            }
363            ChartType::BarChart => {
364                self.new_chart_bar_chart(&area_chart_series_list);
365            }
366            ChartType::Bar3DChart => {
367                self.new_chart_bar_3d_chart(&area_chart_series_list);
368            }
369            ChartType::OfPieChart => {
370                self.new_chart_of_pie_chart(&area_chart_series_list);
371            }
372            ChartType::BubbleChart => {
373                self.new_chart_bubble_chart(&area_chart_series_list);
374            }
375            ChartType::RadarChart => {
376                self.new_chart_radar_chart(&area_chart_series_list);
377            }
378            ChartType::ScatterChart => {
379                self.new_chart_scatter_chart(&area_chart_series_list);
380            }
381        }
382
383        self
384    }
385
386    #[inline]
387    #[must_use]
388    pub fn coordinate(&self) -> String {
389        self.two_cell_anchor.from_marker().coordinate()
390    }
391
392    #[inline]
393    #[must_use]
394    #[deprecated(since = "3.0.0", note = "Use coordinate()")]
395    pub fn get_coordinate(&self) -> String {
396        self.coordinate()
397    }
398
399    #[inline]
400    pub(crate) fn col(&self) -> u32 {
401        self.two_cell_anchor.from_marker().col()
402    }
403
404    #[inline]
405    #[deprecated(since = "3.0.0", note = "Use col()")]
406    pub(crate) fn get_col(&self) -> u32 {
407        self.col()
408    }
409
410    #[inline]
411    pub(crate) fn row(&self) -> u32 {
412        self.two_cell_anchor.from_marker().row()
413    }
414
415    #[inline]
416    #[deprecated(since = "3.0.0", note = "Use row()")]
417    pub(crate) fn get_row(&self) -> u32 {
418        self.row()
419    }
420
421    #[inline]
422    fn convert_series(area_chart_series_list: &[&str], smooth: bool) -> AreaChartSeriesList {
423        let mut acsl_obj = AreaChartSeriesList::default();
424        area_chart_series_list
425            .iter()
426            .enumerate()
427            .for_each(|(idx, area_chart_series)| {
428                let mut values = Values::default();
429                values
430                    .number_reference_mut()
431                    .formula_mut()
432                    .set_address_str(*area_chart_series);
433                values
434                    .number_reference_mut()
435                    .numbering_cache_mut()
436                    .format_code_mut()
437                    .set_text("General");
438
439                let mut acs_object = AreaChartSeries::default();
440                acs_object.index_mut().set_val(u32::try_from(idx).unwrap());
441                acs_object.order_mut().set_val(u32::try_from(idx).unwrap());
442                acs_object.set_values(values);
443                if smooth {
444                    acs_object.set_smooth(Smooth::default());
445                } else {
446                    let mut invert_if_negative = InvertIfNegative::default();
447                    invert_if_negative.set_val(0f64);
448                    acs_object.set_invert_if_negative(invert_if_negative);
449                }
450                acsl_obj.add_area_chart_series(acs_object);
451            });
452        acsl_obj
453    }
454
455    pub(crate) fn new_chart_line_chart(&mut self, area_chart_series_list: &[&str]) {
456        let acsl_obj = Self::convert_series(area_chart_series_list, true);
457
458        let mut axis_id1 = AxisId::default();
459        axis_id1.set_val(213_468_160);
460
461        let mut axis_id2 = AxisId::default();
462        axis_id2.set_val(169_590_080);
463
464        let mut line_chart = LineChart::default();
465        line_chart.grouping_mut().set_val(GroupingValues::Stacked);
466        line_chart.set_area_chart_series_list(acsl_obj);
467        line_chart.show_marker_mut().set_val(true);
468        line_chart.add_axis_id(axis_id1);
469        line_chart.add_axis_id(axis_id2);
470
471        let mut category_axis = CategoryAxis::default();
472        category_axis.axis_id_mut().set_val(213_468_160);
473        category_axis
474            .scaling_mut()
475            .orientation_mut()
476            .set_val(OrientationValues::MinMax);
477        category_axis
478            .major_tick_mark_mut()
479            .set_val(TickMarkValues::None);
480        category_axis
481            .minor_tick_mark_mut()
482            .set_val(TickMarkValues::None);
483        category_axis
484            .tick_label_position_mut()
485            .set_val(TickLabelPositionValues::NextTo);
486        category_axis.tick_crossing_axis_mut().set_val(169_590_080);
487        category_axis.auto_labeled_mut().set_val(true);
488        category_axis.label_offset_mut().set_val(100);
489
490        let major_gridlines = MajorGridlines::default();
491
492        let mut value_axis = ValueAxis::default();
493        value_axis.axis_id_mut().set_val(169_590_080);
494        value_axis
495            .scaling_mut()
496            .orientation_mut()
497            .set_val(OrientationValues::MinMax);
498        value_axis
499            .axis_position_mut()
500            .set_val(AxisPositionValues::Left);
501        value_axis.set_major_gridlines(major_gridlines);
502        value_axis.numbering_format_mut().set_format_code("General");
503        value_axis.numbering_format_mut().set_source_linked(true);
504        value_axis
505            .major_tick_mark_mut()
506            .set_val(TickMarkValues::None);
507        value_axis
508            .minor_tick_mark_mut()
509            .set_val(TickMarkValues::None);
510        value_axis
511            .tick_label_position_mut()
512            .set_val(TickLabelPositionValues::NextTo);
513        value_axis.tick_crossing_axis_mut().set_val(213_468_160);
514
515        let layout = Layout::default();
516        let mut style = Style::default();
517        style.set_val('2');
518
519        let mut graphic_frame = GraphicFrame::default();
520        graphic_frame
521            .graphic_mut()
522            .graphic_data_mut()
523            .chart_space_mut()
524            .editing_language_mut()
525            .set_val(&self.default_language);
526        graphic_frame
527            .graphic_mut()
528            .graphic_data_mut()
529            .chart_space_mut()
530            .chart_mut()
531            .plot_area_mut()
532            .set_line_chart(line_chart);
533        graphic_frame
534            .graphic_mut()
535            .graphic_data_mut()
536            .chart_space_mut()
537            .chart_mut()
538            .plot_area_mut()
539            .add_category_axis(category_axis);
540        graphic_frame
541            .graphic_mut()
542            .graphic_data_mut()
543            .chart_space_mut()
544            .chart_mut()
545            .plot_area_mut()
546            .add_value_axis(value_axis);
547        graphic_frame
548            .graphic_mut()
549            .graphic_data_mut()
550            .chart_space_mut()
551            .chart_mut()
552            .legend_mut()
553            .legend_position_mut()
554            .set_val(LegendPositionValues::Right);
555        graphic_frame
556            .graphic_mut()
557            .graphic_data_mut()
558            .chart_space_mut()
559            .chart_mut()
560            .legend_mut()
561            .set_layout(layout);
562        graphic_frame
563            .graphic_mut()
564            .graphic_data_mut()
565            .chart_space_mut()
566            .chart_mut()
567            .plot_visible_only_mut()
568            .set_val(true);
569        graphic_frame
570            .graphic_mut()
571            .graphic_data_mut()
572            .chart_space_mut()
573            .chart_mut()
574            .display_blanks_as_mut()
575            .set_val(DisplayBlanksAsValues::Zero);
576        graphic_frame
577            .graphic_mut()
578            .graphic_data_mut()
579            .chart_space_mut()
580            .set_print_settings(Self::make_print_settings());
581        graphic_frame
582            .graphic_mut()
583            .graphic_data_mut()
584            .chart_space_mut()
585            .set_style(style);
586        self.two_cell_anchor.set_graphic_frame(graphic_frame);
587    }
588
589    pub(crate) fn new_chart_line_3d_chart(&mut self, area_chart_series_list: &[&str]) {
590        let mut rotate_x = RotateX::default();
591        let mut rotate_y = RotateY::default();
592        let mut right_angle_axes = RightAngleAxes::default();
593        rotate_x.set_val(15);
594        rotate_y.set_val(10);
595        right_angle_axes.set_val(true);
596        let mut view_3d = View3D::default();
597        view_3d.set_rotate_x(rotate_x);
598        view_3d.set_rotate_y(rotate_y);
599        view_3d.set_right_angle_axes(right_angle_axes);
600
601        let acsl_obj = Self::convert_series(area_chart_series_list, true);
602
603        let mut axis_id1 = AxisId::default();
604        axis_id1.set_val(213_468_160);
605
606        let mut axis_id2 = AxisId::default();
607        axis_id2.set_val(169_590_080);
608
609        let mut line_3d_chart = Line3DChart::default();
610        line_3d_chart
611            .grouping_mut()
612            .set_val(GroupingValues::Stacked);
613        line_3d_chart.set_area_chart_series_list(acsl_obj);
614        line_3d_chart.add_axis_id(axis_id1);
615        line_3d_chart.add_axis_id(axis_id2);
616
617        let mut category_axis = CategoryAxis::default();
618        category_axis.axis_id_mut().set_val(213_468_160);
619        category_axis
620            .scaling_mut()
621            .orientation_mut()
622            .set_val(OrientationValues::MinMax);
623        category_axis
624            .major_tick_mark_mut()
625            .set_val(TickMarkValues::None);
626        category_axis
627            .minor_tick_mark_mut()
628            .set_val(TickMarkValues::None);
629        category_axis
630            .tick_label_position_mut()
631            .set_val(TickLabelPositionValues::NextTo);
632        category_axis.tick_crossing_axis_mut().set_val(169_590_080);
633        category_axis.auto_labeled_mut().set_val(true);
634        category_axis.label_offset_mut().set_val(100);
635
636        let major_gridlines = MajorGridlines::default();
637
638        let mut value_axis = ValueAxis::default();
639        value_axis.axis_id_mut().set_val(169_590_080);
640        value_axis
641            .scaling_mut()
642            .orientation_mut()
643            .set_val(OrientationValues::MinMax);
644        value_axis
645            .axis_position_mut()
646            .set_val(AxisPositionValues::Left);
647        value_axis.set_major_gridlines(major_gridlines);
648        value_axis.numbering_format_mut().set_format_code("General");
649        value_axis.numbering_format_mut().set_source_linked(true);
650        value_axis
651            .major_tick_mark_mut()
652            .set_val(TickMarkValues::None);
653        value_axis
654            .minor_tick_mark_mut()
655            .set_val(TickMarkValues::None);
656        value_axis
657            .tick_label_position_mut()
658            .set_val(TickLabelPositionValues::NextTo);
659        value_axis.tick_crossing_axis_mut().set_val(213_468_160);
660
661        let layout = Layout::default();
662        let mut style = Style::default();
663        style.set_val('2');
664
665        let mut graphic_frame = GraphicFrame::default();
666        graphic_frame
667            .graphic_mut()
668            .graphic_data_mut()
669            .chart_space_mut()
670            .editing_language_mut()
671            .set_val(&self.default_language);
672        graphic_frame
673            .graphic_mut()
674            .graphic_data_mut()
675            .chart_space_mut()
676            .chart_mut()
677            .set_view_3d(view_3d);
678        graphic_frame
679            .graphic_mut()
680            .graphic_data_mut()
681            .chart_space_mut()
682            .chart_mut()
683            .plot_area_mut()
684            .set_line_3d_chart(line_3d_chart);
685        graphic_frame
686            .graphic_mut()
687            .graphic_data_mut()
688            .chart_space_mut()
689            .chart_mut()
690            .plot_area_mut()
691            .add_category_axis(category_axis);
692        graphic_frame
693            .graphic_mut()
694            .graphic_data_mut()
695            .chart_space_mut()
696            .chart_mut()
697            .plot_area_mut()
698            .add_value_axis(value_axis);
699        graphic_frame
700            .graphic_mut()
701            .graphic_data_mut()
702            .chart_space_mut()
703            .chart_mut()
704            .legend_mut()
705            .legend_position_mut()
706            .set_val(LegendPositionValues::Right);
707        graphic_frame
708            .graphic_mut()
709            .graphic_data_mut()
710            .chart_space_mut()
711            .chart_mut()
712            .legend_mut()
713            .set_layout(layout);
714        graphic_frame
715            .graphic_mut()
716            .graphic_data_mut()
717            .chart_space_mut()
718            .chart_mut()
719            .plot_visible_only_mut()
720            .set_val(true);
721        graphic_frame
722            .graphic_mut()
723            .graphic_data_mut()
724            .chart_space_mut()
725            .chart_mut()
726            .display_blanks_as_mut()
727            .set_val(DisplayBlanksAsValues::Zero);
728        graphic_frame
729            .graphic_mut()
730            .graphic_data_mut()
731            .chart_space_mut()
732            .set_print_settings(Self::make_print_settings());
733        graphic_frame
734            .graphic_mut()
735            .graphic_data_mut()
736            .chart_space_mut()
737            .set_style(style);
738        self.two_cell_anchor.set_graphic_frame(graphic_frame);
739    }
740
741    pub(crate) fn new_chart_pie_chart(&mut self, area_chart_series_list: &[&str]) {
742        let acsl_obj = Self::convert_series(area_chart_series_list, true);
743
744        let mut show_leader_lines = ShowLeaderLines::default();
745        show_leader_lines.set_val(true);
746
747        let mut pie_chart = PieChart::default();
748        pie_chart.vary_colors_mut().set_val(true);
749        pie_chart.set_area_chart_series_list(acsl_obj);
750        pie_chart
751            .data_labels_mut()
752            .set_show_leader_lines(show_leader_lines);
753
754        let layout = Layout::default();
755        let mut style = Style::default();
756        style.set_val('2');
757
758        let default_run_properties = RunProperties::default();
759        let mut end_paragraph_run_properties = RunProperties::default();
760        end_paragraph_run_properties.set_language(&self.default_language);
761        let mut paragraph = Paragraph::default();
762        paragraph.paragraph_properties_mut().set_right_to_left("0");
763        paragraph
764            .paragraph_properties_mut()
765            .set_default_run_properties(default_run_properties);
766        paragraph.set_end_para_run_properties(end_paragraph_run_properties);
767
768        let mut text_properties = TextProperties::default();
769        text_properties.add_paragraph(paragraph);
770
771        let mut graphic_frame = GraphicFrame::default();
772        graphic_frame
773            .graphic_mut()
774            .graphic_data_mut()
775            .chart_space_mut()
776            .editing_language_mut()
777            .set_val(&self.default_language);
778        graphic_frame
779            .graphic_mut()
780            .graphic_data_mut()
781            .chart_space_mut()
782            .chart_mut()
783            .plot_area_mut()
784            .set_pie_chart(pie_chart);
785        graphic_frame
786            .graphic_mut()
787            .graphic_data_mut()
788            .chart_space_mut()
789            .chart_mut()
790            .legend_mut()
791            .legend_position_mut()
792            .set_val(LegendPositionValues::Right);
793        graphic_frame
794            .graphic_mut()
795            .graphic_data_mut()
796            .chart_space_mut()
797            .chart_mut()
798            .legend_mut()
799            .set_layout(layout);
800        graphic_frame
801            .graphic_mut()
802            .graphic_data_mut()
803            .chart_space_mut()
804            .chart_mut()
805            .legend_mut()
806            .set_text_properties(text_properties);
807        graphic_frame
808            .graphic_mut()
809            .graphic_data_mut()
810            .chart_space_mut()
811            .chart_mut()
812            .plot_visible_only_mut()
813            .set_val(true);
814        graphic_frame
815            .graphic_mut()
816            .graphic_data_mut()
817            .chart_space_mut()
818            .chart_mut()
819            .display_blanks_as_mut()
820            .set_val(DisplayBlanksAsValues::Gap);
821        graphic_frame
822            .graphic_mut()
823            .graphic_data_mut()
824            .chart_space_mut()
825            .set_print_settings(Self::make_print_settings());
826        graphic_frame
827            .graphic_mut()
828            .graphic_data_mut()
829            .chart_space_mut()
830            .set_style(style);
831        self.two_cell_anchor.set_graphic_frame(graphic_frame);
832    }
833
834    pub(crate) fn new_chart_pie_3d_chart(&mut self, area_chart_series_list: &[&str]) {
835        let mut rotate_x = RotateX::default();
836        let mut rotate_y = RotateY::default();
837        let mut right_angle_axes = RightAngleAxes::default();
838        rotate_x.set_val(15);
839        rotate_y.set_val(10);
840        right_angle_axes.set_val(true);
841        let mut view_3d = View3D::default();
842        view_3d.set_rotate_x(rotate_x);
843        view_3d.set_rotate_y(rotate_y);
844        view_3d.set_right_angle_axes(right_angle_axes);
845
846        let acsl_obj = Self::convert_series(area_chart_series_list, true);
847
848        let mut show_leader_lines = ShowLeaderLines::default();
849        show_leader_lines.set_val(true);
850
851        let mut pie_3d_chart = Pie3DChart::default();
852        pie_3d_chart.vary_colors_mut().set_val(true);
853        pie_3d_chart.set_area_chart_series_list(acsl_obj);
854        pie_3d_chart
855            .data_labels_mut()
856            .set_show_leader_lines(show_leader_lines);
857
858        let layout = Layout::default();
859        let mut style = Style::default();
860        style.set_val('2');
861
862        let default_run_properties = RunProperties::default();
863        let mut end_paragraph_run_properties = RunProperties::default();
864        end_paragraph_run_properties.set_language(&self.default_language);
865        let mut paragraph = Paragraph::default();
866        paragraph.paragraph_properties_mut().set_right_to_left("0");
867        paragraph
868            .paragraph_properties_mut()
869            .set_default_run_properties(default_run_properties);
870        paragraph.set_end_para_run_properties(end_paragraph_run_properties);
871
872        let mut text_properties = TextProperties::default();
873        text_properties.add_paragraph(paragraph);
874
875        let mut graphic_frame = GraphicFrame::default();
876        graphic_frame
877            .graphic_mut()
878            .graphic_data_mut()
879            .chart_space_mut()
880            .editing_language_mut()
881            .set_val(&self.default_language);
882        graphic_frame
883            .graphic_mut()
884            .graphic_data_mut()
885            .chart_space_mut()
886            .chart_mut()
887            .set_view_3d(view_3d);
888        graphic_frame
889            .graphic_mut()
890            .graphic_data_mut()
891            .chart_space_mut()
892            .chart_mut()
893            .plot_area_mut()
894            .set_pie_3d_chart(pie_3d_chart);
895        graphic_frame
896            .graphic_mut()
897            .graphic_data_mut()
898            .chart_space_mut()
899            .chart_mut()
900            .legend_mut()
901            .legend_position_mut()
902            .set_val(LegendPositionValues::Right);
903        graphic_frame
904            .graphic_mut()
905            .graphic_data_mut()
906            .chart_space_mut()
907            .chart_mut()
908            .legend_mut()
909            .set_layout(layout);
910        graphic_frame
911            .graphic_mut()
912            .graphic_data_mut()
913            .chart_space_mut()
914            .chart_mut()
915            .legend_mut()
916            .set_text_properties(text_properties);
917        graphic_frame
918            .graphic_mut()
919            .graphic_data_mut()
920            .chart_space_mut()
921            .chart_mut()
922            .plot_visible_only_mut()
923            .set_val(true);
924        graphic_frame
925            .graphic_mut()
926            .graphic_data_mut()
927            .chart_space_mut()
928            .chart_mut()
929            .display_blanks_as_mut()
930            .set_val(DisplayBlanksAsValues::Gap);
931        graphic_frame
932            .graphic_mut()
933            .graphic_data_mut()
934            .chart_space_mut()
935            .set_print_settings(Self::make_print_settings());
936        graphic_frame
937            .graphic_mut()
938            .graphic_data_mut()
939            .chart_space_mut()
940            .set_style(style);
941        self.two_cell_anchor.set_graphic_frame(graphic_frame);
942    }
943
944    pub(crate) fn new_chart_doughnut_chart(&mut self, area_chart_series_list: &[&str]) {
945        let mut acsl_obj = AreaChartSeriesList::default();
946        let mut acs_object = AreaChartSeries::default();
947        let mut idx = 0;
948        let mut ptn = 0;
949        for area_chart_series in area_chart_series_list {
950            if ptn == 0 {
951                let mut string_reference = StringReference::default();
952                string_reference
953                    .formula_mut()
954                    .set_address_str(*area_chart_series);
955
956                let mut category_axis_data = CategoryAxisData::default();
957                category_axis_data.set_string_reference(string_reference);
958                acs_object.set_category_axis_data(category_axis_data);
959
960                ptn += 1;
961            } else if ptn == 1 {
962                let mut values = Values::default();
963                values
964                    .number_reference_mut()
965                    .formula_mut()
966                    .set_address_str(*area_chart_series);
967                values
968                    .number_reference_mut()
969                    .numbering_cache_mut()
970                    .format_code_mut()
971                    .set_text("General");
972                acs_object.set_values(values);
973
974                acs_object.index_mut().set_val(idx);
975                acs_object.order_mut().set_val(idx);
976                acsl_obj.add_area_chart_series(acs_object);
977
978                acs_object = AreaChartSeries::default();
979                idx += 1;
980                ptn = 0;
981            }
982        }
983
984        let mut show_leader_lines = ShowLeaderLines::default();
985        show_leader_lines.set_val(true);
986
987        let mut doughnut_chart = DoughnutChart::default();
988        doughnut_chart.vary_colors_mut().set_val(true);
989        doughnut_chart.set_area_chart_series_list(acsl_obj);
990        doughnut_chart
991            .data_labels_mut()
992            .set_show_leader_lines(show_leader_lines);
993        doughnut_chart.hole_size_mut().set_val(50);
994
995        let layout = Layout::default();
996        let mut style = Style::default();
997        style.set_val('2');
998
999        let mut graphic_frame = GraphicFrame::default();
1000        graphic_frame
1001            .graphic_mut()
1002            .graphic_data_mut()
1003            .chart_space_mut()
1004            .editing_language_mut()
1005            .set_val(&self.default_language);
1006        graphic_frame
1007            .graphic_mut()
1008            .graphic_data_mut()
1009            .chart_space_mut()
1010            .chart_mut()
1011            .plot_area_mut()
1012            .set_doughnut_chart(doughnut_chart);
1013        graphic_frame
1014            .graphic_mut()
1015            .graphic_data_mut()
1016            .chart_space_mut()
1017            .chart_mut()
1018            .legend_mut()
1019            .legend_position_mut()
1020            .set_val(LegendPositionValues::Right);
1021        graphic_frame
1022            .graphic_mut()
1023            .graphic_data_mut()
1024            .chart_space_mut()
1025            .chart_mut()
1026            .legend_mut()
1027            .set_layout(layout);
1028        graphic_frame
1029            .graphic_mut()
1030            .graphic_data_mut()
1031            .chart_space_mut()
1032            .chart_mut()
1033            .plot_visible_only_mut()
1034            .set_val(true);
1035        graphic_frame
1036            .graphic_mut()
1037            .graphic_data_mut()
1038            .chart_space_mut()
1039            .chart_mut()
1040            .display_blanks_as_mut()
1041            .set_val(DisplayBlanksAsValues::Gap);
1042        graphic_frame
1043            .graphic_mut()
1044            .graphic_data_mut()
1045            .chart_space_mut()
1046            .set_print_settings(Self::make_print_settings());
1047        graphic_frame
1048            .graphic_mut()
1049            .graphic_data_mut()
1050            .chart_space_mut()
1051            .set_style(style);
1052        self.two_cell_anchor.set_graphic_frame(graphic_frame);
1053    }
1054
1055    pub(crate) fn new_chart_area_chart(&mut self, area_chart_series_list: &[&str]) {
1056        let acsl_obj = Self::convert_series(area_chart_series_list, true);
1057
1058        let mut axis_id1 = AxisId::default();
1059        axis_id1.set_val(213_468_160);
1060
1061        let mut axis_id2 = AxisId::default();
1062        axis_id2.set_val(169_590_080);
1063
1064        let mut area_chart = AreaChart::default();
1065        area_chart.grouping_mut().set_val(GroupingValues::Standard);
1066        area_chart.set_area_chart_series_list(acsl_obj);
1067        area_chart.add_axis_id(axis_id1);
1068        area_chart.add_axis_id(axis_id2);
1069
1070        let mut category_axis = CategoryAxis::default();
1071        category_axis.axis_id_mut().set_val(213_468_160);
1072        category_axis
1073            .scaling_mut()
1074            .orientation_mut()
1075            .set_val(OrientationValues::MinMax);
1076        category_axis
1077            .major_tick_mark_mut()
1078            .set_val(TickMarkValues::Outside);
1079        category_axis
1080            .minor_tick_mark_mut()
1081            .set_val(TickMarkValues::None);
1082        category_axis
1083            .tick_label_position_mut()
1084            .set_val(TickLabelPositionValues::NextTo);
1085        category_axis.tick_crossing_axis_mut().set_val(169_590_080);
1086        category_axis.auto_labeled_mut().set_val(true);
1087        category_axis.label_offset_mut().set_val(100);
1088
1089        let major_gridlines = MajorGridlines::default();
1090
1091        let mut value_axis = ValueAxis::default();
1092        value_axis.axis_id_mut().set_val(169_590_080);
1093        value_axis
1094            .scaling_mut()
1095            .orientation_mut()
1096            .set_val(OrientationValues::MinMax);
1097        value_axis
1098            .axis_position_mut()
1099            .set_val(AxisPositionValues::Left);
1100        value_axis.set_major_gridlines(major_gridlines);
1101        value_axis.numbering_format_mut().set_format_code("General");
1102        value_axis.numbering_format_mut().set_source_linked(true);
1103        value_axis
1104            .major_tick_mark_mut()
1105            .set_val(TickMarkValues::Outside);
1106        value_axis
1107            .minor_tick_mark_mut()
1108            .set_val(TickMarkValues::None);
1109        value_axis
1110            .tick_label_position_mut()
1111            .set_val(TickLabelPositionValues::NextTo);
1112        value_axis.tick_crossing_axis_mut().set_val(213_468_160);
1113        value_axis
1114            .cross_between_mut()
1115            .set_val(CrossBetweenValues::MidpointCategory);
1116
1117        let mut style = Style::default();
1118        style.set_val('2');
1119
1120        let mut graphic_frame = GraphicFrame::default();
1121        graphic_frame
1122            .graphic_mut()
1123            .graphic_data_mut()
1124            .chart_space_mut()
1125            .editing_language_mut()
1126            .set_val(&self.default_language);
1127        graphic_frame
1128            .graphic_mut()
1129            .graphic_data_mut()
1130            .chart_space_mut()
1131            .chart_mut()
1132            .plot_area_mut()
1133            .set_area_chart(area_chart);
1134        graphic_frame
1135            .graphic_mut()
1136            .graphic_data_mut()
1137            .chart_space_mut()
1138            .chart_mut()
1139            .plot_area_mut()
1140            .add_category_axis(category_axis);
1141        graphic_frame
1142            .graphic_mut()
1143            .graphic_data_mut()
1144            .chart_space_mut()
1145            .chart_mut()
1146            .plot_area_mut()
1147            .add_value_axis(value_axis);
1148        graphic_frame
1149            .graphic_mut()
1150            .graphic_data_mut()
1151            .chart_space_mut()
1152            .chart_mut()
1153            .legend_mut()
1154            .legend_position_mut()
1155            .set_val(LegendPositionValues::Right);
1156        graphic_frame
1157            .graphic_mut()
1158            .graphic_data_mut()
1159            .chart_space_mut()
1160            .chart_mut()
1161            .plot_visible_only_mut()
1162            .set_val(true);
1163        graphic_frame
1164            .graphic_mut()
1165            .graphic_data_mut()
1166            .chart_space_mut()
1167            .chart_mut()
1168            .display_blanks_as_mut()
1169            .set_val(DisplayBlanksAsValues::Zero);
1170        graphic_frame
1171            .graphic_mut()
1172            .graphic_data_mut()
1173            .chart_space_mut()
1174            .set_print_settings(Self::make_print_settings());
1175        graphic_frame
1176            .graphic_mut()
1177            .graphic_data_mut()
1178            .chart_space_mut()
1179            .set_style(style);
1180        self.two_cell_anchor.set_graphic_frame(graphic_frame);
1181    }
1182
1183    pub(crate) fn new_chart_area_3d_chart(&mut self, area_chart_series_list: &[&str]) {
1184        let mut rotate_x = RotateX::default();
1185        let mut rotate_y = RotateY::default();
1186        let mut right_angle_axes = RightAngleAxes::default();
1187        rotate_x.set_val(15);
1188        rotate_y.set_val(10);
1189        right_angle_axes.set_val(true);
1190        let mut view_3d = View3D::default();
1191        view_3d.set_rotate_x(rotate_x);
1192        view_3d.set_rotate_y(rotate_y);
1193        view_3d.set_right_angle_axes(right_angle_axes);
1194
1195        let acsl_obj = Self::convert_series(area_chart_series_list, true);
1196
1197        let mut axis_id1 = AxisId::default();
1198        axis_id1.set_val(213_468_160);
1199
1200        let mut axis_id2 = AxisId::default();
1201        axis_id2.set_val(169_590_080);
1202
1203        let mut area_3d_chart = Area3DChart::default();
1204        area_3d_chart
1205            .grouping_mut()
1206            .set_val(GroupingValues::Standard);
1207        area_3d_chart.set_area_chart_series_list(acsl_obj);
1208        area_3d_chart.add_axis_id(axis_id1);
1209        area_3d_chart.add_axis_id(axis_id2);
1210
1211        let mut category_axis = CategoryAxis::default();
1212        category_axis.axis_id_mut().set_val(213_468_160);
1213        category_axis
1214            .scaling_mut()
1215            .orientation_mut()
1216            .set_val(OrientationValues::MinMax);
1217        category_axis
1218            .major_tick_mark_mut()
1219            .set_val(TickMarkValues::Outside);
1220        category_axis
1221            .minor_tick_mark_mut()
1222            .set_val(TickMarkValues::None);
1223        category_axis
1224            .tick_label_position_mut()
1225            .set_val(TickLabelPositionValues::NextTo);
1226        category_axis.tick_crossing_axis_mut().set_val(169_590_080);
1227        category_axis.auto_labeled_mut().set_val(true);
1228        category_axis.label_offset_mut().set_val(100);
1229
1230        let major_gridlines = MajorGridlines::default();
1231
1232        let mut value_axis = ValueAxis::default();
1233        value_axis.axis_id_mut().set_val(169_590_080);
1234        value_axis
1235            .scaling_mut()
1236            .orientation_mut()
1237            .set_val(OrientationValues::MinMax);
1238        value_axis
1239            .axis_position_mut()
1240            .set_val(AxisPositionValues::Left);
1241        value_axis.set_major_gridlines(major_gridlines);
1242        value_axis.numbering_format_mut().set_format_code("General");
1243        value_axis.numbering_format_mut().set_source_linked(true);
1244        value_axis
1245            .major_tick_mark_mut()
1246            .set_val(TickMarkValues::Outside);
1247        value_axis
1248            .minor_tick_mark_mut()
1249            .set_val(TickMarkValues::None);
1250        value_axis
1251            .tick_label_position_mut()
1252            .set_val(TickLabelPositionValues::NextTo);
1253        value_axis.tick_crossing_axis_mut().set_val(213_468_160);
1254        value_axis
1255            .cross_between_mut()
1256            .set_val(CrossBetweenValues::MidpointCategory);
1257
1258        let mut style = Style::default();
1259        style.set_val('2');
1260
1261        let mut graphic_frame = GraphicFrame::default();
1262        graphic_frame
1263            .graphic_mut()
1264            .graphic_data_mut()
1265            .chart_space_mut()
1266            .editing_language_mut()
1267            .set_val(&self.default_language);
1268        graphic_frame
1269            .graphic_mut()
1270            .graphic_data_mut()
1271            .chart_space_mut()
1272            .chart_mut()
1273            .set_view_3d(view_3d);
1274        graphic_frame
1275            .graphic_mut()
1276            .graphic_data_mut()
1277            .chart_space_mut()
1278            .chart_mut()
1279            .plot_area_mut()
1280            .set_area_3d_chart(area_3d_chart);
1281        graphic_frame
1282            .graphic_mut()
1283            .graphic_data_mut()
1284            .chart_space_mut()
1285            .chart_mut()
1286            .plot_area_mut()
1287            .add_category_axis(category_axis);
1288        graphic_frame
1289            .graphic_mut()
1290            .graphic_data_mut()
1291            .chart_space_mut()
1292            .chart_mut()
1293            .plot_area_mut()
1294            .add_value_axis(value_axis);
1295        graphic_frame
1296            .graphic_mut()
1297            .graphic_data_mut()
1298            .chart_space_mut()
1299            .chart_mut()
1300            .legend_mut()
1301            .legend_position_mut()
1302            .set_val(LegendPositionValues::Right);
1303        graphic_frame
1304            .graphic_mut()
1305            .graphic_data_mut()
1306            .chart_space_mut()
1307            .chart_mut()
1308            .plot_visible_only_mut()
1309            .set_val(true);
1310        graphic_frame
1311            .graphic_mut()
1312            .graphic_data_mut()
1313            .chart_space_mut()
1314            .chart_mut()
1315            .display_blanks_as_mut()
1316            .set_val(DisplayBlanksAsValues::Zero);
1317        graphic_frame
1318            .graphic_mut()
1319            .graphic_data_mut()
1320            .chart_space_mut()
1321            .set_print_settings(Self::make_print_settings());
1322        graphic_frame
1323            .graphic_mut()
1324            .graphic_data_mut()
1325            .chart_space_mut()
1326            .set_style(style);
1327        self.two_cell_anchor.set_graphic_frame(graphic_frame);
1328    }
1329
1330    pub(crate) fn new_chart_bar_chart(&mut self, area_chart_series_list: &[&str]) {
1331        let acsl_obj = Self::convert_series(area_chart_series_list, false);
1332
1333        let mut axis_id1 = AxisId::default();
1334        axis_id1.set_val(213_468_160);
1335
1336        let mut axis_id2 = AxisId::default();
1337        axis_id2.set_val(169_590_080);
1338
1339        let mut bar_chart = BarChart::default();
1340        bar_chart
1341            .bar_direction_mut()
1342            .set_val(BarDirectionValues::Column);
1343        bar_chart.grouping_mut().set_val(GroupingValues::Stacked);
1344        bar_chart.set_area_chart_series_list(acsl_obj);
1345        bar_chart.gap_width_mut().set_val(150);
1346        bar_chart.overlap_mut().set_val(100);
1347        bar_chart.add_axis_id(axis_id1);
1348        bar_chart.add_axis_id(axis_id2);
1349
1350        let mut category_axis = CategoryAxis::default();
1351        category_axis.axis_id_mut().set_val(213_468_160);
1352        category_axis
1353            .scaling_mut()
1354            .orientation_mut()
1355            .set_val(OrientationValues::MinMax);
1356        category_axis
1357            .axis_position_mut()
1358            .set_val(AxisPositionValues::Bottom);
1359        category_axis
1360            .major_tick_mark_mut()
1361            .set_val(TickMarkValues::Outside);
1362        category_axis
1363            .minor_tick_mark_mut()
1364            .set_val(TickMarkValues::None);
1365        category_axis
1366            .tick_label_position_mut()
1367            .set_val(TickLabelPositionValues::NextTo);
1368        category_axis.tick_crossing_axis_mut().set_val(169_590_080);
1369        category_axis.auto_labeled_mut().set_val(true);
1370        category_axis.label_offset_mut().set_val(100);
1371
1372        let major_gridlines = MajorGridlines::default();
1373
1374        let mut value_axis = ValueAxis::default();
1375        value_axis.axis_id_mut().set_val(169_590_080);
1376        value_axis
1377            .scaling_mut()
1378            .orientation_mut()
1379            .set_val(OrientationValues::MinMax);
1380        value_axis
1381            .axis_position_mut()
1382            .set_val(AxisPositionValues::Left);
1383        value_axis.set_major_gridlines(major_gridlines);
1384        value_axis.numbering_format_mut().set_format_code("General");
1385        value_axis.numbering_format_mut().set_source_linked(true);
1386        value_axis
1387            .major_tick_mark_mut()
1388            .set_val(TickMarkValues::Outside);
1389        value_axis
1390            .minor_tick_mark_mut()
1391            .set_val(TickMarkValues::None);
1392        value_axis
1393            .tick_label_position_mut()
1394            .set_val(TickLabelPositionValues::NextTo);
1395        value_axis.tick_crossing_axis_mut().set_val(213_468_160);
1396
1397        let mut style = Style::default();
1398        style.set_val('2');
1399
1400        let mut graphic_frame = GraphicFrame::default();
1401        graphic_frame
1402            .graphic_mut()
1403            .graphic_data_mut()
1404            .chart_space_mut()
1405            .editing_language_mut()
1406            .set_val(&self.default_language);
1407        graphic_frame
1408            .graphic_mut()
1409            .graphic_data_mut()
1410            .chart_space_mut()
1411            .chart_mut()
1412            .plot_area_mut()
1413            .set_bar_chart(bar_chart);
1414        graphic_frame
1415            .graphic_mut()
1416            .graphic_data_mut()
1417            .chart_space_mut()
1418            .chart_mut()
1419            .plot_area_mut()
1420            .add_category_axis(category_axis);
1421        graphic_frame
1422            .graphic_mut()
1423            .graphic_data_mut()
1424            .chart_space_mut()
1425            .chart_mut()
1426            .plot_area_mut()
1427            .add_value_axis(value_axis);
1428        graphic_frame
1429            .graphic_mut()
1430            .graphic_data_mut()
1431            .chart_space_mut()
1432            .chart_mut()
1433            .legend_mut()
1434            .legend_position_mut()
1435            .set_val(LegendPositionValues::Right);
1436        graphic_frame
1437            .graphic_mut()
1438            .graphic_data_mut()
1439            .chart_space_mut()
1440            .chart_mut()
1441            .plot_visible_only_mut()
1442            .set_val(true);
1443        graphic_frame
1444            .graphic_mut()
1445            .graphic_data_mut()
1446            .chart_space_mut()
1447            .chart_mut()
1448            .display_blanks_as_mut()
1449            .set_val(DisplayBlanksAsValues::Gap);
1450        graphic_frame
1451            .graphic_mut()
1452            .graphic_data_mut()
1453            .chart_space_mut()
1454            .set_print_settings(Self::make_print_settings());
1455        graphic_frame
1456            .graphic_mut()
1457            .graphic_data_mut()
1458            .chart_space_mut()
1459            .set_style(style);
1460        self.two_cell_anchor.set_graphic_frame(graphic_frame);
1461    }
1462
1463    pub(crate) fn new_chart_bar_3d_chart(&mut self, area_chart_series_list: &[&str]) {
1464        let mut rotate_x = RotateX::default();
1465        let mut rotate_y = RotateY::default();
1466        let mut right_angle_axes = RightAngleAxes::default();
1467        rotate_x.set_val(15);
1468        rotate_y.set_val(10);
1469        right_angle_axes.set_val(true);
1470        let mut view_3d = View3D::default();
1471        view_3d.set_rotate_x(rotate_x);
1472        view_3d.set_rotate_y(rotate_y);
1473        view_3d.set_right_angle_axes(right_angle_axes);
1474
1475        let acsl_obj = Self::convert_series(area_chart_series_list, false);
1476
1477        let mut axis_id1 = AxisId::default();
1478        axis_id1.set_val(213_468_160);
1479
1480        let mut axis_id2 = AxisId::default();
1481        axis_id2.set_val(169_590_080);
1482
1483        let mut bar_3d_chart = Bar3DChart::default();
1484        bar_3d_chart
1485            .bar_direction_mut()
1486            .set_val(BarDirectionValues::Column);
1487        bar_3d_chart.grouping_mut().set_val(GroupingValues::Stacked);
1488        bar_3d_chart.set_area_chart_series_list(acsl_obj);
1489        bar_3d_chart.gap_width_mut().set_val(150);
1490        bar_3d_chart.shape_mut().set_val(ShapeValues::Box);
1491        bar_3d_chart.add_axis_id(axis_id1);
1492        bar_3d_chart.add_axis_id(axis_id2);
1493
1494        let mut category_axis = CategoryAxis::default();
1495        category_axis.axis_id_mut().set_val(213_468_160);
1496        category_axis
1497            .scaling_mut()
1498            .orientation_mut()
1499            .set_val(OrientationValues::MinMax);
1500        category_axis
1501            .axis_position_mut()
1502            .set_val(AxisPositionValues::Bottom);
1503        category_axis
1504            .major_tick_mark_mut()
1505            .set_val(TickMarkValues::Outside);
1506        category_axis
1507            .minor_tick_mark_mut()
1508            .set_val(TickMarkValues::None);
1509        category_axis
1510            .tick_label_position_mut()
1511            .set_val(TickLabelPositionValues::NextTo);
1512        category_axis.tick_crossing_axis_mut().set_val(169_590_080);
1513        category_axis.auto_labeled_mut().set_val(true);
1514        category_axis.label_offset_mut().set_val(100);
1515
1516        let major_gridlines = MajorGridlines::default();
1517
1518        let mut value_axis = ValueAxis::default();
1519        value_axis.axis_id_mut().set_val(169_590_080);
1520        value_axis
1521            .scaling_mut()
1522            .orientation_mut()
1523            .set_val(OrientationValues::MinMax);
1524        value_axis
1525            .axis_position_mut()
1526            .set_val(AxisPositionValues::Left);
1527        value_axis.set_major_gridlines(major_gridlines);
1528        value_axis.numbering_format_mut().set_format_code("General");
1529        value_axis.numbering_format_mut().set_source_linked(true);
1530        value_axis
1531            .major_tick_mark_mut()
1532            .set_val(TickMarkValues::Outside);
1533        value_axis
1534            .minor_tick_mark_mut()
1535            .set_val(TickMarkValues::None);
1536        value_axis
1537            .tick_label_position_mut()
1538            .set_val(TickLabelPositionValues::NextTo);
1539        value_axis.tick_crossing_axis_mut().set_val(213_468_160);
1540
1541        let mut style = Style::default();
1542        style.set_val('2');
1543
1544        let mut graphic_frame = GraphicFrame::default();
1545        graphic_frame
1546            .graphic_mut()
1547            .graphic_data_mut()
1548            .chart_space_mut()
1549            .editing_language_mut()
1550            .set_val(&self.default_language);
1551        graphic_frame
1552            .graphic_mut()
1553            .graphic_data_mut()
1554            .chart_space_mut()
1555            .chart_mut()
1556            .set_view_3d(view_3d);
1557        graphic_frame
1558            .graphic_mut()
1559            .graphic_data_mut()
1560            .chart_space_mut()
1561            .chart_mut()
1562            .plot_area_mut()
1563            .set_bar_3d_chart(bar_3d_chart);
1564        graphic_frame
1565            .graphic_mut()
1566            .graphic_data_mut()
1567            .chart_space_mut()
1568            .chart_mut()
1569            .plot_area_mut()
1570            .add_category_axis(category_axis);
1571        graphic_frame
1572            .graphic_mut()
1573            .graphic_data_mut()
1574            .chart_space_mut()
1575            .chart_mut()
1576            .plot_area_mut()
1577            .add_value_axis(value_axis);
1578        graphic_frame
1579            .graphic_mut()
1580            .graphic_data_mut()
1581            .chart_space_mut()
1582            .chart_mut()
1583            .legend_mut()
1584            .legend_position_mut()
1585            .set_val(LegendPositionValues::Right);
1586        graphic_frame
1587            .graphic_mut()
1588            .graphic_data_mut()
1589            .chart_space_mut()
1590            .chart_mut()
1591            .plot_visible_only_mut()
1592            .set_val(true);
1593        graphic_frame
1594            .graphic_mut()
1595            .graphic_data_mut()
1596            .chart_space_mut()
1597            .chart_mut()
1598            .display_blanks_as_mut()
1599            .set_val(DisplayBlanksAsValues::Gap);
1600        graphic_frame
1601            .graphic_mut()
1602            .graphic_data_mut()
1603            .chart_space_mut()
1604            .set_print_settings(Self::make_print_settings());
1605        graphic_frame
1606            .graphic_mut()
1607            .graphic_data_mut()
1608            .chart_space_mut()
1609            .set_style(style);
1610        self.two_cell_anchor.set_graphic_frame(graphic_frame);
1611    }
1612
1613    pub(crate) fn new_chart_of_pie_chart(&mut self, area_chart_series_list: &[&str]) {
1614        let acsl_obj = Self::convert_series(area_chart_series_list, false);
1615
1616        let mut show_leader_lines = ShowLeaderLines::default();
1617        show_leader_lines.set_val(true);
1618
1619        let mut of_pie_chart = OfPieChart::default();
1620        of_pie_chart.of_pie_type_mut().set_val(OfPieValues::Bar);
1621        of_pie_chart.vary_colors_mut().set_val(true);
1622        of_pie_chart.set_area_chart_series_list(acsl_obj);
1623        of_pie_chart
1624            .data_labels_mut()
1625            .set_show_leader_lines(show_leader_lines);
1626
1627        let default_run_properties = RunProperties::default();
1628        let mut end_paragraph_run_properties = RunProperties::default();
1629        end_paragraph_run_properties.set_language(&self.default_language);
1630        let mut paragraph = Paragraph::default();
1631        paragraph.paragraph_properties_mut().set_right_to_left("0");
1632        paragraph
1633            .paragraph_properties_mut()
1634            .set_default_run_properties(default_run_properties);
1635        paragraph.set_end_para_run_properties(end_paragraph_run_properties);
1636
1637        let mut text_properties = TextProperties::default();
1638        text_properties.add_paragraph(paragraph);
1639
1640        let mut style = Style::default();
1641        style.set_val('2');
1642
1643        let mut graphic_frame = GraphicFrame::default();
1644        graphic_frame
1645            .graphic_mut()
1646            .graphic_data_mut()
1647            .chart_space_mut()
1648            .editing_language_mut()
1649            .set_val(&self.default_language);
1650        graphic_frame
1651            .graphic_mut()
1652            .graphic_data_mut()
1653            .chart_space_mut()
1654            .chart_mut()
1655            .plot_area_mut()
1656            .set_of_pie_chart(of_pie_chart);
1657        graphic_frame
1658            .graphic_mut()
1659            .graphic_data_mut()
1660            .chart_space_mut()
1661            .chart_mut()
1662            .legend_mut()
1663            .legend_position_mut()
1664            .set_val(LegendPositionValues::Right);
1665        graphic_frame
1666            .graphic_mut()
1667            .graphic_data_mut()
1668            .chart_space_mut()
1669            .chart_mut()
1670            .legend_mut()
1671            .set_text_properties(text_properties);
1672        graphic_frame
1673            .graphic_mut()
1674            .graphic_data_mut()
1675            .chart_space_mut()
1676            .chart_mut()
1677            .plot_visible_only_mut()
1678            .set_val(true);
1679        graphic_frame
1680            .graphic_mut()
1681            .graphic_data_mut()
1682            .chart_space_mut()
1683            .chart_mut()
1684            .display_blanks_as_mut()
1685            .set_val(DisplayBlanksAsValues::Gap);
1686        graphic_frame
1687            .graphic_mut()
1688            .graphic_data_mut()
1689            .chart_space_mut()
1690            .set_print_settings(Self::make_print_settings());
1691        graphic_frame
1692            .graphic_mut()
1693            .graphic_data_mut()
1694            .chart_space_mut()
1695            .set_style(style);
1696        self.two_cell_anchor.set_graphic_frame(graphic_frame);
1697    }
1698
1699    pub(crate) fn new_chart_bubble_chart(&mut self, area_chart_series_list: &[&str]) {
1700        let mut acsl_obj = AreaChartSeriesList::default();
1701        let mut acs_object = AreaChartSeries::default();
1702        let mut idx = 0;
1703        let mut ptn = 0;
1704        for area_chart_series in area_chart_series_list {
1705            if ptn == 0 {
1706                let mut x_values = XValues::default();
1707                x_values
1708                    .number_reference_mut()
1709                    .formula_mut()
1710                    .set_address_str(*area_chart_series);
1711                x_values
1712                    .number_reference_mut()
1713                    .numbering_cache_mut()
1714                    .format_code_mut()
1715                    .set_text("General");
1716                acs_object.set_x_values(x_values);
1717
1718                ptn += 1;
1719            } else if ptn == 1 {
1720                let mut y_values = YValues::default();
1721                y_values
1722                    .number_reference_mut()
1723                    .formula_mut()
1724                    .set_address_str(*area_chart_series);
1725                y_values
1726                    .number_reference_mut()
1727                    .numbering_cache_mut()
1728                    .format_code_mut()
1729                    .set_text("General");
1730                acs_object.set_y_values(y_values);
1731
1732                ptn += 1;
1733            } else if ptn == 2 {
1734                let mut bubble_size = BubbleSize::default();
1735                bubble_size
1736                    .number_reference_mut()
1737                    .formula_mut()
1738                    .set_address_str(*area_chart_series);
1739                bubble_size
1740                    .number_reference_mut()
1741                    .numbering_cache_mut()
1742                    .format_code_mut()
1743                    .set_text("General");
1744                acs_object.set_bubble_size(bubble_size);
1745
1746                let mut invert_if_negative = InvertIfNegative::default();
1747                invert_if_negative.set_val(0f64);
1748
1749                let bubble_3d = Bubble3D::default();
1750
1751                acs_object.index_mut().set_val(idx);
1752                acs_object.order_mut().set_val(idx);
1753                acs_object.set_invert_if_negative(invert_if_negative);
1754                acs_object.set_bubble_3d(bubble_3d);
1755                acsl_obj.add_area_chart_series(acs_object);
1756
1757                acs_object = AreaChartSeries::default();
1758                ptn = 0;
1759                idx += 1;
1760            }
1761        }
1762
1763        let mut show_leader_lines = ShowLeaderLines::default();
1764        show_leader_lines.set_val(true);
1765
1766        let mut axis_id1 = AxisId::default();
1767        axis_id1.set_val(213_468_160);
1768
1769        let mut axis_id2 = AxisId::default();
1770        axis_id2.set_val(169_590_080);
1771
1772        let mut bubble_chart = BubbleChart::default();
1773        bubble_chart.vary_colors_mut().set_val(false);
1774        bubble_chart.set_area_chart_series_list(acsl_obj);
1775        bubble_chart.bubble_scale_mut().set_val(100);
1776        bubble_chart.add_axis_id(axis_id1);
1777        bubble_chart.add_axis_id(axis_id2);
1778        bubble_chart
1779            .data_labels_mut()
1780            .set_show_leader_lines(show_leader_lines);
1781
1782        let mut value_axis_1 = ValueAxis::default();
1783        value_axis_1.axis_id_mut().set_val(213_468_160);
1784        value_axis_1
1785            .scaling_mut()
1786            .orientation_mut()
1787            .set_val(OrientationValues::MinMax);
1788        value_axis_1
1789            .axis_position_mut()
1790            .set_val(AxisPositionValues::Bottom);
1791        value_axis_1
1792            .numbering_format_mut()
1793            .set_format_code("General");
1794        value_axis_1.numbering_format_mut().set_source_linked(true);
1795        value_axis_1
1796            .major_tick_mark_mut()
1797            .set_val(TickMarkValues::Outside);
1798        value_axis_1
1799            .minor_tick_mark_mut()
1800            .set_val(TickMarkValues::None);
1801        value_axis_1
1802            .tick_label_position_mut()
1803            .set_val(TickLabelPositionValues::NextTo);
1804        value_axis_1.tick_crossing_axis_mut().set_val(169_590_080);
1805        value_axis_1
1806            .cross_between_mut()
1807            .set_val(CrossBetweenValues::MidpointCategory);
1808
1809        let major_gridlines = MajorGridlines::default();
1810        let mut value_axis_2 = ValueAxis::default();
1811        value_axis_2.axis_id_mut().set_val(169_590_080);
1812        value_axis_2
1813            .scaling_mut()
1814            .orientation_mut()
1815            .set_val(OrientationValues::MinMax);
1816        value_axis_2
1817            .axis_position_mut()
1818            .set_val(AxisPositionValues::Left);
1819        value_axis_2.set_major_gridlines(major_gridlines);
1820        value_axis_2
1821            .numbering_format_mut()
1822            .set_format_code("General");
1823        value_axis_2.numbering_format_mut().set_source_linked(true);
1824        value_axis_2
1825            .major_tick_mark_mut()
1826            .set_val(TickMarkValues::Outside);
1827        value_axis_2
1828            .minor_tick_mark_mut()
1829            .set_val(TickMarkValues::None);
1830        value_axis_2
1831            .tick_label_position_mut()
1832            .set_val(TickLabelPositionValues::NextTo);
1833        value_axis_2.tick_crossing_axis_mut().set_val(213_468_160);
1834        value_axis_2
1835            .cross_between_mut()
1836            .set_val(CrossBetweenValues::MidpointCategory);
1837
1838        let default_run_properties = RunProperties::default();
1839        let mut end_paragraph_run_properties = RunProperties::default();
1840        end_paragraph_run_properties.set_language(&self.default_language);
1841        let mut paragraph = Paragraph::default();
1842        paragraph.paragraph_properties_mut().set_right_to_left("0");
1843        paragraph
1844            .paragraph_properties_mut()
1845            .set_default_run_properties(default_run_properties);
1846        paragraph.set_end_para_run_properties(end_paragraph_run_properties);
1847
1848        let mut text_properties = TextProperties::default();
1849        text_properties.add_paragraph(paragraph);
1850
1851        let mut style = Style::default();
1852        style.set_val('2');
1853
1854        let mut graphic_frame = GraphicFrame::default();
1855        graphic_frame
1856            .graphic_mut()
1857            .graphic_data_mut()
1858            .chart_space_mut()
1859            .editing_language_mut()
1860            .set_val(&self.default_language);
1861        graphic_frame
1862            .graphic_mut()
1863            .graphic_data_mut()
1864            .chart_space_mut()
1865            .chart_mut()
1866            .plot_area_mut()
1867            .set_bubble_chart(bubble_chart);
1868        graphic_frame
1869            .graphic_mut()
1870            .graphic_data_mut()
1871            .chart_space_mut()
1872            .chart_mut()
1873            .plot_area_mut()
1874            .add_value_axis(value_axis_1);
1875        graphic_frame
1876            .graphic_mut()
1877            .graphic_data_mut()
1878            .chart_space_mut()
1879            .chart_mut()
1880            .plot_area_mut()
1881            .add_value_axis(value_axis_2);
1882        graphic_frame
1883            .graphic_mut()
1884            .graphic_data_mut()
1885            .chart_space_mut()
1886            .chart_mut()
1887            .legend_mut()
1888            .legend_position_mut()
1889            .set_val(LegendPositionValues::Right);
1890        graphic_frame
1891            .graphic_mut()
1892            .graphic_data_mut()
1893            .chart_space_mut()
1894            .chart_mut()
1895            .legend_mut()
1896            .set_text_properties(text_properties);
1897        graphic_frame
1898            .graphic_mut()
1899            .graphic_data_mut()
1900            .chart_space_mut()
1901            .chart_mut()
1902            .plot_visible_only_mut()
1903            .set_val(true);
1904        graphic_frame
1905            .graphic_mut()
1906            .graphic_data_mut()
1907            .chart_space_mut()
1908            .chart_mut()
1909            .display_blanks_as_mut()
1910            .set_val(DisplayBlanksAsValues::Gap);
1911        graphic_frame
1912            .graphic_mut()
1913            .graphic_data_mut()
1914            .chart_space_mut()
1915            .set_print_settings(Self::make_print_settings());
1916        graphic_frame
1917            .graphic_mut()
1918            .graphic_data_mut()
1919            .chart_space_mut()
1920            .set_style(style);
1921        self.two_cell_anchor.set_graphic_frame(graphic_frame);
1922    }
1923
1924    pub(crate) fn new_chart_radar_chart(&mut self, area_chart_series_list: &[&str]) {
1925        let acsl_obj = Self::convert_series(area_chart_series_list, true);
1926
1927        let mut axis_id1 = AxisId::default();
1928        axis_id1.set_val(213_468_160);
1929
1930        let mut axis_id2 = AxisId::default();
1931        axis_id2.set_val(169_590_080);
1932
1933        let mut radar_chart = RadarChart::default();
1934        radar_chart.set_area_chart_series_list(acsl_obj);
1935        radar_chart.add_axis_id(axis_id1);
1936        radar_chart.add_axis_id(axis_id2);
1937
1938        let mut category_axis = CategoryAxis::default();
1939        category_axis.axis_id_mut().set_val(213_468_160);
1940        category_axis
1941            .scaling_mut()
1942            .orientation_mut()
1943            .set_val(OrientationValues::MinMax);
1944        category_axis
1945            .major_tick_mark_mut()
1946            .set_val(TickMarkValues::None);
1947        category_axis
1948            .minor_tick_mark_mut()
1949            .set_val(TickMarkValues::None);
1950        category_axis
1951            .tick_label_position_mut()
1952            .set_val(TickLabelPositionValues::NextTo);
1953        category_axis.tick_crossing_axis_mut().set_val(169_590_080);
1954        category_axis.auto_labeled_mut().set_val(true);
1955        category_axis.label_offset_mut().set_val(100);
1956
1957        let major_gridlines = MajorGridlines::default();
1958
1959        let mut value_axis = ValueAxis::default();
1960        value_axis.axis_id_mut().set_val(169_590_080);
1961        value_axis
1962            .scaling_mut()
1963            .orientation_mut()
1964            .set_val(OrientationValues::MinMax);
1965        value_axis
1966            .axis_position_mut()
1967            .set_val(AxisPositionValues::Left);
1968        value_axis.set_major_gridlines(major_gridlines);
1969        value_axis.numbering_format_mut().set_format_code("General");
1970        value_axis.numbering_format_mut().set_source_linked(true);
1971        value_axis
1972            .major_tick_mark_mut()
1973            .set_val(TickMarkValues::None);
1974        value_axis
1975            .minor_tick_mark_mut()
1976            .set_val(TickMarkValues::None);
1977        value_axis
1978            .tick_label_position_mut()
1979            .set_val(TickLabelPositionValues::NextTo);
1980        value_axis.tick_crossing_axis_mut().set_val(213_468_160);
1981
1982        let layout = Layout::default();
1983        let mut style = Style::default();
1984        style.set_val('2');
1985
1986        let mut graphic_frame = GraphicFrame::default();
1987        graphic_frame
1988            .graphic_mut()
1989            .graphic_data_mut()
1990            .chart_space_mut()
1991            .editing_language_mut()
1992            .set_val(&self.default_language);
1993        graphic_frame
1994            .graphic_mut()
1995            .graphic_data_mut()
1996            .chart_space_mut()
1997            .chart_mut()
1998            .plot_area_mut()
1999            .set_radar_chart(radar_chart);
2000        graphic_frame
2001            .graphic_mut()
2002            .graphic_data_mut()
2003            .chart_space_mut()
2004            .chart_mut()
2005            .plot_area_mut()
2006            .add_category_axis(category_axis);
2007        graphic_frame
2008            .graphic_mut()
2009            .graphic_data_mut()
2010            .chart_space_mut()
2011            .chart_mut()
2012            .plot_area_mut()
2013            .add_value_axis(value_axis);
2014        graphic_frame
2015            .graphic_mut()
2016            .graphic_data_mut()
2017            .chart_space_mut()
2018            .chart_mut()
2019            .legend_mut()
2020            .legend_position_mut()
2021            .set_val(LegendPositionValues::Right);
2022        graphic_frame
2023            .graphic_mut()
2024            .graphic_data_mut()
2025            .chart_space_mut()
2026            .chart_mut()
2027            .legend_mut()
2028            .set_layout(layout);
2029        graphic_frame
2030            .graphic_mut()
2031            .graphic_data_mut()
2032            .chart_space_mut()
2033            .chart_mut()
2034            .plot_visible_only_mut()
2035            .set_val(true);
2036        graphic_frame
2037            .graphic_mut()
2038            .graphic_data_mut()
2039            .chart_space_mut()
2040            .chart_mut()
2041            .display_blanks_as_mut()
2042            .set_val(DisplayBlanksAsValues::Zero);
2043        graphic_frame
2044            .graphic_mut()
2045            .graphic_data_mut()
2046            .chart_space_mut()
2047            .set_print_settings(Self::make_print_settings());
2048        graphic_frame
2049            .graphic_mut()
2050            .graphic_data_mut()
2051            .chart_space_mut()
2052            .set_style(style);
2053        self.two_cell_anchor.set_graphic_frame(graphic_frame);
2054    }
2055
2056    pub(crate) fn new_chart_scatter_chart(&mut self, area_chart_series_list: &[&str]) {
2057        let mut acsl_obj = AreaChartSeriesList::default();
2058        let mut acs_object = AreaChartSeries::default();
2059        let mut idx = 0;
2060        let mut ptn = 0;
2061        for area_chart_series in area_chart_series_list {
2062            if ptn == 0 {
2063                let mut x_values = XValues::default();
2064                x_values
2065                    .number_reference_mut()
2066                    .formula_mut()
2067                    .set_address_str(*area_chart_series);
2068                x_values
2069                    .number_reference_mut()
2070                    .numbering_cache_mut()
2071                    .format_code_mut()
2072                    .set_text("General");
2073                acs_object.set_x_values(x_values);
2074
2075                ptn += 1;
2076            } else if ptn == 1 {
2077                let mut y_values = YValues::default();
2078                y_values
2079                    .number_reference_mut()
2080                    .formula_mut()
2081                    .set_address_str(*area_chart_series);
2082                y_values
2083                    .number_reference_mut()
2084                    .numbering_cache_mut()
2085                    .format_code_mut()
2086                    .set_text("General");
2087                acs_object.set_y_values(y_values);
2088
2089                let mut invert_if_negative = InvertIfNegative::default();
2090                invert_if_negative.set_val(0f64);
2091
2092                acs_object.index_mut().set_val(idx);
2093                acs_object.order_mut().set_val(idx);
2094                acs_object.set_invert_if_negative(invert_if_negative);
2095                acsl_obj.add_area_chart_series(acs_object);
2096
2097                acs_object = AreaChartSeries::default();
2098                ptn = 0;
2099                idx += 1;
2100            }
2101        }
2102
2103        let mut axis_id1 = AxisId::default();
2104        axis_id1.set_val(213_468_160);
2105
2106        let mut axis_id2 = AxisId::default();
2107        axis_id2.set_val(169_590_080);
2108
2109        let mut scatter_chart = ScatterChart::default();
2110        scatter_chart.set_area_chart_series_list(acsl_obj);
2111        scatter_chart.add_axis_id(axis_id1);
2112        scatter_chart.add_axis_id(axis_id2);
2113
2114        let mut value_axis_1 = ValueAxis::default();
2115        value_axis_1.axis_id_mut().set_val(213_468_160);
2116        value_axis_1
2117            .scaling_mut()
2118            .orientation_mut()
2119            .set_val(OrientationValues::MinMax);
2120        value_axis_1
2121            .axis_position_mut()
2122            .set_val(AxisPositionValues::Bottom);
2123        value_axis_1
2124            .numbering_format_mut()
2125            .set_format_code("General");
2126        value_axis_1.numbering_format_mut().set_source_linked(true);
2127        value_axis_1
2128            .major_tick_mark_mut()
2129            .set_val(TickMarkValues::Outside);
2130        value_axis_1
2131            .minor_tick_mark_mut()
2132            .set_val(TickMarkValues::None);
2133        value_axis_1
2134            .tick_label_position_mut()
2135            .set_val(TickLabelPositionValues::NextTo);
2136        value_axis_1.tick_crossing_axis_mut().set_val(169_590_080);
2137        value_axis_1
2138            .cross_between_mut()
2139            .set_val(CrossBetweenValues::MidpointCategory);
2140
2141        let major_gridlines = MajorGridlines::default();
2142        let mut value_axis_2 = ValueAxis::default();
2143        value_axis_2.axis_id_mut().set_val(169_590_080);
2144        value_axis_2
2145            .scaling_mut()
2146            .orientation_mut()
2147            .set_val(OrientationValues::MinMax);
2148        value_axis_2
2149            .axis_position_mut()
2150            .set_val(AxisPositionValues::Left);
2151        value_axis_2.set_major_gridlines(major_gridlines);
2152        value_axis_2
2153            .numbering_format_mut()
2154            .set_format_code("General");
2155        value_axis_2.numbering_format_mut().set_source_linked(true);
2156        value_axis_2
2157            .major_tick_mark_mut()
2158            .set_val(TickMarkValues::Outside);
2159        value_axis_2
2160            .minor_tick_mark_mut()
2161            .set_val(TickMarkValues::None);
2162        value_axis_2
2163            .tick_label_position_mut()
2164            .set_val(TickLabelPositionValues::NextTo);
2165        value_axis_2.tick_crossing_axis_mut().set_val(213_468_160);
2166        value_axis_2
2167            .cross_between_mut()
2168            .set_val(CrossBetweenValues::MidpointCategory);
2169
2170        let layout = Layout::default();
2171        let mut style = Style::default();
2172        style.set_val('2');
2173
2174        let mut graphic_frame = GraphicFrame::default();
2175        graphic_frame
2176            .graphic_mut()
2177            .graphic_data_mut()
2178            .chart_space_mut()
2179            .editing_language_mut()
2180            .set_val(&self.default_language);
2181        graphic_frame
2182            .graphic_mut()
2183            .graphic_data_mut()
2184            .chart_space_mut()
2185            .chart_mut()
2186            .plot_area_mut()
2187            .set_scatter_chart(scatter_chart);
2188        graphic_frame
2189            .graphic_mut()
2190            .graphic_data_mut()
2191            .chart_space_mut()
2192            .chart_mut()
2193            .plot_area_mut()
2194            .add_value_axis(value_axis_1);
2195        graphic_frame
2196            .graphic_mut()
2197            .graphic_data_mut()
2198            .chart_space_mut()
2199            .chart_mut()
2200            .plot_area_mut()
2201            .add_value_axis(value_axis_2);
2202        graphic_frame
2203            .graphic_mut()
2204            .graphic_data_mut()
2205            .chart_space_mut()
2206            .chart_mut()
2207            .legend_mut()
2208            .legend_position_mut()
2209            .set_val(LegendPositionValues::Right);
2210        graphic_frame
2211            .graphic_mut()
2212            .graphic_data_mut()
2213            .chart_space_mut()
2214            .chart_mut()
2215            .legend_mut()
2216            .set_layout(layout);
2217        graphic_frame
2218            .graphic_mut()
2219            .graphic_data_mut()
2220            .chart_space_mut()
2221            .chart_mut()
2222            .plot_visible_only_mut()
2223            .set_val(true);
2224        graphic_frame
2225            .graphic_mut()
2226            .graphic_data_mut()
2227            .chart_space_mut()
2228            .chart_mut()
2229            .display_blanks_as_mut()
2230            .set_val(DisplayBlanksAsValues::Zero);
2231        graphic_frame
2232            .graphic_mut()
2233            .graphic_data_mut()
2234            .chart_space_mut()
2235            .set_print_settings(Self::make_print_settings());
2236        graphic_frame
2237            .graphic_mut()
2238            .graphic_data_mut()
2239            .chart_space_mut()
2240            .set_style(style);
2241        self.two_cell_anchor.set_graphic_frame(graphic_frame);
2242    }
2243
2244    #[inline]
2245    pub(crate) fn make_print_settings() -> PrintSettings {
2246        let mut obj = PrintSettings::default();
2247        obj.page_margins_mut()
2248            .set_bottom(0.75)
2249            .set_left(0.7)
2250            .set_right(0.7)
2251            .set_top(0.75)
2252            .set_header(0.3)
2253            .set_footer(0.3);
2254        obj
2255    }
2256
2257    pub(crate) fn make_title<S: Into<String>>(&self, value: S) -> Title {
2258        let mut run_properties = RunProperties::default();
2259        run_properties.set_language(&self.default_language);
2260        run_properties.set_alternative_language("en-US");
2261
2262        let mut run = Run::default();
2263        run.set_run_properties(run_properties);
2264        run.set_text(value);
2265
2266        let default_run_properties = RunProperties::default();
2267
2268        let mut paragraph = Paragraph::default();
2269        paragraph
2270            .paragraph_properties_mut()
2271            .set_default_run_properties(default_run_properties);
2272        paragraph.add_run(run);
2273
2274        let mut chart_text = ChartText::default();
2275
2276        let mut rich_text = RichText::default();
2277        rich_text.add_paragraph(paragraph);
2278        chart_text.set_rich_text(rich_text);
2279
2280        let mut title = Title::default();
2281        title.set_chart_text(chart_text);
2282
2283        title
2284    }
2285}
2286impl AdjustmentCoordinate for Chart {
2287    #[inline]
2288    fn adjustment_insert_coordinate(
2289        &mut self,
2290        root_col_num: u32,
2291        offset_col_num: u32,
2292        root_row_num: u32,
2293        offset_row_num: u32,
2294    ) {
2295        self.two_cell_anchor.as_mut().adjustment_insert_coordinate(
2296            root_col_num,
2297            offset_col_num,
2298            root_row_num,
2299            offset_row_num,
2300        );
2301    }
2302
2303    #[inline]
2304    fn adjustment_remove_coordinate(
2305        &mut self,
2306        root_col_num: u32,
2307        offset_col_num: u32,
2308        root_row_num: u32,
2309        offset_row_num: u32,
2310    ) {
2311        self.two_cell_anchor.as_mut().adjustment_remove_coordinate(
2312            root_col_num,
2313            offset_col_num,
2314            root_row_num,
2315            offset_row_num,
2316        );
2317    }
2318
2319    #[inline]
2320    fn is_remove_coordinate(
2321        &self,
2322        root_col_num: u32,
2323        offset_col_num: u32,
2324        root_row_num: u32,
2325        offset_row_num: u32,
2326    ) -> bool {
2327        self.two_cell_anchor.as_ref().is_remove_coordinate(
2328            root_col_num,
2329            offset_col_num,
2330            root_row_num,
2331            offset_row_num,
2332        )
2333    }
2334}
2335impl AdjustmentCoordinateWithSheet for Chart {
2336    #[inline]
2337    fn adjustment_insert_coordinate_with_sheet(
2338        &mut self,
2339        sheet_name: &str,
2340        root_col_num: u32,
2341        offset_col_num: u32,
2342        root_row_num: u32,
2343        offset_row_num: u32,
2344    ) {
2345        self.two_cell_anchor
2346            .as_mut()
2347            .adjustment_insert_coordinate_with_sheet(
2348                sheet_name,
2349                root_col_num,
2350                offset_col_num,
2351                root_row_num,
2352                offset_row_num,
2353            );
2354    }
2355
2356    #[inline]
2357    fn adjustment_remove_coordinate_with_sheet(
2358        &mut self,
2359        sheet_name: &str,
2360        root_col_num: u32,
2361        offset_col_num: u32,
2362        root_row_num: u32,
2363        offset_row_num: u32,
2364    ) {
2365        self.two_cell_anchor
2366            .as_mut()
2367            .adjustment_insert_coordinate_with_sheet(
2368                sheet_name,
2369                root_col_num,
2370                offset_col_num,
2371                root_row_num,
2372                offset_row_num,
2373            );
2374    }
2375}