C# 建立 Excel 文件教程

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

喬納斯·施密特

本教程將逐步引導您如何在支持 .NET Framework 4.5 或 .NET Core 的任何平台上創建 Excel 工作簿文件。在 C# 中創建 Excel 文件甚至可以在不依賴傳統 Microsoft.Office.Interop.Excel 庫的情況下完成。使用 IronXL 設置工作表屬性如凍結窗格和保護、設置列印屬性等。


概述

IronXL 在 .NET 中創建 C# Excel 檔案

IronXL 是一個直觀的 C# 和 VB Excel API 允許您在.NET中讀取、編輯和創建Excel電子表格文件,並具有極快的性能。無需安裝MS Office或甚至Excel Interop。

IronXL完全支持.NET Core、.NET Framework、Xamarin、手機、Linux、macOS和Azure。

IronXL 功能:

  • 來自我們 .NET 開發團隊的直接人員支援
  • 使用 Microsoft Visual Studio 快速安裝
  • 免費開發使用。授權價格從 $749 開始。

創建並保存 Excel 文件:快速代碼

https://www.nuget.org/packages/IronXL.Excel/ 作為替代方案,該 可以下载IronXL.dll 並添加到您的專案中。

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-1.cs
using IronXL;

// Default file format is XLSX, we can override it using CreatingOptions
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
var workSheet = workBook.CreateWorkSheet("example_sheet");
workSheet["A1"].Value = "Example";

// Set value to multiple cells
workSheet["A2:A4"].Value = 5;
workSheet["A5"].Style.SetBackgroundColor("#f0f0f0");

// Set style to multiple cells
workSheet["A5:A6"].Style.Font.Bold = true;

// Set formula
workSheet["A6"].Value = "=SUM(A2:A4)";
if (workSheet["A6"].IntValue == workSheet["A2:A4"].IntValue)
{
    Console.WriteLine("Basic test passed");
}
workBook.SaveAs("example_workbook.xlsx");
Imports IronXL

' Default file format is XLSX, we can override it using CreatingOptions
Private workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Private workSheet = workBook.CreateWorkSheet("example_sheet")
Private workSheet("A1").Value = "Example"

' Set value to multiple cells
Private workSheet("A2:A4").Value = 5
workSheet("A5").Style.SetBackgroundColor("#f0f0f0")

' Set style to multiple cells
workSheet("A5:A6").Style.Font.Bold = True

' Set formula
workSheet("A6").Value = "=SUM(A2:A4)"
If workSheet("A6").IntValue = workSheet("A2:A4").IntValue Then
	Console.WriteLine("Basic test passed")
End If
workBook.SaveAs("example_workbook.xlsx")
VB   C#

第一步

1. 下載免費的 IronXL C# 庫

C# NuGet 程式庫用于 Excel

安裝與 NuGet

Install-Package IronXL.Excel
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

C# NuGet 程式庫用于 Excel

安裝與 NuGet

Install-Package IronXL.Excel
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

立即開始在您的專案中使用IronPDF,並享受免費試用。

第一步:
green arrow pointer

查看 IronXLNuget 快速安裝和部署。已被下載超過800萬次,它正用C#改變Excel。

C# NuGet 程式庫用于 Excel nuget.org/packages/IronXL.Excel/
Install-Package IronXL.Excel

請考慮安裝 IronXL DLL 直接下載並手動安裝到您的專案或GAC表單: IronXL.zip

手動安裝到您的項目中

下載DLL

使用 NuGet 安裝

安裝IronXL NuGet套件有三種不同的方法:

  1. Visual Studio

  2. 開發者命令提示視窗

  3. 直接下載NuGet套件

Visual Studio

Visual Studio 提供了 NuGet 包管理器,您可以用它來安裝專案中的 NuGet 套件。您可以透過專案選單或在解決方案總管中右鍵點擊專案來存取它。這兩個選項如圖 3 和圖 4 所示。

圖3專案選單

圖4右鍵點擊方案總管


在點擊任一選項的管理 NuGet 套件後,瀏覽 IronXL.Excel 套件並按照圖 5 所示進行安裝。


圖 5安裝 IronXL.Excel NuGet 套件

開發者命令提示字元

打開開發者命令提示符,按照以下步驟安裝 IronXL.Excel NuGet 套件:

  1. 搜尋您的開發者命令提示符 - 通常在您的 Visual Studio 文件夾下

  2. 輸入以下命令:

  3. PM > Install-Package IronXL.Excel

  4. 按下 Enter 鍵

  5. 套件將會被安裝。

  6. 重新載入您的 Visual Studio 專案

直接下載 NuGet 套件

