如何在 C++ 中加载电子表格

如何在 C++ 中加载电子表格

Aspose.Cells FOSS for C++ 允许您在无需 Microsoft Excel 的情况下加载和读取现有的 XLSX 电子表格。本指南将演示如何加载工作簿、访问工作表以及使用 Workbook、Worksheet 和 Cell 类读取单元格值。

分步指南

步骤 1:设置构建

将 Aspose.Cells FOSS for C++ 添加到您的 CMake 项目中:

cmake_minimum_required(VERSION 3.15)
project(LoadSpreadsheet CXX)
set(CMAKE_CXX_STANDARD 17)

add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)

add_executable(LoadSpreadsheet main.cpp)
target_link_libraries(LoadSpreadsheet PRIVATE Aspose.Cells.Foss.Cpp)

步骤 2:包含必需的头文件

#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/WorksheetCollection.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"

using namespace Aspose::Cells_FOSS;

步骤 3:加载工作簿

将文件路径传递给 Workbook 构造函数以加载现有的 XLSX 文件:

int main() {
    Workbook workbook("input.xlsx");
    // workbook is now loaded and ready to use
    return 0;
}

步骤 4:访问工作表

使用 Workbook::GetWorksheets() 检索工作表集合,然后通过索引访问:

Worksheet& sheet = workbook.GetWorksheets()[0];
std::string name = sheet.GetName();

步骤 5:读取单元格值

通过地址字符串访问单元格并读取其值:

std::string text = sheet.GetCells()["A1"].GetStringValue();
double number = sheet.GetCells()["B2"].GetValue().AsDouble();
bool flag = sheet.GetCells()["C3"].GetValue().AsBool();

步骤 6:保存所有更改

进行修改后,将其保存回文件:

workbook.Save("output.xlsx");
workbook.Dispose();

常见问题与解决方案

加载时文件未找到错误 验证文件路径是否正确且文件存在。如果工作目录不确定,请使用绝对路径。

对数值单元格返回空字符串 使用 GetValue().AsDouble() 而不是 GetStringValue() — GetStringValue() 对包含数字而非文本的单元格返回空字符串。

工作簿已加载,但单元格显示为空 确保 XLSX 文件未被密码保护。Aspose.Cells FOSS for C++ 不支持加密文件。

公式单元格返回意外的值 公式单元格存储的是公式字符串,而不是计算后的值。公式在文件打开时由 Excel 进行求值。使用 GetFormula() 来检索公式文本。

处理后内存未释放 Call workbook.Dispose() 在所有操作完成后释放非托管资源。

常见问题

我可以从单个文件加载多个工作表吗?

是的。使用 Workbook::GetWorksheets() 访问所有工作表并按索引遍历。调用 sheet.GetName() 按名称识别每个工作表。

我可以加载包含多个工作表的 XLSX 文件并从特定的工作表读取吗?

是的。通过从零开始的索引访问工作表:workbook.GetWorksheets()[1] 返回第二个工作表。

加载文件会触发公式重新计算吗?

不。库会按 XLSX 文件中存储的方式加载单元格值和公式字符串。公式重新计算在 Excel 或兼容的读取器打开文件时才会发生。

如果文件路径包含 Unicode 字符会怎样?

将路径作为 std::string 传递,并使用适合您平台的正确编码。UTF-8 路径在 Linux 和 macOS 上受支持。在 Windows 上,请确保路径编码与系统区域设置匹配。

同时多次加载同一个文件安全吗?

该库对同一 Workbook 实例的并发访问不是线程安全的。每个线程加载单独的 Workbook 实例。

另请参阅

 中文