国产化Excel处理组件Spire.XLS教程:使用 C# 从数据库导出数据到 Excel(含 SQL 示例)
<p><img src="https://image.evget.com/attachment/keditor/image/20250818/164552_3.png"></p><p> </p>
<p>在企业应用开发中,Excel 通常被用作在技术人员与业务人员之间传递结构化数据的桥梁,因其格式灵活、易于共享且用户普遍熟悉。而<strong>将数据库数据导出为 Excel 文件</strong>,也因此成为实现报表生成、审计追踪、数据迁移和临时分析等需求时的一种高频操作。</p>
<p>E-iceblue旗下Spire系列产品是文档开发领域的佼佼者,支持国产化信创。本文将介绍如何使用 <strong><u>Spire.XLS for .NET</u></strong> 通过 <strong>C# 将数据库记录高效导出到 Excel 文件</strong>。示例以 SQL Server 数据库为基础,但相同方法也适用于 SQLite、MySQL、Oracle 等其他关系型数据库,只需调整连接方式即可。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系Spire官方授权代理商<span style="text-decoration: underline; color: rgba(35, 111, 161, 1)">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p>
<h2>准备工作</h2>
<p>在开始编码之前,请先确认开发环境已就绪:</p>
<ul>
<li><strong>.NET 版本</strong>:支持 .NET Framework 及 .NET Core / .NET 6 / .NET 8</li>
<li><strong>IDE</strong>:Visual Studio(社区版及以上版本均可)</li>
<li><strong>数据库</strong>:本文示例使用 <strong>SQL Server Express</strong>,采用 Windows 身份验证(也可改为 SQL 身份验证)</li>
<li><strong>必需库</strong>:
<ul>
<li><strong>Spire.XLS for .NET</strong>(NuGet 安装:Install-Package Spire.XLS)</li>
<li>Microsoft.Data.SqlClient(SQL Server 访问驱动,NuGet 安装)</li>
</ul>
</li>
</ul>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系Spire官方授权代理商<span style="text-decoration: underline; color: rgba(35, 111, 161, 1)">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p>
<p><strong>示例数据库</strong></p>
<p>以下 SQL 脚本在 SQL Server Express 中创建一个 Employees 表并插入测试数据:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>CREATE TABLE Employees (
Id INT PRIMARY KEY IDENTITY,
Name NVARCHAR(100) NOT NULL,
Department NVARCHAR(50) NOT NULL,
Position NVARCHAR(50),
HireDate DATE NOT NULL,
Salary DECIMAL(10, 2) NOT NULL,
IsFullTime BIT NOT NULL
);
INSERT INTO Employees (Name, Department, Position, HireDate, Salary, IsFullTime) VALUES
(N'张伟', N'人力资源部', N'人事经理', '2018-05-01', 5500.00, 1),
(N'李强', N'信息技术部', N'软件工程师', '2020-09-15', 7200.50, 1),
(N'王芳', N'财务部', N'会计', '2019-11-20', 6300.75, 0),
(N'陈丽', N'市场部', N'内容专员', '2021-02-10', 4800.00, 1);</code></pre>
<p>如果使用 MySQL 或 SQLite,只需调整 SQL 语法与连接字符串,整体导出逻辑不变。</p>
<h2>用 C# 将数据库数据导出到 Excel</h2>
<h3>1. 建立数据库连接</h3>
<p>以 SQL Server Express 为例,使用 <strong>SqlConnection</strong> 建立连接:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>string connectionString = @"Data Source=YourServer\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True;";</code></pre>
<ul>
<li><strong>Windows 身份验证</strong>:Integrated Security=True</li>
<li><strong>SQL 身份验证</strong>: User ID=yourUsername;Password=yourPassword;Encrypt=True;TrustServerCertificate=True</li>
</ul>
<h3>2. 将数据读取到 DataTable</h3>
<p>使用 <strong>SqlDataAdapter</strong> 执行查询并填充 <strong>DataTable</strong>:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>using System.Data;
using Microsoft.Data.SqlClient;
DataTable dataTable = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string query = "SELECT * FROM Employees";
using (SqlDataAdapter adapter = new SqlDataAdapter(query, conn))
{
adapter.Fill(dataTable);
}
}</code></pre>
<h3>3. 使用 Spire.XLS 导出到 Excel</h3>
<pre class="prettyprint lang-js highlighter-hljs"><code>using Spire.Xls;
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add("Employees");
// 从第 1 行第 1 列插入 DataTable 数据,并包含列标题
sheet.InsertDataTable(dataTable, true, 1, 1);
// 保存为 Excel 2013 格式
workbook.SaveToFile("Employees.xlsx", ExcelVersion.Version2013);</code></pre>
<p><strong>核心方法</strong>:</p>
<ul>
<li>
<p><strong>InsertDataTable(DataTable table, bool columnHeaders, int firstRow, int firstColumn)</strong></p>
<ul>
<li>columnHeaders=true 表示将列名写入第一行</li>
<li>firstRow / firstColumn 定义数据起始位置(基于 1 索引)</li>
</ul>
</li>
<li>
<p><strong>SaveToFile</strong>:可保存为 .xlsx、.xls、.csv 等格式,也可保存到流中</p>
</li>
</ul>
<p><img src="https://image.evget.com/attachment/keditor/image/20250818/165025_0.png"></p>
<p> </p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系Spire官方授权代理商<span style="text-decoration: underline; color: rgba(35, 111, 161, 1)">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p>
<h2>优化 Excel 格式(可选但推荐)</h2>
<p>导出数据后,可以通过以下方式提高可读性:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>// 表头样式
sheet.Rows.Style.Font.IsBold = true;
sheet.Rows.Style.Font.Size = 14;
sheet.Rows.Style.HorizontalAlignment = HorizontalAlignType.Center;
sheet.Rows.Style.Color = System.Drawing.Color.LightGray;
// 数据行样式
for (int i = 1; i < sheet.Rows.Count(); i++)
{
var dataRow = sheet.Rows;
dataRow.Style.Font.Size = 12;
dataRow.Style.HorizontalAlignment = HorizontalAlignType.Left;
}
// 设置全局字体
sheet.AllocatedRange.Style.Font.FontName = "微软雅黑";
// 添加边框
sheet.AllocatedRange.BorderAround(LineStyleType.Thin, System.Drawing.Color.Black);
sheet.AllocatedRange.BorderInside(LineStyleType.Medium, System.Drawing.Color.Black);
// 自动调整列宽
sheet.AllocatedRange.AutoFitColumns();</code></pre>
<p><img src="https://image.evget.com/attachment/keditor/image/20250818/165122_4.png"></p>
<p> </p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系Spire官方授权代理商<span style="text-decoration: underline; color: rgba(35, 111, 161, 1)">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p>
<h2>其他数据读取方式</h2>
<p>除了 DataTable 之外,你还可以:</p>
<ul>
<li>
<p><strong>使用 Entity Framework</strong></p>
</li>
</ul>
<pre class="prettyprint lang-js highlighter-hljs"><code>var employees = dbContext.Employees.ToList();</code></pre>
<ul>
<li>
<p>然后将集合转换为 DataTable 或逐行写入 Excel。</p>
</li>
<li>
<p><strong>调用存储过程</strong></p>
</li>
</ul>
<pre class="prettyprint lang-js highlighter-hljs"><code>SqlCommand cmd = new SqlCommand("GetEmployees", conn);
cmd.CommandType = CommandType.StoredProcedure;</code></pre>
<ul>
<li>
<p><strong>读取 SQLite / MySQL / Oracle</strong> 只需更换连接类型和驱动(Microsoft.Data.Sqlite、MySql.Data 等),其余导出逻辑相同。</p>
</li>
</ul>
<h2>常见问题与解决方法</h2>
<table>
<thead>
<tr>
<th>问题</th>
<th>可能原因与解决方案</th>
</tr>
</thead>
<tbody>
<tr>
<td>Excel 文件为空</td>
<td>检查 DataTable 是否在导出前已正确填充</td>
</tr>
<tr>
<td>文件无法保存</td>
<td>确认保存路径存在且有写入权限</td>
</tr>
<tr>
<td>无法连接数据库</td>
<td>检查服务器是否启动、连接字符串是否正确</td>
</tr>
<tr>
<td>特殊字符乱码</td>
<td>数据库列类型应使用 NVARCHAR,Excel 需使用支持 Unicode 的字体</td>
</tr>
<tr>
<td>身份验证失败</td>
<td>Windows 身份验证用 Integrated Security=True,SQL 身份验证需提供用户名与密码</td>
</tr>
</tbody>
</table>
<h2>总结</h2>
<p>通过 <strong><u>Spire.XLS for .NET</u></strong>,我们可以在 C# 中快速将数据库数据导出为 Excel,无需安装 Microsoft Office,且支持批量数据、格式设置和多种文件格式。 此方案可用于定时任务、后台服务或 Web 应用,实现数据的自动化导出与分发。</p>
<h2>常见问题解答</h2>
<p><strong>Q:如何在 C# 中将 SQL 数据导出到 Excel?</strong> A:使用 SqlConnection 读取数据到 DataTable,再调用 <strong>Spire.XLS</strong> 的 InsertDataTable() 方法即可。</p>
<p><strong>Q:支持导出 SQLite 或 MySQL 数据吗?</strong> A:支持,只需更换数据库驱动与连接字符串。</p>
<p><strong>Q:需要安装 Excel 吗?</strong> A:不需要,<strong>Spire.XLS </strong>是独立的 Excel 处理库。</p>
<p><strong>Q:能否将多个表导出到同一个 Excel 文件?</strong> A:可以,创建多个工作表并分别插入数据即可。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系Spire官方授权代理商<span style="text-decoration: underline; color: rgba(35, 111, 161, 1)">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p><br><br>
来源:https://www.cnblogs.com/software-Development/p/19045074
頁:
[1]