為了下載 NuGet 套件,請依照以下步驟操作:

  1. 瀏覽以下網址:https://www.nuget.org/packages/ironxl.excel/

  2. 點擊下載套件

  3. 套件下載完畢後,雙擊它

  4. 重新加載您的 Visual Studio 專案

通過直接下載庫來安裝 IronXL

安裝IronXL的第二種方法是直接從以下網址下載:https://ironsoftware.com/csharp/excel/

圖6下載 IronXL 庫

在您的專案中引用該庫,請按以下步驟操作:

  1. 右鍵點擊方案總管中的方案

  2. 選擇引用

  3. 瀏覽 IronXL.dll 庫文件

  4. 點擊確定

出發吧!

既然您已經設置好了,我們可以開始嘗試 IronXL 庫中的一些很棒的功能。!


教學課程

2. 建立一個 ASP.NET 專案

使用以下步驟來創建一個 ASP.NET 網站

  1. 打開 Visual Studio

  2. 點擊檔案 > 新建專案

  3. 在專案類型列表框中選擇 Visual C# 下的 Web

  4. 選擇 ASP.NET Web Application,如下所示


圖 1新專案

  1. 點擊確定

  2. 在下一個畫面中,選擇 Web Forms,如圖2所示


圖2Web Forms


  1. 按一下確定

現在我們有東西可以使用了。安裝 IronXL 以開始自訂您的檔案。


3. 建立 Excel 工作簿

使用 IronXL 建立新的 Excel 工作簿再簡單不過了! 這是一行代碼! 是的,真的:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-2.cs
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
VB   C#

這兩個XLS (較舊的 Excel 文件版本) 和XLSX (當前及較新版本檔案) 可以使用IronXL建立檔案格式。

3.1. 設置預設工作表

而且,創建預設工作表更加簡單:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
WorkSheet workSheet = workBook.CreateWorkSheet("2020 Budget");
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("2020 Budget")
VB   C#

上面的代碼片段中的 "Sheet" 代表工作表,您可以使用它來設置儲存格的值,幾乎能做到 Excel 可以做的一切。

如果您對工作簿 (Workbook) 和工作表 (Worksheet) 之間的差異感到困惑,讓我來解釋:

一個工作簿包含多個工作表。這意味著您可以在一個工作簿中添加任意多個工作表。在後續的文章中,我會解釋如何做到這一點。工作表包含行和列。行與列的交叉點叫做儲存格,這就是您在使用 Excel 時要操作的對象。


4. 設置單元格值

4.1. 手動設置單元格值

要手動設置單元格值,只需指明您正在處理的單元格並設置其值,如以下示例所示:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";
workSheet("A1").Value = "January"
workSheet("B1").Value = "February"
workSheet("C1").Value = "March"
workSheet("D1").Value = "April"
workSheet("E1").Value = "May"
workSheet("F1").Value = "June"
workSheet("G1").Value = "July"
workSheet("H1").Value = "August"
workSheet("I1").Value = "September"
workSheet("J1").Value = "October"
workSheet("K1").Value = "November"
workSheet("L1").Value = "December"
VB   C#

在這裡,我已經填充了 A 到 L 列,每列的第一行為不同月份的名稱。

4.2. 動態設置單元格值

動態設置值與前面代碼段幾乎相同。好處是您不必將單元格位置寫死。在下一個代碼示例中,您將創建一個新的隨機對象來生成隨機數,然後使用一個 for 循環迭代您想要填充值的單元格範圍。

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
Random r = new Random();
for (int i = 2 ; i <= 11 ; i++)
{
    workSheet["A" + i].Value = r.Next(1, 1000);
    workSheet["B" + i].Value = r.Next(1000, 2000);
    workSheet["C" + i].Value = r.Next(2000, 3000);
    workSheet["D" + i].Value = r.Next(3000, 4000);
    workSheet["E" + i].Value = r.Next(4000, 5000);
    workSheet["F" + i].Value = r.Next(5000, 6000);
    workSheet["G" + i].Value = r.Next(6000, 7000);
    workSheet["H" + i].Value = r.Next(7000, 8000);
    workSheet["I" + i].Value = r.Next(8000, 9000);
    workSheet["J" + i].Value = r.Next(9000, 10000);
    workSheet["K" + i].Value = r.Next(10000, 11000);
    workSheet["L" + i].Value = r.Next(11000, 12000);
}
Dim r As New Random()
For i As Integer = 2 To 11
	workSheet("A" & i).Value = r.Next(1, 1000)
	workSheet("B" & i).Value = r.Next(1000, 2000)
	workSheet("C" & i).Value = r.Next(2000, 3000)
	workSheet("D" & i).Value = r.Next(3000, 4000)
	workSheet("E" & i).Value = r.Next(4000, 5000)
	workSheet("F" & i).Value = r.Next(5000, 6000)
	workSheet("G" & i).Value = r.Next(6000, 7000)
	workSheet("H" & i).Value = r.Next(7000, 8000)
	workSheet("I" & i).Value = r.Next(8000, 9000)
	workSheet("J" & i).Value = r.Next(9000, 10000)
	workSheet("K" & i).Value = r.Next(10000, 11000)
	workSheet("L" & i).Value = r.Next(11000, 12000)
