在查看大型 Excel 工作表中的数据时,当你滚动到工作表的其他位置,往往会丢失对标题行或标题列的视线。在这种情况下,Microsoft Excel 提供了"冻结窗格(Freeze Panes)"功能,帮助你锁定必要的行和/或列,使其始终保持可见。
在本文中,你将学习如何使用 Spire.XLS for C++ 以编程方式冻结 Excel 工作表中的行或列。
Spire.XLS for C++ 提供了 Worksheet->FreezePanes(int rowIndex, int columnIndex) 方法,用于冻结该单元格上方的所有行和左侧的所有列,其中 rowIndex 和 columnIndex 用于指定目标单元格的位置。
本教程将针对以下几种情况提供代码示例:
安装 Spire.XLS for C++
将 Spire.XLS for C++ 集成到你的应用程序中有两种方式:
通过 NuGet 安装更加简单,也更推荐使用。
你也可以通过访问以下链接了解更详细的集成步骤:
如何将 Spire.XLS for C++ 集成到 C++ 程序中
在 C++ 中冻结 Excel 的首行
要冻结首行,需要将选定单元格设置为 (2, 1),即 "A2"。具体步骤如下:
- 创建一个 Workbook 对象。
- 使用 Workbook->LoadFromFile() 方法加载 Excel 文档。
- 通过 Workbook->GetWorksheets()->Get() 方法获取指定的工作表。
- 使用 Worksheet->FreezePanes(2, 1) 方法冻结首行。
- 调用 Workbook->SaveToFile() 方法将工作簿保存为另一个 Excel 文件。
#include "Spire.Xls.o.h"
using namespace Spire::Xls;
using namespace std;
int main()
{
//指定输入文件路径
std::wstring data_path = L"Data\\";
std::wstring inputFile = data_path + L"sample.xlsx";
//指定输出文件路径
std::wstring outputPath = L"Output\\";
std::wstring outputFile = outputPath + L"FreezeFirstRow.xlsx";
//创建工作簿
intrusive_ptr<Workbook> workbook = new Workbook();
//从磁盘加载 Excel 文档
workbook->LoadFromFile(inputFile.c_str());
//获取第一个工作表
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//冻结第一行
sheet->FreezePanes(2, 1);
//保存文件
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
workbook->Dispose();
}

在 C++ 中冻结 Excel 的首列
要冻结首列,需要将选定单元格设置为 (1, 2),即 "B1"。以下是在 Excel 工作表中冻结首列的具体步骤:
- 创建一个 Workbook 对象。
- 使用 Workbook->LoadFromFile() 方法加载 Excel 文档。
- 通过 Workbook->GetWorksheets()->Get() 方法获取指定的工作表。
- 使用 Worksheet->FreezePanes(1, 2) 方法冻结首列。
- 调用 Workbook->SaveToFile() 方法将工作簿保存为另一个 Excel 文件。
#include "Spire.Xls.o.h"
using namespace Spire::Xls;
using namespace std;
int main()
{
//指定输入文件路径
std::wstring data_path = L"Data\\";
std::wstring inputFile = data_path + L"sample.xlsx";
//指定输出文件路径
std::wstring outputPath = L"Output\\";
std::wstring outputFile = outputPath + L"FreezeFirstColumn.xlsx";
//创建工作簿
intrusive_ptr<Workbook> workbook = new Workbook();
//从磁盘加载 Excel 文档
workbook->LoadFromFile(inputFile.c_str());
//获取第一个工作表
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//冻结第一列
sheet->FreezePanes(1, 2);
//保存文件
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
workbook->Dispose();
}

在 C++ 中同时冻结首行和首列
如果你希望同时冻结首行和首列,需要将选定单元格设置为 (2, 2),即 "B2"。具体步骤如下:
- 创建一个 Workbook 对象。
- 使用 Workbook->LoadFromFile() 方法加载 Excel 文档。
- 通过 Workbook->GetWorksheets()->Get() 方法获取指定的工作表。
- 使用 Worksheet->FreezePanes(2, 2) 方法同时冻结首行和首列。
- 调用 Workbook->SaveToFile() 方法将工作簿保存为另一个 Excel 文件。
#include "Spire.Xls.o.h"
using namespace Spire::Xls;
using namespace std;
int main()
{
//指定输入文件路径
std::wstring data_path = L"Data\\";
std::wstring inputFile = data_path + L"sample.xlsx";
//指定输出文件路径
std::wstring outputPath = L"Output\\";
std::wstring outputFile = outputPath + L"FreezeFirstRowAndColumn.xlsx";
//创建工作簿
intrusive_ptr<Workbook> workbook = new Workbook();
//从磁盘加载 Excel 文档
workbook->LoadFromFile(inputFile.c_str());
//获取第一个工作表
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//冻结第一行和第一列
sheet->FreezePanes(2, 2);
//保存文件
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
workbook->Dispose();
}

申请临时 License
如果您希望删除结果文档中的评估信息,或者摆脱功能限制,请联系销售获取有效期 30 天的临时许可证。







