如何在 C# 中创建 PowerPoint 模板
由团队撰写于 Iron Software
滚动一张大电子表格并看着列标题消失是那些小小的挫折之一,会减慢实际工作的速度。 Excel中的冻结窗格通过将特定行或列锁定在适当位置解决了这个问题,使它们在滚动时一直保持可见。 无论您是需要冻结数据集的顶行、锁定宽表的首列,还是一次保持多行和多列固定不动,Excel都为您提供了精确控制,确保屏幕上保持固定的内容。
在Excel中冻结行有助于在滚动时保持重要信息可见,特别适用于需要查看或过滤的大数据集。 标题行将始终保持可见,因此您总是知道正在阅读哪一列。 冻结窗格功能也是可逆的:解除冻结与应用冻结一样简单,而且您可以在数据结构更改时随时更新冻结区域。
本文介绍了在Excel中使用冻结窗格的每种方法:如何冻结顶行,如何冻结首列,如何一次冻结多行或多列,如何锁定电子表格中间的特定行,如何使用键盘快捷键,如何解除冻结的行和列,以及如何使用拆分窗格作为替代。对于需要以编程方式对生成的Excel文件应用冻结窗格的.NET应用程序开发人员,将在最后一节展示如何用IronXL在C#中处理此问题,无需安装Microsoft Office。
方法 1:冻结顶行(最快方法)
最佳用途:任何包含单个标题行的电子表格,需要在向下滚动时保持可见。
要在Excel中冻结顶行,请转到视图选项卡并选择冻结顶行,它会在滚动浏览工作表的其余部分时保持第一行可见。 这是冻结窗格最常见的使用方式,不需要预先选择单元格。
- 打开您的Excel电子表格。
- 点击功能区中的视图选项卡。
- 在窗口组中单击冻结窗格以打开下拉菜单。
- 从列表中选择冻结顶行。
当顶行被冻结时,在其下会出现一个较暗的边框,表示该行在滚动时已锁定。 您还可以使用屏幕右侧的滚动箭头向下滚动,以验证行是否按预期保持固定。
冻结顶行特别有助于在大数据集中保持标题可见,使数据分析更容易,因为您滚动浏览电子表格。 例如,如果您的员工数据集有ID、姓名、部门、薪水和状态的列,锁定第一行意味着无论您查看的是哪一行,那些列标签都会保持可见。
键盘快捷键:快速冻结顶行,使用键盘快捷键Alt + W + F + R。 按顺序按下每个键(而不是同时)即可从键盘触发冻结顶行,而无需使用功能区。
Excel没有单独用于冻结窗格的键盘快捷键,但您可以使用Alt + W, F快速访问冻结窗格菜单,然后按R以冻结顶行,按C以冻结首列,或再次按F以选择通用的冻结窗格选项。

方法 2:冻结首列
最佳用途:宽电子表格需要向右滚动并保持产品代码、员工ID或标签列可见。
冻结首列选项的工作方式与冻结顶行相同,但锁定列A。
- 点击视图选项卡。
- 点击冻结窗格以打开下拉菜单。
- 从选项中选择冻结首列。
Excel会立即冻结列A。 当您向右滚动工作表时,Excel中的首列保持固定在屏幕左侧,而所有其他列正常滚动。 较深的垂直边框将出现在冻结列的右侧,标示固定区域与可滚动区域之间的边界。
这对于库存清单、价格表或任何需要在审查右侧多列数据时保持列A产品代码或项目名称可见的电子表格特别有用。

