C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Excel添加水印

使用C#实现为Excel文档添加水印

作者:2501_93070778

向 Excel 电子表格添加水印是一种常见方法,可用于品牌标识或标记文档保密性,本文演示了如何使用 C# 通过背景图片为 Excel 工作表添加水印效果,有需要的小伙伴可以参考下

向 Excel 电子表格添加水印是一种常见方法,可用于品牌标识或标记文档保密性。虽然 Microsoft Excel 本身没有直接提供水印功能,但可以通过在工作表页眉或页脚插入图片,或将图片设置为背景的方式来实现类似效果。

本文将介绍如何在 C# 中通过页眉图片或背景图片,为 Excel 添加水印效果。

准备开发环境

在开始之前,需要在 .NET 项目中引用相关 Excel 处理库的 DLL 文件。可以通过 NuGet 安装或从官方渠道下载后手动添加引用。

PM> Install-Package Spire.XLS

页眉图片水印 vs 背景图片水印

页眉图片水印

优点:

缺点:

背景图片水印

优点:水印会铺满整个工作表区域,视觉效果更统一

缺点:不会出现在打印结果中,打印输出时水印会消失

使用 C# 通过页眉图片向 Excel 添加水印

Spire.XLS for .NET 提供了 PageSetup 类,可用于控制打印工作表的外观和布局相关设置。该类包含 CenterHeader 和 CenterHeaderImage 属性,可用于在页眉的居中区域设置图片。

以下是在 C# 中通过页眉图片为 Excel 添加水印的步骤:

示例代码如下:

using Spire.Xls;
using System.Drawing;

namespace 通过页眉为Excel添加水印
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Workbook 对象
            Workbook workbook = new Workbook();

            // 加载 Excel 文档
            workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");

            // 加载图片文件
            Image image = Image.FromFile("C:\\Users\\Administrator\\Desktop\\confidential.png");

            // 遍历文件中的所有工作表
            for (int i = 0; i < workbook.Worksheets.Count; i++)
            {
                // 获取指定工作表
                Worksheet worksheet = workbook.Worksheets[i];

                // 在页眉中间区域添加图片占位符
                worksheet.PageSetup.CenterHeader = "&G";

                // 将图片添加到页眉中间位置
                worksheet.PageSetup.CenterHeaderImage = image;
            }

            // 保存结果文件
            workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2016);

            // 释放资源
            workbook.Dispose();
        }
    }
}

使用 C# 通过背景图片为 Excel 添加水印

在 Spire.XLS for .NET 中,PageSetup 类提供了 BackgroundImage 属性,可用于获取或设置工作表的背景图片,从而实现水印效果。

以下是在 C# 中通过背景图片为 Excel 添加水印的操作步骤:

示例代码如下:

using Spire.Xls;
using System.Drawing;

namespace 通过背景图片为Excel添加水印
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Workbook 对象
            Workbook workbook = new Workbook();

            // 加载 Excel 文档
            workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");

            // 加载图片文件
            Bitmap bitmapImage = new Bitmap(Image.FromFile("C:\\Users\\Administrator\\Desktop\\sample.png"));

            // 遍历文件中的所有工作表
            for (int i = 0; i < workbook.Worksheets.Count; i++)
            {
                // 获取指定工作表
                Worksheet worksheet = workbook.Worksheets[i];

                // 将图片设置为工作表背景
                worksheet.PageSetup.BackgoundImage = bitmapImage;
            }

            // 保存结果文件
            workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2016);

            // 释放资源
            workbook.Dispose();
        }
    }
}

知识扩展

向 Excel 文档添加水印在 C# 中没有单一的官方标准方法,通常需要通过模拟来实现,最稳妥、功能最强大的方式是使用成熟的商业库。

主流方案可分为核心推荐方案和备选与底层方案,以下分别介绍。

对于企业级应用,首选 Aspose.Cells 或 Spire.XLS,稳定高效且功能全面。若对成本敏感且水印需求简单,可优先考虑 EPPlus

核心推荐:使用商业库

1.Aspose.Cells

Aspose.Cells 可以精准地将艺术字 (WordArt) 添加到工作表作为水印,并调整其填充色、透明度等,实现最佳效果。

1. 安装 NuGet 包在“程序包管理器控制台”中运行:

Install-Package Aspose.Cells

2. 添加文本水印的完整代码

using Aspose.Cells;
using Aspose.Cells.Drawing;
using System.Drawing;

