C#/VB.NET 在Excel中添加水印
在工作中,为了防止文件被随意复制和传播,通常我们会选择在文档中添加水印来对文件进行有效保护。文字水印是比较常见的一种保护手段,它可以有效防止文件被任意复制和随意打印传播。不过,Excel默认并没有水印功能。此时,我们可以把插入的艺术字作为水印,将水印和工作表融合在一起,以防止文档被复制传播。那么如何轻松实现在Excel中添加水印呢?别着急,我给大家整理了一个高效便捷的方法,通过编程方式达到此目的。下面是我整理的具体步骤,并附上C#/VB.NET代码供大家参考。
程序环境:
本次测试时,在程序中引入 Spire.XLS.dll 文件。
方法1:
将Free Spire.XLS for .NET 下载到本地,解压,找到 BIN 文件夹下的 Spire.XLS.dll。然后在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径 BIN 文件夹下的 dll 文件添加引用至程序。
方法2::
通过NuGet安装。可通过以下 2 种方法安装:
1. 可以在 Visual Studio 中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理 NuGet 包”,然后搜索“Free Spire.XLS”,点击“安装”。等待程序安装完成。
2. 将以下内容复制到 PM 控制台安装。
Install-Package FreeSpire.XLS -Version 12.7
在Excel中添加水印
以下是详细步骤:
- 创建Workbook类的实例。
- 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
- 创建字体并定义文本。
- 遍历 Excel 文件中的所有工作表。
- 使用 DrawWatermarkImage() 方法创建基于文本的水印图像。
- 通过Worksheet.PageSetup.LeftHeaderImage 属性将图片设置为每个工作表左页眉的图像源。
- 将 Worksheet.PageSetup.LeftHeader 属性设置为“&G”,在左侧标题部分显示图像。
- 将工作表的查看模式更改为页面布局,以便查看水印。
- 使用 Workbook.SaveToFile() 方法保存结果文件。
完整代码
C#
using Spire.Xls;
using System.Drawing; namespace AddWatermark
{
class Program
{
static void Main(string[] args)
{
//初始化 Workbook 类的实例并加载 Excel 文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("示例文档.xlsx"); //创建字体
Font font = new Font("宋体", 40);
//定义文本
string watermark = "内部使用"; //遍历文件中的所有工作表
foreach (Worksheet sheet in workbook.Worksheets)
{
//调用 DrawWatermarkImage() 方法根据文本创建图像
Image imgWtrmrk = DrawWatermarkImage(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth); //将图像添加到每个工作表的左侧标题部分
sheet.PageSetup.LeftHeaderImage = imgWtrmrk;
sheet.PageSetup.LeftHeader = "&G"; //将工作表的查看模式更改为页面布局以查看水印
sheet.ViewMode = ViewMode.Layout;
} //保存结果文件
workbook.SaveToFile("添加水印.xlsx", ExcelVersion.Version2013);
} private static Image DrawWatermarkImage(string text, Font font, Color textColor, Color backColor, double height, double width)
{
//创建具有指定宽度和高度的图像
Image img = new Bitmap((int)width, (int)height);
//从图像创建一个 Graphics 对象
Graphics drawing = Graphics.FromImage(img); //获取文字的大小
SizeF textSize = drawing.MeasureString(text, font); //通过将指定的转换前置到图形的变换矩阵来更改坐标系统的原点
drawing.TranslateTransform(((int)width - textSize.Width) / 2, ((int)height - textSize.Height) / 2); //应用旋转
drawing.RotateTransform(-45); //通过将指定的转换前置到图形的变换矩阵来更改坐标系统的原点
drawing.TranslateTransform(-((int)width - textSize.Width) / 2, -((int)height - textSize.Height) / 2); //绘制背景
drawing.Clear(backColor); //为文本创建画笔
Brush textBrush = new SolidBrush(textColor); //将文本绘制到图形的中心位置
drawing.DrawString(text, font, textBrush, ((int)width - textSize.Width) / 2, ((int)height - textSize.Height) / 2);
drawing.Save();
return img;
}
}
}
VB.NET
Imports Spire.Xls
Imports System.Drawing Namespace AddWatermark
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'初始化 Workbook 类的新实例并加载 Excel 文件
Dim workbook As Workbook = New Workbook()
workbook.LoadFromFile("示例文档.xlsx") '创建字体
Dim font As Font = New Font("宋体", 40)
'定义文本
Dim watermark = "内部使用" '遍历文件中的所有工作表
For Each sheet As Worksheet In workbook.Worksheets
'调用 DrawWatermarkImage() 方法根据文本创建图像
Dim imgWtrmrk As Image = DrawWatermarkImage(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth) '将图像添加到每个工作表的左侧标题部分
sheet.PageSetup.LeftHeaderImage = imgWtrmrk
sheet.PageSetup.LeftHeader = "&G" '将工作表的查看模式更改为页面布局以查看水印
sheet.ViewMode = ViewMode.Layout
Next '保存结果文件
workbook.SaveToFile("添加水印.xlsx", ExcelVersion.Version2013)
End Sub Private Shared Function DrawWatermarkImage(ByVal text As String, ByVal font As Font, ByVal textColor As Color, ByVal backColor As Color, ByVal height As Double, ByVal width As Double) As Image
'创建具有指定宽度和高度的图像
Dim img As Image = New Bitmap(width, height)
'从图像创建一个 Graphics 对象
Dim drawing As Graphics = Graphics.FromImage(img) '获取文字的大小
Dim textSize As SizeF = drawing.MeasureString(text, font) '通过将指定的转换前置到图形的变换矩阵来更改坐标系统的原点
drawing.TranslateTransform((CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2) '应用旋转
drawing.RotateTransform(-45) '通过将指定的转换前置到图形的变换矩阵来更改坐标系统的原点
drawing.TranslateTransform(-(CInt(width) - textSize.Width) / 2, -(CInt(height) - textSize.Height) / 2) '绘制背景
drawing.Clear(backColor) '为文本创建画笔
Dim textBrush As Brush = New SolidBrush(textColor) '将文本绘制到图形的中心位置
drawing.DrawString(text, font, textBrush, (CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2)
drawing.Save()
Return img
End Function
End Class
End Namespace
效果图

—本文完—
C#/VB.NET 在Excel中添加水印的更多相关文章
- vb.net向Excel中写入值
根据网上例子结合自己的工具环境修改后测试可以通过 我使用的工具:Microsoft Visual Studio 2010,Excel 2007 一.在D盘新建一个temp文件夹用于存放Excel启动时 ...
- Java 在Excel中添加水印(单一水印、平铺水印)
在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即 ...
- C#/VB.NET 获取Excel中图片所在的行、列坐标位置
本文以C#和vb.net代码示例展示如何来获取Excel工作表中图片的坐标位置.这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列.纵坐标即顶点所在的第几行.下面是获取图 ...
- C#/VB.NET 在Excel单元格中应用多种字体格式
在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符.如果需要对单元格中某些字符设置样式,则可以参考本文中的方法. ...
- C#/VB.NET 如何在Excel中使用条件格式设置交替行颜色
说起高亮数据行,不让人想起了交替颜色行,有的人把交替颜色行也都设置成高亮,不仅不美观,而且对阅读还是个干扰.隔行交替的颜色是为了阅读不串行,这些行只是环境,数据才是主体.那么如何通过C#/VB.NET ...
- Excel中的宏--VBA的简单例子
第一步:点击录制宏 第二步:填写宏的方法名 第三步:进行一系列的操作之后,关闭宏 第四步:根据自己的需要查看,修改宏 第六步:保存,一般是另存为,后缀名为.xlsm,否则宏语言不能保存. 到此为止恭喜 ...
- VBA在Excel中的应用(一):改变符合条件单元格的背景颜色
在使用excel处理数据的时候,为了能更清晰的标示出满足特定条件的单元格,对单元格添加背景色是不错的选择.手工处理的方式简单快捷,但是当遇到大批量数据,就会特别的费时费力,而且不讨好(容易出错).通过 ...
- [VBA]用一个简单例子说明如何在Excel中自定义函数
Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...
- VB.Net出口Excel原则
在VB机房的版本中,我们已经暴露导出Excel特征,此功能已重新接触到不同的理解 一.原理 要实现导出Excel的功能,首先要引用命名空间,目的是能够使用该命名空间下的方法和类 Imports ...
- C#/VB.NET对EXCEL图片添加超链接
在日常工作中,在编辑文档时,为了方便自己或者Boss能够实时查看到需要的网页或者文档是,需要对在Excel中输入的相关文字进行超链接,那么对于一些在Excel中插入的图片我们该怎么实现超链接呢,下面给 ...
随机推荐
- python不确定性计算之模糊动态聚类实验
模糊动态聚类实验 本实验所采用的模糊聚类分析方法是基于模糊关系上的模糊聚类法,也称为系统聚类分析法,可分为三步: 第一步:数据标准化,建立模糊矩阵 第二步:建立模糊相似矩阵 第三步:聚类 本程序读取E ...
- maven-入门到入土
详情见代码重工:连接http://heavy_code_industry.gitee.io/code_heavy_industry/pro002-maven/
- 第一百零七篇:基本数据类型(undefined,null,boolean类型)
好家伙, 本篇内容为<JS高级程序设计>第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Numb ...
- 【ASP.NET Core】MVC控制器的各种自定义:应用程序约定的接口与模型
从本篇起,老周会连发N篇水文,总结一下在 MVC 项目中控制器的各种自定义配置. 本文内容相对轻松,重点讨论一下 MVC 项目中的各种约定接口.毕竟你要对控制器做各种自定义时,多数情况会涉及到约定接口 ...
- Linux内核替换的一种简单方法
前言 使用现有centos的镜像,在海光机器上出现了无法运行的情况,grub引导后就只剩下光标一直在闪,无任何字符输出.这种情况大概率是因为Linux的内核无法运行在海光的CPU上所导致的. 已得知L ...
- 2022春每日一题:Day 33
题目:[USACO 6.1.3] Cow XOR 没找到这题具体网址,这个题就是求最大异或区间(总长度尽量小,右端点尽量大) 嗯很显然一个[l,r]的异或和=s[r]s[l-1],那么现在有了优秀的n ...
- 轻量级领域驱动设计DDD Lite在嵌入式系统重构中的应用
前言 目前,关于领域驱动设计(Domain Driven Design)DDD的培训,材料,视频都比较多,大家对DDD的一些概念都有所了解,但是在实际使用过程中,有很多的问题.例如 为什么DDD的架构 ...
- Go语言输出函数fmt.Print、fmt.Printf、fmt.Println的用法区别
fmt 包的介绍 fmt = format,是一种格式化输出函数汇总包,用于格式化输出 fmt.Print === 原样输出 Print formats using the default forma ...
- day22-web开发会话技术04
WEB开发会话技术04 14.Session生命周期 14.1生命周期说明 public void setMaxInactiveInterval(int interval):设置session的超时时 ...
- 关于deepin-wine或wine设置PATH环境变量的方法
前言 更改wine中PATH变量主要是为了能在 cmd输入一些命令而已,这里你可能会问怎么用cmd? deepin-wine cmd 这样就进入了cmd,而设置PATH 环境变量不能像windows一 ...