方法 3:冻结多行
最佳用途:具有多行标题的电子表格,例如标题行后跟列标题行,或需要锁定的不仅仅是第一行的任何情况。
要在Excel中冻结多行,请选择要冻结的最后一行下方的单元格,然后转到视图选项卡并选择冻结窗格。 关键是单元格选择:Excel会冻结所选单元格行上方的所有内容。
示例:冻结前两行
- 点击单元格A3(要冻结的行正下方的第一单元格)。
- 点击视图选项卡。
- 在下拉菜单中单击冻结窗格。
- 选择冻结窗格(不是冻结顶行或冻结首列)。
现在行1和行2被冻结。 当您向下滚动时,这两行保持在屏幕顶部。 当冻结多行和多列时,最后冻结的行下方和最后冻结的列右侧的边框会显得更厚,指示冻结区域。
如果表格的标题占用了多行,例如标题行后跟一个单独的列标签行,请选择最后一个标题行下方的行以冻结其上方的所有标题行。 在销售报告演示文件中,这意味着点击A3以同时冻结标题行和列标题行。
如果冻结窗格选项变灰,请确保您处于普通视图中而不是在编辑单元格。 检查视图选项卡并确认选择了普通,而不是页面布局或分页预览,然后再试一次。

方法 4:冻结多列
最佳用途:需要锁定首两列或更多列的电子表格,例如同时保持产品代码和产品名称可见而左右滚动。
要冻结多列,过程与冻结多行类似:选择要冻结的最后一列右侧的单元格。
示例:冻结前两列
- 点击单元格C1(列C的首单元格,位于您要冻结的列右侧)。
- 点击视图选项卡。
- 在下拉菜单中单击冻结窗格。
- 选择冻结窗格。
现在列A和B被冻结。 向右滚动,两个列始终固定在左侧。 相同的较深边框会出现在最后冻结的列右侧。

方法 5:同时冻结多行和多列
最佳用途:需要同时锁定标题行和标识符列的大数据集。
这是单元格选择规则最重要的地方。 要一次冻结多个行和列,您需要根据希望冻结边界的位置选择特定的单元格。
在Excel中冻结多行和多列,请选择想要冻结的最后一行下方和最后一列右侧的单元格,然后转到视图选项卡并选择冻结窗格。
示例:冻结前两行和首列
- 点击单元格B3。 这是一行位于第2行(要冻结的最后一行)下方和一列位于列A(要冻结的最后一列)右侧。
- 点击视图选项卡。
- 点击冻结窗格,然后选择冻结窗格。
现在行1、行2和列A全部被冻结。 向右滚动,首列保持可见。 向下滚动,两个标题行保持可见。
要从顶行和首列开始冻结一块区域,例如前四行和最左侧三列,选择类似D5的单元格,然后从视图选项卡选择冻结窗格。 冻结始终从工作表的左上角开始,并向上延伸至包括所选单元格行之上和列左侧。

方法 6:使用单元格选择冻结特定行
最佳用途:锁定不在最前面的行,例如当您想要保持总计行或子标题可见时。
要在Excel中冻结特定行,选择要冻结行下方的行,然后转到视图选项卡并点击冻结窗格。
此方法适用于电子表格中的任何行,而不仅仅是顶行。 例如,要锁定特定的1到5行,同时让第5行以下的行自由滚动:
- 点击第6行中的任何单元格(您最后想冻结的行正下方)。
- 点击视图选项卡。
- 点击冻结窗格 > 冻结窗格。
现在1到5行已锁定在屏幕顶部。 请注意,Excel总是从第一行冻结到所选单元格的上方行,因此您不能在不滚动上面的行的情况下冻结数据集中的某一行。 冻结窗格始终固定在工作表的左上角。
您可以将冻结窗格选项添加到快速访问工具栏以更快地访问。 在功能区的任意位置右键点击,选择自定义快速访问工具栏,搜索冻结窗格并添加它。 这样一来,您无需每次都打开视图选项卡,就可以一键访问该选项。

