介绍
Aspose.Cells FOSS for C++ 是一个开源库,用于在原生 C++ 代码中创建、加载、编辑和保存 Excel .xlsx 工作簿,无需 Microsoft Excel 或任何 COM 自动化。它作为源码库集成到基于 CMake 的构建中——除了 C++ 标准库之外,不需要安装或链接任何外部运行时依赖。
该库采用 MIT 许可证,目标为 C++17。它可通过 add_subdirectory 或 FetchContent 从 git clone 构建,因为它未通过 vcpkg 或 Conan 等包管理器分发。API 表面围绕一个拥有 WorksheetCollection 的 Workbook 组织,工作表公开一个用于单元格级访问的 Cells 对象,以及一个用于字体、填充和边框的 Style 门面。如果你在 C++ 中构建后端服务、报告生成器或数据导出管道,并且需要在不调用 Excel 的情况下生成或读取 .xlsx 文件,此库为你提供了原生的实现方式。
Aspose.Cells FOSS 也可用于 .NET、Go、Java、Python、Rust 和 TypeScript。C++ 库遵循与整个系列相同的方式:一个以 XLSX 为中心的 API,基于实际实现,并采用宽松许可证。
包含内容
工作簿和工作表结构
一个 Workbook 从一个工作表开始。可使用 WorksheetCollection::Add 创建额外的工作表,并可通过集合的索引器按索引或名称访问已有工作表。每个 Worksheet 通过 GetCells() 暴露其单元格。
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
using namespace Aspose::Cells_FOSS;
Workbook workbook;
workbook.GetWorksheets()[0].SetName("Data");
workbook.GetWorksheets().Add("Summary");
Worksheet& data = workbook.GetWorksheets()["Data"];
data.GetCells()["A1"].PutValue("Product");
data.GetCells()["B1"].PutValue("Price");
单元格值、公式和数字格式
Cell::PutValue 为字符串、整数、双精度、布尔值以及其他值类型提供重载,因此无需手动进行字符串转换。SetFormula 接受带或不带前置 = 的公式并对其进行规范化;随后 GetType 报告一个 CellValueType 为 Formula。数字格式通过 Style::SetNumberFormat 应用,仅影响 GetDisplayStringValue 返回的显示文本——底层存储的值保持不变。
auto& sheet = workbook.GetWorksheets()[0];
auto cell = sheet.GetCells()["B2"];
cell.PutValue(1234.567);
auto style = cell.GetStyle();
style.SetNumberFormat("#,##0.00");
cell.SetStyle(style);
sheet.GetCells()["B3"].SetFormula("B2*2");
// GetFormula() now returns "=B2*2"; GetType() reports CellValueType::Formula
std::cout << cell.GetDisplayStringValue() << std::endl; // "1,234.57"
使用字体、填充和边框进行样式设置
Cell::GetStyle() 和 SetStyle() 读取和写入一个将 Font、Borders 与填充设置分组的 Style 对象。颜色使用 Color::FromArgb 构建,填充图案通过 FillPattern 设置。
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);
数据验证和条件格式化
ValidationCollection::Add 将一个 Validation 规则限定到 CellArea;将其 ValidationType 设置为 List 并使用 Formula1 值即可生成单元格内下拉列表。ConditionalFormattingCollection::Add 创建一个格式化组,该组通过 AddArea 限定范围,并使用 AddCondition 填充,其中 AddCondition 接受一个 FormatConditionType、一个 OperatorType,以及一到两个公式。
int validationIndex = sheet.GetValidations().Add(CellArea::CreateCellArea("B1", "B3"));
auto validation = sheet.GetValidations()[validationIndex];
validation.SetType(ValidationType::List);
validation.SetFormula1("\"Open,Closed\"");
validation.SetShowError(true);
int cfIndex = sheet.GetConditionalFormattings().Add();
auto formatting = sheet.GetConditionalFormattings()[cfIndex];
formatting.AddArea(CellArea::CreateCellArea("C1", "C3"));
int conditionIndex = formatting.AddCondition(
FormatConditionType::CellValue, OperatorType::Between, "1", "9");
auto condition = formatting[conditionIndex];
auto conditionStyle = condition.GetStyle();
conditionStyle.SetPattern(FillPattern::Solid);
conditionStyle.SetForegroundColor(Color::FromArgb(255, 255, 199, 206));
condition.SetStyle(conditionStyle);
页面设置和打印布局
Worksheet::GetPageSetup() 返回一个控制纸张尺寸、方向、缩放、打印区域以及打印标题行/列的 PageSetup 对象。赋值时会进行验证——例如,调用超出范围的 SetScale 会抛出 CellsException。
auto& pageSetup = sheet.GetPageSetup();
pageSetup.SetOrientation(PageOrientationType::Landscape);
pageSetup.SetPaperSize(PaperSizeType::PaperA4);
pageSetup.SetFitToPagesWide(1);
pageSetup.SetFitToPagesTall(3);
pageSetup.SetPrintArea("$A$1:$D$20");
pageSetup.SetPrintTitleRows("$1:$2");
快速入门
Aspose.Cells FOSS for C++ 并未通过包管理器分发 — 克隆仓库并将其添加到你的 CMake 项目中:
git clone https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Cpp.git
将库作为你的 CMakeLists.txt 的子目录添加,并链接到 aspose_cells_foss 目标:
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp/Aspose.Cells.Foss.Cpp)
target_link_libraries(MyApp PRIVATE aspose_cells_foss)
然后创建、设置样式并保存工作簿:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
#include "aspose/cells_foss/Style.h"
#include "aspose/cells_foss/Font.h"
#include "aspose/cells_foss/Color.h"
using namespace Aspose::Cells_FOSS;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Products");
sheet.GetCells()["A1"].PutValue("Product");
sheet.GetCells()["B1"].PutValue("Price");
sheet.GetCells()["A2"].PutValue("Apple");
sheet.GetCells()["B2"].PutValue(2.99);
sheet.GetCells()["A3"].PutValue("Orange");
sheet.GetCells()["B3"].PutValue(1.99);
sheet.GetCells()["B4"].SetFormula("SUM(B2:B3)");
Style header = sheet.GetCells()["A1"].GetStyle();
Font font;
font.SetBold(true);
header.SetFont(font);
sheet.GetCells()["A1"].SetStyle(header);
workbook.Save("products.xlsx");
return 0;
}
支持的格式
| 格式 | 扩展 | 读取 | 写入 |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
XLSX 是当前版本唯一支持读取和写入的格式。Workbook 的文件和流构造函数加载 .xlsx 数据,Save 将其写回;LoadFormat 和 SaveFormat 枚举在这些调用中控制显式的格式选择。
开源与许可
Aspose.Cells FOSS for C++ 使用 MIT 许可证。完整源码可在 GitHub 获取,许可证允许商业使用、修改和再分发。