C# List导出Excel:逐行写入数据到单元格

0 阅读3分钟

使用C#导出List数据到Excel文件

在现代数据驱动的应用开发中,将程序内存中的数据以结构化的形式呈现给用户是一个普遍的需求。其中,将C# List集合中的数据导出到Excel文件,因其良好的可读性、易分享性以及强大的数据分析能力,成为了开发者们经常需要实现的功能。

无论是生成统计报表、导出用户数据、进行数据迁移,还是为BI工具提供数据源,高效且格式友好的Excel导出功能都至关重要。本文将介绍如何使用 Spire.XLS for .NET,通过清晰直观的方式,将 List<T> 数据写入Excel文件。


C#数据导出Excel的典型场景

在实际项目中,常见需求包括:

  • 导出订单数据供财务核对
  • 导出客户信息供销售分析
  • 导出统计结果供管理层查看

Excel作为数据展示与处理的通用工具,其格式控制能力和易操作性,使其成为最常见的数据输出形式之一。


环境准备

在 Visual Studio 中通过 NuGet 安装 Spire.XLS

  1. 右键项目
  2. 选择“管理NuGet程序包”
  3. 搜索 Spire.XLS
  4. 安装

安装完成后即可在代码中引用:

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);
    }
}

导出结果演示:

C#导出List数据到Excel结果


格式控制与扩展

在实际项目中,往往需要对单元格格式进行控制。例如:

设置日期格式:

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 提供的丰富功能,可以进一步实现图表生成、公式计算、数据验证等高级需求,从而满足更复杂的报表开发场景。