C# Excel 互通解決方案

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方法載入Excel文件。()函數,用於授權訪問讀取特定的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#

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

1output related to 2. 存取 Excel 檔案數據

Excel 文件看起來像這樣:

1excel related to 2. 存取 Excel 檔案數據

我們可以看到我們的Excel文件sample.xlsx中,在A5單元格內存有小企業。 從 B2B10 的其他值是相同的,並顯示在輸出中。

DataSet 和 DataTables

我們還可以使用這些方法處理 Excel 檔案作為數據集,以及數據表。

/**
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 方法。()`函數,用於創建一個新的Excel文件。

我們可以使用WorkBook.CreateWorkSheet來創建所需的任意數量的WorkSheets。()函式。

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

/**
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 文件中從 A3C3 儲存格的第 3 行為 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 函數來替換特定範圍內的值。

/**
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 參考資料
Documentation related to 快速指南