Создание диаграмм в презентациях PowerPoint

Диаграммы — отличный инструмент для краткого отображения данных. Кроме того, они упрощают потребление больших объемов данных, представляя их визуально. Добавление диаграмм в ваши презентации может оказаться полезным при представлении таких данных, как тенденции роста компании или уровень внедрения продукта. С этой целью эта статья научит вас создавать диаграммы в презентациях PowerPoint с помощью C++.

C++ API для создания диаграмм в презентациях PowerPoint

Aspose.Slides for C++ — это собственная библиотека C++, которая поддерживает создание, чтение и управление файлами PowerPoint. API также поддерживает создание диаграмм в презентациях PowerPoint. Вы можете либо установить API через NuGet, либо загрузить его напрямую из раздела Загрузки.

PM> Install-Package Aspose.Slides.Cpp

Создание столбчатой диаграммы в презентациях PowerPoint с использованием C++

Ниже приведены шаги для создания гистограммы в презентациях PowerPoint.

Ниже приведен пример кода для добавления гистограммы в презентацию PowerPoint с использованием C++.

// Выходной путь к файлу.
const String outputFilePath = u"OutputDirectory\\column_chart.pptx";

// Создать экземпляр класса Presentation, который представляет файл PPTX.
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Доступ к первому слайду
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

// Добавить диаграмму с данными по умолчанию
SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::ClusteredColumn, 0, 0, 500, 500);

// Установка индекса листа данных диаграммы
int defaultWorksheetIndex = 0;

// Получение книги данных диаграммы
SharedPtr<IChartDataWorkbook> fact = chart->get_ChartData()->get_ChartDataWorkbook();

// Настройка заголовка диаграммы
chart->get_ChartTitle()->AddTextFrameForOverriding(u"Sample Title");
chart->get_ChartTitle()->get_TextFrameForOverriding()->get_TextFrameFormat()->set_CenterText(NullableBool::True);
chart->get_ChartTitle()->set_Height(20);
chart->set_HasTitle(true);

// Удалить сгенерированные по умолчанию серии и категории
chart->get_ChartData()->get_Series()->Clear();
chart->get_ChartData()->get_Categories()->Clear();
int s = chart->get_ChartData()->get_Series()->get_Count();
s = chart->get_ChartData()->get_Categories()->get_Count();

// Добавить серию
chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 0, 1, ObjectExt::Box<System::String>(u"Series 1")), chart->get_Type());
chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 0, 2, ObjectExt::Box<System::String>(u"Series 2")), chart->get_Type());

// Добавить категории
chart->get_ChartData()->get_Categories()->Add(fact->GetCell(defaultWorksheetIndex, 1, 0, ObjectExt::Box<System::String>(u"Category 1")));
chart->get_ChartData()->get_Categories()->Add(fact->GetCell(defaultWorksheetIndex, 2, 0, ObjectExt::Box<System::String>(u"Category 2")));
chart->get_ChartData()->get_Categories()->Add(fact->GetCell(defaultWorksheetIndex, 3, 0, ObjectExt::Box<System::String>(u"Category 3")));

// Возьмите первую серию графиков
SharedPtr<IChartSeries> series = chart->get_ChartData()->get_Series()->idx_get(0);

// Заполнить данные серии
series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 1, 1, ObjectExt::Box<double>(20)));
series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 2, 1, ObjectExt::Box<double>(50)));
series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 3, 1, ObjectExt::Box<double>(30)));

// Установка цвета заливки для серии
series->get_Format()->get_Fill()->set_FillType(FillType::Solid);
series->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Blue());

// Возьмем вторую серию графиков
series = chart->get_ChartData()->get_Series()->idx_get(1);

// Заполнить данные серии
series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 1, 2, ObjectExt::Box<double>(30)));
series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 2, 2, ObjectExt::Box<double>(10)));
series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 3, 2, ObjectExt::Box<double>(60)));

// Установка цвета заливки для серии
series->get_Format()->get_Fill()->set_FillType(FillType::Solid);
series->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Orange());

// Первая метка будет отображать название категории
SharedPtr<IDataLabel> lbl = series->get_DataPoints()->idx_get(0)->get_Label();
lbl->get_DataLabelFormat()->set_ShowCategoryName(true);

lbl = series->get_DataPoints()->idx_get(1)->get_Label();
lbl->get_DataLabelFormat()->set_ShowSeriesName(true);

