跳至頁尾內容
USING IRONXL

.NET Excel凍結頂行:滾動時保持標題可見

處理包含數百行的大型Excel文件時,滾動資料保持標題行可見可能是一個挑戰。 VB.NET Excel凍結頂部行功能通過鎖定特定行和列來解決這個問題。 本文演示如何使用IronXL在您的.NET應用程式中編程建立凍結窗格,幫助使用者快速輕鬆地導航電子表格資料。

IronXL是一個.NET程式庫,可讓您讀取、寫入和操作Excel文件,而不需要在伺服器上安裝Microsoft Office。 您只需要對CreateFreezePane物件的方法即可鎖定應用程式生成或修改的任何Excel文件中的行和列。

開始免費試用,以便按照下面的程式碼範例進行操作。

如何為您的.NET項目安裝IronXL?

在編寫任何凍結窗格程式碼之前,使用NuGet包管理器將IronXL新增到您的項目中。 打開終端並運行:

dotnet add package IronXL.Excel

或者,使用Visual Studio包管理器控制台:

Install-Package IronXL.Excel

安裝後,將IronXL命名空間新增到文件頂部。IronXL針對.NET 10開發,支持所有主要平台——Windows、Linux和macOS,讓您的凍結窗格邏輯在任何部署環境中都能一致地運行。

安裝完成後,只需幾行程式碼即可載入現有工作簿或建立新工作簿。 此程式庫相容.xlsx(Excel 2007及更高版本)和.xls(Excel 97-2003)格式,儘管凍結窗格支持需要現代化的.xlsx格式。 下表總結了本指南中涵蓋的關鍵WorkSheet方法。

IronXL凍結窗格方法
方法 參數 描述
CreateFreezePane(col, row) int col, int row 從左上角開始凍結指定數量的列和行。
CreateFreezePane(col, row, leftmostCol, topRow) int col, int row, int leftmostCol, int topRow 凍結具有預滾動起始位置的列和行。
RemovePane() none 從工作表中刪除任何現有的凍結或拆分窗格。

如何在Excel文件中凍結行?

答案很簡單:在工作表物件上使用CreateFreezePane方法。 此方法接受參數來控制在Excel表格自由滾動時,哪行和哪列保持可見。 當您凍結第一行時,標題無論滾動多少資料都保持鎖定在頂部,類似於Excel的凍結窗格功能

以下程式碼段展示如何載入現有Excel文件並凍結頂部行:

using IronXL;
using System.Linq;

// Load an existing workbook from file
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
WorkSheet workSheet = workBook.WorkSheets.First();

// Freeze the first row to keep headers visible
workSheet.CreateFreezePane(0, 1);

// Save the Excel file with freeze panes applied
workBook.SaveAs("financial_report_Frozen.xlsx");
using IronXL;
using System.Linq;

// Load an existing workbook from file
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
WorkSheet workSheet = workBook.WorkSheets.First();

// Freeze the first row to keep headers visible
workSheet.CreateFreezePane(0, 1);

// Save the Excel file with freeze panes applied
workBook.SaveAs("financial_report_Frozen.xlsx");
Imports IronXL
Imports System.Linq

' Load an existing workbook from file
Dim workBook As WorkBook = WorkBook.Load("financial_report.xlsx")
Dim workSheet As WorkSheet = workBook.WorkSheets.First()

' Freeze the first row to keep headers visible
workSheet.CreateFreezePane(0, 1)

' Save the Excel file with freeze panes applied
workBook.SaveAs("financial_report_Frozen.xlsx")
$vbLabelText   $csharpLabel

輸出

VB .NET Excel Freeze Top Row: Keep Headers Visible While Scrolling: Image 1 - Excel file with frozen first row

CreateFreezePane(0, 1)方法的調用凍結0列及1行。 這保持頂部行可見、而所有列可以左右滾動。 參數設置滾動區域上方和左方存在的行和列。 由於這種簡單的方法,使用者可以在不迷失位置的情況下核對大型文件中的資料與標題標籤。

此方法使用零起始的列計數和一基的行計數,這與Excel文件格式相匹配。 將0傳給列參數意味著沒有行被凍結——只有您指定的行被鎖定。

如何凍結Excel中的第一列?

要凍結第一列而非行,只需調整CreateFreezePane方法中的參數。 這在您的Excel電子表格中包含列A中的標識符資訊時有幫助,您希望它保持可見,同時滾動到右側的其他列。

以下程式碼段展示如何建立新工作簿並凍結第一列:

using IronXL;

// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("SalesData");

