C#代码实现打印Excel文档的超详细教程

 更新时间:2026年05月21日 08:18:15   作者:秋天的落叶铺满小路  
在 .NET 环境中实现高质量的 Excel 打印并非易事,本文将带大家使用 Spire.XLS for .NET 结合 System.Drawing.Printing 命名空间,构建完整的 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)

遍历每个工作表,进行详细的页面配置:

  • 页边距设置 :TopMarginBottomMarginLeftMarginRightMargin 设置上下左右边距,单位为英寸。
  • 网格线 :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的资料请关注脚本之家其它相关文章!

相关文章

  • C#调用百度翻译实现翻译HALCON的示例

    C#调用百度翻译实现翻译HALCON的示例

    HALCON示例程序的描述部分一直是英文的,看起来很不方便。本文就使用百度翻译实现翻译HALCON,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C#中利用代理实现观察者设计模式详解

    C#中利用代理实现观察者设计模式详解

    学习模式注重精髓而非模板,本文为了便于说明假定了三方并对三方功能进行了划分,实际应用并不拘泥于此。如果情况合适将数据(文档)类设计为单件模式也是一种很不错的选择
    2014-01-01
  • c#如何实现接口事件

    c#如何实现接口事件

    这篇文章主要介绍了c#如何实现接口事件,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-10-10
  • C#正则表达式获取下拉菜单(select)的相关属性值

    C#正则表达式获取下拉菜单(select)的相关属性值

    这篇文章主要介绍了C#正则表达式获取下拉菜单(select)的相关属性值,比如可以获得name属性的值、value值、指定值,需要的朋友可以参考下
    2014-07-07
  • C#自动类型转换与强制类型转换的讲解

    C#自动类型转换与强制类型转换的讲解

    今天小编就为大家分享一篇关于C#自动类型转换与强制类型转换的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C#中使用@声明变量示例(逐字标识符)

    C#中使用@声明变量示例(逐字标识符)

    这篇文章主要介绍了C#中使用@声明变量示例(逐字标识符)在C#中,@符号不仅可以加在字符串常量之前,使字符串不作转义之用,还可以加在变量名之前,使变量名与关键字不冲突,这种用法称为“逐字标识符”,需要的朋友可以参考下
    2015-06-06
  • Winform实现鼠标可穿透的窗体镂空效果

    Winform实现鼠标可穿透的窗体镂空效果

    这篇文章主要介绍了Winform实现鼠标可穿透的窗体镂空效果的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • WPF微信聊天和通讯录按钮样式代码分享

    WPF微信聊天和通讯录按钮样式代码分享

    这篇文章主要为大家分享了WPF微信聊天和通讯录按钮样式代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 深入解析C#中的abstract抽象类

    深入解析C#中的abstract抽象类

    这篇文章主要介绍了深入解析C#中的abstract抽象类,包括定义抽象类等C#面相对象编程中的基础知识,需要的朋友可以参考下
    2016-01-01
  • C#中PuppeteerSharp库的应用详解

    C#中PuppeteerSharp库的应用详解

    PuppeteerSharp是一个针对Google Chrome浏览器的高级API库,这篇文章主要为大家详细介绍了PuppeteerSharp库在C#中的具体应用,需要的小伙伴可以了解下
    2024-01-01

最新评论