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

通过 NuGet 包管理器安装:
Install-Package Spire.XLS或者在 Visual Studio 中通过 NuGet 包管理器搜索 Spire.XLS 进行安装。
using Spire.Xls;
using System.Drawing.Printing;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();
}
}
}Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xlsx");创建 Workbook 对象并通过 LoadFromFile 方法加载需要打印的 Excel 文件。
遍历每个工作表,进行详细的页面配置:
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() 方法执行打印。
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");
}
}
}与打印到物理打印机的主要区别:
设置项 | 说明 |
|---|---|
settings.PrintToFile = true | 启用“打印到文件”模式 |
settings.PrinterName = "Microsoft Print to PDF" | 指定虚拟打印机名称 |
workbook.PrintDocument.Print("ToPdf.pdf") | 使用带参数的 Print 方法指定输出文件路径 |
// 获取默认打印机名称
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);
}// 设置打印方向
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;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 归档,本文提供的代码都能作为可靠的基础实现。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。