// Add sample header and data to the range
workSheet["A1"].Value = "Product ID";
workSheet["B1"].Value = "Q1 Sales";
workSheet["C1"].Value = "Q2 Sales";
workSheet["D1"].Value = "Q3 Sales";
workSheet["E1"].Value = "Q4 Sales";

// Populate a few rows of sample data
workSheet["A2"].Value = "PROD-001";
workSheet["B2"].Value = 14500;
workSheet["A3"].Value = "PROD-002";
workSheet["B3"].Value = 21300;

// Freeze the first column to keep Product IDs visible
workSheet.CreateFreezePane(1, 0);

// Save as xlsx file
workBook.SaveAs("SalesReport.xlsx");
using IronXL;

// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("SalesData");

// Add sample header and data to the range
workSheet["A1"].Value = "Product ID";
workSheet["B1"].Value = "Q1 Sales";
workSheet["C1"].Value = "Q2 Sales";
workSheet["D1"].Value = "Q3 Sales";
workSheet["E1"].Value = "Q4 Sales";

// Populate a few rows of sample data
workSheet["A2"].Value = "PROD-001";
workSheet["B2"].Value = 14500;
workSheet["A3"].Value = "PROD-002";
workSheet["B3"].Value = 21300;

// Freeze the first column to keep Product IDs visible
workSheet.CreateFreezePane(1, 0);

// Save as xlsx file
workBook.SaveAs("SalesReport.xlsx");
Imports IronXL

' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("SalesData")

' Add sample header and data to the range
workSheet("A1").Value = "Product ID"
workSheet("B1").Value = "Q1 Sales"
workSheet("C1").Value = "Q2 Sales"
workSheet("D1").Value = "Q3 Sales"
workSheet("E1").Value = "Q4 Sales"

' Populate a few rows of sample data
workSheet("A2").Value = "PROD-001"
workSheet("B2").Value = 14500
workSheet("A3").Value = "PROD-002"
workSheet("B3").Value = 21300

' Freeze the first column to keep Product IDs visible
workSheet.CreateFreezePane(1, 0)

' Save as xlsx file
workBook.SaveAs("SalesReport.xlsx")
$vbLabelText   $csharpLabel

輸出

VB .NET Excel Freeze Top Row: Keep Headers Visible While Scrolling: Image 2 - Excel file with frozen first column

在這裡,CreateFreezePane(1, 0)凍結一列和零行。 當使用者水平滾動以閱讀其他單元格資料時,第一列保持鎖定在頁面的左側。 這特別適用於財務報告或庫存清單,產品程式碼必須保持可見,以便您在季節性分解或屬性列中移動。

您可以擴展此模式凍結多列。 例如,傳2作為第一個參數,鎖定最左的兩列,以便使用者在導航寬廣的電子表格時有更大的錨點。 當您需要呈現資料比較時,此技術與單元格範圍選擇結合良好。

如何同時凍結行和列?

對於處理複雜Excel文件的應用程式,您可能需要凍結窗格,以便同時鎖定頂部行和第一列。 這使您的標題標籤和行標識符無論在哪個方向捲動時都可見,這使得理解和篩選單元資料更容易。

using IronXL;

