在工作中,为了防止文件被随意复制和传播,通常我们会选择在文档中添加水印来对文件进行有效保护。文字水印是比较常见的一种保护手段,它可以有效防止文件被任意复制和随意打印传播。不过,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中添加水印的更多相关文章

  1. vb.net向Excel中写入值

    根据网上例子结合自己的工具环境修改后测试可以通过 我使用的工具:Microsoft Visual Studio 2010,Excel 2007 一.在D盘新建一个temp文件夹用于存放Excel启动时 ...

  2. Java 在Excel中添加水印(单一水印、平铺水印)

    在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即 ...

  3. C#/VB.NET 获取Excel中图片所在的行、列坐标位置

    本文以C#和vb.net代码示例展示如何来获取Excel工作表中图片的坐标位置.这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列.纵坐标即顶点所在的第几行.下面是获取图 ...

  4. C#/VB.NET 在Excel单元格中应用多种字体格式

    在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符.如果需要对单元格中某些字符设置样式,则可以参考本文中的方法. ...

  5. C#/VB.NET 如何在Excel中使用条件格式设置交替行颜色

    说起高亮数据行,不让人想起了交替颜色行,有的人把交替颜色行也都设置成高亮,不仅不美观,而且对阅读还是个干扰.隔行交替的颜色是为了阅读不串行,这些行只是环境,数据才是主体.那么如何通过C#/VB.NET ...

  6. Excel中的宏--VBA的简单例子

    第一步:点击录制宏 第二步:填写宏的方法名 第三步:进行一系列的操作之后,关闭宏 第四步:根据自己的需要查看,修改宏 第六步:保存,一般是另存为,后缀名为.xlsm,否则宏语言不能保存. 到此为止恭喜 ...

  7. VBA在Excel中的应用(一):改变符合条件单元格的背景颜色

    在使用excel处理数据的时候,为了能更清晰的标示出满足特定条件的单元格,对单元格添加背景色是不错的选择.手工处理的方式简单快捷,但是当遇到大批量数据,就会特别的费时费力,而且不讨好(容易出错).通过 ...

  8. [VBA]用一个简单例子说明如何在Excel中自定义函数

    Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...

  9. VB.Net出口Excel原则

        在VB机房的版本中,我们已经暴露导出Excel特征,此功能已重新接触到不同的理解 一.原理 要实现导出Excel的功能,首先要引用命名空间,目的是能够使用该命名空间下的方法和类 Imports ...

  10. C#/VB.NET对EXCEL图片添加超链接

    在日常工作中,在编辑文档时,为了方便自己或者Boss能够实时查看到需要的网页或者文档是,需要对在Excel中输入的相关文字进行超链接,那么对于一些在Excel中插入的图片我们该怎么实现超链接呢,下面给 ...

随机推荐

  1. rabbitmq原理和应用

    0.1.索引 https://blog.waterflow.link/articles/1663772504649 RabbitMQ 是一个轻量级且易于部署的消息队列.它支持开箱即用的多种消息传递协议 ...

  2. Java 8 Time API

    Java 8 系列文章 持续更新中 日期时间API 也是Java 8重要的更新之一,Java从一开始就缺少一致的日期和时间方法,Java 8 Date Time API是Java核心API的一个非常好 ...

  3. 六、模型层(ORM)

    六.模型层(ORM) Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作. O是object,也就类对象的意 ...

  4. 【单片机入门】(四)应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用

    引言 各位大佬,晚上好啊,在上一篇博客中,我们讲了什么是UART串口通讯,以及使用USB转TTL使得单片机可以和c#上位机做一个串口通讯,接下来,为大家带来PWM的概念原理,以及实际案例,使用PWM对 ...

  5. 京东云开发者|IoT运维 - 如何部署一套高可用K8S集群

    环境 准备工作 配置ansible(deploy 主机执行) # ssh-keygen # for i in 192.168.3.{21..28}; do ssh-copy-id -i ~/.ssh/ ...

  6. 修改linux系统时间

    在Linux系统中,可以用date命令来显示或设定系统的日期与时间 1. 查看系统时间 [root@iZ2ze0gm3scdypc0i15r8yZ ~]# date Tue Aug 16 00:10: ...

  7. civil3d安装教程2022序列号和密钥

    Civil3D2021 WIN10 64位安装步骤:1.先使用"百度网盘客户端"下载C3D21_CN_x64软件安装包到电脑磁盘里,并右击进行解压,安装前先断网,然后找到Autod ...

  8. Java-ArrayList常用方法

    数组的长度不可以发生改变. 但是ArrayList集合的长度是可以随意改变的. 对于ArrayList来说,有一个尖括号代表泛型. 泛型:也就是装在集合当中的所有元素,全都是统一的什么类型. 注意:泛 ...

  9. 【云原生 · Kubernetes】部署Kubernetes集群

    [云原生 · Kubernetes]搭建Harbor仓库 接着上次的内容,后续来了! 在master节点执行脚本k8s_master_install.sh即可完成K8S集群的部署,具体步骤参考如下(1 ...

  10. i春秋xss平台

    点开是个普普通通的登录窗口,没有注册,只有登录,抓住包也没获取什么有用的信息,看了看dalao的wp才知道怎么做,首先抓包然后修改参数的定义来让其报错,pass原本的应该为整数,pass[]=就可以让 ...