方法 7:解除冻结的行和列
最佳用途:解除冻结以重置工作表或更改冻结区域。
要在Excel中解除行或列的冻结,请转到视图选项卡并选择解除冻结窗格。 此选项仅在已经应用冻结时出现在冻结窗格下拉菜单中。
- 点击视图选项卡。
- 点击冻结窗格以打开下拉菜单。
- 选择解除冻结窗格。
Excel中的解除冻结窗格选项允许用户通过移除任何冻结的行或列返回到原始布局。 当您选择解除冻结窗格时,它将移除所有冻结的列和行,使您能够再次自由滚动浏览工作表。
一个重要的要点:如果电子表格已经有冻结的部分,则必须先选择解除冻结窗格,然后才能设置新的冻结区域。 您不能仅仅更改冻结的单元格选择而不先移除现有冻结。

方法 8:使用拆分窗格作为替代
最佳用途:同时查看同一工作表的两个不同区域而不冻结。
拆分窗格将工作表窗口划分为两个或四个独立的窗格,每个窗格可以单独滚动。 与冻结窗格不同,拆分窗格不会将内容锁定到位。 相反,它们会在同一工作表中创建第二个视图区域。
- 点击您要创建拆分的位置的单元格。
- 点击视图选项卡。
- 在窗口组中单击拆分。
工作表在所选单元格处被划分。 每个窗格可以单独滚动,因此您可以在不同的窗格中同时查看第1行和第500行。 要移除拆分,请再次点击视图 > 拆分以关闭它。
拆分窗格在需要比较大数据集的两个部分时很有用,例如并排查看长列表的开始和结尾。当您只需在通过行和列滚动时保持标题可见时,冻结窗格是更好的选择。
您不能在同一工作表上同时使用冻结窗格和拆分窗格。应用一种会移除另一种。 当您需要固定标题时选择冻结窗格,当您需要在同一数据中有两个可滚动视图时选择拆分窗格。

使用Excel表格冻结窗格
一个手动应用冻结窗格的替代方法是将数据范围转换为Excel表格。 将数据转换为Excel表格会自动将标题保持可见,而无需手动冻结行。
- 点击数据范围内的任意位置,或在您的数据上方插入空行,如果您在转换为表格前需要标题行。
- 按下Ctrl + T以打开创建表格对话框。
- 确认范围以及您的数据是否有标题,然后点击确定。
Excel将范围格式化为表格并自动在滚动浏览表格行时将列标题保持在屏幕顶部的列字母区域内,即使没有应用冻结窗格。 当表格是滚动期间的活动选择时,这种方式有效。

