在现代数据驱动的应用开发中,将程序内存中的数据以结构化的形式呈现给用户是一个普遍的需求。其中,将C# List集合中的数据导出到Excel文件,因其良好的可读性、易分享性以及强大的数据分析能力,成为了开发者们经常需要实现的功能。
无论是生成统计报表、导出用户数据、进行数据迁移,还是为BI工具提供数据源,高效且格式友好的Excel导出功能都至关重要。本文将介绍如何使用 Spire.XLS for .NET,通过清晰直观的方式,将 List<T> 数据写入Excel文件。
C#数据导出Excel的典型场景
在实际项目中,常见需求包括:
- 导出订单数据供财务核对
- 导出客户信息供销售分析
- 导出统计结果供管理层查看
Excel作为数据展示与处理的通用工具,其格式控制能力和易操作性,使其成为最常见的数据输出形式之一。
环境准备
在 Visual Studio 中通过 NuGet 安装 Spire.XLS:
- 右键项目
- 选择“管理NuGet程序包”
- 搜索
Spire.XLS - 安装
安装完成后即可在代码中引用:
using Spire.Xls;
示例数据模型
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public DateTime ManufactureDate { get; set; }
public bool IsAvailable { get; set; }
}
核心实现:将 List 数据写入 Excel
using Spire.Xls;
using System;
using System.Collections.Generic;
public class ExcelExporter
{
public static void ExportProductsToExcel(List<Product> products, string filePath)
{
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "产品列表";
int row = 1;
// 写入表头
sheet.Range[row, 1].Value2 = "ID";
sheet.Range[row, 2].Value2 = "Name";
sheet.Range[row, 3].Value2 = "Price";
sheet.Range[row, 4].Value2 = "ManufactureDate";
sheet.Range[row, 5].Value2 = "IsAvailable";
row++;
// 写入数据
foreach (var product in products)
{
sheet.Range[row, 1].Value2 = product.ID;
sheet.Range[row, 2].Value2 = product.Name;
sheet.Range[row, 3].Value2 = (double)product.Price;
sheet.Range[row, 4].Value2 = product.ManufactureDate;
sheet.Range[row, 5].Value2 = product.IsAvailable;
row++;
}
// 自动调整列宽
sheet.AllocatedRange.AutoFitColumns();
// 设置标题样式
var headerRange = sheet.Range[1, 1, 1, 5];
headerRange.Style.Font.IsBold = true;
headerRange.Style.HorizontalAlignment = HorizontalAlignType.Center;
workbook.SaveToFile(filePath, ExcelVersion.Version2016);
workbook.Dispose();
}
public static void Main(string[] args)
{
List<Product> productList = new List<Product>
{
new Product { ID = 1, Name = "笔记本电脑", Price = 8999.00M, ManufactureDate = new DateTime(2023, 1, 15), IsAvailable = true },
new Product { ID = 2, Name = "无线鼠标", Price = 129.50M, ManufactureDate = new DateTime(2023, 3, 10), IsAvailable = true },
new Product { ID = 3, Name = "机械键盘", Price = 599.00M, ManufactureDate = new DateTime(2022, 11, 20), IsAvailable = false },
new Product { ID = 4, Name = "显示器", Price = 1999.99M, ManufactureDate = new DateTime(2023, 2, 5), IsAvailable = true },
new Product { ID = 5, Name = "SSD硬盘", Price = 650.00M, ManufactureDate = new DateTime(2023, 4, 1), IsAvailable = true }
};
string outputPath = "ProductsExport.xlsx";
ExportProductsToExcel(productList, outputPath);
}
}
导出结果演示:
格式控制与扩展
在实际项目中,往往需要对单元格格式进行控制。例如:
设置日期格式:
sheet.Range[row, 4].Style.NumberFormat = "yyyy-mm-dd";
设置货币格式:
sheet.Range[row, 3].Style.NumberFormat = "¥#,##0.00";
通过单元格对象可以精确控制:
- 字体
- 对齐方式
- 数字格式
- 背景颜色
- 边框
实践建议
- 处理完毕后调用
Dispose()释放资源 - 建议使用
try-catch进行异常处理 - 大数据量导出时可考虑分批处理
- 注意数值类型转换(如 decimal 转 double)
总结
通过遍历 List<T> 并使用 sheet.Range[row, column].Value2 写入数据,可以实现清晰、可控且易维护的Excel导出逻辑。
这种方式结构直观,便于扩展格式控制,适用于大多数常见业务场景。结合 Spire.XLS 提供的丰富功能,可以进一步实现图表生成、公式计算、数据验证等高级需求,从而满足更复杂的报表开发场景。