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#调用sql2000存储过程方法小结

    C#调用sql2000存储过程方法小结

    这篇文章主要介绍了C#调用sql2000存储过程的方法,以实例形式分别对调用带输入参数及输出参数的存储过程进行了详细分析,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • c#基数排序Radix sort的实现方法

    c#基数排序Radix sort的实现方法

    这篇文章主要介绍了c#基数排序Radix sort的实现方法,有需要的朋友可以参考一下
    2014-01-01
  • C# Marshal类基本概念和入门实例讲解

    C# Marshal类基本概念和入门实例讲解

    这篇文章主要介绍了C# Marshal类基本概念和入门实例,具有很好的参考价值,希望对大家有所帮助。
    2023-02-02
  • Unity UGUI LayoutRebuilder自动重建布局介绍及使用

    Unity UGUI LayoutRebuilder自动重建布局介绍及使用

    这篇文章主要为大家介绍了Unity UGUI LayoutRebuilder自动重建布局介绍及使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • C#导出数据到excel如何提升性能

    C#导出数据到excel如何提升性能

    这篇文章主要介绍了C#导出数据到excel如何提升性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 使用C#代码从工作簿中删除指定工作表

    使用C#代码从工作簿中删除指定工作表

    精简 Excel 工作簿、删除多余或不再使用的工作表,是一种非常有效的整理方式,在本文中,你将学习如何使用 Spire.XLS for .NET 库,通过 C# 从 Excel 工作簿中删除指定的工作表,需要的朋友可以参考下
    2026-01-01
  • C#简单的特殊输出实例

    C#简单的特殊输出实例

    这篇文章主要介绍了C#简单的特殊输出,以实例实现了针对一些特殊字符与位置的输出控制,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • Unity ScrollView实现无限滑动效果

    Unity ScrollView实现无限滑动效果

    这篇文章主要为大家详细介绍了Unity ScrollView实现无限滑动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#串口通信总是丢数据的原因及解决方案

    C#串口通信总是丢数据的原因及解决方案

    在上位机开发中,串口通信是一个非常常见的通信方式,尤其是在与嵌入式设备、PLC、传感器等硬件设备进行交互时,串口通信简单、直接且广泛应用,但它也有自己的局限性,那么,为什么你的C#串口通信总是丢数据?本文将深度分析串口通信丢数据的原因,并提供一些有效的解决方案
    2025-02-02
  • C#中lock关键字的使用小结

    C#中lock关键字的使用小结

    在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用
    2025-07-07

最新评论