在 C++ 中创建 Excel 文件

之前,我写过一篇 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 电子表格 API - 安装

您可以从 下载 部分下载完整的 Aspose.Cells for C++ 库文件包。该软件包还包含一个可立即运行的示例控制台应用程序。

使用 C++ 创建 Excel 文件 (XLS/XLSX)

让我们首先从头开始创建一个简单的 Excel XLSX 工作簿。工作簿由一个或多个工作表组成,每个工作表包含行和列形式的数据。因此,为了创建 Excel 电子表格,您需要先创建一个工作簿,然后在其中添加工作表。以下是使用 Aspose.Cells for C++ 创建 Excel 文件的步骤。

以下代码示例展示了如何使用 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 XLSX

使用 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 工作表中设置和计算公式的步骤。

以下代码示例演示如何使用 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 工作表中创建表格的步骤。

以下代码示例展示了如何使用 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 中创建表格

使用 C++ 在 Excel 电子表格中创建图表

Excel 电子表格中的图表用于使用不同类型的图形对象来可视化数据。它们使我们能够快速洞察和理解数据,尤其是在数据庞大的情况下。 Aspose.Cells for C++ 支持各种图表,包括 Sunburst、Treemap、Histogram、Pyramid、Bubble、Line 和 更多。以下是使用 Aspose.Cells for C++ 在 Excel 工作簿中创建图表的步骤。

以下代码示例显示了如何使用 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++ 中的 Excel 中创建图表

结论

在本文中,我们介绍了如何使用 C++ 从头开始创建 MS Excel 电子表格。本文还包含有关如何在 Excel 工作表中创建表格、图表和计算公式的分步指南和代码示例。您可以从 Aspose.Cells for C++ 的 文档 中了解有关 Excel 自动化相关的其他高级功能的更多信息。

相关文章