如何在 C# 中管理 Excel 工作表

如何在不使用 Interop 的情況下於 C# 中管理工作表

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

IronXL 讓您無需使用 Office Interop 即可在 C# 中管理試算表,透過簡單的函式呼叫,即可建立、刪除、移動及複製試算表。 此函式庫在消除 Interop 依賴項的同時,提供對 Excel 工作表操作的完整程式化控制。

快速入門:立即新增工作表

此範例展示如何僅用一行程式碼(無需重複的常規程式碼,也無需 Interop)透過 IronXL 建立新工作表,讓您能在 C# 中立即管理 Excel 工作簿。

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

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

    IronXl.WorkBook wb = IronXl.WorkBook.Create(ExcelFileFormat.XLSX).CreateWorkSheet("NewSheet");
  3. 部署至您的生產環境進行測試

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

    arrow pointer

工作表管理的基本操作有哪些?

管理工作表需要具備建立、移動及刪除工作表的能力。 IronXL 僅需一行程式碼即可完成各項操作。 與傳統的 C# Excel 互通方法不同,IronXL 提供更簡潔的 API,無需管理 COM 物件或進行明確的資源清理。

請注意以下提及的所有索引位置均採用零起始索引

為何零基索引對工作表操作如此重要?

零基索引表示第一個工作表位於位置 0,而非 1。此慣例與 C# 陣列和集合的索引方式一致,對開發人員而言更直觀。 在管理多個工作表時,牢記這一點可避免"偏移一個位元組"的錯誤,此類錯誤可能導致操作錯誤的工作表,或引發越界例外。

何時該使用哪種試算表管理方法?

不同的情境需要不同的試算表操作。 在生成報告或按類別整理資料時,請使用 。 在建立資料呈現的邏輯流程時,請套用。 `` 方法有助於清理臨時工作表或整合資料。 了解何時使用每種方法,有助於改善工作簿的組織架構與使用者體驗。

管理多個工作表時常見哪些陷阱?

常見錯誤包括嘗試刪除所有工作表(Excel 至少需要保留一張)、建立工作表時使用重複名稱,以及在操作後忘記儲存變更。 此外,在載入現有試算表時,執行操作前務必先驗證工作表是否存在,以避免發生執行時例外。

如何建立新的工作表?

`` 方法會建立一個新的工作表。 它僅需工作表名稱作為唯一參數。 此方法會傳回所建立的工作表物件,讓您能在建立後立即執行合併儲存格等後續操作。

如果我使用重複的工作表名稱會發生什麼情況?

當您嘗試建立名稱已存在的試算表時,IronXL 會自動在名稱後方加上數字,以確保其唯一性。 例如,若"Sheet1"已存在,建立新工作表時會自動命名為"Sheet1_1"。 此自動重新命名功能可避免衝突,並確保您的程式碼能持續執行而不拋出例外。

建立工作表後,該如何串接操作?

由於 ` 會傳回WorkSheet` 物件,您可以透過操作鏈來實現高效編碼。 此流暢介面模式讓您能夠建立工作表,並立即執行諸如設定儲存格值、套用格式或處理範圍等操作。 以下為範例:

// Create and immediately populate a worksheet
WorkSheet newSheet = workBook.CreateWorkSheet("Sales Data")
    .SetCellValue("A1", "Product")
    .SetCellValue("B1", "Revenue");

// Apply formatting
newSheet["A1:B1"].Style.Font.Bold = true;
newSheet["A1:B1"].Style.BackgroundColor = "#4472C4";
// Create and immediately populate a worksheet
WorkSheet newSheet = workBook.CreateWorkSheet("Sales Data")
    .SetCellValue("A1", "Product")
    .SetCellValue("B1", "Revenue");

// Apply formatting
newSheet["A1:B1"].Style.Font.Bold = true;
newSheet["A1:B1"].Style.BackgroundColor = "#4472C4";
' Create and immediately populate a worksheet
Dim newSheet As WorkSheet = workBook.CreateWorkSheet("Sales Data") _
    .SetCellValue("A1", "Product") _
    .SetCellValue("B1", "Revenue")