Next i
VB   C#

每個從A2到L11的儲存格都包含一個隨機生成的唯一值。

談到動態值,何不學習如何從資料庫中動態地將數據直接添加到儲存格中?下一個代碼片段快速展示了如何做到這一點,假設您已正確設置了資料庫連接。

4.3. 直接從資料庫添加

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-6.cs
// Create database objects to populate data from database
string contring;
string sql;
DataSet ds = new DataSet("DataSetName");
SqlConnection con;
SqlDataAdapter da;

// Set Database Connection string
contring = @"Data Source=Server_Name;Initial Catalog=Database_Name;User ID=User_ID;Password=Password";

// SQL Query to obtain data
sql = "SELECT Field_Names FROM Table_Name";

// Open Connection & Fill DataSet
con = new SqlConnection(contring);
da = new SqlDataAdapter(sql, con);
con.Open();
da.Fill(ds);

// Loop through contents of dataset
foreach (DataTable table in ds.Tables)
{
    int Count = table.Rows.Count - 1;
    for (int j = 12; j <= 21; j++)
    {
        workSheet["A" + j].Value = table.Rows[Count]["Field_Name_1"].ToString();
        workSheet["B" + j].Value = table.Rows[Count]["Field_Name_2"].ToString();
        workSheet["C" + j].Value = table.Rows[Count]["Field_Name_3"].ToString();
        workSheet["D" + j].Value = table.Rows[Count]["Field_Name_4"].ToString();
        workSheet["E" + j].Value = table.Rows[Count]["Field_Name_5"].ToString();
        workSheet["F" + j].Value = table.Rows[Count]["Field_Name_6"].ToString();
        workSheet["G" + j].Value = table.Rows[Count]["Field_Name_7"].ToString();
        workSheet["H" + j].Value = table.Rows[Count]["Field_Name_8"].ToString();
        workSheet["I" + j].Value = table.Rows[Count]["Field_Name_9"].ToString();
        workSheet["J" + j].Value = table.Rows[Count]["Field_Name_10"].ToString();
        workSheet["K" + j].Value = table.Rows[Count]["Field_Name_11"].ToString();
        workSheet["L" + j].Value = table.Rows[Count]["Field_Name_12"].ToString();
    }
    Count++;
}
' Create database objects to populate data from database
Dim contring As String
Dim sql As String
Dim ds As New DataSet("DataSetName")
Dim con As SqlConnection
Dim da As SqlDataAdapter

' Set Database Connection string
contring = "Data Source=Server_Name;Initial Catalog=Database_Name;User ID=User_ID;Password=Password"

' SQL Query to obtain data
sql = "SELECT Field_Names FROM Table_Name"

' Open Connection & Fill DataSet
con = New SqlConnection(contring)
da = New SqlDataAdapter(sql, con)
con.Open()
da.Fill(ds)

' Loop through contents of dataset
For Each table As DataTable In ds.Tables
	Dim Count As Integer = table.Rows.Count - 1
	For j As Integer = 12 To 21
		workSheet("A" & j).Value = table.Rows(Count)("Field_Name_1").ToString()
		workSheet("B" & j).Value = table.Rows(Count)("Field_Name_2").ToString()
		workSheet("C" & j).Value = table.Rows(Count)("Field_Name_3").ToString()
		workSheet("D" & j).Value = table.Rows(Count)("Field_Name_4").ToString()
		workSheet("E" & j).Value = table.Rows(Count)("Field_Name_5").ToString()
		workSheet("F" & j).Value = table.Rows(Count)("Field_Name_6").ToString()
		workSheet("G" & j).Value = table.Rows(Count)("Field_Name_7").ToString()
		workSheet("H" & j).Value = table.Rows(Count)("Field_Name_8").ToString()
		workSheet("I" & j).Value = table.Rows(Count)("Field_Name_9").ToString()
		workSheet("J" & j).Value = table.Rows(Count)("Field_Name_10").ToString()
		workSheet("K" & j).Value = table.Rows(Count)("Field_Name_11").ToString()
		workSheet("L" & j).Value = table.Rows(Count)("Field_Name_12").ToString()
	Next j
	Count += 1
Next table
VB   C#

您只需將特定單元格的值屬性設置為要輸入到單元格中的字段名稱。


5. 應用格式