// Load workbook or create a new one
WorkBook workBook = WorkBook.Load("Inventory.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Freeze first row AND first column simultaneously
workSheet.CreateFreezePane(1, 1);

// Save the document
workBook.SaveAs("Inventory_Frozen.xlsx");
using IronXL;

// Load workbook or create a new one
WorkBook workBook = WorkBook.Load("Inventory.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Freeze first row AND first column simultaneously
workSheet.CreateFreezePane(1, 1);

// Save the document
workBook.SaveAs("Inventory_Frozen.xlsx");
Imports IronXL

' Load workbook or create a new one
Dim workBook As WorkBook = WorkBook.Load("Inventory.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

' Freeze first row AND first column simultaneously
workSheet.CreateFreezePane(1, 1)

' Save the document
workBook.SaveAs("Inventory_Frozen.xlsx")
$vbLabelText   $csharpLabel

輸出

VB .NET Excel Freeze Top Row: Keep Headers Visible While Scrolling: Image 3 - Output Excel file with the first row and column frozen

CreateFreezePane(1, 1)方法的調用設置凍結窗格以鎖定一列和一行。 當您在Excel中打開此文件時,無論向哪個方向滾動,標題行和ID列保持可見於頁面上。 這回答了開發者在建立顯示多行多列表格資料的報告應用程式時常見的問題。

此配置在庫存管理、人力資源報告和財務儀表板中很常見,因為垂直和水平導航是慣例。可以將這與單元格式化結合——例如加粗標題、背景顏色——使凍結區域在視覺上與滾動區域區分開。

如何使用具有預滾動的高級凍結窗格方法?

IronXL 提供了一個四個參數的高級選項,讓您在預滾動的起始位置新增凍結窗格。 這不僅控制了哪些行和列被凍結,還控制了使用者首次打開文件時滾動區域從哪開始。

這對於面板或經理報告非常有用,您想讓初次查看集中於特定資料區域——例如,直接展示本月資料,同時保持凍結的標題行和ID列可見。

using IronXL;
using System.Linq;

WorkBook workBook = WorkBook.Load("LargeDataset.xlsx");
WorkSheet workSheet = workBook.WorkSheets.First();

// Freeze columns A-B and rows 1-3
// Pre-scroll so the scrolling pane starts at row 8
workSheet.CreateFreezePane(2, 3, 2, 7);

workBook.SaveAs("LargeDataset_Configured.xlsx");
using IronXL;
using System.Linq;

WorkBook workBook = WorkBook.Load("LargeDataset.xlsx");
WorkSheet workSheet = workBook.WorkSheets.First();

// Freeze columns A-B and rows 1-3
// Pre-scroll so the scrolling pane starts at row 8
workSheet.CreateFreezePane(2, 3, 2, 7);

workBook.SaveAs("LargeDataset_Configured.xlsx");
Imports IronXL
Imports System.Linq

Dim workBook As WorkBook = WorkBook.Load("LargeDataset.xlsx")
Dim workSheet As WorkSheet = workBook.WorkSheets.First()

' Freeze columns A-B and rows 1-3
' Pre-scroll so the scrolling pane starts at row 8
workSheet.CreateFreezePane(2, 3, 2, 7)

workBook.SaveAs("LargeDataset_Configured.xlsx")
$vbLabelText   $csharpLabel

輸出

VB .NET Excel Freeze Top Row: Keep Headers Visible While Scrolling: Image 4 - Advanced output Excel file

附加的參數控制分屏視圖的起始位置。 在此例中,當打開工作簿時,第1-3行凍結在頂部,滾動區域從第8行開始。第三個參數(topRow)設置下部滾動窗格中可見的第一行。

請注意,每個工作表只能存在一個凍結窗格配置——任何隨後的呼叫都會覆蓋先前設置。 如果您需要動態更改凍結配置,首先調用CreateFreezePane

如何從工作表中刪除凍結窗格?

如果已存在凍結窗格,並且需要刪除它們,使用RemovePane方法可以乾淨地處理此問題。 這在需要安裝不同的凍結配置或將表格恢復到正常滾動時十分有幫助。

// Remove all existing freeze or split panes
workSheet.RemovePane();
// Remove all existing freeze or split panes
workSheet.RemovePane();
$vbLabelText   $csharpLabel

這一行清除工作表上存在的所有凍結窗格,使您可以建立新的格式化,或者讓文件沒有凍結區段。 調用CreateFreezePane——這兩個操作自然地連結在一起。

請注意,由於文件格式限制,凍結窗格不支持 Microsoft Excel 97-2003(.xls)格式。 為了獲得最佳結果,將文件保存為.xlsx格式。 如果您遇到下載的文件未正確顯示凍結窗格的問題,請確認您正在使用相容的Excel版本並將文件保存為現代格式。

您還可以將凍結窗格移除與其他工作表操作結合。 例如,在導出報告到不同佈局之前,您可能會移除凍結配置,新增新行和列,重新構建資料,然後應用匹配更新佈局的新凍結配置。

如何在多個工作表上應用凍結窗格?

許多Excel工作簿包含多個工作表——每個部門、地區或時間段各一個。 編程應用凍結窗格到每個工作表比在Excel應用程式中手動要節省時間。

以下範例載入一個工作簿,遍歷所有工作表,並將相同的凍結配置應用於每個工作表:

using IronXL;

WorkBook workBook = WorkBook.Load("MultiSheetReport.xlsx");

// Apply freeze panes to every worksheet in the workbook
foreach (WorkSheet sheet in workBook.WorkSheets)
{
    // Freeze top row and first column on each sheet
    sheet.CreateFreezePane(1, 1);
}

workBook.SaveAs("MultiSheetReport_Frozen.xlsx");
using IronXL;

WorkBook workBook = WorkBook.Load("MultiSheetReport.xlsx");

// Apply freeze panes to every worksheet in the workbook
foreach (WorkSheet sheet in workBook.WorkSheets)
{
    // Freeze top row and first column on each sheet
    sheet.CreateFreezePane(1, 1);
}

workBook.SaveAs("MultiSheetReport_Frozen.xlsx");
Imports IronXL

Dim workBook As WorkBook = WorkBook.Load("MultiSheetReport.xlsx")

' Apply freeze panes to every worksheet in the workbook
For Each sheet As WorkSheet In workBook.WorkSheets
    ' Freeze top row and first column on each sheet
    sheet.CreateFreezePane(1, 1)
Next

workBook.SaveAs("MultiSheetReport_Frozen.xlsx")
$vbLabelText   $csharpLabel

此模式在季度財務包中尤其實用,其中每個工作表代表一個月,或多地區銷售報告,其中每個地區有自己的一個選項卡。 結合排序Excel範圍資料應用條件格式,您可以從程式碼構建出完全格式化、準備好分享的工作簿。

IronXL還讓您存取WorkBook物件模型以進行更深入的工作簿檢驗。 您可以檢查工作表計數、按名稱或索引檢索工作表,並根據其內容型別對不同工作表應用不同的凍結配置——例如,匯總表可能僅凍結頂行,而詳細表凍結一行及一列。

如何在保存之前驗證凍結窗格設置?

在生成程式碼中,最好在將文件寫入磁碟之前驗證凍結窗格配置。 IronXL目前不直接公開凍結窗格狀態的讀回API,因此建議的方法是跟蹤您自己程式碼中的配置,並斷言保存操作無誤地完成。

這是您可以在.NET 10專案中運用的防禦性程式碼模式:

using IronXL;
using System;

try
{
    WorkBook workBook = WorkBook.Load("source.xlsx");
    WorkSheet workSheet = workBook.DefaultWorkSheet;

    int freezeCol = 1;
    int freezeRow = 1;

    if (freezeCol >= 0 && freezeRow >= 0)
    {
        workSheet.CreateFreezePane(freezeCol, freezeRow);
        Console.WriteLine($"Freeze pane set: {freezeCol} column(s), {freezeRow} row(s).");
    }
    else
    {
        Console.WriteLine("Invalid freeze pane parameters -- skipping.");
    }

    workBook.SaveAs("output.xlsx");
    Console.WriteLine("Workbook saved successfully.");
}
catch (Exception ex)
{
    Console.WriteLine($"Error applying freeze pane: {ex.Message}");
}
using IronXL;
using System;

try
{
    WorkBook workBook = WorkBook.Load("source.xlsx");
    WorkSheet workSheet = workBook.DefaultWorkSheet;

    int freezeCol = 1;
    int freezeRow = 1;

    if (freezeCol >= 0 && freezeRow >= 0)
    {
        workSheet.CreateFreezePane(freezeCol, freezeRow);
        Console.WriteLine($"Freeze pane set: {freezeCol} column(s), {freezeRow} row(s).");
    }
    else
    {
        Console.WriteLine("Invalid freeze pane parameters -- skipping.");
    }

    workBook.SaveAs("output.xlsx");
    Console.WriteLine("Workbook saved successfully.");
}
catch (Exception ex)
{
    Console.WriteLine($"Error applying freeze pane: {ex.Message}");
}
Imports IronXL
Imports System

Try
    Dim workBook As WorkBook = WorkBook.Load("source.xlsx")
    Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

    Dim freezeCol As Integer = 1
    Dim freezeRow As Integer = 1

    If freezeCol >= 0 AndAlso freezeRow >= 0 Then
        workSheet.CreateFreezePane(freezeCol, freezeRow)
        Console.WriteLine($"Freeze pane set: {freezeCol} column(s), {freezeRow} row(s).")
    Else
        Console.WriteLine("Invalid freeze pane parameters -- skipping.")
    End If

    workBook.SaveAs("output.xlsx")
    Console.WriteLine("Workbook saved successfully.")
Catch ex As Exception
    Console.WriteLine($"Error applying freeze pane: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

此模式在調用API之前驗證參數,並將保存操作包裝在try-catch塊中,以確保任何文件系統或格式錯誤被乾淨地捕獲。 對於伺服器端報告生成,這類防禦性程式碼可以防止批處理管道中的靜默失敗。

您可以在IronXL文件中找到更多有關處理Excel工作表建立Excel圖表的模式,涵蓋該程式庫支持的全範圍的電子表格操作。

如何將凍結窗格與IronXL的其他功能結合使用?

當與其他電子表格格式化和資料處理操作結合使用時,凍結窗格變得更加有價值。 在現實世界中的.NET應用程式中最常見的組合包括:

與凍結窗格的標題格式化。 凍結頂行然後應用加粗格式、背景顏色或邊框樣式到標題單元格,以使其從下方資料行中明顯區分出來。 使用者立刻注意到凍結的行是標題行,而不是資料行。

自動適應列寬。 填充資料後,自動適應列寬,確保每列恰好適合其內容。 這消除了截斷的文字,使凍結的標題標籤一目了然。

資料驗證及單元格保護。 結合凍結窗格與單元格保護,以鎖定標題單元格,防止意外編輯。 最終使用者可以滾動並與資料互動,而受保護的標題行保持凍結且只讀。

排序和篩選。 在凍結它之前對標題行使用Excel AutoFilter。 當使用者打開文件時,他們會看到固定在頂部的可篩選列標題——這是原生Excel應用程式中熟悉的模式。

根據Microsoft的Excel文件,凍結窗格儲存在OOXML包中的工作表sheetView XML元素中。 IronXL正確地寫入此元素,因此由程式庫生成的文件可以在Excel、LibreOffice和Google Sheets中無需額外配置即可打開。

Apache POI專案——Java的Excel操作等價程式——使用相同的底層OOXML規範,因此,凍結窗格行為與Java開發者從其工具中預期的一致。

您接下來的步驟是什麼?

實施凍結窗格是改進您的.NET Excel報告使用者體驗的最有效方法之一。 通過將標題和標識符鎖定到位,您將靜態資料轉變為使用者可以自信導航的互動報告工具。

以下是本指南涵蓋內容的摘要:

  • 簡單行凍結——CreateFreezePane(0, 1)鎖定頂行以進行垂直滾動。
  • 簡單列凍結——CreateFreezePane(1, 0)鎖定最左列以進行水平滾動。
  • 結合凍結——CreateFreezePane(1, 1)同時鎖定頂行和第一列。
  • 高級預滾動——CreateFreezePane(col, row, leftmostCol, topRow)為滾動窗格設置自定義起始位置。
  • 刪除窗格——RemovePane()清除任何現有的凍結或拆分配置。
  • 多工作表應用——遍歷workBook.WorkSheets以將相同的凍結設置應用於整個工作簿。

為了繼續構建這些技能,請探討IronXL文件中的這些相關指南:

用於生產使用,購買授權以解鎖所有功能並自信地部署。 IronXL授權頁面還涵蓋部署選項、免版稅再分發和SaaS用案例。

現在開始使用IronXL。
green arrow pointer

常見問題

如何在VB.NET中保持Excel標題行可見?

您可以使用IronXL的CreateFreezePane方法在您的VB.NET應用程式中鎖定頂部行,以確保在瀏覽資料時它始終可見。

凍結窗格在Excel中的目的是什麼?

凍結窗格在Excel中幫助保持特定行或列(如標題)的可見性,使得在檢視大型資料集時的資料分析和可用性得以增強。

可以使用IronXL程式化凍結Excel中的窗格嗎?

是的,IronXL允許您在Excel中程式化凍結窗格,使您能使用CreateFreezePane方法鎖定特定的行或列。

是否可以在VB.NET中同時凍結行和列?

是的,在VB.NET中使用IronXL,您可以同時凍結行和列,通過使用CreateFreezePane方法指定您想要鎖定的行和列。

IronXL的CreateFreezePane方法是什麼?

IronXL的CreateFreezePane方法是一個功能,它允許開發者程式化鎖定Excel試算表中的特定行和列,增強資料導航與分析。

開發者為什麼應該在VB.NET中使用IronXL進行Excel操作?

開發者應該在VB.NET中使用IronXL進行Excel操作,因為它簡化了例如凍結窗格這樣的複雜任務,使得管理大型資料集和改善使用者體驗變得更為容易。

凍結窗格如何改善Excel試算表的可用性?

凍結窗格通過保證重要資料(如標題)始終可見,從而協助有效的資料分析和大試算表的導航以提高可用性。

IronXL能有效處理大型Excel文件嗎?

是的,IronXL被設計得能夠有效地處理大型Excel文件,提供例如凍結窗格這類特性來幫助管理和導航廣泛資料而不造成不必要的負擔。

IronXL對初學者和高級開發者是否適用?

IronXL適用於初學者和高級開發者,因為其清晰的API和豐富的功能集,包括在VB.NET中的CreateFreezePane方法。

使用IronXL進行Excel自動化任務的好處是什麼?

使用IronXL進行Excel自動化任務的好處包括易於使用、能程式化操作試算表,以及改進資料管理的增強功能如凍結窗格。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話