如何在 C# 中建立 Excel 檔案

如何使用 C# 在 Excel 中新增"凍結窗格"

This article was translated from English: Does it need improvement?
Translated
View the article in English

在擁有 50 多行或列數超過"Z"的大型 Excel 試算表中,要在保持標題可見的同時檢視資料,將變得相當困難。 C# 中的"凍結區塊"功能提供了一種優雅的解決方案,可將特定列與行固定在原位,同時讓其餘部分自由捲動。

當處理財務報表、員工資料庫或庫存清單時,此功能至關重要,因為您需要隨時掌握欄位標題或列識別碼的資訊。 透過 IronXL 程式庫,您可以在 .NET 應用程式中透過程式碼新增"凍結窗格",以改善資料導覽與使用者體驗。

快速入門:將表頭列與表頭列鎖定在同一行

使用簡單的 CreateFreezePane(colSplit, rowSplit) 方法,即可在數秒內凍結行或列。 無需複雜設定——只需載入您的試算表、呼叫此方法,瀏覽時頁首標題便會固定在頂端。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronXL.Excel

    PM > Install-Package IronXL.Excel
  2. 請複製並執行此程式碼片段。

    workSheet.CreateFreezePane(1, 4);
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronXL

    arrow pointer


如何在 Excel 中新增"凍結橫向/縱向"功能?

凍結窗格可將行與列固定在原位,使其在捲動時仍保持可見。 此功能可在快速比對資訊的同時,保持標題欄位或列的位置不變。 此功能在處理大型資料集時,或當您需要在瀏覽龐大試算表時維持上下文關聯性時,尤為實用。

IronXL 中的"凍結工作表"功能模擬了 Excel 的原生功能,對於熟悉 Excel 介面的開發人員而言,操作起來直覺易懂。 與 Excel Interop 解決方案不同,IronXL 提供了一種更高效且更適合伺服器環境的方法,用於透過程式設計實現"凍結區格"功能。

CreateFreezePane 如何處理 2 個參數?

若要新增固定區塊,請使用 CreateFreezePane 方法,並指定固定區塊應從哪一列、哪一欄開始。 指定的欄位和列未包含在凍結區塊中。 例如,workSheet.CreateFreezePane(1, 4) 會建立一個從 column A 開始並包含 rows 1 to 4 的凍結窗格。

理解零基索引至關重要:第 0 欄指 A 欄,第 1 欄指 B 欄,依此類推。 列索引的格式亦遵循相同模式。 此方法非常適合在瀏覽資料條目時,希望保持標題可見的情境。

以下程式碼範例示範如何從 B 欄第 4 行開始建立固定區塊:

:path=/static-assets/excel/content-code-examples/how-to/add-freeze-panes-add.cs
using IronXL;
using System.Linq;

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

// Create freeze pane from column(A-B) and row(1-3)
workSheet.CreateFreezePane(2, 3);

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

Private workBook As WorkBook = WorkBook.Load("sample.xlsx")
Private workSheet As WorkSheet = workBook.WorkSheets.First()

' Create freeze pane from column(A-B) and row(1-3)
workSheet.CreateFreezePane(2, 3)

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

"凍結窗格"功能實際運作時是什麼樣子?

Freeze Pane in Action

如何取消"凍結窗格"?

請使用 RemovePane 方法,從您的試算表中移除所有現有的凍結區塊。 當您需要重置檢視畫面,或根據使用者偏好或資料變更套用不同的凍結設定時,此功能便十分實用。

:path=/static-assets/excel/content-code-examples/how-to/add-freeze-panes-remove.cs
// Remove all existing freeze or split pane
workSheet.RemovePane();
' Remove all existing freeze or split pane
workSheet.RemovePane()
$vbLabelText   $csharpLabel

"凍結窗格"的高級選項有哪些?

CreateFreezePane 方法提供了一種進階選項,可建立具備預先捲動功能的固定窗格。 當您希望在維持"凍結工作表"功能的同时,將注意力集中於試算表的特定區域時,此功能便十分實用。

何時應使用 4 個參數來設定進階的"凍結窗格"?

此方法可讓您根據指定的起始欄位和列,新增一個固定區塊。 此外,它還讓您能夠在工作表上啟用捲動功能。 這在處理格式化的 Excel 報表時尤為實用,因為您需要精確控制初始檢視畫面。

例如,使用 workSheet.CreateFreezePane(5, 2, 6, 7) 會建立一個橫跨 columns A-Erows 1-2 的凍結區塊。 內容包含一個 1 欄 5 行的捲軸。 工作表開啟時,會顯示 columns A-E, G-...rows 1-2, 8-...

