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

如何在C#中管理工作表而不使用Interop

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

IronXL使得在C#中管理工作表不需要Office Interop,您可以透過簡單的方法呼叫來建立、刪除、移動和複製工作表。 此程式庫消除了Interop相依性,同時提供了對Excel工作表操作的程式化完全控制。

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

此範例展示了如何使用IronXL建立一個新工作表,只需一行程式碼——無需樣板文件,無需Interop,即可在C#中立即管理Excel工作簿。

  1. 使用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 Interop 方法不同,IronXL 提供了一個更乾淨的API,不需要管理COM物件或明確的資源清理。

請注意以下提到的所有索引位置均遵循零基索引

為什麼零基索引對工作表操作很重要?

零基索引意味著第一個工作表位於位置0,而不是1。這種約定與C#陣列和集合索引相匹配,使其對開發人員來說是一種直觀的方式。 在管理多個工作表時,記住這一點可以避免出現越界錯誤,從而不會操作錯誤的工作表或遇到超出範圍的例外情況。

我什麼時候應該使用每個工作表管理方法?

不同的場景需要不同的工作表操作。 在生成報告或按類別組織資料時使用CreateWorksheet。 在建立資料展示的邏輯流程時應用SetSheetPositionRemoveWorksheet方法有助於清理臨時工作表或整合資料。 明確何時使用每個方法可以提高工作簿的組織性和使用者體驗。

管理多個工作表時常見的陷阱是什麼?

常見的錯誤包括試圖刪除所有工作表(Excel需要至少一個),建立工作表時使用重複的名稱,以及在操作後忘記保存更改。 此外,當載入現有電子表格時,始終確認工作表的存在才能避免運行時異常。

如何建立新的工作表?

CreateWorksheet方法建立一個新的工作表。 它需要工作表名稱作為唯一的參數。 此方法返回建立的工作表物件,使您可以在建立後立即執行其他操作,如合併單元格。

如果我使用重複的工作表名稱會怎樣?

當您試圖建立一個已存在名稱的工作表時,IronXL會自動附加一個數字以使其唯一。 例如,建立"Sheet1"當它已經存在時將導致"Sheet1_1"。 這種自動重命名防止了衝突,確保您的程式碼在不拋出異常的情況下繼續執行。

如何在建立工作表後連結操作?

由於WorkSheet物件,您可以連結操作以提高程式碼效率。 這種流暢的介面模式允許您建立工作表後立即執行操作,如設置單元格值、應用格式或操作範圍。 這是一個例子:

:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-2.cs
// Create and immediately populate a worksheet
WorkSheet newSheet = workBook.CreateWorkSheet("Sales Data");
newSheet["A1"].Value = "Product";
newSheet["B1"].Value = "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")
newSheet("A1").Value = "Product"
newSheet("B1").Value = "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
Excel工作表選項卡顯示workSheet1-4,加號按鈕用於建立新的工作表

如何更改工作表位置?

SetSheetPosition方法更改工作表的位置。 它需要兩個參數:作為Integer的索引位置。

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

重新排序工作表建立邏輯資料流並改善導航。 對於財務報告,您可能將摘要表放在最前面,然後是詳細拆解。 在專案跟蹤工作簿中,按時間順序或按部門組織工作表有助於使用者快速查找資訊。 當建立專業的電子表格用於商業用途時,這種組織變得至關重要。

當我改變位置時其他工作表會怎麼樣?

當您移動工作表時,IronXL會自動調整其他工作表的位置以保持連續性。 將工作表從位置3移到位置0會將位置0、1和2的工作表右移一位。 這種自動重新編號確保工作表順序中沒有間隙。

如何將工作表移動到開始或結尾?

移動到開始位置很簡單——使用位置0。要移動到結尾,請使用工作簿的工作表總數減去1。這裡有一個實用的範例:

:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-4.cs
// 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或其他可視化工具打開時顯示的工作表。 使用SetActiveTab方法和工作表的索引位置。

為什麼設置活動工作表很重要?

活動工作表決定了使用者在打開工作簿時首先看到的內容。 這第一印象對於儀表板、報告和資料輸入表單很重要。 通過設置適當的活動工作表,您可以立即引導使用者到最相關的資訊,提高可用性,並減少多工作表工作簿中的混淆。

活動工作表和選擇的工作表有什麼區別?

