跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

在 C# 中創建 Excel 文件

Tim Corey
55m 42s

創建和使用Excel文件是任何C#開發人員建立報告工具、數據導出或用戶輸入界面的關鍵技能。 在本文中,我們深入探討Tim Corey於他的視頻"在C#中創建Excel文件"中提供的詳細演示,展示了如何使用C#創建Excel文件,格式化,甚至從中讀取數據——全部使用EPPlus程式庫。

無論您是想從List創建新的Excel工作簿、格式化Excel工作表單元格,還是將結構化數據讀回到您的應用程序中,Tim的示例作為實用教學涵蓋了C#中Excel文件生成的必備要點。

讓我們參考Tim的視頻,逐步分解。

簡介:為什麼在C#中使用Excel?

Tim開始解釋Microsoft Excel是商業中最重要的工具之一。 Excel文件用戶友好,靈活性高,非常適合表示數據。 他強調,在C#中創建Excel文件可以用作複雜報告解決方案的替代方案——讓Excel成為您的默認報告工具。

目標:使用C#創建一個Excel應用程序,填充數據,應用一些格式化,然後從該Excel文件中讀取。

在解決方案管理器中設置項目

Tim打開Visual Studio 2019,選擇Console Application (.NET Core),並將解決方案命名為ExcelDemoApp。 使用控制台應用程序提供了一個乾淨且無干擾的環境,專注於Excel相關代碼。

他將目標框架升級為.NET 5.0,以利用C# 9功能,如簡化的對象實例化。

從NuGet包中添加EPPlus

為了創建Excel工作簿,Tim通過NuGet包管理器安裝EPPlus包。 EPPlus是一個操作.xlsx文件(Open XML)的Excel程式庫,支持完整的Excel功能,如圖表、表格、樣式和公式——無需MS Office或Excel Interop。

注意:EPPlus對非商業使用免費,但商業應用需要授權。

他將必要的非商業授權接受行複製到他的代碼中,以避免運行時錯誤,並添加所需的using OfficeOpenXml; 指令。

定義Excel文件路徑

使用System.IO.FileInfo,Tim設置了一個硬編碼的文件路徑:

var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");

此文件最初不存在——將由程序動態創建。

創建數據模型

為了填充Excel工作表,Tim定義了一個簡單的PersonModel類,具有以下屬性:

  • int Id

  • string FirstName

  • string LastName

他使用輔助方法GetSetupData(),返回一個包含示例數據(如Tim Corey, Sue Storm, 和 Jane Smith)的List

異步將數據保存到Excel文件

在現代開發中,阻塞UI線程是不可接受的。 這就是為什麼Tim定義一個異步方法:

static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)

在寫入Excel之前,他檢查文件是否存在並將其刪除以避免命名衝突。

if (file.Exists) file.Delete();
if (file.Exists) file.Delete();

創建和格式化Excel工作表

Tim在using塊中使用EPPlus ExcelPackage對象來確保正確的資源釋放:

using var package = new ExcelPackage(file);
using var package = new ExcelPackage(file);

他向工作簿中添加一個新的工作表

var ws = package.Workbook.Worksheets.Add("MainReport");
var ws = package.Workbook.Worksheets.Add("MainReport");

加載數據

使用LoadFromCollection,他從"A2"單元格開始插入人員列表:

ws.Cells["A2"].LoadFromCollection(people, true);
ws.Cells["A2"].LoadFromCollection(people, true);
  • true確保包括標頭(如"Id","FirstName","LastName")。

然後,AutoFitColumns()自動調整列寬:

ws.Cells[ws.Dimension.Address].AutoFitColumns();
ws.Cells[ws.Dimension.Address].AutoFitColumns();

最後,他保存Excel文件

await package.SaveAsync();
await package.SaveAsync();

樣式化Excel單元格和行

為了使Excel文件更具可讀性,Tim展示如何應用樣式:

標題行

ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

標頭行

ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

自定義列寬

ws.Column(3).Width = 20;
ws.Column(3).Width = 20;

本節展示了高級格式化,如:

  • 合併單元格

  • 字體樣式

  • 背景顏色

  • 行/列對齊

  • 寬度調整

這些模仿典型的MS Office Excel格式化功能。

從Excel文件中讀取數據到C

現在我們已經將數據寫入Excel,是時候讀回到C#

Tim介紹了這個方法:

static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)

他設置了行和列計數器:

int row = 3; // Skip title and header rows int col = 1;
int row = 3; // Skip title and header rows int col = 1;

循環遍歷行

使用while循環,他檢查非空單元格並讀取值:

while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))

在循環內,讀取並解析值:

p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();

List被填充並返回。

驗證導入的數據

Tim循環遍歷返回的列表,並將每個條目寫入控制台:

foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}

為了展示Excel作為用戶輸入工具的靈活性,Tim直接在Excel文件中手動添加新記錄("Bill Smith", "Mary White")。 當重新運行應用程序時,這些條目被導入,而不需要改變代碼——證明了Excel作為數據輸入界面的潛力。

實用用例

Tim強調使用C# Excel解決方案的用例:

  • 將數據庫表導出到Excel

  • 導入最終用戶輸入的數據

  • 使用Excel作為報告儀錶板

  • 創建結構化工作簿進行數據處理

而且這一切都不依賴於Microsoft.Office.Interop.Excel,這需要安裝Excel。

關於EPPlus和Excel文件的最後說明

Tim解釋說,程序創建的.xslx文件在打開並保存到Excel之前不包含所有的元數據。 這就是為什麼該文件在真實的Excel應用程序中打開後文件大小增加的原因。

他還指出EPPlus是一個功能強大、穩定的程式庫,支持:

  • 圖表

  • 圖像

  • 火花線

  • 公式

  • 頁面設置

  • 邊框

  • 單元格格式

結論

在C#中創建Excel文件不必困難或昂貴。 感謝EPPlus Excel程式庫,開發人員可以在程序中創建具有豐富功能的Excel文檔,而無需MS Office。 如Tim Corey所示,只需幾行代碼,您就可以:

  • 創建Excel文件

  • 填充行和列

  • 應用樣式

  • 讀取數據

  • 使用Excel作為用戶界面

這使它成為輕量級報告工具、數據導入/導出或簡單地提供用戶已知界面的絕佳選擇。

所以,下一次當您構建項目需要輸出或消耗Excel數據時,試著從Tim Corey的視頻中實施示例代碼——將Excel的強大功能帶入您的.NET Framework或.NET Core應用程序中。

Hero Worlddot related to 在 C# 中創建 Excel 文件
Hero Affiliate related to 在 C# 中創建 Excel 文件

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我