:path=/static-assets/excel/content-code-examples/how-to/add-freeze-panes-advance.cs
using IronXL;
using System.Linq;

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

// Overwriting freeze or split pane to column(A-E) and row(1-5) as well as applying prescroll
// The column will show E,G,... and the row will show 5,8,...
workSheet.CreateFreezePane(5, 5, 6, 7);

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

Private workBook As WorkBook = WorkBook.Load("sample.xlsx")
Private workSheet As WorkSheet = workBook.WorkSheets.First()

' Overwriting freeze or split pane to column(A-E) and row(1-5) as well as applying prescroll
' The column will show E,G,... and the row will show 5,8,...
workSheet.CreateFreezePane(5, 5, 6, 7)

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

"進階凍結窗格"功能呈現為何?

Excel 凍結區格示範:顯示員工資料,其中標題列與 ID 欄位已凍結,藍色箭頭標示凍結邊界

"凍結窗格"的實際應用案例

在各種商業情境中,"凍結窗格"功能極具價值:

  1. 財務報告:在捲動瀏覽年度資料時,應保持月份/季度標題可見
  2. 員工資料庫:在檢視績效指標時鎖定員工姓名與 ID
  3. 庫存管理:在審核庫存數量時修正產品代碼與名稱
  4. 銷售儀表板:在分析區域銷售數據的同時,維持產品類別的清晰可見性

結合 Excel 公式使用時,凍結窗格功能能顯著提升資料分析效率。

完整範例:使用"凍結欄位"建立資料報表

以下是一個完整的範例,展示如何建立帶有"凍結窗格"功能的格式化報表:

using IronXL;
using IronXl.Styles;

// Create a new workbook
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("Sales Report");

// Add headers
workSheet["A1"].Value = "Product ID";
workSheet["B1"].Value = "Product Name";
workSheet["C1"].Value = "Q1 Sales";
workSheet["D1"].Value = "Q2 Sales";
workSheet["E1"].Value = "Q3 Sales";
workSheet["F1"].Value = "Q4 Sales";
workSheet["G1"].Value = "Total";

