欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

使用C#将DataTable导出为Excel文件的实现教程

2025年08月08日 Asp.net
在 c# 中将 datatable 导出为 excel 文件,是 .net 开发中常见的任务,广泛应用于报表生成、日志导出、系统间数据共享等场景。通过使用独立的组件库,开发者可以轻松将 datatab

在 c# 中将 datatable 导出为 excel 文件,是 .net 开发中常见的任务,广泛应用于报表生成、日志导出、系统间数据共享等场景。通过使用独立的组件库,开发者可以轻松将 datatable 数据写入 excel 文件,并应用格式设置,生成专业、可直接使用的文档,无需复杂配置或依赖第三方办公软件。

本文将介绍如何使用 spire.xls for .net 将 datatable 导出为 excel(.xlsx/.xls)文件,包含数据创建、导出保存、格式设置等实用步骤。

spire.xls for .net试用下载

安装和配置 spire.xls

开始之前,请确保你的项目中已添加 spire.xls for .net

通过 nuget 安装 spire.xls:

copyinstall-package spire.xls

spire.xls 支持 .net framework、.net core、.net 6/7+ 以及 asp.net 项目,且无需安装 microsoft office

分步操作:c# 将 datatable 导出为 excel 文件

下面的步骤将演示如何使用 spire.xls 将 datatable 导出为 excel 文件,包含数据准备、文件保存、网页流导出以及格式设置等内容。

第一步:创建示例 datatable

先创建一个包含多列的 datatable

// 创建数据表
datatable dt = new datatable("员工信息");

// 添加列
dt.columns.add("员工编号", typeof(int));
dt.columns.add("姓名", typeof(string));
dt.columns.add("部门", typeof(string));
dt.columns.add("入职日期", typeof(datetime));
dt.columns.add("工资", typeof(double));
dt.columns.add("是否全职", typeof(bool));
dt.columns.add("奖金系数", typeof(decimal));

// 添加数据行
dt.rows.add(1001, "张伟", "人事部", new datetime(2021, 5, 10), 55000.5, true, 0.05m);
dt.rows.add(1002, "李娜", "技术部", new datetime(2020, 11, 23), 72000.0, false, 0.03m);
dt.rows.add(1003, "王强", "财务部", new datetime(2019, 8, 15), 63000.75, true, 0.07m);
dt.rows.add(1004, "赵敏", "市场部", new datetime(2022, 3, 8), 48800.0, true, 0.06m);

此处为演示用示例数据,实际使用中可绑定任意业务生成的 datatable。

第二步:导入 datatable 并保存为 excel 文件

将 datatable 导入到工作表中,并保存为 excel 文件:

workbook workbook = new workbook();
workbook.worksheets.clear();
worksheet sheet = workbook.worksheets.add(dt.tablename);

// 从 a1 单元格开始插入数据表
sheet.insertdatatable(dt, true, 1, 1);

// 保存为 .xlsx 文件(推荐)
workbook.savetofile("员工信息.xlsx", fileformat.version2016);

// 保存为 .xls 文件(旧格式)
workbook.savetofile("员工信息.xls", fileformat.version97to2003);

说明:

  • workbook 表示整个 excel 文件。
  • insertdatatable 方法将 datatable 内容映射到 excel 表格中。
  • savetofile 方法用于保存文件,支持多种 excel 格式。

导出效果示意图:

第三步:在 asp.net 中以流形式导出

在 web 项目中,通常需要将 excel 文件直接以下载流的方式返回:

memorystream stream = new memorystream();
workbook.savetostream(stream, fileformat.version2013);
stream.position = 0;

将此 memorystream 返回到 asp.net 控制器中,即可触发浏览器下载。

设置导出文件的格式与样式

若希望导出的 excel 文件更具可读性和专业感,可以对内容进行格式化:

// 设置表头样式
cellrange header = sheet.rows[0];
header.style.font.isbold = true;
header.style.font.fontname = "微软雅黑";
header.style.font.size = 13;
header.style.color = color.lightgray;
header.style.borders[borderslinetype.edgebottom].linestyle = linestyletype.thick;

// 设置数据行样式
for (int i =  1; i < sheet.rows.length; i++)
{
    cellrange datarow = sheet.rows[i];
    datarow.style.font.fontname = "黑体";
    datarow.style.font.size = 11;
    datarow.borderinside();
}

// 设置日期列的显示格式
cellrange datecolumn = sheet.range[2, 4, sheet.rows.length + 1, 4];
datecolumn.style.numberformat = "yyyy-mm-dd";

// 自动调整列宽
sheet.allocatedrange.autofitcolumns();

关键方法说明:

  • style: 控制字体、颜色、边框、数字格式等;
  • autofitcolumns(): 自动调整列宽以适应内容;
  • numberformat: 格式化日期、货币等数据类型;
  • borderinside(): 添加内边框,增强表格可读性。

格式化效果示意图:

常见问题及解决方案

问题描述解决方法
文件无法打开或提示损坏检查是否正确关闭流,且文件后缀与格式匹配
特殊字符或中文乱码确保字符串为 utf-8 编码,字体设置支持目标语言
列宽过窄导致显示不全使用 autofitcolumns() 自动调整,或手动设置 columnwidth

总结

借助 spire.xls,开发者可轻松地将 c# 中的 datatable 导出为 excel 文件,支持 .xls 和 .xlsx 两种格式,且无需依赖 office 环境。无论是桌面应用还是 web 系统,该方法都能快速生成格式良好的 excel 报表。

常见问答(faq)

q1:如何将 datatable 转换为 excel 文件?

使用 sheet.insertdatatable() 将 datatable 写入工作表,然后调用 workbook.savetofile() 保存文件。

q2:能否在 asp.net 中导出 datatable 为 excel?

可以,在 asp.net 控制器中生成工作簿,并以流的方式返回,实现下载功能。

q3:.xlsx 与 .xls 有何区别?

.xlsx 是较新的格式,兼容 excel 2007 及更高版本;.xls 为旧版格式(excel 97-2003),行数限制为 65536 行。

以上就是使用c#将datatable导出为excel文件的实现教程的详细内容,更多关于c# datatable导出为excel的资料请关注代码网其它相关文章!