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