如何在 C++ 中创建和填充电子表格数据模型
本指南展示了如何使用 Aspose.Cells C++ 开源库创建工作簿、使用数值和公式填充单元格、应用样式,并将其保存为电子表格文件。涉及的核心类有 Workbook、Worksheet、Cell 和 Style。
分步指南
步骤 1:设置构建
将 Cells 开源库添加到你的 CMake 项目并链接 Aspose.Cells.Foss.Cpp 目标:
cmake_minimum_required(VERSION 3.15)
project(CreateSpreadsheet CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(CreateSpreadsheet main.cpp)
target_link_libraries(CreateSpreadsheet PRIVATE Aspose.Cells.Foss.Cpp)步骤 2:包含头文件并设置命名空间
为你使用的每个类(Workbook.h、Worksheet.h、Cell.h、Style.h、Font.h、Color.h、CellArea.h)包含来自 aspose/cells_foss/ 的按类头文件,然后打开 Aspose::Cells_FOSS 命名空间:
using namespace Aspose::Cells_FOSS;步骤 3:创建工作簿并命名工作表
实例化 Workbook,通过 GetWorksheets()[0] 获取第一个工作表,并设置其显示名称:
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Sales");
return 0;
}步骤 4:添加单元格值
调用 GetCells()["A1"].PutValue() 将文本字符串、数值和布尔值写入按地址定位的各个单元格:
sheet.GetCells()["A1"].PutValue("Product");
sheet.GetCells()["B1"].PutValue("Price");
sheet.GetCells()["A2"].PutValue("Widget");
sheet.GetCells()["B2"].PutValue(9.99);
sheet.GetCells()["A3"].PutValue("Gadget");
sheet.GetCells()["B3"].PutValue(24.99);步骤 5:设置公式
在单元格上调用 SetFormula() 存储 Excel 兼容的公式字符串;该公式在打开文件时由 Excel 进行计算:
sheet.GetCells()["B4"].SetFormula("=SUM(B2:B3)");步骤 6:应用单元格样式
使用 Cell::GetStyle() 获取样式,进行修改,然后用 Cell::SetStyle(style) 应用:
Style headerStyle = sheet.GetCells()["A1"].GetStyle();
Font font;
font.SetBold(true);
font.SetColor(Color::FromArgb(255, 255, 255, 255));
headerStyle.SetFont(font);
headerStyle.SetPattern(FillPattern::Solid);
headerStyle.SetForegroundColor(Color::FromArgb(255, 34, 120, 212));
sheet.GetCells()["A1"].SetStyle(headerStyle);
sheet.GetCells()["B1"].SetStyle(headerStyle);第7步:合并单元格
使用 Cells::Merge 将范围合并为单个单元格:
CellArea titleArea = CellArea::CreateCellArea("A1", "B1");
sheet.GetCells().Merge(0, 0, 1, 2);第8步:保存工作簿
使用文件名调用 workbook.Save() 将电子表格写入 XLSX 文件,然后调用 Dispose() 释放资源:
workbook.Save("sales.xlsx");
workbook.Dispose();常见问题及解决方案
保存后样式未生效 始终调用 Cell::SetStyle(style) 在修改 style 对象后。直接修改返回的 style 不会生效;必须显式地重新设置回去。
公式以字符串字面量存储 使用 SetFormula("=SUM(...)") not PutValue("=SUM(...)"). PutValue 将参数视为字面字符串,而不是公式。
合并单元格未正确渲染 确保合并参数(row、column、rowCount、columnCount)正确覆盖目标范围。不支持重叠合并。
工作簿在构建后没有工作表 默认工作表总是由 Workbook(). 调用 GetWorksheets()[0] 以访问它。
未调用 Dispose 始终调用 workbook.Dispose() 以释放资源,尤其是在长时间运行的应用程序中。
常见问题
我可以在一个工作簿中添加多个工作表吗?
可以。使用 Workbook::GetWorksheets() 访问集合并以编程方式添加工作表。使用 Workbook::EnsureUniqueSheetName() 确保每个工作表拥有唯一名称。
如何为单元格设置数字格式?
在调用 Cell::SetStyle(style) 之前使用 Style::SetNumberFormat(format)。格式字符串遵循标准的 Excel 数字格式语法。
我可以将相同的样式应用于多个单元格吗?
是的。先获取一次样式,进行修改,然后在每个目标单元格上调用 SetStyle(style)。
保存时会对公式进行求值吗?
不会。公式求值在 Excel 或兼容的读取器打开文件时进行。库仅将公式字符串写入单元格。
工作表最多可以容纳多少行和列?
每个工作表在其完整的行列网格中保存数据,遵循标准电子表格尺寸。