' Apply formatting
newSheet("A1:B1").Style.Font.Bold = True
newSheet("A1:B1").Style.BackgroundColor = "#4472C4"
$vbLabelText   $csharpLabel

工作表的名稱規範為何?

Excel 工作表名稱長度必須在 1 至 31 個字元之間,且不得包含以下字元:\ / ? * [ ]. 此外,名稱不得為空,亦不得僅由空格組成。 IronXL 會自動驗證名稱,若偵測到無效字元則拋出例外,有助於維持與 Excel 的相容性。

:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-create-worksheet.cs
using IronXL;

// Create new Excel spreadsheet
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);

// Create worksheets
WorkSheet workSheet1 = workBook.CreateWorkSheet("workSheet1");
WorkSheet workSheet2 = workBook.CreateWorkSheet("workSheet2");
WorkSheet workSheet3 = workBook.CreateWorkSheet("workSheet3");
WorkSheet workSheet4 = workBook.CreateWorkSheet("workSheet4");


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

' Create new Excel spreadsheet
Private workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)

' Create worksheets
Private workSheet1 As WorkSheet = workBook.CreateWorkSheet("workSheet1")
Private workSheet2 As WorkSheet = workBook.CreateWorkSheet("workSheet2")
Private workSheet3 As WorkSheet = workBook.CreateWorkSheet("workSheet3")
Private workSheet4 As WorkSheet = workBook.CreateWorkSheet("workSheet4")


workBook.SaveAs("createNewWorkSheets.xlsx")
$vbLabelText   $csharpLabel
顯示工作表 1 至 4 的 Excel 工作表標籤,並附有 Plus 按鈕以建立新工作表

如何變更工作表位置?

方法用於變更工作表的位置。 它需要兩個參數:工作表名稱(格式為)及其索引位置(格式為 ``)。

為什麼我需要重新排列工作表?

重新排列工作表可建立邏輯性的資料流,並提升導覽便利性。 針對財務報告,建議先放置摘要表,再接續詳細明細。 在專案追蹤工作簿中,依時間順序或部門分類工作表,有助於使用者快速查找資訊。 在製作供商業用途的專業試算表時,這種組織方式至關重要。

當我變更位置時,其他工作表會發生什麼情況?

當您移動工作表時,IronXL 會自動調整其他工作表的位置,以維持版面連貫性。 將工作表從位置 3 移動到位置 0,會將位置 0、1 和 2 的工作表向右 Shift 一個位置。 此自動重新索引功能可確保工作表排序無任何缺漏。

如何將工作表移至最前或最後?

移動到起始位置很簡單——使用位置 0。若要移動到結尾,請使用工作簿的工作表總數減去 1。以下是一個實際範例:

// Move worksheet to the beginning
workBook.SetSheetPosition("ImportantSheet", 0);

// Move worksheet to the end
int lastPosition = workBook.WorkSheets.Count - 1;
workBook.SetSheetPosition("ArchiveSheet", lastPosition);
// Move worksheet to the beginning
workBook.SetSheetPosition("ImportantSheet", 0);

// Move worksheet to the end
int lastPosition = workBook.WorkSheets.Count - 1;
workBook.SetSheetPosition("ArchiveSheet", lastPosition);
' Move worksheet to the beginning
workBook.SetSheetPosition("ImportantSheet", 0)

' Move worksheet to the end
Dim lastPosition As Integer = workBook.WorkSheets.Count - 1
workBook.SetSheetPosition("ArchiveSheet", lastPosition)
$vbLabelText   $csharpLabel
:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-set-sheet-position.cs
using IronXL;

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

// Set worksheet position
workBook.SetSheetPosition("workSheet2", 0);

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

Private workBook As WorkBook = WorkBook.Load("createNewWorkSheets.xlsx")

' Set worksheet position
workBook.SetSheetPosition("workSheet2", 0)

workBook.SaveAs("setWorksheetPosition.xlsx")
$vbLabelText   $csharpLabel
Excel 工作表標籤顯示 workSheet1 在四個標籤中從第一位移至第三位

