C# Excel Interop 替代方案

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

許多專案使用 Excel 來清晰地進行溝通,但如果您使用 Microsoft.Office.Interop.Excel,那麼您可能面臨過許多複雜的代碼行。在本教程中,我們將使用 IronXL 作為 C# Excel Interop 的替代方案,這樣您就不必使用 Interop 來完成您的專案。您可以使用 C# 程式語言來使用 Excel 文件數據、創建 Excel 文件、進行編輯和操作。


如何替代使用 Excel Interop

  1. 安裝處理 Excel 檔案的 Excel 庫。

  2. 打開 Workbook 並加入目前的 Excel 檔案。

  3. 設定預設工作表。

  4. 從 Excel 工作簿中讀取值。

  5. 處理並顯示該值。

第一步

1. 下載 IronXL 庫

下載IronXL庫使用 NuGet 安裝 訪問免費庫,然後逐步按照本教程使用 Excel 而不需 Interop。如果您希望將專案上線,可以購買許可證。

Install-Package IronXL.Excel

如何操作教程

2. 存取 Excel 文件資料

要開發商務應用程式,我們需要簡單且完善地存取來自 Excel 檔案的資料,並能夠根據各種需求以程式方式操作它們。使用 IronXL,可以使用 `WorkBook.Load()``` function, 這個函數允許讀取特定的Excel文件。

訪問到WorkBook之後,您可以使用 WorkBook.GetWorkSheet 選擇特定的WorkSheet。```()現在你已經擁有所有 Excel 檔案的數據。請參閱以下範例,了解我們如何在 C# 專案中使用這些函數來獲取 Excel 檔案數據。

/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Access Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Access WorkSheet of Excel file
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //get specific cell value
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //get many cell values using range function
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Access Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Access WorkSheet of Excel file
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //get specific cell value
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //get many cell values using range function
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
'''
'''Access File Data
'''anchor-access-excel-file-data
'''*
Imports Microsoft.VisualBasic
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'Access Excel file
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	'Access WorkSheet of Excel file
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'get specific cell value
	Dim a As String = ws ("A5").Value.ToString()
	Console.WriteLine(" Getting Single Value:" & vbLf & vbLf & "   Value of Cell A5: {0} ",a)
	Console.WriteLine(vbLf & " Getting Many Cells Value using Loop:" & vbLf)
	'get many cell values using range function
	For Each cell In ws ("B2:B10")
		Console.WriteLine("   Value is: {0}", cell.Text)
	Next cell
	Console.ReadKey()
End Sub
VB   C#

此程式碼將產生以下結果:

Excel 文件看起來像這樣:

我們可以看到,我們的 Excel 文件 sample.xlsxA5 單元格中有 small business。從 B2B10 的其他值是相同的,並顯示在輸出中。

DataSet 和 DataTables

我們也可以按照這些指示,將 Excel 文件作為 dataset 和 datatables 使用。

/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Access WorkBook.          
WorkBook wb = WorkBook.Load("sample.xlsx");
//Access WorkSheet.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Behave with a workbook as Dataset.
DataSet ds = wb.ToDataSet(); 
//Behave with workbook as DataTable
DataTable dt = ws.ToDataTable(true);
/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Access WorkBook.          
WorkBook wb = WorkBook.Load("sample.xlsx");
//Access WorkSheet.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Behave with a workbook as Dataset.
DataSet ds = wb.ToDataSet(); 
//Behave with workbook as DataTable
DataTable dt = ws.ToDataTable(true);
'''
'''DataSet and DataTables
'''anchor-dataset-and-datatables
'''*
'Access WorkBook.          
Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
'Access WorkSheet.
 Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
'Behave with a workbook as Dataset.
Dim ds As DataSet = wb.ToDataSet()
'Behave with workbook as DataTable
Dim dt As DataTable = ws.ToDataTable(True)
VB   C#

您可以閱讀更多關於如何使用 Excel資料集和資料表,這提供了更多代碼示例和過程說明。

現在,我們將看到另一個方面,這是關於在我們的 C# 項目中創建新的 Excel 文件。


3. 新建 Excel 文件

我們可以輕鬆地在 CSharp 項目中以程式方式創建新的 Excel 試算表並在其中插入數據。為了達成這一點,IronXL 提供了 WorkBook.Create。()function,該函數創建一個新的 Excel 文件。

我們可以使用 WorkBook.CreateWorkSheet 創建所需數量的工作表。()` function.

之後,我們還可以插入數據,如下例所示:

