C#如何将DataTable导出到Excel解决方案


在C#中,将`DataTable`导出到Excel文件可以通过多种方式实现,但一个常见且高效的方法是使用`EPPlus`库。`EPPlus`是一个开源的.NET库,用于在.NET应用程序中创建和操作Excel 2007/2010文件(.xlsx)。以下是一个基本的示例,展示了如何使用`EPPlus`将`DataTable`导出到Excel文件:

首先,你需要通过NuGet安装`EPPlus`库到你的项目中。

然后,你可以使用以下代码示例来导出`DataTable`:


using OfficeOpenXml;
using System;
using System.Data;
using System.IO;

public class DataTableToExcel
{
    public static void ExportDataTableToExcel(DataTable dt, string excelFilePath)
    {
        // 创建一个Excel包
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 设置非商业授权
        ExcelPackage package = new ExcelPackage();

        // 创建一个工作表
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");

        // 将DataTable的列头添加到Excel的第一行
        foreach (DataColumn column in dt.Columns)
        {
            worksheet.Cells[1, column.Ordinal + 1].Value = column.ColumnName;
        }

        // 遍历DataTable的每一行,并添加到Excel的相应行
        int rowStart = 2;
        foreach (DataRow row in dt.Rows)
        {
            for (int col = 0; col < dt.Columns.Count; col++)
            {
                worksheet.Cells[rowStart, col + 1].Value = row[col].ToString();
            }
            rowStart++;
        }

        // 自动调整列宽
        foreach (var firstRowCell in worksheet.Cells[1, 1, 1, dt.Columns.Count])
        {
            worksheet.Column(firstRowCell.Start.Column).AutoFit();
        }

        // 保存Excel文件
        FileInfo fileInfo = new FileInfo(excelFilePath);

        // 检查文件路径是否存在目录,如果不存在则创建
        if (!fileInfo.Directory.Exists)
        {
            fileInfo.Directory.Create();
        }

        package.SaveAs(fileInfo);

        // 释放资源
        package.Dispose();
    }
}

// 使用示例
DataTable table = new DataTable();
// 假设你已经填充了DataTable
// ...
string excelFilePath = @"C:\path\to\your\file.xlsx";
DataTableToExcel.ExportDataTableToExcel(table, excelFilePath);

这段代码首先创建了一个`ExcelPackage`对象,然后添加了一个工作表,并将`DataTable`的列名和每一行的数据填充到这个工作表中。最后,它保存了Excel文件,并释放了资源。注意,你需要根据你的实际情况来修改`DataTable`的填充方式和Excel文件的保存路径。

此外,请确保在使用`EPPlus`之前已经通过NuGet安装了该库,并设置了适当的授权(在这个例子中,我们使用了`NonCommercial`授权,适用于非商业项目)。如果你打算在商业项目中使用`EPPlus`,你可能需要购买商业授权。