
整体实现分为三个核心阶段数据读取使用 ADO.NET 连接数据库执行 SQL 查询并将结果集填充到 DataTable 对象中数据写入调用 Free Spire.XLS 的 InsertDataTable 方法将 DataTable 批量写入 Excel 工作表格式转换通过内置转换引擎将工作表直接输出为 PDF 文件该方案的优势在于利用 Excel 作为中间载体可以灵活设置表头样式、列宽、边框等格式再统一转换为 PDF相比直接绘制 PDF 表格开发效率更高。二、环境准备2.1 安装依赖包在 Visual Studio 的 NuGet 包管理器中安装以下两个包表格处理库FreeSpire.XLSSQL Server 数据提供程序Microsoft.Data.SqlClient若使用其他数据库替换为对应驱动包即可包管理器控制台安装命令Install-Package FreeSpire.XLSInstall-Package Microsoft.Data.SqlClient2.2 引入命名空间在代码文件头部引入所需命名空间using Spire.Xls;using System.Data;using Microsoft.Data.SqlClient;using System.Drawing;2.3 版本说明本文使用的免费版本支持基础的 Excel 编辑与 PDF 转换能力免费版存在页数限制PDF 输出仅转换前 3 页内容适合小规模数据报表场景。三、完整代码实现以下示例演示从 SQL Server 数据库读取产品表数据写入 Excel 并设置基础样式最终导出为 PDF 文件的完整流程。3.1 数据库连接与数据查询////// 从数据库查询数据并填充到 DataTable////// 数据库连接字符串/// 查询 SQL 语句/// 填充后的 DataTableprivate static DataTable GetDataFromDatabase(string connectionString, string sqlQuery){DataTable dataTable new DataTable();using (SqlConnection conn new SqlConnection(connectionString)){SqlDataAdapter adapter new SqlDataAdapter(sqlQuery, conn);try{adapter.Fill(dataTable);}catch (Exception ex){Console.WriteLine($“数据读取失败{ex.Message}”);throw;}}return dataTable;}3.2 数据写入 Excel 并导出 PDF////// 将 DataTable 数据导出为 PDF 文件////// 数据源/// PDF 输出路径public static void ExportDataTableToPdf(DataTable dataTable, string outputPdfPath){// 创建工作簿using 语句自动释放资源using (Workbook workbook new Workbook()){Worksheet sheet workbook.Worksheets[0];sheet.Name “数据报表”;// 将 DataTable 批量写入工作表参数数据源、是否显示列名、起始行、起始列sheet.InsertDataTable(dataTable, true, 1, 1);// 自动获取已填充数据的单元格区域无需手动计算行列CellRange usedRange sheet.AllocatedRange;// 设置表头样式第一行CellRange headerRange sheet.Range[1, 1, 1, dataTable.Columns.Count];headerRange.Style.Font.IsBold true;headerRange.Style.Font.Size 11;headerRange.Style.Color Color.LightSkyBlue;headerRange.Style.HorizontalAlignment HorizontalAlignType.Center;headerRange.Style.VerticalAlignment VerticalAlignType.Center;// 快速设置全数据区域边框外边框内部分隔线usedRange.BorderAround(LineStyleType.Thin);usedRange.BorderInside(LineStyleType.Thin);// 设置全数据区域居中对齐usedRange.Style.HorizontalAlignment HorizontalAlignType.Center;usedRange.Style.VerticalAlignment VerticalAlignType.Center;// 仅对有数据的列执行自适应提升性能usedRange.AutoFitColumns();// 页面设置表格内容在页面中水平居中sheet.PageSetup.CenterHorizontally true;// 导出为 PDF 文件workbook.SaveToFile(outputPdfPath, FileFormat.PDF);}}3.3 主程序调用示例static void Main(string[] args){// 数据库连接字符串string connString “Serverlocalhost\SQLEXPRESS;DatabaseSalesDB;User IDdemouser;PasswordYourPassword;Encrypttrue;TrustServerCertificatetrue;”;// 查询 SQLstring sql SELECTo.OrderID AS 订单编号,c.CustomerName AS 客户名称,o.OrderDate AS 订单日期,o.TotalAmount AS 订单金额FROM Orders oJOIN Customers c ON o.CustomerID c.CustomerIDWHERE YEAR(o.OrderDate) 2026;;// PDF 输出路径string outputPath “D:\Reports\SalesReport_2026.pdf”;try{DataTable data GetDataFromDatabase(connString, sql);ExportDataTableToPdf(data, outputPath);Console.WriteLine($“PDF 导出成功文件已保存至{outputPath}”);}catch (Exception ex){Console.WriteLine($“导出流程出错{ex.Message}”);}Console.ReadKey();}四、PDF 输出优化建议4.1 页面方向与尺寸对于列数较多的宽表建议设置为横向打印以避免内容被截断sheet.PageSetup.Orientation PageOrientationType.Landscape;sheet.PageSetup.PaperSize PaperSizeType.PaperA4;4.2 缩放适配开启页面自适应确保所有列能在一页宽度内显示workbook.ConverterSetting.SheetFitToWidth 1;workbook.ConverterSetting.SheetFitToPage false;