首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用 C# 打印 Excel 文档(详细教程)

使用 C# 打印 Excel 文档(详细教程)

原创
作者头像
用户12495000
修改2026-05-20 16:41:00
修改2026-05-20 16:41:00
910
举报

在 .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 包管理器安装:

代码语言:javascript
复制
Install-Package Spire.XLS

或者在 Visual Studio 中通过 NuGet 包管理器搜索 Spire.XLS 进行安装。

二、核心命名空间引入

代码语言:javascript
复制
using Spire.Xls;
using System.Drawing.Printing;

三、打印到物理打印机

3.1 完整代码示例

代码语言:javascript
复制
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 文档
代码语言:javascript
复制
Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xlsx");

创建 Workbook 对象并通过 LoadFromFile 方法加载需要打印的 Excel 文件。

页面设置(PageSetup)

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

  • 页边距设置TopMarginBottomMarginLeftMarginRightMargin 设置上下左右边距,单位为英寸。
  • 网格线IsPrintGridlines = true 让打印结果保留网格线,更易于阅读数据。
  • 缩放设置
    • FitToPagesWide = 1:将所有列缩放到一页宽
    • FitToPagesTall = 0:不限制行数,按实际高度分页
  • 纸张大小PaperSize = PaperSizeType.PaperA4 设置为 A4 纸
打印机配置与执行
代码语言:javascript
复制
PrinterSettings settings = workbook.PrintDocument.PrinterSettings;
settings.PrinterName = "Your Printer Name";
workbook.PrintDocument.Print();

获取打印机设置对象,指定目标打印机名称,最后调用 Print() 方法执行打印。

四、打印到虚拟打印机(Microsoft Print to PDF)

4.1 完整代码示例

代码语言:javascript
复制
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 系统默认打印机

代码语言:javascript
复制
// 获取默认打印机名称
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"

获取系统所有打印机

代码语言:javascript
复制
foreach (string printer in PrinterSettings.InstalledPrinters)
{
    Console.WriteLine(printer);
}

六、更多页面设置选项

6.1 常用 PageSetup 属性

代码语言:javascript
复制
// 设置打印方向
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 纸张大小类型

代码语言:javascript
复制
pageSetup.PaperSize = PaperSizeType.PaperA3;
pageSetup.PaperSize = PaperSizeType.PaperA4;
pageSetup.PaperSize = PaperSizeType.PaperA5;
pageSetup.PaperSize = PaperSizeType.PaperLetter;
pageSetup.PaperSize = PaperSizeType.PaperLegal;

七、高级场景:静默打印

如果需要实现无对话框的静默打印:

代码语言:javascript
复制
// 隐藏打印对话框
workbook.PrintDocument.PrintController = new StandardPrintController();

// 设置打印份数
workbook.PrintDocument.PrinterSettings.Copies = 2;

// 静默执行打印
workbook.PrintDocument.Print();

八、异常处理

建议在实际应用中加入异常处理:

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、准备工作
    • 1.1 环境要求
    • 1.2 安装 Spire.XLS for .NET
  • 二、核心命名空间引入
  • 三、打印到物理打印机
    • 3.1 完整代码示例
    • 3.2 代码详解
      • 加载 Excel 文档
      • 页面设置(PageSetup)
      • 打印机配置与执行
  • 四、打印到虚拟打印机(Microsoft Print to PDF)
    • 4.1 完整代码示例
    • 4.2 关键点说明
  • 五、常见打印机名称参考
    • Windows 系统默认打印机
    • 常见打印机名称
    • 获取系统所有打印机
  • 六、更多页面设置选项
    • 6.1 常用 PageSetup 属性
    • 6.2 纸张大小类型
  • 七、高级场景:静默打印
  • 八、异常处理
  • 九、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档