如何在 C# 中管理 Excel 命名範圍

如何在 C# 中使用 IronXL 新增命名範圍

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

命名範圍是指透過唯一名稱來識別的指定儲存格範圍。 與其透過儲存格位址(例如 A1:B10)來指定範圍,您也可以為範圍指定名稱,這樣在公式和函數中便更容易引用和理解。 例如,若您將一個範圍命名為"SalesData",您可以在公式中使用 SUM(SalesData) 來引用它,而非直接指定儲存格範圍。

在 C# 中使用 Excel 公式時,命名範圍特別有用,因為它們能讓您的程式碼更易於閱讀和維護。 當結合 IronXL 強大的範圍選取功能時,命名範圍便成為高效管理試算表的必備工具。

快速入門:使用 IronXL 在一行內新增命名範圍

使用 IronXL 僅需一次方法呼叫即可定義命名範圍。 請選擇您的範圍並套用 SaveAsNamedRange 方法。

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

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

    new IronXl.WorkBook()
        .DefaultWorkSheet["A1:B2"].SaveAsNamedRange("MyRange", true);
  3. 部署至您的生產環境進行測試

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

    arrow pointer


如何在工作表中新增命名範圍?

若要新增命名範圍,請使用 AddNamedRange 方法,並將命名範圍的名稱作為文字及範圍物件傳入。 此方法是 IronXl.Excel 全面工作表管理功能的一部分。

:path=/static-assets/excel/content-code-examples/how-to/named-range-add-named-range.cs
using IronXL;

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Select range
var selectedRange = workSheet["A1:A5"];

// Add named range
workSheet.AddNamedRange("range1", selectedRange);

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

Private workBook As WorkBook = WorkBook.Create()
Private workSheet As WorkSheet = workBook.DefaultWorkSheet

' Select range
Private selectedRange = workSheet("A1:A5")

' Add named range
workSheet.AddNamedRange("range1", selectedRange)

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

建立命名範圍時,務必遵循 Excel 的命名規範:

  • 名稱必須以字母或下劃線開頭
  • 名稱中不得包含空格(請改用底線代替)
  • 名稱不得與儲存格參照(如"A1"或"R1C1")產生衝突
  • 名稱不區分大小寫,但保持大小寫一致性可提升可讀性
Excel 名稱方塊顯示

命名範圍亦可用於非連續的選取範圍,或整個列/整行。 若需處理更複雜的範圍操作,請參閱關於合併多個 Excel 範圍的指南。


如何從工作簿中擷取命名範圍?

哪個方法能一次取得所有命名範圍?

GetNamedRanges 方法會將工作表中的所有命名範圍以字串清單的形式傳回。 當您需要審核或文件工作簿中所有命名範圍時,此功能特別實用,類似於您載入現有試算表以分析其結構的方式。

:path=/static-assets/excel/content-code-examples/how-to/named-range-retrieve-all-named-range.cs
using IronXL;

