如何在 C# 中建立一個 Excel 文件

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

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

在50行以上或超過Z列的大型Excel試算表中,進行資料查看時保持標題可見變得具有挑戰性。 C#中的凍結窗格功能提供了一個優雅的解決方案,通過鎖定特定的行和列,同時允許其餘部分自由滾動。

在處理財務報表、員工資料庫或庫存清單時,需要持續查看列標題或行識別符,這個功能變得至關重要。 使用IronXL的Excel程式庫,您可以編程新增凍結窗格,以改善資料導航和使用者體驗於您的.NET應用程式

快速開始:一行程式碼鎖定標題行和列

使用簡單的CreateFreezePane(colSplit, rowSplit)方法在幾秒鐘內凍結行或列。 無需複雜設置 —— 只需載入您的工作表,調用此方法,並且您的標題將在滾動時保持鎖定在頂部。

  1. 使用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方法,指定凍結窗格應從中開始的列和行。 指定的列和行不包含在凍結窗格中。 例如,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

凍結窗格在實際中看起來是什麼樣子?

凍結窗格實際運作

如何刪除凍結窗格?

使用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報告時特別受益,您需要對初始視圖進行精確控制。

例如,使用rows 1-2的凍結窗格。 它包括1列和5行的滾動。 當工作表打開時,它顯示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公式一起使用時,凍結窗格能顯著提升資料分析效率。

完整範例:使用凍結窗格構建資料報告

這是一個全面的例子,展示如何建立帶有凍結窗格的格式化報告:

:path=/static-assets/excel/content-code-examples/how-to/add-freeze-panes-5.cs
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
for (int col = 0; col <= 6; col++)
{
    workSheet.AutoSizeColumn(col);
}

// 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
For col As Integer = 0 To 6
    workSheet.AutoSizeColumn(col)
Next

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

此範例演示了如何配合儲存格樣式公式運作建立專業報告。 當使用者滾動瀏覽50行的銷售資料時,標題行始終保持可見。

性能考量

在大型試算表中實現凍結窗格時:

  • 在填充資料後應用凍結窗格以獲得最佳性能
  • 考慮使用條件格式化來突出顯示凍結部分的重要資料
  • 使用您的目標資料量進行測試,以確保平滑的滾動性能

對於處理大量資料集的應用程式,請探索導出到不同格式或在凍結窗格旁邊實施分頁策略。

請注意只能應用一個凍結窗格設置。 任何其他的凍結窗格建立都會覆蓋之前的。 凍結窗格不適用於Microsoft Excel版本97-2003 (.xls)。)]

常見問題

什麼是凍結窗格功能,為什麼它在 Excel 試算表中有用?

凍結窗格功能將特定的行和列鎖定在原位,讓它們在大規模試算表中滾動時保持可見。這對於在財務報告、員工資料庫或者庫存清單中保持標題的可見性特別有用。IronXL 提供了一個簡單的 CreateFreezePane 方法,以便在 C# 應用程式中程式化實現該功能。

如何在 C# 中快速新增凍結窗格以鎖定標題行?

借助 IronXL,您可以使用 CreateFreezePane 方法僅用一行程式碼鎖定標題行。簡單地呼叫 workSheet.CreateFreezePane(1, 4) 來凍結列和行。這將鎖定 A 列和 1-4 行,允許其他部分自由滾動。

using CreateFreezePane 的兩個參數與四個參數有什麼不同?

IronXL 的 CreateFreezePane 方法提供兩個選項:使用兩個參數(colSplit, rowSplit)從指定的位置建立一個基本的凍結窗格,而使用四個參數則允許您新增具有預先滾動定位的凍結窗格,提供對視圖區域的更高級控制。

當設置凍結窗格時,零起始索引是如何工作的?

在 IronXL 的 CreateFreezePane 方法中,索引是從零開始的。列 0 代表 A 列,列 1 代表 B 列,依此類推。同樣,行的索引從 0 開始。例如,CreateFreezePane(1, 4) 建立一個從 A 列和包括 1 到 4 行的凍結窗格。

為什麼我應該使用這個程式庫而不是 Excel Interop 來處理凍結窗格?

相比 Excel Interop 解決方案,IronXL 提供了一個更高效且更友好的伺服器解決方案。它不需要在伺服器上安裝 Excel, 提供對大型資料集更好的性能,並提供一個直觀的 API,模仿 Excel 的原生功能,同時適用於 .NET 應用程式。

我可以將具有凍結窗格的試算表匯出為不同的文件格式嗎?

可以,在使用 IronXL 的 CreateFreezePane 方法新增凍結窗格後,您可以將您的試算表匯出為各種文件格式,同時保留凍結窗格的功能。該程式庫在保存為支持的 Excel 格式時會保留這些設置。

Curtis Chau
技術作家

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

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

準備好開始了嗎?
Nuget 下載 2,134,203 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

仍在滾動嗎?

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