之前,我写过一篇 post,介绍如何使用 C# 实现 Excel 自动化功能并从头开始创建 Excel XLS/XLSX 文件。今天,我将向您展示如何使用 C++ 创建 Excel 工作簿、将数据插入 Excel 工作表、计算公式以及在工作表中创建图表和表格。所有电子表格自动化功能都将由 C++ Excel API - Aspose.Cells for C++ 提供支持。
Aspose.Cells for C++ 是一个原生 C++ 库,可让您创建、读取、解析和转换电子表格文档,而无需 Microsoft Excel。它提供了一套完整的 Excel 自动化功能,可用于生成和操作 XLS/XLSX 电子表格。在本文中,我们将介绍从头开始创建 Excel XLS/XLSX 文件的以下功能。
- 使用 C++ 创建 Excel 文件 (XLS/XLSX)
- 使用 C++ 将数据添加到 Excel 工作表
- 使用 C++ 计算工作簿公式
- 使用 C++ 在 Excel 工作表中创建表
- 使用 C++ 在 Excel XLS/XLSX 中创建图表
C++ Excel 电子表格 API - 安装
您可以从 下载 部分下载完整的 Aspose.Cells for C++ 库文件包。该软件包还包含一个可立即运行的示例控制台应用程序。
使用 C++ 创建 Excel 文件 (XLS/XLSX)
让我们首先从头开始创建一个简单的 Excel XLSX 工作簿。工作簿由一个或多个工作表组成,每个工作表包含行和列形式的数据。因此,为了创建 Excel 电子表格,您需要先创建一个工作簿,然后在其中添加工作表。以下是使用 Aspose.Cells for C++ 创建 Excel 文件的步骤。
- 创建 IWorkbook 类的对象。
- 将工作簿的第一个工作表(默认创建)从 IWorksheetCollection 获取到 IWorksheet 对象中。
- 使用 IWorksheet->GetICells() 方法将工作表的单元格访问到 ICells 对象中。
- 通过指定行和列索引,使用 ICells->GetObjectByIndex() 方法将工作表的所需单元格访问到 ICell 对象。
- 使用 ICell->PutValue() 方法向单元格添加值。
- 使用 IWorkbook->Save() 方法将工作簿保存为 .xlsx 文件。
以下代码示例展示了如何使用 C++ 创建 Excel XLSX 文件。
/*create a new workbook*/
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();
/*get the first worksheet*/
intrusive_ptr<IWorksheetCollection> wsc = wb->GetIWorksheets();
intrusive_ptr<IWorksheet> ws = wsc->GetObjectByIndex(0);
/*get cell(0,0)*/
intrusive_ptr<ICells> cells = ws->GetICells();
intrusive_ptr<ICell> cell = cells->GetObjectByIndex(0, 0);
/*write "Hello World" to cell(0,0) of the first sheet*/
intrusive_ptr<String> str = new String("Hello World!");
cell->PutValue(str);
/*save this workbook to resultFile folder*/
wb->Save(resultPath->StringAppend(new String("workbook.xlsx")));
Excel 工作簿
以下是我们刚刚创建的 Excel 工作簿的屏幕截图。
使用 C++ 将数据添加到 Excel 工作表
在前面的示例中,我们已经了解了如何创建一个简单的 Excel 文件并使用行和列索引将值插入特定单元格。但是,大多数情况下,Excel 工作表中的单元格是使用列字母和行号来标识的,例如 A1、A2、B1 等。所以让我们看一下如何使用单元格名称将数据插入工作表的示例。该过程仅在向单元格添加值方面有所不同,创建 Excel 工作簿和工作表的所有其他步骤都是相同的。
以下代码示例展示了如何使用 C++ 创建 Excel XLSX 工作簿并将数据插入其中。
//输出excel文件的路径
StringPtr outputData = resultPath->StringAppend(new String("outputData.xlsx"));
//读取输入的excel文件
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();
//访问 Excel 文件中的第二个工作表
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
//向单元格添加字符串值
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue("Hello World");
//向单元格添加双精度值
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(20.5);
//向单元格添加整数值
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(15);
//向单元格添加布尔值
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(true);
//设置日期的显示格式
intrusive_ptr<ICell> cell = worksheet->GetICells()->GetObjectByIndex(new String("A5"));
intrusive_ptr<IStyle> style = cell->GetIStyle();
style->SetNumber(15);
cell->SetIStyle(style);
//保存工作簿
workbook->Save(outputData);
使用 C++ 计算工作簿公式
在 Excel 工作簿中设置公式是对数据执行计算的一项了不起的功能。它使有效和高效地对数据执行复杂计算变得非常容易。以下是在 Excel 工作表中设置和计算公式的步骤。
- 创建 IWorkbook 类的对象。
- 将工作表放入 IWorksheetCollection 中的 IWorksheet 对象中。
- 使用 ICell 类访问要应用公式的单元格。
- 使用 ICell->SetFormula() 方法为单元格设置公式。
- 使用 IWorkbook->CalculateFormula() 方法计算公式。
- 使用 IWorkbook->Save() 方法保存工作簿。
以下代码示例演示如何使用 C++ 在 Excel XLSX 工作簿中添加和计算公式。
//创建新工作簿
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();
//获取默认创建的第一个工作表
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);
//向“A1”单元格添加值
intrusive_ptr<ICell> cell = ws->GetICells()->GetObjectByIndex(new String("A1"));
cell->PutValue(5);
//向“A2”单元格添加值
cell = ws->GetICells()->GetObjectByIndex(new String("A2"));
cell->PutValue(15);
//向“A3”单元格添加值
cell = ws->GetICells()->GetObjectByIndex(new String("A3"));
cell->PutValue(25);
//将 SUM 公式添加到“A4”单元格
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
cell->SetFormula(new String("=SUM(A1:A3)"));
//计算公式的结果
wb->CalculateFormula();
//获取单元格“A4”的计算值并在控制台上打印
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
StringPtr sCalcuInfo = new String(L"Calculated Value of Cell A4: ");
Console::WriteLine(sCalcuInfo->StringAppend(cell->GetStringValue()));
使用 C++ 在 Excel 工作表中创建表格
Excel 工作表中的表格用于组织位于单元格区域中的一组数据。表格还可以帮助您在工作表中维护不同类型的列表。以下是在 Excel 工作表中创建表格的步骤。
- 使用 IWorkbook 类创建一个新的 Excel 工作簿。
- 将默认工作表访问到 IWorksheet 对象或添加新工作表。
- 以与上一个示例相同的方式将值/数据插入单元格。
- 使用 IWorksheet->GetIListObjects()->Add() 方法将单元格范围添加到工作表列表集合。
- 将列表放入 IListObject 对象中。
- 使用 IListObject->SetTableStyleType() 方法对表格应用样式。
- 将工作簿另存为 .xlsx 文件。
以下代码示例展示了如何使用 C++ 在 Excel XLSX 文件中创建表。
// 实例化工作簿对象
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();
// 获取默认(第一个)工作表的引用
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// 获取 Worksheet 的单元格集合
intrusive_ptr<ICells> cells = worksheet->GetICells();
// 为单元格设置值
cells->GetObjectByIndex(new String("A1"))->PutValue("Employee");
cells->GetObjectByIndex(new String("B1"))->PutValue("Quarter");
cells->GetObjectByIndex(new String("C1"))->PutValue("Product");
cells->GetObjectByIndex(new String("D1"))->PutValue("Continent");
cells->GetObjectByIndex(new String("E1"))->PutValue("Country");
cells->GetObjectByIndex(new String("F1"))->PutValue("Sale");
cells->GetObjectByIndex(new String("A2"))->PutValue("David");
cells->GetObjectByIndex(new String("A3"))->PutValue("David");
cells->GetObjectByIndex(new String("A4"))->PutValue("David");
cells->GetObjectByIndex(new String("A5"))->PutValue("David");
cells->GetObjectByIndex(new String("A6"))->PutValue("James");
cells->GetObjectByIndex(new String("B2"))->PutValue(1);
cells->GetObjectByIndex(new String("B3"))->PutValue(2);
cells->GetObjectByIndex(new String("B4"))->PutValue(3);
cells->GetObjectByIndex(new String("B5"))->PutValue(4);
cells->GetObjectByIndex(new String("B6"))->PutValue(1);
cells->GetObjectByIndex(new String("C2"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C3"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C4"))->PutValue("Chai");
cells->GetObjectByIndex(new String("C5"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C6"))->PutValue("Chang");
cells->GetObjectByIndex(new String("D2"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D3"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D4"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D5"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D6"))->PutValue("Europe");
cells->GetObjectByIndex(new String("E2"))->PutValue("China");
cells->GetObjectByIndex(new String("E3"))->PutValue("India");
cells->GetObjectByIndex(new String("E4"))->PutValue("Korea");
cells->GetObjectByIndex(new String("E5"))->PutValue("India");
cells->GetObjectByIndex(new String("E6"))->PutValue("France");
cells->GetObjectByIndex(new String("F2"))->PutValue(2000);
cells->GetObjectByIndex(new String("F3"))->PutValue(500);
cells->GetObjectByIndex(new String("F4"))->PutValue(1200);
cells->GetObjectByIndex(new String("F5"))->PutValue(1500);
cells->GetObjectByIndex(new String("F6"))->PutValue(500);
// 将新的列表对象添加到工作表
worksheet->GetIListObjects()->Add(new String("A1"), new String("F6"), true);
intrusive_ptr<IListObject> listObject = worksheet->GetIListObjects()->GetObjectByIndex(0);
// 将默认样式添加到表格
listObject->SetTableStyleType(TableStyleType_TableStyleMedium10);
// 显示总计
listObject->SetShowTotals(true);
// 保存 Excel 文件
workbook->Save(resultPath->StringAppend(new String("Excel_Table.xlsx")));
带表格的 Excel 工作簿
使用 C++ 在 Excel 电子表格中创建图表
Excel 电子表格中的图表用于使用不同类型的图形对象来可视化数据。它们使我们能够快速洞察和理解数据,尤其是在数据庞大的情况下。 Aspose.Cells for C++ 支持各种图表,包括 Sunburst、Treemap、Histogram、Pyramid、Bubble、Line 和 更多。以下是使用 Aspose.Cells for C++ 在 Excel 工作簿中创建图表的步骤。
- 创建一个新的 Excel 工作簿。
- 将所需的工作表访问到 IWorksheet 对象中。
- 通过传递图表的类型,使用 IWorksheet->GetICharts()->Add() 方法将新图表添加到工作表。
- 将新添加的图表访问到 IChart 对象中。
- 使用 IChart->GetNISeries()->Add() 方法设置图表的数据源。
- 将工作簿另存为 .xlsx 文件。
以下代码示例显示了如何使用 C++ 在 Excel XLSX 文件中创建图表。
// 输出excel文件的路径
StringPtr outputChartTypePyramid = resultPath->StringAppend(new String("Exce_Pyramid_Chart.xlsx"));
// 创建新工作簿
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();
// 获取默认创建的第一个工作表
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);
// 向单元格添加样本值
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);
// 将图表添加到工作表
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Pyramid, 5, 0, 20, 8);
// 访问新添加图表的实例
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex);
// 将 SeriesCollection(图表数据源)添加到图表中,范围从“A1”单元格到“B3”
chart->GetNISeries()->Add(new String("A1:B3"), true);
// 保存 Excel 文件
workbook->Save(outputChartTypePyramid);
带图表的 Excel 工作簿
结论
在本文中,我们介绍了如何使用 C++ 从头开始创建 MS Excel 电子表格。本文还包含有关如何在 Excel 工作表中创建表格、图表和计算公式的分步指南和代码示例。您可以从 Aspose.Cells for C++ 的 文档 中了解有关 Excel 自动化相关的其他高级功能的更多信息。