如何設定活動工作表?

設定"工作表"可指定當工作簿首次在 Excel 或其他視覺化工具中開啟時,預設開啟的工作表。 請使用 `` 方法,並指定工作表的索引位置。

為何設定"目前工作表"很重要?

工作簿開啟時,系統會根據當前的工作表決定使用者首先看到的内容。 這第一印象對於儀表板、報告及資料輸入表單至關重要。 透過設定適當的"工作表",您可以立即引導使用者至最相關的資訊,從而提升多工作表工作簿的易用性並減少混淆。

"目前工作表"與"選取的工作表"有何區別?

"工作表"是指目前顯示且可供互動的當前工作表。 選取的工作表可以是多張工作表,用於執行格式設定或刪除等群組操作。 IronXL 的 `` 方法可精確控制檔案開啟時顯示的單一工作表,而在執行批次操作時,工作表的選取則透過其他方法處理。

如何判斷目前哪個工作表處於活動狀態?

IronXL 提供用於識別當前活躍工作表的屬性。 這在您需要於執行操作前保留當前狀態,或驗證將顯示哪張工作表時非常有用。 您亦可於讀取 Excel 檔案時,利用此資訊來理解工作簿的預設檢視:

// Get the currently active worksheet index
int activeIndex = workBook.ActiveSheetIndex;

// Get the active worksheet object
WorkSheet activeSheet = workBook.WorkSheets[activeIndex];
Console.WriteLine($"Active worksheet: {activeSheet.Name}");
// Get the currently active worksheet index
int activeIndex = workBook.ActiveSheetIndex;

// Get the active worksheet object
WorkSheet activeSheet = workBook.WorkSheets[activeIndex];
Console.WriteLine($"Active worksheet: {activeSheet.Name}");
' Get the currently active worksheet index
Dim activeIndex As Integer = workBook.ActiveSheetIndex

' Get the active worksheet object
Dim activeSheet As WorkSheet = workBook.WorkSheets(activeIndex)
Console.WriteLine($"Active worksheet: {activeSheet.Name}")
$vbLabelText   $csharpLabel
:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-set-active-tab.cs
using IronXL;

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

// Set active for workSheet3
workBook.SetActiveTab(2);

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

Private workBook As WorkBook = WorkBook.Load("createNewWorkSheets.xlsx")

' Set active for workSheet3
workBook.SetActiveTab(2)

workBook.SaveAs("setActiveTab.xlsx")
$vbLabelText   $csharpLabel
前後對比:顯示 Excel 工作表標籤,當工作表 1 處於活動狀態時,變更為工作表 3 處於活動狀態

如何刪除工作表?

使用 `` 方法並指定工作表的索引位置來移除工作表。 若職位名稱未知,請改用工作表名稱。

如果我嘗試刪除最後一個工作表會發生什麼事?

Excel 工作簿中至少需要包含一個工作表。 若您嘗試刪除最後剩餘的工作表,IronXL 會拋出例外狀況以維持 Excel 檔案的完整性。 在移除工作表前請務必先檢查工作表數量,或將刪除程式碼包覆在適當的錯誤處理機制中:

// Safe worksheet removal with validation
if (workBook.WorkSheets.Count > 1)
{
    workBook.RemoveWorkSheet("TempSheet");
}
else
{
    Console.WriteLine("Cannot remove the last worksheet");
}
// Safe worksheet removal with validation
if (workBook.WorkSheets.Count > 1)
{
    workBook.RemoveWorkSheet("TempSheet");
}
else
{
    Console.WriteLine("Cannot remove the last worksheet");
}
' Safe worksheet removal with validation
If workBook.WorkSheets.Count > 1 Then
    workBook.RemoveWorkSheet("TempSheet")
Else
    Console.WriteLine("Cannot remove the last worksheet")
End If
$vbLabelText   $csharpLabel

如何有效率地刪除多個工作表?