public static void AddTextWatermarkWithAspose()
{
    // 1. 创建工作簿对象(也可直接加载已有文件)
    Workbook workbook = new Workbook();
    
    // 2. 获取第一个工作表
    Worksheet sheet = workbook.Worksheets[0];
    
    // 3. 添加艺术字形状作为水印
    // AddTextEffect(预设效果, 水印文字, 字体名, 字号, 字体倾斜, 粗体, 上偏移, 左偏移, 高度, 宽度, 旋转角度, ZOrder)
    Aspose.Cells.Drawing.Shape watermark = sheet.Shapes.AddTextEffect(
        MsoPresetTextEffect.TextEffect1,
        "机密文档",
        "Arial Black",
        50,
        false,
        true,
        18, 8, 
        1, 1,
        130, 800
    );
    
    // 4. 设置水印的填充属性
    watermark.FillFormat.SetOneColorGradient(Color.Red, 0.9, GradientStyleType.Horizontal, 1);
    watermark.FillFormat.Transparency = 0.9;
    
    // 5. 使边框不可见
    watermark.LineFormat.IsVisible = false;
    
    // 6. 保存工作簿
    workbook.Save("WatermarkedWorkbook.xlsx");
}

该方法通过 AddTextEffect() 添加艺术字,并调整填充色和透明度来模拟文本水印,功能强大且效果专业。其核心参数 ZOrder 为 800 表示水印层叠于正文之上但透明度极高,不影响正常编辑。

支持与资源上述代码基于 Aspose.Cells for .NET API。如果在开发中遇到问题,可以查阅官方文档,或访问其支持论坛寻求帮助。

2.方案二:Spire.XLS

Spire.XLS 可以通过两种方式实现水印效果:

using Spire.Xls;
using System.Drawing;

public static void AddWatermarkWithSpire()
{
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("input.xlsx");
    
    // 设置字体
    Font font = new Font("宋体", 40);
    string watermarkText = "内部使用";
    
    foreach (Worksheet sheet in workbook.Worksheets)
    {
        // 根据文本生成图片水印
        Image img = DrawTextWatermark(watermarkText, font, Color.LightCoral, Color.White, 
                                      sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
        // 将图片作为页眉添加到工作表
        sheet.PageSetup.LeftHeaderImage = img;
        sheet.PageSetup.LeftHeader = "&amp;G";
        
        // 切换视图模式以预览水印效果
        sheet.ViewMode = ViewMode.Layout;
    }
    
    workbook.SaveToFile("output.xlsx");
}

private static Image DrawTextWatermark(string text, Font font, Color textColor, 
                                         Color backColor, double height, double width)
{
    // 创建一个与工作表页面大小相同的图像
    Image img = new Bitmap((int)width, (int)height);
    Graphics drawing = Graphics.FromImage(img);
    
    // 计算文本尺寸并居中
    SizeF textSize = drawing.MeasureString(text, font);
    drawing.TranslateTransform(((int)width - textSize.Width) / 2, 
                                ((int)height - textSize.Height) / 2);
    
    // 设置文字颜色和背景填充
    drawing.DrawString(text, font, new SolidBrush(textColor), 0, 0);
    drawing.FillRectangle(new SolidBrush(backColor), 0, 0, img.Width, img.Height);
    
    // 释放资源
    drawing.Dispose();
    return img;
}

此方法通过自定义 DrawTextWatermark 函数将文本动态生成为图像,然后设置为页眉图片,实现了“打印即显示”的水印效果。

备选与底层方案

3.EPPlus (开源)

EPPlus 可以将水印图片插入到 Excel 文档的页眉或页脚中,使其在打印时可见。

特别注意:EPPlus 从 5.0 版本起已转为商业许可。这意味着如果你用于商业用途,需要购买许可证,否则会触发限制。如果你的项目对成本极为敏感,且仅在非商业环境中使用,可以考虑寻找更早期的版本,但更推荐选择上述商业库或继续使用免费方案 Spire.XLS。

using OfficeOpenXml;
using System.IO;
public static void AddWatermarkWithEPPlus()
{
    using (ExcelPackage package = new ExcelPackage(new FileInfo("input.xlsx")))
    {
        var worksheet = package.Workbook.Worksheets[0];
        // 在页眉居中位置插入图片作为水印
        worksheet.HeaderFooter.OddHeader.InsertPicture(
            new FileInfo("watermark.png"), 
            PictureAlignment.Centered
        );
        worksheet.HeaderFooter.EvenHeader.InsertPicture(
            new FileInfo("watermark.png"), 
            PictureAlignment.Centered
        );
        package.Save();
    }
}

4.Interop / Open XML SDK

总结

本文演示了如何使用 C# 通过背景图片为 Excel 工作表添加水印效果。整体实现思路是利用 Spire.XLS 提供的 Workbook 和 PageSetup 功能,将图片设置为工作表的背景,从而在视觉上形成水印效果。

实现流程主要包括:先创建 Workbook 对象并加载目标 Excel 文件,然后读取图片并转换为 Bitmap 格式。接着遍历工作簿中的所有工作表,将背景图片应用到每个 Sheet 的 PageSetup 属性中,最后保存为新的 Excel 文件并释放资源。

这种方式可以快速为多个工作表统一添加背景水印,适用于需要批量标识文档或进行品牌标注的场景。不过需要注意的是,背景图片水印在打印时通常不会被保留,因此更适合用于屏幕展示场景。

到此这篇关于使用C#实现为Excel文档添加水印的文章就介绍到这了,更多相关C# Excel添加水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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