动态

详情 返回 返回

使用 C# 將 DataTable 導出為格式化的 Excel 文件 - 动态 详情

在 C# 開發中,DataTable 是常用於表示結構化數據的對象,尤其在導出報表、數據記錄、查詢結果等場景中應用廣泛。為了更直觀地展示和分發這些數據,我們通常會將其導出為 Excel 文件(如 .xlsx),並根據需要進行樣式美化。

本文將介紹如何使用 C# 將 DataTable 導出為 Excel 文件,並分步驟實現數據導出和樣式格式設置。我們還將演示如何將 Excel 文件保存為本地文件或內存流,適配不同類型的 C# 項目(如 WinForms、Web API、服務端導出等)。

本文包含:

  • 創建或獲取 DataTable 數據
  • 用 C# 將 DataTable 插入 Excel 並保存文件或流
  • 設置格式美化導出的 Excel 文件

本文所使用的方法需要用到Free Spire.XLS for .NET,可通過NuGet安裝:Install-Package FreeSpire.XLS

創建或獲取 DataTable 數據

DataTable 是 C# 中定義結構化表格數據的核心類型,位於 System.Data 命名空間。我們可以手動構建數據源,也可以使用程序中已有的查詢結果。

以下示例手動創建了一個包含員工信息的 DataTable,包含ID、Name、Department、Join Date、Salary、Full-Time、Bonus Rate等字段:

DataTable dt = new DataTable("Employees");

// Insert columns
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Join Date", typeof(DateTime));
dt.Columns.Add("Salary", typeof(double));
dt.Columns.Add("Full-Time", typeof(bool));
dt.Columns.Add("Bonus Rate", typeof(decimal));

// Insert rows
dt.Rows.Add(2001, "Ethan Brown", "Operations", new DateTime(2021, 4, 12), 60000.0, true, 0.04m);
dt.Rows.Add(2002, "Grace Lee", "Engineering", new DateTime(2019, 7, 23), 82000.5, true, 0.06m);
dt.Rows.Add(2003, "Liam Wilson", "Accounting", new DateTime(2020, 2, 14), 56000.0, false, 0.02m);
dt.Rows.Add(2004, "Olivia Davis", "Sales", new DateTime(2022, 10, 3), 49000.75, true, 0.05m);
dt.Rows.Add(2005, "Noah Martinez", "Engineering", new DateTime(2018, 5, 17), 91000.0, true, 0.07m);
dt.Rows.Add(2006, "Sophia Johnson", "Human Resources", new DateTime(2023, 3, 6), 47000.0, false, 0.03m);

在實際項目中,這個 DataTable 也可能來自數據庫查詢、導入文件處理或業務模塊中的內存數據。

將 DataTable 插入 Excel 並保存文件或流

Spire.XLS 提供了 WorkbookWorksheet 等核心類,可用於操作 Excel 文件結構。我們使用 InsertDataTable() 方法將 DataTable 內容寫入工作表,從指定單元格(如 A1)開始填充數據。

以下示例展示了將數據寫入 Excel,並保存為本地文件或流的完整過程:

using Spire.Xls;
using System.IO;

// 創建一個新的工作簿
Workbook workbook = new Workbook();
// 清除默認工作表並添加一個新的工作表
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add(dt.TableName);

// 從 A1 開始插入 DataTable,true 表示包含列名
sheet.InsertDataTable(dt, true, 1, 1);

// 保存為 XLSX 格式(推薦)
workbook.SaveToFile(dt.TableName + ".xlsx", FileFormat.Version2016);
// 或保存為 XLS 格式(較舊格式)
workbook.SaveToFile(dt.TableName + ".xls", FileFormat.Version97to2003);

// 或保存為內存流(適合 Web 項目返回給前端)
MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;

導出效果:

在上面的代碼中:

  • Workbook 表示整個 Excel 文件對象;
  • Worksheet 表示其中的一張工作表;
  • InsertDataTable() 是將 DataTable 內容插入表格的關鍵方法;
  • SaveToFile()SaveToStream() 分別用於保存文件和輸出流。

設置格式美化導出的 Excel 文件

雖然直接導出已經可以滿足基本需求,但默認樣式往往過於簡單。在實際業務中,為提升可讀性和展示效果,我們通常需要設置字體樣式、背景色、邊框和數字格式等。

Spire.XLS 提供了豐富的樣式控制能力。以下代碼展示瞭如何對錶頭和數據區分別設置樣式,以及如何格式化日期列和自動調整列寬:

using System.Drawing;

// 設置表頭樣式
CellRange header = sheet.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.FontName = "Arial";
header.Style.Font.Size = 13;
header.Style.Color = Color.LightGray;
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thick;

// 設置數據行樣式
for (int i = 1; i < sheet.Rows.Length; i++)
{
    CellRange dataRow = sheet.Rows[i];
    dataRow.Style.Font.FontName = "Times New Roman";
    dataRow.Style.Font.Size = 11;
    dataRow.BorderInside();
}

// 設置日期列的格式為日期格式
CellRange dateColumn = sheet.Range[2, 4, sheet.Rows.Length + 1, 4];
dateColumn.Style.NumberFormat = "yyyy-mm-dd";

// 自動調整列寬
sheet.AllocatedRange.AutoFitColumns();

導出效果:

説明:

  • FontNameFont.Size 用於設置字體風格;
  • ColorIsBold 用於突出表頭;
  • BorderInside() 為數據單元格添加邊框;
  • NumberFormat 用於設置日期或數字格式;
  • AutoFitColumns() 讓列寬自動適應內容寬度。

格式設置完成後,再次保存即可輸出美觀整潔的 Excel 文件。

總結

通過本文介紹的方法,你可以輕鬆將 DataTable 導出為 Excel 文件,並根據需求應用字體、顏色、格式等樣式美化。使用 Spire.XLS,不僅可以實現基礎的數據導出,還能滿足定製化的報表輸出場景,如內部報表生成、用户數據導出、後台下載模塊等。

如需瞭解更多關於單元格合併、公式、圖表、條件格式等高級功能,可參考 Spire.XLS 官方文檔。

user avatar zxsoft 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.