在企业级开发中,Excel文件与DataTable(数据表)的互转是报表生成、数据迁移等场景的核心需求。传统方案如OleDb或Office Interop存在内存泄漏、性能低下等问题,且依赖本地Office组件。而 Spire.XLS for .NET 作为企业级文档操作库,具备零依赖、跨平台、全格式支持等特性,本文将详解双向互转的实现方案。
实现方案详解
方法一:Excel→DataTable
实现步骤
- 加载Excel文件 :使用
Workbook
类加载文件 - 选择工作表:指定目标Sheet索引或名称
- 转换逻辑 :通过
ExportDataTable()
方法提取数据
csharp
using Spire.Xls;
using System.Data;
try
{
// 初始化工作簿
Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xlsx");
// 获取首个工作表
Worksheet sheet = workbook.Worksheets[0];
// 转换配置:首行包含列名
DataTable dt = sheet.ExportDataTable(
sheet.FirstRow, // 起始行
sheet.FirstColumn, // 起始列
sheet.LastRow, // 结束行
sheet.LastColumn, // 结束列
true // hasColumnNames
);
}
catch (Exception ex)
{
Console.WriteLine($"转换失败:{ex.Message}");
}
核心参数
- HasColumnNames:控制是否将首行作为DataTable列名
- 边界计算 :动态获取
LastRow
可兼容动态数据区域
方法二:DataTable→Excel
实现步骤
- 创建工作簿 :初始化
Workbook
与工作表 - 样式配置:设置标题行字体、背景色
- 数据填充 :通过
InsertDataTable()
批量写入
ini
using Spire.Xls;
using System.Data;
DataTable dt = GetDataSource(); // 获取数据源
try
{
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// 设置标题样式
CellStyle style = workbook.Styles.Add("HeaderStyle");
style.Font.IsBold = true;
style.Color = Color.LightGray;
// 写入数据(从A1开始)
sheet.InsertDataTable(dt, true, 1, 1);
// 应用样式到标题行
sheet.GetRange(1, 1, 1, dt.Columns.Count).CellStyle = style;
// 自适应列宽
sheet.AllocatedRange.AutoFitColumns();
// 保存文件
workbook.SaveToFile("Output.xlsx", ExcelVersion.Version2016);
}
catch (Exception ex)
{
Console.WriteLine($"导出失败:{ex.Message}");
}
性能优化
- AutoFitColumns() :避免手动计算列宽
- 批量写入 :
InsertDataTable
相比逐行写入效率提升80%
注意事项
- 大文件处理:建议分批次处理超过10万行的数据集,避免内存溢出
- 格式兼容性 :导出时指定
ExcelVersion
参数可适配不同版本Office
结语
通过 Workbook.LoadFromFile() 与 Worksheet.ExportDataTable() 的组合,开发者可快速实现双向数据转换。Spire.XLS凭借其对.NET Core的深度支持,在微服务、云端渲染等场景表现卓越。建议通过NuGet获取最新稳定版(Install-Package Spire.XLS
)开启高效开发。