C#代码实现打印Excel文档的超详细教程
在 .NET 环境中实现高质量的 Excel 打印并非易事。开发者需要精确控制页面边距、纸张大小、网格线显示等参数,同时还要支持物理打印机和虚拟 PDF 打印机。如果没有成熟的解决方案,这些需求往往会让开发者花费大量时间在调优和适配工作上。
本文将带领读者使用 Spire.XLS for .NET 结合 System.Drawing.Printing 命名空间,构建完整的 Excel 打印解决方案。通过本文的学习,你将掌握加载 Excel 文档、配置打印参数、输出到物理打印机以及将 Excel 转换为 PDF 等核心技能。

一、准备工作
1.1 环境要求
- .NET Framework 4.0 及以上版本 或 .NET Core/.NET 5+
- Visual Studio 2017 及以上版本
1.2 安装 Spire.XLS for .NET
通过 NuGet 包管理器安装:
Install-Package Spire.XLS
或者在 Visual Studio 中通过 NuGet 包管理器搜索 Spire.XLS 进行安装。
二、核心命名空间引入
using Spire.Xls; using System.Drawing.Printing;
三、打印到物理打印机
3.1 完整代码示例
using Spire.Xls;
using System.Drawing.Printing;
namespace PrintExcel
{
class Program
{
static void Main(string[] args)
{
// 1. 加载 Excel 文档
Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xlsx");
// 2. 遍历并配置每个工作表
for (int i = 0; i < workbook.Worksheets.Count; i++)
{
Worksheet worksheet = workbook.Worksheets[i];
PageSetup pageSetup = worksheet.PageSetup;
// 设置页边距(单位:英寸)
pageSetup.TopMargin = 0.3;
pageSetup.BottomMargin = 0.3;
pageSetup.LeftMargin = 0.3;
pageSetup.RightMargin = 0.3;
// 打印时显示网格线
pageSetup.IsPrintGridlines = true;
// 将所有列缩放到一页
pageSetup.FitToPagesWide = 1;
pageSetup.FitToPagesTall = 0;
// 设置纸张大小为 A4
pageSetup.PaperSize = PaperSizeType.PaperA4;
}
// 3. 获取打印机设置
PrinterSettings settings = workbook.PrintDocument.PrinterSettings;
// 4. 指定打印机名称
settings.PrinterName = "Your Printer Name";
// 5. 执行打印
workbook.PrintDocument.Print();
}
}
}3.2 代码详解
加载 Excel 文档
Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xlsx");
创建 Workbook 对象并通过 LoadFromFile 方法加载需要打印的 Excel 文件。
页面设置(PageSetup)
遍历每个工作表,进行详细的页面配置:
- 页边距设置 :
TopMargin、BottomMargin、LeftMargin、RightMargin设置上下左右边距,单位为英寸。 - 网格线 :
IsPrintGridlines = true让打印结果保留网格线,更易于阅读数据。 - 缩放设置 :
FitToPagesWide = 1:将所有列缩放到一页宽FitToPagesTall = 0:不限制行数,按实际高度分页
- 纸张大小 :
PaperSize = PaperSizeType.PaperA4设置为 A4 纸
打印机配置与执行
PrinterSettings settings = workbook.PrintDocument.PrinterSettings; settings.PrinterName = "Your Printer Name"; workbook.PrintDocument.Print();
获取打印机设置对象,指定目标打印机名称,最后调用 Print() 方法执行打印。
四、打印到虚拟打印机(Microsoft Print to PDF)
4.1 完整代码示例
using Spire.Xls;
using System.Drawing.Printing;
namespace PrintExcel
{
class Program
{
static void Main(string[] args)
{
// 加载 Excel 文档
Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xlsx");
// 配置工作表(同前面示例)
for (int i = 0; i < workbook.Worksheets.Count; i++)
{
Worksheet worksheet = workbook.Worksheets[i];
PageSetup pageSetup = worksheet.PageSetup;
pageSetup.TopMargin = 0.3;
pageSetup.BottomMargin = 0.3;
pageSetup.LeftMargin = 0.3;
pageSetup.RightMargin = 0.3;
pageSetup.IsPrintGridlines = true;
pageSetup.FitToPagesWide = 1;
pageSetup.FitToPagesTall = 0;
pageSetup.PaperSize = PaperSizeType.PaperA4;
}
// 设置虚拟打印机
PrinterSettings settings = workbook.PrintDocument.PrinterSettings;
settings.PrintToFile = true; // 启用打印到文件
settings.PrinterName = "Microsoft Print to PDF"; // 指定虚拟打印机
// 执行打印并指定输出 PDF 文件路径
workbook.PrintDocument.Print("ToPdf.pdf");
}
}
}
4.2 关键点说明
与打印到物理打印机的主要区别:
| 设置项 | 说明 |
|---|---|
settings.PrintToFile = true | 启用“打印到文件”模式 |
settings.PrinterName = "Microsoft Print to PDF" | 指定虚拟打印机名称 |
workbook.PrintDocument.Print("ToPdf.pdf") | 使用带参数的 Print 方法指定输出文件路径 |
五、常见打印机名称参考
Windows 系统默认打印机
// 获取默认打印机名称 string defaultPrinter = new PrinterSettings().PrinterName;
常见打印机名称
| 打印机类型 | 名称示例 |
|---|---|
| Microsoft Print to PDF | "Microsoft Print to PDF" |
| Microsoft XPS Document Writer | "Microsoft XPS Document Writer" |
| Foxit Reader PDF Printer | "Foxit Reader PDF Printer" |
| 物理打印机 | 如 "HP LaserJet MFP M227fdw" |
获取系统所有打印机
foreach (string printer in PrinterSettings.InstalledPrinters)
{
Console.WriteLine(printer);
}
六、更多页面设置选项
6.1 常用 PageSetup 属性
// 设置打印方向 pageSetup.Orientation = PageOrientationType.Landscape; // 横向 pageSetup.Orientation = PageOrientationType.Portrait; // 纵向 // 设置缩放比例(1-100) pageSetup.Zoom = 90; // 设置页眉/页脚 pageSetup.HeaderMargin = 0.5; pageSetup.FooterMargin = 0.5; // 设置打印区域 pageSetup.PrintArea = "A1:F50"; // 设置标题行(每页重复打印) pageSetup.PrintTitleRows = "$1:$2"; // 设置水平/垂直居中 pageSetup.HorzAlignment = PageSetupHorzAlignment.Center; pageSetup.VertAlignment = PageSetupVertAlignment.Center;
6.2 纸张大小类型
pageSetup.PaperSize = PaperSizeType.PaperA3; pageSetup.PaperSize = PaperSizeType.PaperA4; pageSetup.PaperSize = PaperSizeType.PaperA5; pageSetup.PaperSize = PaperSizeType.PaperLetter; pageSetup.PaperSize = PaperSizeType.PaperLegal;
七、高级场景:静默打印
如果需要实现无对话框的静默打印:
// 隐藏打印对话框 workbook.PrintDocument.PrintController = new StandardPrintController(); // 设置打印份数 workbook.PrintDocument.PrinterSettings.Copies = 2; // 静默执行打印 workbook.PrintDocument.Print();
八、异常处理
建议在实际应用中加入异常处理:
try
{
// 检查打印机是否存在
if (!PrinterSettings.InstalledPrinters.Cast<string>().Any(p => p == printerName))
{
throw new Exception($"打印机 '{printerName}' 不存在");
}
workbook.PrintDocument.Print();
Console.WriteLine("打印成功!");
}
catch (Exception ex)
{
Console.WriteLine($"打印失败:{ex.Message}");
}
九、总结
本文详细介绍了使用 C# 和 Spire.XLS 库打印 Excel 文档的完整方案:
| 场景 | 关键代码 |
|---|---|
| 物理打印机 | PrinterName 指定打印机 + Print() |
| PDF 输出 | PrintToFile = true + Print("output.pdf") |
| 页面配置 | 通过 PageSetup 对象设置边距、纸张、缩放等 |
| 静默打印 | PrintController = new StandardPrintController() |
Spire.XLS 提供了丰富的页面设置选项,配合 System.Drawing.Printing 的打印机管理能力,可以灵活满足各种 Excel 打印需求。无论是批量打印报表,还是将 Excel 转换为 PDF 归档,本文提供的代码都能作为可靠的基础实现。
以上就是C#代码实现打印Excel文档的超详细教程的详细内容,更多关于C#打印Excel的资料请关注脚本之家其它相关文章!
相关文章
Unity UGUI LayoutRebuilder自动重建布局介绍及使用
这篇文章主要为大家介绍了Unity UGUI LayoutRebuilder自动重建布局介绍及使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-07-07


最新评论