在 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 提供了 Workbook 和 Worksheet 等核心類,可用於操作 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();
導出效果:
説明:
FontName和Font.Size用於設置字體風格;Color和IsBold用於突出表頭;BorderInside()為數據單元格添加邊框;NumberFormat用於設置日期或數字格式;AutoFitColumns()讓列寬自動適應內容寬度。
格式設置完成後,再次保存即可輸出美觀整潔的 Excel 文件。
總結
通過本文介紹的方法,你可以輕鬆將 DataTable 導出為 Excel 文件,並根據需求應用字體、顏色、格式等樣式美化。使用 Spire.XLS,不僅可以實現基礎的數據導出,還能滿足定製化的報表輸出場景,如內部報表生成、用户數據導出、後台下載模塊等。
如需瞭解更多關於單元格合併、公式、圖表、條件格式等高級功能,可參考 Spire.XLS 官方文檔。