常见问题及故障排除
视图选项卡中的冻结窗格变灰
当电子表格处于页面布局或分页预览模式时,该选项不可用。 点击视图 > 普通切换回标准视图,冻结窗格选项将再次可用。 您在主动编辑单元格时它也会变灰。 首先按下Escape。
应用冻结后冻结了错误的行
这发生在应用冻结之前单元格选择的位置不正确时。 请记住:Excel冻结选定单元格上方和左侧的所有内容。 如果冻结了第3行而不是第1行,您选择的是第4行的单元格而不是第2行。首先解除冻结窗格,选择正确的单元格并重新应用。
文件共享时冻结窗格未保存
冻结窗格作为Excel文件中的工作表设置保存。如果冻结不持久,请检查文件是否以.xlsx格式保存,而不是.csv或其他不支持这些设置的格式。 CSV文件不保留冻结窗格、格式或任何视图设置。
应用冻结窗格时滚动位置跳动
如果在应用冻结时视图意外滚动,这是因为Excel重新定位视窗以从可见窗口顶部显示冻结区域。 滚动回到表单顶部并从那里重新应用冻结以避免这种行为。
不解除冻结就无法更改冻结区域
如果电子表格已经有冻结部分,则必须选择解除冻结窗格,然后才能设置新的冻结区域。 您不能直接修改冻结边界。 转到视图 > 冻结窗格 > 解除冻结窗格,然后选择您的新单元格位置并重新应用。
在共享或导出文件后冻结窗格消失
某些文件转换会删除视图设置。 如果导出为PDF,由于PDF页面不滚动,因此冻结窗格概念不适用。 如果保存为.csv,所有格式和视图设置(包括冻结窗格)将丢失。将文件保存为.xlsx以保留冻结窗格设置。 如果在应用冻结窗格后也需要保护工作表以防止编辑,请转到审阅选项卡并选择保护工作表,然后再共享文件。
快速参考:Excel中的冻结窗格
| 目标 | 步骤 | 快捷键 |
|---|---|---|
| 冻结顶行 | 视图选项卡 > 冻结窗格 > 冻结顶行 | Alt + W + F + R |
| 冻结首列 | 视图选项卡 > 冻结窗格 > 冻结首列 | Alt + W + F + C |
| 冻结多行 | 选择最后冻结行下方的单元格 > 视图 > 冻结窗格 | Alt + W + F + F |
| 冻结多列 | 选择最后冻结列右侧的单元格 > 视图 > 冻结窗格 | Alt + W + F + F |
| 同时冻结行和列 | 选择冻结区域下方和右侧的单元格 > 视图 > 冻结窗格 | Alt + W + F + F |
| 解除所有窗格冻结 | 视图选项卡 > 冻结窗格 > 解除冻结窗格 | Alt + W + F + F |
| 添加到快速访问工具栏 | 右键点击功能区 > 自定义快速访问工具栏 > 搜索冻结窗格 > 添加 | 不适用 |
为开发人员:使用IronXL以编程方式添加冻结窗格
如果您的应用程序为用户生成Excel文件,并且这些文件包含大数据集,以编程方式添加冻结窗格可确保每个生成的工作簿到达时标题已锁定到位。 IronXL是一个.NET库,可以在C#中对Excel文件应用冻结窗格,无需在服务器或开发机器上安装Microsoft Office。
IronXL的CreateFreezePane()方法接受两个参数:列分割位置和行分割位置,均以零为基。 列0等于列A,列1等于列B,以此类推。 调用CreateFreezePane(0, 1)会冻结顶行(所有在行索引1以上的内容)。 调用CreateFreezePane(1, 1)会同时冻结顶行和首列。
以下是一个加载现有员工数据集、冻结顶行以保持标题可见并保存更新文件的实际示例:
using IronXL;
// Load the existing Excel workbook
WorkBook workBook = WorkBook.Load("employee-dataset.xlsx");
// Access the first sheet - freeze panes apply per worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Freeze the top row: colSplit=0 (no columns frozen), rowSplit=1 (freeze row 1)
// Zero-based: rowSplit=1 means freeze everything above row index 1 (i.e. freeze row 1)
workSheet.CreateFreezePane(0, 1);
workBook.SaveAs("employee-dataset-frozen.xlsx");
using IronXL;
// Load the existing Excel workbook
WorkBook workBook = WorkBook.Load("employee-dataset.xlsx");
// Access the first sheet - freeze panes apply per worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Freeze the top row: colSplit=0 (no columns frozen), rowSplit=1 (freeze row 1)
// Zero-based: rowSplit=1 means freeze everything above row index 1 (i.e. freeze row 1)
workSheet.CreateFreezePane(0, 1);
workBook.SaveAs("employee-dataset-frozen.xlsx");
Imports IronXL
' Load the existing Excel workbook
Dim workBook As WorkBook = WorkBook.Load("employee-dataset.xlsx")
' Access the first sheet - freeze panes apply per worksheet
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Freeze the top row: colSplit=0 (no columns frozen), rowSplit=1 (freeze row 1)
' Zero-based: rowSplit=1 means freeze everything above row index 1 (i.e. freeze row 1)
workSheet.CreateFreezePane(0, 1)
workBook.SaveAs("employee-dataset-frozen.xlsx")
要冻结多行,例如标题行和标题行(前两行),请传递rowSplit=2:
using IronXL;
WorkBook workBook = WorkBook.Load("sales-report.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Freeze the first two rows (title row + column header row)
// colSplit=0 (no columns), rowSplit=2 (freeze rows 1 and 2)
workSheet.CreateFreezePane(0, 2);
workBook.SaveAs("sales-report-frozen.xlsx");
using IronXL;
WorkBook workBook = WorkBook.Load("sales-report.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Freeze the first two rows (title row + column header row)
// colSplit=0 (no columns), rowSplit=2 (freeze rows 1 and 2)
workSheet.CreateFreezePane(0, 2);
workBook.SaveAs("sales-report-frozen.xlsx");
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("sales-report.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Freeze the first two rows (title row + column header row)
' colSplit=0 (no columns), rowSplit=2 (freeze rows 1 and 2)
workSheet.CreateFreezePane(0, 2)
workBook.SaveAs("sales-report-frozen.xlsx")
要同时冻结行和列,例如前两行和首列(相当于在Excel中选择单元格B3),请传递两个参数:
using IronXL;
WorkBook workBook = WorkBook.Load("inventory-list.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Freeze first two rows and first column
// colSplit=1 (freeze column A), rowSplit=2 (freeze rows 1 and 2)
workSheet.CreateFreezePane(1, 2);
// To remove a freeze pane, use RemovePane()
// workSheet.RemovePane();
workBook.SaveAs("inventory-list-frozen.xlsx");
using IronXL;
WorkBook workBook = WorkBook.Load("inventory-list.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Freeze first two rows and first column
// colSplit=1 (freeze column A), rowSplit=2 (freeze rows 1 and 2)
workSheet.CreateFreezePane(1, 2);
// To remove a freeze pane, use RemovePane()
// workSheet.RemovePane();
workBook.SaveAs("inventory-list-frozen.xlsx");
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("inventory-list.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Freeze first two rows and first column
' colSplit=1 (freeze column A), rowSplit=2 (freeze rows 1 and 2)
workSheet.CreateFreezePane(1, 2)
' To remove a freeze pane, use RemovePane()
' workSheet.RemovePane()
workBook.SaveAs("inventory-list-frozen.xlsx")
IronXL的CreateFreezePane()方法也接受四参数重载,用于在您希望单独控制初始滚动位置与冻结边界的高级场景中。 这对于您想在保持标题锁定的同时打开文件已滚动到特定区域的大数据集非常有用。 RemovePane()方法单次调用即可移除工作表中所有现有的冻结或拆分窗格。
IronXL运行在.NET 6及更高版本,兼容Windows、Linux、macOS、Docker和Azure,并且是IronXL文档网站上冻结窗格指南中使用的相同库。
入门:通过NuGet使用Install-Package IronXL.Excel安装。 免费试用可享有30天的全部功能且不需要信用卡。
进一步阅读:
总结
冻结窗格是Excel中导航大数据集而不丢失上下文的最实用工具之一。 对于大多数电子表格,最快的方法是简单地转到视图选项卡,点击冻结窗格,并根据您主要滚动的方向选择冻结顶行或冻结首列。 当电子表格有多行标题时,选择最后一个标题行下方的单元格并选择冻结窗格会将所有标题行锁定到位。
当您需要同时冻结多行和多列时,规则始终是一样的:选择位于您想冻结的所有内容下方和右侧的单元格,然后点击冻结窗格。 要解除任何冻结,转到视图 > 冻结窗格 > 解除冻结窗格,可立即清除所有锁定的行或列。 对于Excel表格,标题行会在滚动时自动保持可见,无需任何冻结窗格配置。
对于在.NET应用程序中生成Excel文件的开发人员,IronXL提供了CreateFreezePane()方法,以编程方式应用冻结窗格,确保您的应用程序生成的每个工作簿都到达时,标题已锁定并可使用。 从试用版本开始,探索在您自己的环境中完整的功能集。
发现这里未涵盖的冻结窗格场景? 在下面发表评论,或访问Iron Software博客以获取有关Excel格式、数据管理和电子表格自动化的更多指南。




