在實際開發中,我們經常需要將數據庫中的查詢結果導出為 Excel 報表,以便進行數據分析、歸檔或分享。在這個過程中,DataTable 通常作為數據載體,而 Excel 則是最常見的導出格式之一。
本文將演示如何:
- 從 SQL Server 數據庫讀取數據到
DataTable - 使用 C# 將
DataTable插入到 Excel 文件 - 對導出的 Excel 進行格式化美化
本示例使用 Free Spire.XLS for .NET 來操作 Excel 文件。可通過 NuGet 安裝:
Install-Package FreeSpire.XLS
從數據庫讀取 DataTable 數據
首先,我們需要從數據庫中獲取員工信息。本示例假設數據庫中存在 Employees 表:
CREATE TABLE StaffMembers (
StaffId INT PRIMARY KEY IDENTITY,
FullName NVARCHAR(100) NOT NULL,
Division NVARCHAR(50) NOT NULL,
JobTitle NVARCHAR(50),
StartDate DATE NOT NULL,
MonthlyPay DECIMAL(10, 2) NOT NULL,
IsPermanent BIT NOT NULL
);
INSERT INTO StaffMembers (FullName, Division, JobTitle, StartDate, MonthlyPay, IsPermanent) VALUES
('Ethan Williams', 'Operations', 'Operations Supervisor', '2017-03-12', 6100.00, 1),
('Sophia Martinez', 'IT', 'System Administrator', '2019-07-22', 6900.40, 1),
('Liam Brown', 'Finance', 'Financial Analyst', '2021-04-18', 5750.25, 0),
('Olivia Davis', 'Sales', 'Sales Executive', '2022-09-05', 5300.00, 1);
下面是從數據庫讀取到 DataTable 的代碼:
using System.Data;
using Microsoft.Data.SqlClient;
string connectionString = @"Data Source=YourServer\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True";
DataTable dataTable = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string query = "SELECT Id, Name, Department, Position, HireDate, Salary, IsFullTime FROM Employees";
using (SqlDataAdapter adapter = new SqlDataAdapter(query, conn))
{
adapter.Fill(dataTable);
}
}
此時,dataTable 中已包含員工表的全部數據。
將 DataTable 導出為 Excel 文件
獲取到數據後,我們可以使用 Spire.XLS 將其導出到 Excel。
using Spire.Xls;
// 創建工作簿
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add("Employees Data");
// 從 A1 開始插入 DataTable,true 表示包含列標題
sheet.InsertDataTable(dataTable, true, 1, 1);
// 保存為 Excel 文件
workbook.SaveToFile("Employees.xlsx", ExcelVersion.Version2016);
使用 Worksheet.InsertDataTable() 方法即可直接插入讀取到的DataTable數據到Excel文件中。
上面代碼執行後,將生成一個包含數據庫數據的 Employees.xlsx 文件:
設置 Excel 樣式
為了讓導出的 Excel 更易讀,我們可以對錶頭、數據行、邊框和列寬進行美化:
using System.Drawing;
// 表頭樣式
CellRange headerRow = sheet.Rows[0];
headerRow.Style.Font.IsBold = true;
headerRow.Style.Font.Size = 14;
headerRow.Style.Font.FontName = "Calibri";
headerRow.Style.Color = Color.LightSteelBlue;
headerRow.Style.HorizontalAlignment = HorizontalAlignType.Center;
// 數據行樣式
for (int i = 1; i < sheet.Rows.Count(); i++)
{
CellRange dataRow = sheet.Rows[i];
dataRow.Style.Font.Size = 12;
dataRow.Style.Font.FontName = "Segoe UI";
dataRow.Style.HorizontalAlignment = HorizontalAlignType.Left;
}
// 日期列格式化
CellRange dateColumn = sheet.Range[2, 5, sheet.Rows.Count(), 5];
dateColumn.Style.NumberFormat = "yyyy-mm-dd";
// 數字列格式化(薪資)
CellRange salaryColumn = sheet.Range[2, 6, sheet.Rows.Count(), 6];
salaryColumn.Style.NumberFormat = "#,##0.00";
// 設置邊框
sheet.AllocatedRange.BorderAround(LineStyleType.Medium, Color.Black);
sheet.AllocatedRange.BorderInside(LineStyleType.Thin, Color.Gray);
// 自動調整列寬
sheet.AllocatedRange.AutoFitColumns();
// 保存文件
workbook.SaveToFile("Employees_Styled.xlsx", ExcelVersion.Version2016);
效果如下:
- 表頭加粗、背景色突出
- 日期格式化為
yyyy-mm-dd - 薪資顯示兩位小數並千分位分隔
- 自動調整列寬
- 添加邊框,整體表格更清晰
生成的Excel文件:
總結
本文介紹瞭如何:
- 從 SQL Server 數據庫讀取
DataTable數據 - 使用 Spire.XLS 將
DataTable導出為 Excel - 對導出的 Excel 文件進行樣式美化
這種方法適用於 企業報表導出、數據歸檔、後台管理系統下載數據 等場景,既能保證數據完整性,又能提升可讀性。
如果需要實現 公式、圖表、條件格式 等高級功能,可以參考 Spire.XLS 官方文檔。