/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //create new WorkBook
    WorkBook wb = WorkBook.Create();
    //Create new WorkSheet in wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insert Data 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Save newly created Excel file
    wb.SaveAs("NewExcelFile.xlsx");
}
/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //create new WorkBook
    WorkBook wb = WorkBook.Create();
    //Create new WorkSheet in wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insert Data 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Save newly created Excel file
    wb.SaveAs("NewExcelFile.xlsx");
}
'''
'''Create New Excel 
'''anchor-create-new-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'create new WorkBook
	Dim wb As WorkBook = WorkBook.Create()
	'Create new WorkSheet in wb
	Dim ws As WorkSheet = wb.CreateWorkSheet("sheet1")
	'Insert Data 
	ws ("A1").Value = "New Value A1"
	ws ("B2").Value = "New Value B2"
	'Save newly created Excel file
	wb.SaveAs("NewExcelFile.xlsx")
End Sub
VB   C#

上述程式碼會建立一個名為 NewExcelFile.xlsx 的新 Excel 檔案,並在儲存格位址 A1B1 中分別插入值 New Value A1New Value B2。這樣設置後,你可以按照相同的方式插入所需數量的資料。

注意:如果您正在建立新的 Excel 檔案或修改現有的檔案,請別忘了按照上面的範例將檔案儲存。 深入了解如何 使用C#創建新的Excel試算表 並在您的專案中嘗試這段程式碼。


4. 修改現有的Excel檔案

我們可以以程式方式修改現有的Excel檔案並插入更新的數據。在Excel檔案的修改中,我們將看到以下幾個方面:

  • 更新儲存格的值
  • 用新值替換舊值
  • 移除行或列

讓我們看看如何在我們的CSharp專案中實現上述主題。

更新儲存格的值

更新現有 Excel 試算表的儲存格值非常簡單。只需在專案中訪問 Excel 文件並指定其工作表,然後按照下面的範例更新其數據即可:

/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //update A3 value
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //update A3 value
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
'''
'''Update Cell Value
'''anchor-update-cell-value
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'update A3 value
	ws ("A3").Value = "New Value of A3"
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

上述程式碼會將儲存格 A3 的值更新為 New Value of A3

我們也可以使用範圍函數,以靜態值更新多個儲存格:

 ws ["A3:C3"].Value = "New Value";
 ws ["A3:C3"].Value = "New Value";
ws ("A3:C3").Value = "New Value"
VB   C#

這將會更新 Excel 文件中第 3 行從 A3C3 單元格的 New Value

了解更多使用方法 C# 中的 Range 函數 透過這些範例。

替換單元格值

IronXL 的優點在於,我們可以輕鬆地將現有 Excel 文件中的舊值替換為新值,並涵蓋以下所有方面:

  • 替換整個工作表的值:
 WorkSheet.Replace("old value", "new value");
 WorkSheet.Replace("old value", "new value");
WorkSheet.Replace("old value", "new value")
VB   C#
  • 替換特定行的值:
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows (RowIndex).Replace("old value", "new value")
VB   C#
  • 替換特定列的值:
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
VB   C#
  • 替換特定範圍內的值:
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ("From:To").Replace("old value", "new value")
VB   C#

讓我們來看一個例子,清楚地瞭解如何在我們的 CSharp 專案中使用上述功能來替換值。為此,我們將使用替換功能來替換特定範圍內的值。

/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Specifying Range from B5 to G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Specifying Range from B5 to G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
'''
'''Replace Cell Value Range
'''anchor-replace-cell-values
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Specifying Range from B5 to G5
	ws ("B5:G5").Replace("Normal", "Good")
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

上述程式碼會將 B5G5Normal 值替換為 Good,工作表的其餘部分保持不變。了解更多有關如何 編輯範圍內的 Excel 儲存格值 並使用IronXL的這個功能。

刪除 Excel 文件中的行

在應用程式開發中,我們有時需要以程式方式刪除現有 Excel 文件的整行。對於這項任務,我們使用 RemoveRow()IronXL 的功能。以下是一個範例:

/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Remove the row number 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Remove the row number 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
'''
'''Remove Row
'''anchor-remove-rows-of-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Remove the row number 2
	ws.Rows (2).RemoveRow()
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

上面的代碼將刪除 sample.xlsx 的第 2 行。


快速指南

IronXL 參考資料

閱讀IronXL的API參考文件,以了解更多有關所有函數、功能、類別和命名空間的資訊。

IronXL 參考資料