在移除多個工作表時,請從最高索引開始倒序操作,以避免索引位移的問題。 或者,可先收集工作表名稱,再根據名稱進行移除。 此方法在清理臨時工作表或整合資料時特別有用:

// Remove multiple worksheets by collecting names first
var sheetsToRemove = workBook.WorkSheets
    .Where(ws => ws.Name.StartsWith("Temp_"))
    .Select(ws => ws.Name)
    .ToList();

foreach (var sheetName in sheetsToRemove)
{
    workBook.RemoveWorkSheet(sheetName);
}
// Remove multiple worksheets by collecting names first
var sheetsToRemove = workBook.WorkSheets
    .Where(ws => ws.Name.StartsWith("Temp_"))
    .Select(ws => ws.Name)
    .ToList();

foreach (var sheetName in sheetsToRemove)
{
    workBook.RemoveWorkSheet(sheetName);
}
Imports System.Linq

' Remove multiple worksheets by collecting names first
Dim sheetsToRemove = workBook.WorkSheets _
    .Where(Function(ws) ws.Name.StartsWith("Temp_")) _
    .Select(Function(ws) ws.Name) _
    .ToList()

For Each sheetName In sheetsToRemove
    workBook.RemoveWorkSheet(sheetName)
Next
$vbLabelText   $csharpLabel

刪除工作表前有哪些安全檢查?

在刪除工作表之前,請確認其不包含關鍵資料、其他工作表所引用的公式,或工作簿其他部分所依賴的命名範圍。 請考慮在刪除前建立備份或複製工作表,以利日後資料復原。

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

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

// Remove workSheet1
workBook.RemoveWorkSheet(1);

// Remove workSheet2
workBook.RemoveWorkSheet("workSheet2");

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

Private workBook As WorkBook = WorkBook.Load("createNewWorkSheets.xlsx")

' Remove workSheet1
workBook.RemoveWorkSheet(1)

' Remove workSheet2
workBook.RemoveWorkSheet("workSheet2")

workBook.SaveAs("removeWorksheet.xlsx")
$vbLabelText   $csharpLabel
展示工作表移除前後的 Excel 螢幕截圖——從四個工作表標籤減少為兩個

如何複製或複製工作表?

在同一工作簿內或跨不同工作簿複製工作表。 若要在同一工作簿內複製,請使用 方法。 若要複製到其他工作簿,請使用 方法。

何時應在工作簿內複製,何時應在工作簿之間複製?

在建立範本、備份工作表或現有資料佈局的變體時,請將內容複製至同一工作簿內。 跨工作簿複製功能在整合多來源資料、彙整不同部門的標準化報表,或將個別貢獻彙整為主工作簿時,表現尤為出色。 針對敏感資料,建議在複製後建立備份或為工作簿設定密碼保護

複製工作表時會複製哪些內容?

IronXL 的工作表複製功能會保留所有關鍵元素:儲存格值、公式、格式、合併儲存格、欄寬、列高以及資料驗證規則。 圖表、圖片及其他嵌入式物件亦一併複製。 此全面複製功能可確保您複製的工作表完全忠實於原始內容,非常適合用於建立範本或製作歸檔副本。

複製時該如何處理公式引用?

複製工作表時,相對公式參照會自動調整以適應新的工作表環境。 然而,絕對參照與跨工作表參照需特別留意。 複製後,請檢查引用其他工作表的公式,以確保其指向正確的資料來源。 以下是處理常見情境的方式:

// Example: Copying a worksheet and updating formula references
WorkSheet original = workBook.GetWorkSheet("Original");
WorkSheet copied = original.CopySheet("Duplicate");

// Update formulas that need to reference the new sheet
foreach (var cell in copied["A1:Z100"])
{
    if (cell.IsFormula)
    {
        // Replace references as needed
        string formula = cell.Formula;
        // Update formula logic here based on your needs
    }
}
// Example: Copying a worksheet and updating formula references
WorkSheet original = workBook.GetWorkSheet("Original");
WorkSheet copied = original.CopySheet("Duplicate");

