使用C#实现Excel与DataTable互转指南

在企业级开发中,Excel文件与DataTable(数据表)的互转是报表生成、数据迁移等场景的核心需求。传统方案如OleDb或Office Interop存在内存泄漏、性能低下等问题,且依赖本地Office组件。而 Spire.XLS for .NET 作为企业级文档操作库,具备零依赖、跨平台、全格式支持等特性,本文将详解双向互转的实现方案。


实现方案详解

方法一:Excel→DataTable

实现步骤

  1. 加载Excel文件 :使用Workbook类加载文件
  2. 选择工作表:指定目标Sheet索引或名称
  3. 转换逻辑 :通过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

实现步骤

  1. 创建工作簿 :初始化Workbook与工作表
  2. 样式配置:设置标题行字体、背景色
  3. 数据填充 :通过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)开启高效开发。

相关推荐
她说..29 分钟前
策略模式+工厂模式实现审批流(面试问答版)
java·后端·spring·面试·springboot·策略模式·javaee
梦梦代码精1 小时前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
李慕婉学姐2 小时前
【开题答辩过程】以《基于Spring Boot的疗养院理疗管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
tb_first2 小时前
SSM速通2
java·javascript·后端
一路向北⁢2 小时前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(一)
java·spring boot·后端·sse·通信
风象南2 小时前
JFR:Spring Boot 应用的性能诊断利器
java·spring boot·后端
爱吃山竹的大肚肚3 小时前
微服务间通过Feign传输文件,处理MultipartFile类型
java·spring boot·后端·spring cloud·微服务
毕设源码-邱学长5 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
咖啡啡不加糖5 小时前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana
gAlAxy...6 小时前
SpringBoot Servlet 容器全解析:嵌入式配置与外置容器部署
spring boot·后端·servlet