// Style headers
var headerRange = workSheet["A1:G1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.Color = "#FFFFFF";

// Add sample data
for (int i = 2; i <= 50; i++)
{
    workSheet[$"A{i}"].Value = $"P{i-1:D3}";
    workSheet[$"B{i}"].Value = $"Product {i-1}";
    workSheet[$"C{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"D{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"E{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"F{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"G{i}"].Formula = $"=SUM(C{i}:F{i})";
}

// Apply freeze pane to keep headers visible
workSheet.CreateFreezePane(0, 1);

// Auto-size columns for better visibility
workSheet.AutoSizeColumn(0, 6);

// Save the workbook
workBook.SaveAs("SalesReportWithFreezePanes.xlsx");
using IronXL;
using IronXl.Styles;

// Create a new workbook
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("Sales Report");

// Add headers
workSheet["A1"].Value = "Product ID";
workSheet["B1"].Value = "Product Name";
workSheet["C1"].Value = "Q1 Sales";
workSheet["D1"].Value = "Q2 Sales";
workSheet["E1"].Value = "Q3 Sales";
workSheet["F1"].Value = "Q4 Sales";
workSheet["G1"].Value = "Total";

// Style headers
var headerRange = workSheet["A1:G1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.Color = "#FFFFFF";

// Add sample data
for (int i = 2; i <= 50; i++)
{
    workSheet[$"A{i}"].Value = $"P{i-1:D3}";
    workSheet[$"B{i}"].Value = $"Product {i-1}";
    workSheet[$"C{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"D{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"E{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"F{i}"].Value = Random.Shared.Next(1000, 5000);
    workSheet[$"G{i}"].Formula = $"=SUM(C{i}:F{i})";
}

// Apply freeze pane to keep headers visible
workSheet.CreateFreezePane(0, 1);

// Auto-size columns for better visibility
workSheet.AutoSizeColumn(0, 6);

// Save the workbook
workBook.SaveAs("SalesReportWithFreezePanes.xlsx");
Imports IronXL
Imports IronXl.Styles

' Create a new workbook
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Sales Report")

' Add headers
workSheet("A1").Value = "Product ID"
workSheet("B1").Value = "Product Name"
workSheet("C1").Value = "Q1 Sales"
workSheet("D1").Value = "Q2 Sales"
workSheet("E1").Value = "Q3 Sales"
workSheet("F1").Value = "Q4 Sales"
workSheet("G1").Value = "Total"

' Style headers
Dim headerRange = workSheet("A1:G1")
headerRange.Style.Font.Bold = True
headerRange.Style.BackgroundColor = "#4472C4"
headerRange.Style.Font.Color = "#FFFFFF"

' Add sample data
For i As Integer = 2 To 50
    workSheet($"A{i}").Value = $"P{i - 1:D3}"
    workSheet($"B{i}").Value = $"Product {i - 1}"
    workSheet($"C{i}").Value = Random.Shared.Next(1000, 5000)
    workSheet($"D{i}").Value = Random.Shared.Next(1000, 5000)
    workSheet($"E{i}").Value = Random.Shared.Next(1000, 5000)
    workSheet($"F{i}").Value = Random.Shared.Next(1000, 5000)
    workSheet($"G{i}").Formula = $"=SUM(C{i}:F{i})"
Next

' Apply freeze pane to keep headers visible
workSheet.CreateFreezePane(0, 1)

' Auto-size columns for better visibility
workSheet.AutoSizeColumn(0, 6)

' Save the workbook
workBook.SaveAs("SalesReportWithFreezePanes.xlsx")
$vbLabelText   $csharpLabel

此範例展示如何透過"凍結區塊"功能,結合儲存格樣式公式,來建立Professional報表。 當使用者捲動瀏覽這 50 行銷售資料時,標題列將保持可見。

效能考量

在大型試算表中實施"凍結欄位"時:

  • 填入資料後請凍結工作表,以獲得最佳效能
  • 建議使用條件格式化功能,在固定區塊中突顯重要資料
  • 請使用目標資料量進行測試,以確保捲動效能流暢

對於處理大量資料集的應用程式,建議探索將資料匯出為不同格式,或搭配"凍結窗格"功能來實作分頁策略。

請注意僅能套用一個凍結窗格設定。 任何新增的"凍結窗格"設定都會覆寫先前設定。 "凍結工作表"功能不適用於 Microsoft Excel 97-2003 版本 (.xls)。

常見問題

何謂「凍結窗格」功能?它在 Excel 試算表中為何如此實用?

「凍結區塊」功能可將特定列與欄位固定在原位,讓使用者在捲動大型試算表時仍能持續看見這些內容。此功能對於在財務報表、員工資料庫或庫存清單中維持標題的可見性特別有用。IronXL 提供一個簡單的 CreateFreezePane 方法,讓開發者能在 C# 應用程式中透過程式碼實作此功能。

如何在 C# 中快速新增「凍結欄位」以鎖定標題列?

透過 IronXL,您只需一行程式碼,即可使用 CreateFreezePane 方法鎖定標題列。只需呼叫 workSheet.CreateFreezePane(1, 4) 即可凍結列與行。此操作會將 A 列與第 1 至 4 行固定在原位,同時允許試算表的其餘部分自由捲動。

在 CreateFreezePane 函式中,使用 2 個參數與 4 個參數有何差異?

IronXL 的 CreateFreezePane 方法提供兩種選項:使用 2 個參數(colSplit、rowSplit)可在指定位置建立基本的固定區塊;而使用 4 個參數則可新增預先捲動定位的固定區塊,以便對檢視區域進行更進階的控制。

在設定凍結窗格時,零基索引是如何運作的?

在 IronXL 的 CreateFreezePane 方法中,索引採用零起始制。第 0 欄指 A 欄,第 1 欄指 B 欄,依此類推。同樣地,列索引也從 0 開始。例如,CreateFreezePane(1, 4) 會建立一個從 A 欄開始、包含第 1 至 4 行的固定區塊。

為什麼我應該使用這個函式庫,而不是 Excel Interop 來凍結工作表區塊?

相較於 Excel Interop 解決方案,IronXL 提供更高效且更適合伺服器環境的解決方案。它無需在伺服器上安裝 Excel,針對大型資料集提供更佳的效能,並提供直覺的 API,該 API 不僅模擬 Excel 的原生功能,同時針對 .NET 應用程式進行了優化。

我可以將設有「凍結欄位」的試算表匯出為不同檔案格式嗎?

是的,在使用 IronXL 的 CreateFreezePane 方法設定「凍結區塊」後,您可以將試算表匯出為各種檔案格式,同時保留凍結區塊的功能。當儲存為受支援的 Excel 格式時,IronXL程式庫會保留這些設定。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 2,052,917 | 版本: 2026.6 just released
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronXL.Excel
執行範例 觀看您的資料變成試算表。