// Update formulas that need to reference the new sheet
foreach (var cell in copied["A1:Z100"])
{
    if (cell.IsFormula)
    {
        // Replace references as needed
        string formula = cell.Formula;
        // Update formula logic here based on your needs
    }
}
Imports System

' Example: Copying a worksheet and updating formula references
Dim original As WorkSheet = workBook.GetWorkSheet("Original")
Dim copied As WorkSheet = original.CopySheet("Duplicate")

' Update formulas that need to reference the new sheet
For Each cell In copied("A1:Z100")
    If cell.IsFormula Then
        ' Replace references as needed
        Dim formula As String = cell.Formula
        ' Update formula logic here based on your needs
    End If
Next
$vbLabelText   $csharpLabel
:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-copy-worksheet.cs
using IronXL;

WorkBook firstBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook secondBook = WorkBook.Create();

// Select first worksheet in the workbook
WorkSheet workSheet = firstBook.DefaultWorkSheet;

// Duplicate the worksheet to the same workbook
workSheet.CopySheet("Copied Sheet");

// Duplicate the worksheet to another workbook with the specified name
workSheet.CopyTo(secondBook, "Copied Sheet");

firstBook.SaveAs("firstWorksheet.xlsx");
secondBook.SaveAs("secondWorksheet.xlsx");
Imports IronXL

Dim firstBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim secondBook As WorkBook = WorkBook.Create()

' Select first worksheet in the workbook
Dim workSheet As WorkSheet = firstBook.DefaultWorkSheet

' Duplicate the worksheet to the same workbook
workSheet.CopySheet("Copied Sheet")

' Duplicate the worksheet to another workbook with the specified name
workSheet.CopyTo(secondBook, "Copied Sheet")

firstBook.SaveAs("firstWorksheet.xlsx")
secondBook.SaveAs("secondWorksheet.xlsx")
$vbLabelText   $csharpLabel
Excel worksheet tabs showing original 'Sheet1' and newly created 'Copied Sheet' after worksheet duplication
Excel worksheet tab showing 'Copied Sheet' name with navigation controls and status bar

常見問題

如何在 C# 中向 Excel 檔案新增工作表?

IronXL 提供了一個簡單的 CreateWorksheet 方法,只需一行程式碼即可新增工作表。與 Office Interop 不同,您無需管理 COM 物件或處理複雜的資源清理程序——只需傳入您想要的工作表名稱並呼叫 CreateWorksheet 即可。

工作表的零基索引與一基索引有何區別?

IronXL 採用零基索引,這表示第一個工作表位於位置 0,而非 1。此設計符合標準 C# 集合的索引規則,有助於在使用 SetSheetPosition 等方法重新排序工作表時,避免發生「偏移一」錯誤。

是否可以在未安裝 Excel 的情況下,透過程式碼重新排列工作表?

是的,IronXL 的 SetSheetPosition 方法可讓您在無需安裝 Excel 的情況下重新排列工作表。此方法透過簡單的索引值,將工作表移動至工作簿中的任意位置,從而免除了對 Office Interop 的依賴。

如何從 Excel 工作簿中刪除工作表?

using IronXL 的 RemoveWorksheet 方法,可透過程式碼刪除工作表。此方法接受工作表名稱或索引位置作為參數。請注意,Excel 至少需要保留一個工作表,因此 IronXL 會防止您移除最後剩餘的工作表。

如果我嘗試建立名稱重複的工作表會發生什麼情況?

若您嘗試建立的工作表名稱與工作簿中已存在的名稱相同,IronXL 將會拋出例外。在呼叫 CreateWorksheet 方法時,請務必檢查現有工作表名稱,或採用獨特的命名規範。

如何設定開啟 Excel 檔案時顯示的工作表?

IronXL 的 SetActiveTab 方法可控制 Excel 檔案開啟時哪個工作表處於活躍狀態。只需將工作表索引或參考傳遞給此方法,該工作表便會成為使用者開啟工作簿時首先看到的工作表。

Curtis Chau
技術撰稿人

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

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

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

還在捲動嗎?

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