5.1. 設定儲存格的背景色

要設定單一儲存格或一系列儲存格的背景顏色,您只需使用類似以下的代碼行:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")
VB   C#

這將範圍內的儲存格背景顏色設置為灰色。顏色為 RGB (紅色、綠色、藍色) 格式為前兩個字符代表紅色,接下來兩個代表綠色,最後兩個代表藍色。數值範圍從0到9,然後是A到F (十六進制).

5.2. 建立邊框

使用 IronXL 建立邊框非常簡單,如下所示:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-8.cs
workSheet["A1:L1"].Style.TopBorder.SetColor("#000000");
workSheet["A1:L1"].Style.BottomBorder.SetColor("#000000");
workSheet["L2:L11"].Style.RightBorder.SetColor("#000000");
workSheet["L2:L11"].Style.RightBorder.Type = IronXL.Styles.BorderType.Medium;
workSheet["A11:L11"].Style.BottomBorder.SetColor("#000000");
workSheet["A11:L11"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Medium;
workSheet("A1:L1").Style.TopBorder.SetColor("#000000")
workSheet("A1:L1").Style.BottomBorder.SetColor("#000000")
workSheet("L2:L11").Style.RightBorder.SetColor("#000000")
workSheet("L2:L11").Style.RightBorder.Type = IronXL.Styles.BorderType.Medium
workSheet("A11:L11").Style.BottomBorder.SetColor("#000000")
workSheet("A11:L11").Style.BottomBorder.Type = IronXL.Styles.BorderType.Medium
VB   C#

在上面的程式碼中,我已將 A1 到 L1 單元格設置為黑色的上邊框和下邊框,然後我將 L2 到 L11 單元格設置了右邊框,且邊框樣式設置為中等。最後,我已將 A11 到 L11 單元格設置為下邊框。


6. 在單元格中使用公式

我一直說 IronXL 使一切變得如此簡單,而事實確實如此,我無法強調得更多。! 以下程式碼允許您使用公式:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
// Use IronXL built-in aggregations
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign value to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
' Use IronXL built-in aggregations
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign value to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
VB   C#

這個功能的好處是你可以設定儲存格的資料類型,因此可以設定公式的結果。上面的程式碼顯示了如何使用 SUM (總計值), AVG (平均值), MAX (獲取最高值) 和最小 (獲取最低值) 公式。


7. 設定工作表和打印屬性

7.1. 設定工作表屬性

工作表的屬性包括凍結行與列及使用密碼保護工作表。如下所示:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-10.cs
workSheet.ProtectSheet("Password");
workSheet.CreateFreezePane(0, 1);
workSheet.ProtectSheet("Password")
workSheet.CreateFreezePane(0, 1)
VB   C#

第一列是凍結的,不會隨著工作表的其他部分一起滾動。該工作表也使用密碼保護,防止任何編輯。圖7和圖8展示了這一點。

圖7凍結窗格

圖8受保護的工作表

7.2. 設定頁面和列印屬性

您可以設定頁面的屬性,例如頁面的方向、頁面的大小以及列印區域等。

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
workSheet.SetPrintArea("A1:L12");
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape;
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4;
workSheet.SetPrintArea("A1:L12")
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4
VB   C#

列印區域設定為A1到L12。方向設定為橫向,紙張大小設定為A4。

圖9列印設定


8. 保存工作簿

要保存工作簿,請使用以下代碼:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
VB   C#

快速指南

下載這個教學作為 C# 原始碼

完整的免費 C# for Excel 原始碼可作為壓縮的 Visual Studio 2017 專案檔案下載。

下載

在 GitHub 上探索此教學

此專案的源代碼在 GitHub 上以 C# 和 VB.NET 提供。

只需幾分鐘即可使用此代碼輕鬆啟動和運行。該項目保存為 Microsoft Visual Studio 2017 項目,但與任何 .NET IDE 兼容。

如何在 GitHub 上用 C# 創建 Excel 檔案

閱讀 XL API 參考資料

查看 IronXL 的 API 參考文件,詳述 IronXL 的所有功能、命名空間、類別、方法字段和列舉。

查看 API 參考文件
Jonas 是慕尼黑一家 .NET 軟體公司的首席開發人員。Jonas 使用 IronXL 來驅動客戶的會計和銷售流水線 Excel 文件之間的數據交換。IronXL 正成為 Jonas 許多客戶會計系統項目中的常用工具。

喬納斯·施密特

C# 開發者

Jonas 是慕尼黑一家 .NET 軟體公司的首席開發人員。Jonas 使用 IronXL 來驅動客戶的會計和銷售流水線 Excel 文件之間的數據交換。IronXL 正成為 Jonas 許多客戶會計系統項目中的常用工具。