使用C++创建带引导线的饼图
Contents
[
Hide
]
本文介绍如何用Aspose.Cells for C++ API从零创建带引导线的饼图。在Excel中,默认启用“显示引导线”选项,因此创建的饼图会显示引导线。然而,使用Aspose.Cells API创建类似图表时,你必须明确设置对应属性。
为演示如何用Aspose.Cells for C++ API创建带引导线的饼图,我们将先创建一个新的图表对象,并输入一些数据作为系列数据源。数据准备就绪后,加入类型为ChartType.Pie的Chart到图表集合,并设置不同属性以实现期望的图表效果。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create an instance of Workbook in XLSX format
Workbook workbook(FileFormatType::Xlsx);
// Access the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
// Add two columns of data
worksheet.GetCells().Get(u"A1").PutValue(u"Retail");
worksheet.GetCells().Get(u"A2").PutValue(u"Services");
worksheet.GetCells().Get(u"A3").PutValue(u"Info & Communication");
worksheet.GetCells().Get(u"A4").PutValue(u"Transport Equip");
worksheet.GetCells().Get(u"A5").PutValue(u"Construction");
worksheet.GetCells().Get(u"A6").PutValue(u"Other Products");
worksheet.GetCells().Get(u"A7").PutValue(u"Wholesale");
worksheet.GetCells().Get(u"A8").PutValue(u"Land Transport");
worksheet.GetCells().Get(u"A9").PutValue(u"Air Transport");
worksheet.GetCells().Get(u"A10").PutValue(u"Electric Appliances");
worksheet.GetCells().Get(u"A11").PutValue(u"Securities");
worksheet.GetCells().Get(u"A12").PutValue(u"Textiles & Apparel");
worksheet.GetCells().Get(u"A13").PutValue(u"Machinery");
worksheet.GetCells().Get(u"A14").PutValue(u"Metal Products");
worksheet.GetCells().Get(u"A15").PutValue(u"Cash");
worksheet.GetCells().Get(u"A16").PutValue(u"Banks");
worksheet.GetCells().Get(u"B1").PutValue(10.4);
worksheet.GetCells().Get(u"B2").PutValue(5.2);
worksheet.GetCells().Get(u"B3").PutValue(6.4);
worksheet.GetCells().Get(u"B4").PutValue(10.4);
worksheet.GetCells().Get(u"B5").PutValue(7.9);
worksheet.GetCells().Get(u"B6").PutValue(4.1);
worksheet.GetCells().Get(u"B7").PutValue(3.5);
worksheet.GetCells().Get(u"B8").PutValue(5.7);
worksheet.GetCells().Get(u"B9").PutValue(3);
worksheet.GetCells().Get(u"B10").PutValue(14.7);
worksheet.GetCells().Get(u"B11").PutValue(3.6);
worksheet.GetCells().Get(u"B12").PutValue(2.8);
worksheet.GetCells().Get(u"B13").PutValue(7.8);
worksheet.GetCells().Get(u"B14").PutValue(2.4);
worksheet.GetCells().Get(u"B15").PutValue(1.8);
worksheet.GetCells().Get(u"B16").PutValue(10.1);
// Create a pie chart and add it to the collection of charts
int id = worksheet.GetCharts().Add(ChartType::Pie, 3, 3, 23, 13);
// Access newly created Chart instance
Chart chart = worksheet.GetCharts().Get(id);
// Set series data range
chart.GetNSeries().Add(u"B1:B16", true);
// Set category data range
chart.GetNSeries().SetCategoryData(u"A1:A16");
// Turn off legend
chart.SetShowLegend(false);
// Access data labels
DataLabels dataLabels = chart.GetNSeries().Get(0).GetDataLabels();
// Turn on category names
dataLabels.SetShowCategoryName(true);
// Turn on percentage format
dataLabels.SetShowPercentage(true);
// Set position
dataLabels.SetPosition(LabelPositionType::OutsideEnd);
// Set separator
dataLabels.SetSeparatorType(DataLabelsSeparatorType::Comma);
// Save the workbook
workbook.Save(outDir + u"PieChart_out.xlsx");
std::cout << "Pie chart created successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
到目前为止,我们已经创建了饼图并设置了其不同的方面。现在我们将为图表打开引导线。请注意,为了显示引导线,我们必须稍微移动数据标签的位置。
以下代码片段打开了引导线,刷新了图表,然后计算数据标签的位置,以相应地移动它们。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
int main()
{
Aspose::Cells::Startup();
// Create an instance of Workbook in XLSX format
Workbook workbook(FileFormatType::Xlsx);
// Access the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
// Add two columns of data
worksheet.GetCells().Get(u"A1").PutValue(u"Retail");
worksheet.GetCells().Get(u"A2").PutValue(u"Services");
worksheet.GetCells().Get(u"A3").PutValue(u"Info & Communication");
worksheet.GetCells().Get(u"A4").PutValue(u"Transport Equip");
worksheet.GetCells().Get(u"A5").PutValue(u"Construction");
worksheet.GetCells().Get(u"A6").PutValue(u"Other Products");
worksheet.GetCells().Get(u"A7").PutValue(u"Wholesale");
worksheet.GetCells().Get(u"A8").PutValue(u"Land Transport");
worksheet.GetCells().Get(u"A9").PutValue(u"Air Transport");
worksheet.GetCells().Get(u"A10").PutValue(u"Electric Appliances");
worksheet.GetCells().Get(u"A11").PutValue(u"Securities");
worksheet.GetCells().Get(u"A12").PutValue(u"Textiles & Apparel");
worksheet.GetCells().Get(u"A13").PutValue(u"Machinery");
worksheet.GetCells().Get(u"A14").PutValue(u"Metal Products");
worksheet.GetCells().Get(u"A15").PutValue(u"Cash");
worksheet.GetCells().Get(u"A16").PutValue(u"Banks");
worksheet.GetCells().Get(u"B1").PutValue(10.4);
worksheet.GetCells().Get(u"B2").PutValue(5.2);
worksheet.GetCells().Get(u"B3").PutValue(6.4);
worksheet.GetCells().Get(u"B4").PutValue(10.4);
worksheet.GetCells().Get(u"B5").PutValue(7.9);
worksheet.GetCells().Get(u"B6").PutValue(4.1);
worksheet.GetCells().Get(u"B7").PutValue(3.5);
worksheet.GetCells().Get(u"B8").PutValue(5.7);
worksheet.GetCells().Get(u"B9").PutValue(3);
worksheet.GetCells().Get(u"B10").PutValue(14.7);
worksheet.GetCells().Get(u"B11").PutValue(3.6);
worksheet.GetCells().Get(u"B12").PutValue(2.8);
worksheet.GetCells().Get(u"B13").PutValue(7.8);
worksheet.GetCells().Get(u"B14").PutValue(2.4);
worksheet.GetCells().Get(u"B15").PutValue(1.8);
worksheet.GetCells().Get(u"B16").PutValue(10.1);
// Create a pie chart and add it to the collection of charts
int id = worksheet.GetCharts().Add(ChartType::Pie, 3, 3, 23, 13);
// Access newly created Chart instance
Chart chart = worksheet.GetCharts().Get(id);
// Set series data range
chart.GetNSeries().Add(u"B1:B16", true);
// Set category data range
chart.GetNSeries().SetCategoryData(u"A1:A16");
// Turn off legend
chart.SetShowLegend(false);
// Access data labels
DataLabels dataLabels = chart.GetNSeries().Get(0).GetDataLabels();
// Turn on category names
dataLabels.SetShowCategoryName(true);
// Turn on percentage format
dataLabels.SetShowPercentage(true);
// Set position
dataLabels.SetPosition(LabelPositionType::OutsideEnd);
// Set separator
dataLabels.SetSeparatorType(DataLabelsSeparatorType::Comma);
// Turn on leader lines
chart.GetNSeries().Get(0).SetHasLeaderLines(true);
// Calculate chart
chart.Calculate();
// You need to move DataLabels a little leftward or rightward depending on their position to show leader lines
int DELTA = 100;
for (int i = 0; i < chart.GetNSeries().Get(0).GetPoints().GetCount(); i++)
{
int X = chart.GetNSeries().Get(0).GetPoints().Get(i).GetDataLabels().GetX();
// If it is greater than 2000, then move the X position a little right otherwise move the X position a little left
if (X > 2000)
chart.GetNSeries().Get(0).GetPoints().Get(i).GetDataLabels().SetX(X + DELTA);
else
chart.GetNSeries().Get(0).GetPoints().Get(i).GetDataLabels().SetX(X - DELTA);
}
// Save the workbook
workbook.Save(u"output.xlsx");
Aspose::Cells::Cleanup();
}
最后,以下代码将图表保存为图像格式,将工作簿保存为XLSX格式。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
using namespace Aspose::Cells::Drawing;
int main()
{
Aspose::Cells::Startup();
// Create an instance of Workbook in XLSX format
Workbook workbook(FileFormatType::Xlsx);
// Access the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
// Add two columns of data
worksheet.GetCells().Get(u"A1").PutValue(u"Retail");
worksheet.GetCells().Get(u"A2").PutValue(u"Services");
worksheet.GetCells().Get(u"A3").PutValue(u"Info & Communication");
worksheet.GetCells().Get(u"A4").PutValue(u"Transport Equip");
worksheet.GetCells().Get(u"A5").PutValue(u"Construction");
worksheet.GetCells().Get(u"A6").PutValue(u"Other Products");
worksheet.GetCells().Get(u"A7").PutValue(u"Wholesale");
worksheet.GetCells().Get(u"A8").PutValue(u"Land Transport");
worksheet.GetCells().Get(u"A9").PutValue(u"Air Transport");
worksheet.GetCells().Get(u"A10").PutValue(u"Electric Appliances");
worksheet.GetCells().Get(u"A11").PutValue(u"Securities");
worksheet.GetCells().Get(u"A12").PutValue(u"Textiles & Apparel");
worksheet.GetCells().Get(u"A13").PutValue(u"Machinery");
worksheet.GetCells().Get(u"A14").PutValue(u"Metal Products");
worksheet.GetCells().Get(u"A15").PutValue(u"Cash");
worksheet.GetCells().Get(u"A16").PutValue(u"Banks");
worksheet.GetCells().Get(u"B1").PutValue(10.4);
worksheet.GetCells().Get(u"B2").PutValue(5.2);
worksheet.GetCells().Get(u"B3").PutValue(6.4);
worksheet.GetCells().Get(u"B4").PutValue(10.4);
worksheet.GetCells().Get(u"B5").PutValue(7.9);
worksheet.GetCells().Get(u"B6").PutValue(4.1);
worksheet.GetCells().Get(u"B7").PutValue(3.5);
worksheet.GetCells().Get(u"B8").PutValue(5.7);
worksheet.GetCells().Get(u"B9").PutValue(3);
worksheet.GetCells().Get(u"B10").PutValue(14.7);
worksheet.GetCells().Get(u"B11").PutValue(3.6);
worksheet.GetCells().Get(u"B12").PutValue(2.8);
worksheet.GetCells().Get(u"B13").PutValue(7.8);
worksheet.GetCells().Get(u"B14").PutValue(2.4);
worksheet.GetCells().Get(u"B15").PutValue(1.8);
worksheet.GetCells().Get(u"B16").PutValue(10.1);
// Create a pie chart and add it to the collection of charts
int id = worksheet.GetCharts().Add(ChartType::Pie, 3, 3, 23, 13);
// Access newly created Chart instance
Chart chart = worksheet.GetCharts().Get(id);
// Set series data range
chart.GetNSeries().Add(u"B1:B16", true);
// Set category data range
chart.GetNSeries().SetCategoryData(u"A1:A16");
// Turn off legend
chart.SetShowLegend(false);
// Access data labels
DataLabels dataLabels = chart.GetNSeries().Get(0).GetDataLabels();
// Turn on category names
dataLabels.SetShowCategoryName(true);
// Turn on percentage format
dataLabels.SetShowPercentage(true);
// Set position
dataLabels.SetPosition(LabelPositionType::OutsideEnd);
// Set separator
dataLabels.SetSeparatorType(DataLabelsSeparatorType::Comma);
// In order to save the chart image, create an instance of ImageOrPrintOptions
ImageOrPrintOptions anOption;
// Set image format
anOption.SetImageType(ImageType::Png);
// Set resolution
anOption.SetHorizontalResolution(200);
anOption.SetVerticalResolution(200);
// Render chart to image
chart.ToImage(u"output_out.png", anOption);
// Save the workbook to see chart inside the Excel
workbook.Save(u"output_out.xlsx");
Aspose::Cells::Cleanup();
}
结果饼图 |
---|
![]() |