活動工作表是當前顯示並準備好進行互動的工作表。 選擇的工作表可以是選擇進行分組操作(如格式化或刪除)時的多個工作表。 IronXL的SetActiveTab專門控制文件打開時顯示的單個工作表,而工作表選擇是透過其他方法在執行批次操作時進行。

如何確定當前活動的是哪個工作表?

IronXL提供屬性來識別當前的活動工作表。 這在您需要在操作前保留活動狀態或驗證將顯示的工作表時很有用。 在讀取Excel文件時,您也可以使用此資訊來理解工作簿的預設視圖:

:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-6.cs
// Get the default (active) worksheet object
WorkSheet activeSheet = workBook.DefaultWorkSheet;
Console.WriteLine($"Active worksheet: {activeSheet.Name}");
' Get the default (active) worksheet object
Dim activeSheet As WorkSheet = workBook.DefaultWorkSheet
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工作表選項卡和workSheet1活動更改為workSheet3活動

如何刪除工作表?

使用RemoveWorksheet方法及工作表的索引位置來刪除工作表。 如果位置未知,請改用工作表名稱。

如果我嘗試刪除最後一個工作表會怎樣?

Excel需要工作簿中至少有一個工作表。 如果您嘗試刪除最後剩餘的工作表,IronXL會拋出異常以維持Excel檔案的完整性。 在刪除前始終檢查工作表的數量或將您的刪除程式碼包裹在適當的錯誤處理中:

:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-8.cs
// 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

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

在刪除多個工作表時,從最高索引位置向後操作,以避免索引移動問題。 或者,先收集工作表名稱,然後按名稱刪除。 此方法在清理臨時工作表或整合資料時尤為有用:

:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-9.cs
// 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截圖中顯示工作表移除-四個選項卡減少為兩個選項卡之前和之後

如何複製或複製工作表?

在相同的工作簿中或在不同的工作簿中複製工作表。 要在同一工作簿中複製,使用CopySheet方法。 要複製到不同的工作簿,使用CopyTo方法。

何時應在工作簿內部以及工作簿之間進行複製?

在建立模板、備份表或現有資料佈局的變體時,在同一工作簿中複製。 交叉工作簿複製在整合多個來源資料、從不同部門建立標準化報告或從個人貢獻中構建母本工作簿時尤為優秀。 對於敏感資料,考慮在複製後建立備份或密碼保護工作簿

當我複製工作表時會複製什麼?

IronXL的工作表複製會保留所有基本元素:單元格值、公式、格式、合併單元格、列寬、行高和資料驗證規則。 圖表、圖像和其他嵌入物件也會被複製。 這種全面的複製確保您的複製工作表完全忠實於原件,非常適合建立模板或存檔副本。

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

在複製工作表時,相關的公式引用會自動適應新工作表的上下文。 然而,絕對引用和跨工作表的引用需要關注。 複製後,檢查引用其他工作表的公式以確保它們指向正確的資料來源。 這是如何處理常見情況的:

:path=/static-assets/excel/content-code-examples/how-to/manage-worksheet-11.cs
// 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
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 工作表索引標籤顯示複製工作表後的原始 'Sheet1' 與新建立的 'Copied Sheet'
Excel 工作表索引標籤顯示 'Copied Sheet' 名稱,並含導覽控制項與狀態列

常見問題

如何在C#中向Excel文件新增新的工作表?

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

工作表的零基索引和一基索引有什麼區別?

IronXL使用零基索引,這意味著第一個工作表位於位置0,而不是1。這與標準C#集合索引相匹配,並有助於防止在使用SetSheetPosition重新排序工作表時發生一位偏移錯誤。

我可以在沒有安裝Excel的情況下程式化地重新排序工作表嗎?

可以,IronXL的SetSheetPosition方法允許在不需要安裝Excel的情況下重新排序工作表。此方法通過簡單的索引值將工作表移動到工作簿中的任何位置,消除了Office Interop依賴的必要性。

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

使用IronXL的RemoveWorksheet方法程式化地刪除工作表。該方法接受工作表名稱或索引位置。請記住,Excel至少需要一個工作表,因此IronXL將防止您刪除最後剩餘的工作表。

如果我嘗試建立具有重複名稱的工作表會怎麼樣?

如果您嘗試建立具有工作簿中已存在的名稱的工作表,IronXL將拋出異常。在呼叫CreateWorksheet方法時始終檢查現有的工作表名稱或使用唯一的命名約定。

如何設置打開Excel文件時出現的工作表?

IronXL的SetActiveTab方法控制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
運行一個範例 觀看您的資料成為試算表。