// Показать значение для третьего ярлыка
lbl = series->get_DataPoints()->idx_get(2)->get_Label();
lbl->get_DataLabelFormat()->set_ShowValue(true);
lbl->get_DataLabelFormat()->set_ShowSeriesName(true);
lbl->get_DataLabelFormat()->set_Separator(u"/");

// Сохранить PPTX-файл
pres->Save(outputFilePath, Aspose::Slides::Export::SaveFormat::Pptx);

Ниже приведено изображение гистограммы, созданной с помощью примера кода.

Создание столбчатой диаграммы в презентациях PowerPoint

Создание круговой диаграммы в презентациях PowerPoint с использованием C++

Ниже приведены шаги, чтобы добавить круговую диаграмму в слайды PowerPoint.

Ниже приведен пример кода для добавления круговой диаграммы в слайды PowerPoint с помощью C++.

// Выходной путь к файлу.
const String outputFilePath = u"OutputDirectory\\pie_chart.pptx";

// Создать экземпляр класса Presentation, который представляет файл PPTX.
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Доступ к первому слайду
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

// Добавить диаграмму с данными по умолчанию
SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::Pie, 0, 0, 500, 500);

// Настройка заголовка диаграммы
chart->get_ChartTitle()->AddTextFrameForOverriding(u"Sample Title");
chart->get_ChartTitle()->get_TextFrameForOverriding()->get_TextFrameFormat()->set_CenterText(NullableBool::True);
chart->get_ChartTitle()->set_Height(20);
chart->set_HasTitle(true);

// Удалить сгенерированные по умолчанию серии и категории
chart->get_ChartData()->get_Series()->Clear();
chart->get_ChartData()->get_Categories()->Clear();

// Установка индекса листа данных диаграммы
int defaultWorksheetIndex = 0;

// Получение книги данных диаграммы
SharedPtr<IChartDataWorkbook> fact = chart->get_ChartData()->get_ChartDataWorkbook();

// Добавить категории
chart->get_ChartData()->get_Categories()->Add(fact->GetCell(defaultWorksheetIndex, 1, 0, ObjectExt::Box<System::String>(u"First Qtr")));
chart->get_ChartData()->get_Categories()->Add(fact->GetCell(defaultWorksheetIndex, 2, 0, ObjectExt::Box<System::String>(u"2nd Qtr")));
chart->get_ChartData()->get_Categories()->Add(fact->GetCell(defaultWorksheetIndex, 3, 0, ObjectExt::Box<System::String>(u"3rd Qtr")));

// Добавить серию
chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 0, 1, ObjectExt::Box<System::String>(u"Series 1")), chart->get_Type());

// Возьмите первую серию графиков
SharedPtr<IChartSeries> series = chart->get_ChartData()->get_Series()->idx_get(0);

// Заполнить данные серии
series->get_DataPoints()->AddDataPointForPieSeries(fact->GetCell(defaultWorksheetIndex, 1, 1, ObjectExt::Box<double>(20)));
series->get_DataPoints()->AddDataPointForPieSeries(fact->GetCell(defaultWorksheetIndex, 2, 1, ObjectExt::Box<double>(50)));
series->get_DataPoints()->AddDataPointForPieSeries(fact->GetCell(defaultWorksheetIndex, 3, 1, ObjectExt::Box<double>(30)));

chart->get_ChartData()->get_SeriesGroups()->idx_get(0)->set_IsColorVaried(true);

SharedPtr<IChartDataPoint> point = series->get_DataPoints()->idx_get(0);
point->get_Format()->get_Fill()->set_FillType(FillType::Solid);
point->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Orange());

// Настройка границы сектора
point->get_Format()->get_Line()->get_FillFormat()->set_FillType(FillType::Solid);
point->get_Format()->get_Line()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Gray());
point->get_Format()->get_Line()->set_Width(3.0);

SharedPtr<IChartDataPoint> point1 = series->get_DataPoints()->idx_get(1);
point1->get_Format()->get_Fill()->set_FillType(FillType::Solid);
point1->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_BlueViolet());

// Настройка границы сектора
point1->get_Format()->get_Line()->get_FillFormat()->set_FillType(FillType::Solid);
point1->get_Format()->get_Line()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Blue());
point1->get_Format()->get_Line()->set_Width(3.0);

SharedPtr<IChartDataPoint> point2 = series->get_DataPoints()->idx_get(2);
point2->get_Format()->get_Fill()->set_FillType(FillType::Solid);
point2->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_YellowGreen());

// Настройка границы сектора
point2->get_Format()->get_Line()->get_FillFormat()->set_FillType(FillType::Solid);
point2->get_Format()->get_Line()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
point2->get_Format()->get_Line()->set_Width(2.0);

