来源:一方Excel
有时候我们在做一些表格的时候,希望可以在表格中显示出自己的水印,彰显一下自己的特点,下面我们介绍3种设置Excel水印的方法,来
首先,第一种方法是常规的方法,点击插入选项卡—点击图片--设置图片格式—颜色—冲蚀,这样就将图片设置到页眉了,然后我们这边将焦点放在“&[图片]”前面,然后回车再回车,将水印设置到合适的位置,这样就可以了,当然这种方法的话,水印是只有打印的时候才可以看得到,打印出来后会显示在表中。
第二中方法,效果也是跟上面这种类似,也要打印的时候才能显示出来,或者在页面布局模式中才能看得到,先添加以下代码,
------为单个工作表设置可打印的水印-------
Sub 为工作表设置可打印的水印()
Dim Pic As String, rng As Range '声明变量
Pic = Application.GetOpenFilename("图片文件 (*.jpg; *.bmp),*.jpg; *.bmp") '弹出对话框,让用户选择一张作为水印的图片
If Pic = "False" Then Exit Sub '如果未选择图片则结束程序
ActiveSheet.PageSetup.LeftHeaderPicture.Filename = Pic '指定图片页眉的图片路径
ActiveSheet.PageSetup.LeftHeader = "&G" '让左边页眉显示图片
End Sub
------为全部工作表设置可打印的水印-------
Sub 为所有工作表设置可打印的水印()
Dim Pic As String, rng As Range, sht As Worksheet '声明变量
Pic = Application.GetOpenFilename("图片文件 (*.jpg; *.bmp),*.jpg; *.bmp") '弹出对话框,让用户选择一张作为水印的图片
If Pic = "False" Then Exit Sub '如果未选择图片则结束程序
For Each sht In Worksheets '遍历所有工作表
sht.PageSetup.LeftHeaderPicture.Filename = Pic '指定图片页眉的图片路径
sht.PageSetup.LeftHeader = "&G" '让左边页眉显示图片
Next sht
End Sub
效果如下:
从上面两个例子可以看到,该类水印只在打印预览或将视图模式为“页面视图”下才能直观可见,正常模式下我们是看不到这个水印的,这就比较坑爹了,当然我们可以设置一些图片的透明度,然后用VBA代码设置为不可编辑,但是这样做有一个问题,就是很容易被更改掉,毕竟,Excel的加密安全性太低,所以,如果我们要在Excel中添加在常规模式下可见的图片水印或者文字水印,可以用Visual studio里面制作一个插件,使用Spire.XLS组件给Excel工作表添加水印,代码如下:
---------添加背景文本图片水印------------
- static void Main(string[] args)
- {
- //加载Excel文档
- Workbook workbook = new Workbook();
- workbook.LoadFromFile("Test.xlsx");
- //设置水印文字和字体
- Font font = new Font("宋体", 36);
- String watermark = "背景水印";
- //设置背景图片为水印
- foreach (Worksheet sheet in workbook.Worksheets)
- {
- //调用DrawText()方法创建的图片
- Image imgWtrmrk = DrawText(watermark, font,Color.LightCoral,Color.White, sheet.PageSetup.PageHeight,sheet.PageSetup.PageWidth);
- sheet.PageSetup.BackgoundImage = imgWtrmrk as Bitmap;
- }
- //保存文档并预览
- workbook.SaveToFile("result.xlsx", ExcelVersion.Version2010);
- System.Diagnostics.Process.Start("result.xlsx");
- }
- private static Image DrawText(String text, System.Drawing.Fontfont,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.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;
- }
当然,没有人会为了加个水印去制作一个插件,就像没人会给水沟修座桥,当然要是开发插件的话,那有这样一个小功能,就必须要有了哦。
,