WorkBook workBook = WorkBook.Load("addNamedRange.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Get all named range
var namedRangeList = workSheet.GetNamedRanges();
Imports IronXL

Private workBook As WorkBook = WorkBook.Load("addNamedRange.xlsx")
Private workSheet As WorkSheet = workBook.DefaultWorkSheet

' Get all named range
Private namedRangeList = workSheet.GetNamedRanges()
$vbLabelText   $csharpLabel

如何根據名稱查找特定的命名範圍?

請使用 FindNamedRange 方法來取得命名範圍的絕對參照,例如 Sheet1!$A$1:$A$5。 隨後可使用該地址公式來引用命名範圍,或選取與該命名範圍對應的範圍。 選擇範圍時,請注意工作表名稱。

:path=/static-assets/excel/content-code-examples/how-to/named-range-retrieve-specific-named-range.cs
using IronXL;

WorkBook workBook = WorkBook.Load("addNamedRange.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Get named range address
string namedRangeAddress = workSheet.FindNamedRange("range1");

// Select range
var range = workSheet[$"{namedRangeAddress}"];
Imports IronXL

Private workBook As WorkBook = WorkBook.Load("addNamedRange.xlsx")
Private workSheet As WorkSheet = workBook.DefaultWorkSheet

' Get named range address
Private namedRangeAddress As String = workSheet.FindNamedRange("range1")

' Select range
Private range = workSheet($"{namedRangeAddress}")
$vbLabelText   $csharpLabel

跨多個工作表使用命名範圍

命名範圍可具有工作簿層級或工作表層級的範圍。 工作簿層級的名稱可在任何工作表中存取,而工作表層級的名稱則僅限於其特定工作表內存取。 在管理 Excel 檔案中的多個工作表時,此區別至關重要。

// Example: Accessing named ranges from different worksheets
WorkBook workBook = WorkBook.Load("multisheet.xlsx");
WorkSheet sheet1 = workBook.GetWorkSheet("Sheet1");
WorkSheet sheet2 = workBook.GetWorkSheet("Sheet2");

// Both can access a workbook-level named range
var range1 = sheet1["GlobalData"];
var range2 = sheet2["GlobalData"];  // Same named range
// Example: Accessing named ranges from different worksheets
WorkBook workBook = WorkBook.Load("multisheet.xlsx");
WorkSheet sheet1 = workBook.GetWorkSheet("Sheet1");
WorkSheet sheet2 = workBook.GetWorkSheet("Sheet2");

// Both can access a workbook-level named range
var range1 = sheet1["GlobalData"];
var range2 = sheet2["GlobalData"];  // Same named range
Imports System

' Example: Accessing named ranges from different worksheets
Dim workBook As WorkBook = WorkBook.Load("multisheet.xlsx")
Dim sheet1 As WorkSheet = workBook.GetWorkSheet("Sheet1")
Dim sheet2 As WorkSheet = workBook.GetWorkSheet("Sheet2")

' Both can access a workbook-level named range
Dim range1 = sheet1("GlobalData")
Dim range2 = sheet2("GlobalData")  ' Same named range
$vbLabelText   $csharpLabel

如何從工作表中移除命名範圍?

若要移除命名範圍,請使用 RemoveNamedRange 方法,並將命名範圍名稱作為文字傳入。 這對於維持工作簿的整潔有序,以及在更新試算表結構時避免名稱衝突至關重要。

:path=/static-assets/excel/content-code-examples/how-to/named-range-remove-named-range.cs
using IronXL;

WorkBook workBook = WorkBook.Load("addNamedRange.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Remove named range
workSheet.RemoveNamedRange("range1");
Imports IronXL

Private workBook As WorkBook = WorkBook.Load("addNamedRange.xlsx")
Private workSheet As WorkSheet = workBook.DefaultWorkSheet

' Remove named range
workSheet.RemoveNamedRange("range1")
$vbLabelText   $csharpLabel

進階命名範圍情境

在公式中使用命名範圍

命名範圍在搭配 Excel 公式使用時,更能展現其優勢。 它們使公式更易於閱讀且更易於維護。 如需全面的公式管理指南,請參閱 C# 中的 Excel 公式指南。

// Create named ranges for formula use
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Create sample data
workSheet["A1:A5"].Value = new int[] { 10, 20, 30, 40, 50 };
workSheet["B1:B5"].Value = new int[] { 5, 10, 15, 20, 25 };

// Add named ranges
workSheet.AddNamedRange("FirstColumn", workSheet["A1:A5"]);
workSheet.AddNamedRange("SecondColumn", workSheet["B1:B5"]);

// Use named ranges in formulas
workSheet["D1"].Formula = "=SUM(FirstColumn)";
workSheet["D2"].Formula = "=AVERAGE(SecondColumn)";
workSheet["D3"].Formula = "=SUM(FirstColumn) + SUM(SecondColumn)";

// Evaluate formulas
workSheet.EvaluateAll();
// Create named ranges for formula use
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Create sample data
workSheet["A1:A5"].Value = new int[] { 10, 20, 30, 40, 50 };
workSheet["B1:B5"].Value = new int[] { 5, 10, 15, 20, 25 };

// Add named ranges
workSheet.AddNamedRange("FirstColumn", workSheet["A1:A5"]);
workSheet.AddNamedRange("SecondColumn", workSheet["B1:B5"]);

// Use named ranges in formulas
workSheet["D1"].Formula = "=SUM(FirstColumn)";
workSheet["D2"].Formula = "=AVERAGE(SecondColumn)";
workSheet["D3"].Formula = "=SUM(FirstColumn) + SUM(SecondColumn)";

// Evaluate formulas
workSheet.EvaluateAll();
' Create named ranges for formula use
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

' Create sample data
workSheet("A1:A5").Value = New Integer() {10, 20, 30, 40, 50}
workSheet("B1:B5").Value = New Integer() {5, 10, 15, 20, 25}

' Add named ranges
workSheet.AddNamedRange("FirstColumn", workSheet("A1:A5"))
workSheet.AddNamedRange("SecondColumn", workSheet("B1:B5"))

' Use named ranges in formulas
workSheet("D1").Formula = "=SUM(FirstColumn)"
workSheet("D2").Formula = "=AVERAGE(SecondColumn)"
workSheet("D3").Formula = "=SUM(FirstColumn) + SUM(SecondColumn)"

' Evaluate formulas
workSheet.EvaluateAll()
$vbLabelText   $csharpLabel

動態命名範圍

雖然 IronXL 並不直接支援 Excel 的動態命名範圍(使用 OFFSET 或 INDEX 函數),但您可以根據資料變更,透過程式設計方式更新命名範圍:

// Update named range based on data size
WorkBook workBook = WorkBook.Load("dynamicData.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Find last row with data
int lastRow = 1;
while (!workSheet[$"A{lastRow}"].IsEmpty)
{
    lastRow++;
}
lastRow--; // Adjust to actual last row

// Remove old range and add new one
workSheet.RemoveNamedRange("DataRange");
workSheet.AddNamedRange("DataRange", workSheet[$"A1:A{lastRow}"]);
// Update named range based on data size
WorkBook workBook = WorkBook.Load("dynamicData.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Find last row with data
int lastRow = 1;
while (!workSheet[$"A{lastRow}"].IsEmpty)
{
    lastRow++;
}
lastRow--; // Adjust to actual last row

// Remove old range and add new one
workSheet.RemoveNamedRange("DataRange");
workSheet.AddNamedRange("DataRange", workSheet[$"A1:A{lastRow}"]);
Imports IronXL

' Update named range based on data size
Dim workBook As WorkBook = WorkBook.Load("dynamicData.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

' Find last row with data
Dim lastRow As Integer = 1
While Not workSheet($"A{lastRow}").IsEmpty
    lastRow += 1
End While
lastRow -= 1 ' Adjust to actual last row

' Remove old range and add new one
workSheet.RemoveNamedRange("DataRange")
workSheet.AddNamedRange("DataRange", workSheet($"A1:A{lastRow}"))
$vbLabelText   $csharpLabel

用於資料驗證的名稱範圍

命名範圍非常適合用於建立資料驗證清單與限制條件。 結合 Excel 的資料驗證功能,這些工具能提供確保資料完整性的強大解決方案:

// Create a named range for validation list
workSheet["F1:F5"].Value = new string[] { "Option1", "Option2", "Option3", "Option4", "Option5" };
workSheet.AddNamedRange("ValidationList", workSheet["F1:F5"]);

// Apply to data validation (conceptual example)
// The actual validation would reference "ValidationList"
// Create a named range for validation list
workSheet["F1:F5"].Value = new string[] { "Option1", "Option2", "Option3", "Option4", "Option5" };
workSheet.AddNamedRange("ValidationList", workSheet["F1:F5"]);

// Apply to data validation (conceptual example)
// The actual validation would reference "ValidationList"
' Create a named range for validation list
workSheet("F1:F5").Value = New String() {"Option1", "Option2", "Option3", "Option4", "Option5"}
workSheet.AddNamedRange("ValidationList", workSheet("F1:F5"))

' Apply to data validation (conceptual example)
' The actual validation would reference "ValidationList"
$vbLabelText   $csharpLabel

最佳實務與效能建議

  1. 命名規範:使用能說明資料用途且具一致性的描述性名稱(例如 Sales_Q1_2024 而非"Data1")
  2. 範圍管理:請明確區分工作簿與工作表的範圍,以避免衝突
  3. 文件說明:請列出命名範圍及其用途,特別是在複雜的工作簿中
  4. 效能:命名範圍對效能的影響極小,但應避免建立數千個微小的命名範圍
  5. 更新:當資料結構變更時,請更新或移除對應的命名範圍以確保準確性

若需進行更進階的 Excel 操作與效能優化,請參閱完整的 IronXL 文件,或探索特定功能,例如排序 Excel 範圍處理 Excel 表格

常見問題

如何使用 C# 在 Excel 中建立命名範圍?

若要使用 C# 和 IronXL 在 Excel 中建立命名範圍,請透過工作表索引器選取目標範圍(例如:workSheet["A1:B2")),然後呼叫 SaveAsNamedRange 方法並指定所需名稱。您也可以使用 AddNamedRange 方法,將名稱作為文字參數傳入,並傳遞範圍物件。

Excel 命名範圍的名稱規則為何?

using IronXL 建立命名範圍時,請遵循以下 Excel 命名規範:名稱必須以字母或底線開頭,不得包含空格(請改用底線代替),不得與「A1」等儲存格參照衝突,且不區分大小寫。當您建立命名範圍時,IronXL 會自動執行這些規則。

我能否透過程式設計從 Excel 工作簿中擷取所有命名範圍?

是的,IronXL 提供了 GetNamedRanges 方法,該方法會將工作表中的所有命名範圍以字串清單的形式傳回。此功能在審核或記錄透過 IronXL 載入之現有工作簿中的命名範圍時,特別有用。

在 C# 中,命名範圍如何改善我的 Excel 公式?

在使用 IronXL.Excel 時,命名範圍能讓 Excel 公式更易於閱讀與維護。您無需在公式中使用「A1:B10」這類儲存格參照,而是可以使用「SalesData」這類描述性名稱,使您的 C# 程式碼更清晰易懂。

是否可以為非連續的儲存格建立命名範圍?

是的,IronXL 支援為非連續選取範圍以及整行或整列建立命名範圍。IronXL程式庫全面的工作表管理功能,讓您能夠定義超越簡單矩形選取範圍的複雜命名範圍。

如何以一行程式碼最快速地新增命名範圍?

透過 IronXL,您可以使用以下程式碼在一行內建立命名範圍:new IronXl.WorkBook().DefaultWorkSheet["A1:B2"].SaveAsNamedRange("MyRange", true)。這展示了 IronXL 用於 Excel 操作的簡潔 API。

如何從 Excel 試算表中移除命名範圍?

IronXL 提供 RemoveNamedRange 方法,可輕鬆從工作表中刪除命名範圍。此功能屬於該程式庫完整的命名範圍管理功能之一,讓您能夠透過程式設計方式新增、擷取及移除命名範圍。

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
執行範例 觀看您的資料變成試算表。