// Создавайте собственные метки для каждой категории в серии
SharedPtr<IDataLabel> lbl1 = series->get_DataPoints()->idx_get(0)->get_Label();

// lbl.ShowCategoryName = true;
lbl1->get_DataLabelFormat()->set_ShowValue(true);

SharedPtr<IDataLabel> lbl2 = series->get_DataPoints()->idx_get(1)->get_Label();
lbl2->get_DataLabelFormat()->set_ShowValue(true);
lbl2->get_DataLabelFormat()->set_ShowLegendKey(true);
lbl2->get_DataLabelFormat()->set_ShowPercentage(true);

SharedPtr<IDataLabel> lbl3 = series->get_DataPoints()->idx_get(2)->get_Label();

lbl3->get_DataLabelFormat()->set_ShowSeriesName(true);
lbl3->get_DataLabelFormat()->set_ShowPercentage(true);

// Отображение ведущих линий для диаграммы
series->get_Labels()->get_DefaultDataLabelFormat()->set_ShowLeaderLines(true);

// Настройка угла поворота секторов круговой диаграммы
chart->get_ChartData()->get_SeriesGroups()->idx_get(0)->set_FirstSliceAngle(180);

// Сохранить PPTX-файл
pres->Save(outputFilePath, Aspose::Slides::Export::SaveFormat::Pptx);

Ниже приведено изображение круговой диаграммы, созданной с помощью примера кода.

Создание круговой диаграммы в презентациях PowerPoint

Создайте точечную диаграмму в презентации PowerPoint с помощью C++

Ниже приведены шаги по добавлению разбросанной диаграммы на слайды PowerPoint.

Ниже приведен пример кода для добавления разбросанной диаграммы на слайды PowerPoint с помощью C++.

// Выходной путь к файлу.
const String outputFilePath = u"OutputDirectory\\scattered_chart.pptx";

// Создать экземпляр класса Presentation, который представляет файл PPTX.
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Доступ к первому слайду
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

// Добавить диаграмму с данными по умолчанию
SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::ScatterWithSmoothLines, 0, 0, 500, 500);

// Удалить серию, созданную по умолчанию 
chart->get_ChartData()->get_Series()->Clear();

// Установка индекса листа данных диаграммы
int defaultWorksheetIndex = 0;

// Получение книги данных диаграммы
SharedPtr<IChartDataWorkbook> fact = chart->get_ChartData()->get_ChartDataWorkbook();

// Добавить серию
chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 1, 1, ObjectExt::Box<System::String>(u"Series 1")), chart->get_Type());
chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 1, 3, ObjectExt::Box<System::String>(u"Series 2")), chart->get_Type());

// Возьмите первую серию графиков
SharedPtr<IChartSeries> series = chart->get_ChartData()->get_Series()->idx_get(0);

// Добавьте туда новую точку (1:3).
series->get_DataPoints()->AddDataPointForScatterSeries(fact->GetCell(defaultWorksheetIndex, 2, 1, ObjectExt::Box<double>(1)), fact->GetCell(defaultWorksheetIndex, 2, 2, ObjectExt::Box<double>(3)));

// Добавить новую точку (2:10)
series->get_DataPoints()->AddDataPointForScatterSeries(fact->GetCell(defaultWorksheetIndex, 3, 1, ObjectExt::Box<double>(2)), fact->GetCell(defaultWorksheetIndex, 3, 2, ObjectExt::Box<double>(10)));

// Изменить тип серии
series->set_Type(ChartType::ScatterWithStraightLinesAndMarkers);

// Изменение маркера серии диаграммы
series->get_Marker()->set_Size(10);
series->get_Marker()->set_Symbol(MarkerStyleType::Star);

// Возьмем вторую серию графиков
series = chart->get_ChartData()->get_Series()->idx_get(1);

// Добавьте туда новую точку (5:2).
series->get_DataPoints()->AddDataPointForScatterSeries(fact->GetCell(defaultWorksheetIndex, 2, 3, ObjectExt::Box<double>(5)), fact->GetCell(defaultWorksheetIndex, 2, 4, ObjectExt::Box<double>(2)));

// Добавить новую точку (3:1)
series->get_DataPoints()->AddDataPointForScatterSeries(fact->GetCell(defaultWorksheetIndex, 3, 3, ObjectExt::Box<double>(3)), fact->GetCell(defaultWorksheetIndex, 3, 4, ObjectExt::Box<double>(1)));

