创建和自定义图表
可能的使用场景
图表是信息的视觉显示。 Aspose.Cells 允许开发人员在图表中可视化信息,就像 Microsoft Excel 一样。在图表中呈现信息总是有助于决策者做出快速及时的决策。使用图表而不是原始数字更容易快速查看数据的比较、模式和趋势。根据电子表格中的数据在运行时创建图表是 Aspose.Cells 的有用功能之一。 Aspose.Cells 支持创建标准和自定义图表。下面,我们将展示一些示例文件,说明如何使用 Aspose.Cells API 创建一些常见的 MS-Excel 图表类型。
金字塔图
执行示例代码时,金字塔图将添加到工作表中。请参阅输出Excel文件以下示例代码。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
// Output directory path | |
StringPtr outDir = new String("..\\Data\\02_OutputDirectory\\"); | |
// Path of output excel file | |
StringPtr outputChartTypePyramid = outDir->StringAppend(new String("outputChartTypePyramid.xlsx")); | |
// Create a new workbook | |
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(); | |
// Get first worksheet which is created by default | |
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0); | |
// Adding sample values to cells | |
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(50); | |
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(100); | |
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(150); | |
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(4); | |
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(20); | |
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(50); | |
// Adding a chart to the worksheet | |
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Pyramid, 5, 0, 20, 8); | |
// Accessing the instance of the newly added chart | |
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex); | |
// Adding SeriesCollection (chart data source) to the chart ranging from "A1" cell to "B3" | |
chart->GetNISeries()->Add(new String("A1:B3"), true); | |
// Saving the Excel file | |
workbook->Save(outputChartTypePyramid); |
折线图
在上面的示例中,只需更改图表类型到图表类型_Line创建折线图。下面提供了完整的源代码。执行代码时,工作表中会添加一个折线图。请参阅输出Excel文件以下示例代码。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
// Output directory path | |
StringPtr outDir = new String("..\\Data\\02_OutputDirectory\\"); | |
// Path of output excel file | |
StringPtr outputChartTypeLine = outDir->StringAppend(new String("outputChartTypeLine.xlsx")); | |
// Create a new workbook | |
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(); | |
// Get first worksheet which is created by default | |
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0); | |
// Adding sample values to cells | |
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(50); | |
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(100); | |
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(150); | |
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(4); | |
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(20); | |
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(50); | |
// Adding a chart to the worksheet | |
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Line, 5, 0, 20, 8); | |
// Accessing the instance of the newly added chart | |
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex); | |
// Adding SeriesCollection (chart data source) to the chart ranging from "A1" cell to "B3" | |
chart->GetNISeries()->Add(new String("A1:B3"), true); | |
// Saving the Excel file | |
workbook->Save(outputChartTypeLine); |
气泡图
为了创建气泡图,图表类型必须设置为ChartType_Bubble和一些额外的属性,例如设置气泡大小 & 设置 X 值需要相应地设置。执行以下代码后,气泡图将添加到工作表中。请参阅输出Excel文件以下示例代码。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
// Output directory path | |
StringPtr outDir = new String("..\\Data\\02_OutputDirectory\\"); | |
// Path of output excel file | |
StringPtr outputChartTypeBubble = outDir->StringAppend(new String("outputChartTypeBubble.xlsx")); | |
// Create a new workbook | |
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(); | |
// Get first worksheet which is created by default | |
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0); | |
// Fill in data for chart's series | |
// Y Values | |
worksheet->GetICells()->GetObjectByIndex(0, 0)->PutValue((StringPtr)new String("Y Values")); | |
worksheet->GetICells()->GetObjectByIndex(0, 1)->PutValue(2); | |
worksheet->GetICells()->GetObjectByIndex(0, 2)->PutValue(4); | |
worksheet->GetICells()->GetObjectByIndex(0, 3)->PutValue(6); | |
// Bubble Size | |
worksheet->GetICells()->GetObjectByIndex(1, 0)->PutValue((StringPtr)new String("Bubble Size")); | |
worksheet->GetICells()->GetObjectByIndex(1, 1)->PutValue(2); | |
worksheet->GetICells()->GetObjectByIndex(1, 2)->PutValue(3); | |
worksheet->GetICells()->GetObjectByIndex(1, 3)->PutValue(1); | |
// X Values | |
worksheet->GetICells()->GetObjectByIndex(2, 0)->PutValue((StringPtr)new String("X Values")); | |
worksheet->GetICells()->GetObjectByIndex(2, 1)->PutValue(1); | |
worksheet->GetICells()->GetObjectByIndex(2, 2)->PutValue(2); | |
worksheet->GetICells()->GetObjectByIndex(2, 3)->PutValue(3); | |
// Set first column width | |
worksheet->GetICells()->SetColumnWidth(0, 12); | |
// Adding a chart to the worksheet | |
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Bubble, 5, 0, 20, 8); | |
// Accessing the instance of the newly added chart | |
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex); | |
// Adding SeriesCollection (chart data source) to the chart ranging from B1 to D1 | |
chart->GetNISeries()->Add(new String("B1:D1"), true); | |
// Set bubble sizes | |
chart->GetNISeries()->GetObjectByIndex(0)->SetBubbleSizes(new String("B2:D2")); | |
// Set X axis values | |
chart->GetNISeries()->GetObjectByIndex(0)->SetXValues(new String("B3:D3")); | |
// Set Y axis values | |
chart->GetNISeries()->GetObjectByIndex(0)->SetValues(new String("B1:D1")); | |
// Saving the Excel file | |
workbook->Save(outputChartTypeBubble); |
创建自定义图表
到目前为止,当我们讨论图表时,我们已经了解了具有自己的标准格式设置的标准图表。我们只定义数据源,设置一些属性,并使用默认格式设置创建图表。但 Aspose.Cells API 还支持创建自定义图表,允许开发人员使用自己的格式设置创建图表。开发人员可以使用 Aspose.Cells 在运行时创建自定义图表。
图表由数据系列组成。在创建自定义图表时,开发人员可以自由地为不同的数据系列使用不同类型的图表。
下面的示例代码演示了如何创建自定义图表。在此示例中,我们将为第一个数据系列使用柱形图,为第二个系列使用折线图。结果是我们向工作表添加了一个柱形图和一个折线图。请参阅输出Excel文件以下示例代码。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C | |
// Output directory path | |
StringPtr outDir = new String("..\\Data\\02_OutputDirectory\\"); | |
// Path of output excel file | |
StringPtr outputChartTypeCustom = outDir->StringAppend(new String("outputChartTypeCustom.xlsx")); | |
// Create a new workbook | |
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(); | |
// Get first worksheet which is created by default | |
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0); | |
// Adding sample values to cells | |
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(50); | |
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(100); | |
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(150); | |
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(110); | |
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(260); | |
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(12); | |
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(50); | |
worksheet->GetICells()->GetObjectByIndex(new String("B4"))->PutValue(100); | |
// Adding a chart to the worksheet | |
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Column, 5, 0, 20, 8); | |
// Accessing the instance of the newly added chart | |
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex); | |
// Adding SeriesCollection (chart data source) to the chart ranging from A1 to B4 | |
chart->GetNISeries()->Add(new String("A1:B4"), true); | |
// Setting the chart type of 2nd NSeries to display as line chart | |
chart->GetNISeries()->GetObjectByIndex(1)->SetType(Aspose::Cells::Charts::ChartType::ChartType_Line); | |
// Saving the Excel file | |
workbook->Save(outputChartTypeCustom); |