umya_spreadsheet/structs/
chart.rs

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