// Добавить новую точку (2:2)
series->get_DataPoints()->AddDataPointForScatterSeries(fact->GetCell(defaultWorksheetIndex, 4, 3, ObjectExt::Box<double>(2)), fact->GetCell(defaultWorksheetIndex, 4, 4, ObjectExt::Box<double>(2)));

// Добавить новую точку (5:1)
series->get_DataPoints()->AddDataPointForScatterSeries(fact->GetCell(defaultWorksheetIndex, 5, 3, ObjectExt::Box<double>(5)), fact->GetCell(defaultWorksheetIndex, 5, 4, ObjectExt::Box<double>(1)));

// Изменение маркера серии диаграммы
series->get_Marker()->set_Size(10);
series->get_Marker()->set_Symbol(MarkerStyleType::Circle);

// Сохранить PPTX-файл
pres->Save(outputFilePath, Aspose::Slides::Export::SaveFormat::Pptx);

Ниже приведено изображение диаграммы разброса, созданной с помощью примера кода.

Создайте точечную диаграмму в презентациях PowerPoint

Создайте диаграмму гистограммы в презентациях PowerPoint

Ниже приведены шаги для создания гистограммы в презентациях PowerPoint.

Ниже приведен пример кода для создания гистограммы в презентациях PowerPoint с использованием C++.

// Выходной путь к файлу.
const String outputFilePath = u"OutputDirectory\\histogram_chart.pptx";

// Создать экземпляр класса Presentation, который представляет файл PPTX.
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Доступ к первому слайду
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

// Добавить диаграмму с данными по умолчанию
System::SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::Histogram, 50, 50, 500, 400);

// Удалить сгенерированные по умолчанию серии и категории
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();

// Получение книги данных диаграммы
System::SharedPtr<IChartDataWorkbook> wb = chart->get_ChartData()->get_ChartDataWorkbook();

wb->Clear(0);

// Добавить серию
System::SharedPtr<IChartSeries> series = chart->get_ChartData()->get_Series()->Add(Aspose::Slides::Charts::ChartType::Histogram);

// Заполнить данные серии
series->get_DataPoints()->AddDataPointForHistogramSeries(wb->GetCell(0, u"A1", System::ObjectExt::Box<int32_t>(15)));
series->get_DataPoints()->AddDataPointForHistogramSeries(wb->GetCell(0, u"A2", System::ObjectExt::Box<int32_t>(-41)));
series->get_DataPoints()->AddDataPointForHistogramSeries(wb->GetCell(0, u"A3", System::ObjectExt::Box<int32_t>(16)));
series->get_DataPoints()->AddDataPointForHistogramSeries(wb->GetCell(0, u"A4", System::ObjectExt::Box<int32_t>(10)));
series->get_DataPoints()->AddDataPointForHistogramSeries(wb->GetCell(0, u"A5", System::ObjectExt::Box<int32_t>(-23)));
series->get_DataPoints()->AddDataPointForHistogramSeries(wb->GetCell(0, u"A6", System::ObjectExt::Box<int32_t>(16)));

// Установить тип агрегации оси
chart->get_Axes()->get_HorizontalAxis()->set_AggregationType(Aspose::Slides::Charts::AxisAggregationType::Automatic);

// Сохранить PPTX-файл
pres->Save(outputFilePath, Aspose::Slides::Export::SaveFormat::Pptx);

Ниже приведено изображение диаграммы гистограммы, созданной с помощью примера кода.

Создайте диаграмму гистограммы в презентациях PowerPoint

Дополнительные поддерживаемые графики

Помимо диаграмм, показанных выше, Aspose.Slides для C++ поддерживает гораздо больше типов диаграмм. Вы можете просмотреть полный список поддерживаемых типов диаграмм с примером кода, прочитав эту статью документации.

Получить бесплатную лицензию

Вы можете запросить бесплатную временную лицензию, чтобы попробовать API без ограничений на пробную версию.

Вывод

В этой статье вы узнали, как добавлять диаграммы в слайды PowerPoint с помощью C++. В частности, вы узнали, как добавлять гистограммы, столбцы, круговые диаграммы и гистограммы в презентации PowerPoint. Кроме того, вы видели, что Aspose.Slides for C++ API предоставляет гораздо больше типов диаграмм, которые вы можете использовать в своих презентациях PowerPoint. Помимо диаграмм, API предлагает множество функций для улучшения ваших презентаций PowerPoint. Вы можете подробно изучить API, используя официальную документацию. В случае возникновения вопросов обращайтесь к нам на бесплатный форум поддержки.

Смотрите также