C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#打印Excel

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

作者:秋天的落叶铺满小路

在 .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 环境要求

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)

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

打印机配置与执行

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的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文