使用C#实现为Excel文档添加水印
向 Excel 电子表格添加水印是一种常见方法,可用于品牌标识或标记文档保密性。虽然 Microsoft Excel 本身没有直接提供水印功能,但可以通过在工作表页眉或页脚插入图片,或将图片设置为背景的方式来实现类似效果。
本文将介绍如何在 C# 中通过页眉图片或背景图片,为 Excel 添加水印效果。
准备开发环境
在开始之前,需要在 .NET 项目中引用相关 Excel 处理库的 DLL 文件。可以通过 NuGet 安装或从官方渠道下载后手动添加引用。
PM> Install-Package Spire.XLS
页眉图片水印 vs 背景图片水印
页眉图片水印
优点:
- 水印会保留在打印输出中,确保最终文档中可见
缺点:
- 在 Excel 的“普通视图”中不可见,只能在“页面布局”或“分页预览”中看到
- 如果要将水印居中显示,需要手动调整页边距,尤其是上边距和左边距
背景图片水印
优点:水印会铺满整个工作表区域,视觉效果更统一
缺点:不会出现在打印结果中,打印输出时水印会消失
使用 C# 通过页眉图片向 Excel 添加水印
Spire.XLS for .NET 提供了 PageSetup 类,可用于控制打印工作表的外观和布局相关设置。该类包含 CenterHeader 和 CenterHeaderImage 属性,可用于在页眉的居中区域设置图片。
以下是在 C# 中通过页眉图片为 Excel 添加水印的步骤:
- 创建 Workbook 对象
- 从指定文件路径加载 Excel 文档
- 使用 Image.FromFile() 方法加载图片
- 从工作簿中获取指定工作表
- 通过将 Worksheet.PageSetup.CenterHeader 属性设置为 “&G”,在页眉中添加图片占位符
- 使用 Worksheet.PageSetup.CenterHeaderImage 属性将图片应用到页眉居中位置
- 将工作簿保存为新的 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 添加水印的操作步骤:
- 创建 Workbook 对象
- 从指定路径加载 Excel 文件
- 加载图片文件,并转换为 Bitmap 格式
- 获取工作簿中的指定工作表
- 通过 Worksheet.PageSetup.BackgroundImage 属性将图片设置为工作表背景
- 将结果保存为新的 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 可以通过两种方式实现水印效果:
- 插入艺术字(类似 Aspose):使用
Shapes.AddTextEffect()方法; - 设置页面布局模式(推荐):利用页眉图片模拟水印,既能保证水印在各视图中可见又不会干扰用户对单元格的编辑,适合批量生成需要在打印时显示水印的文档。
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 = "&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
- Microsoft Office Interop:直接在代码中操作 Excel 应用程序添加水印,但此方案高度不稳定,极易出现资源泄漏,强烈不推荐在生产环境中使用。
- Open XML SDK:能够直接操作文档底层 XML 结构,实现极高自由度的控制,但需要开发者对 Excel 文件格式有深入的了解,代码实现极其复杂,调试成本高。
总结
本文演示了如何使用 C# 通过背景图片为 Excel 工作表添加水印效果。整体实现思路是利用 Spire.XLS 提供的 Workbook 和 PageSetup 功能,将图片设置为工作表的背景,从而在视觉上形成水印效果。
实现流程主要包括:先创建 Workbook 对象并加载目标 Excel 文件,然后读取图片并转换为 Bitmap 格式。接着遍历工作簿中的所有工作表,将背景图片应用到每个 Sheet 的 PageSetup 属性中,最后保存为新的 Excel 文件并释放资源。
这种方式可以快速为多个工作表统一添加背景水印,适用于需要批量标识文档或进行品牌标注的场景。不过需要注意的是,背景图片水印在打印时通常不会被保留,因此更适合用于屏幕展示场景。
到此这篇关于使用C#实现为Excel文档添加水印的文章就介绍到这了,更多相关C# Excel添加水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C#实现的Windows剪贴板监视器功能实例【附demo源码下载】
这篇文章主要介绍了C#实现的Windows剪贴板监视器功能,结合实例形式分析了C#实现剪贴板监视功能所涉及的相关Windows API函数与使用技巧,需要的朋友可以参考下2016-08-08
C# SqlSugar批量执行SQL语句及批量更新实体对象的操作方法
SqlSugar 是一款 老牌 .NET开源ORM框架,由果糖大数据科技团队维护和更新 ,开箱即用最易上手的ORM,这篇文章主要介绍了C# SqlSugar批量执行SQL语句以及批量更新实体对象,需要的朋友可以参考下2024-07-07
深入IComparable与IComparer的排序实例详解
本篇文章是对IComparable与IComparer的排序实例进行了详细的分析介绍,需要的朋友参考下2013-06-06


最新评论