C#给Excel添加水印实例详解
作者:Yesi 发布时间:2022-02-01 22:30:51
C#中如何给Excel添加水印
我们知道Microsoft Excel并没有内置的功能直接给Excel表添加水印,但是其实我们可以用其他变通的方式来解决此问题,如通过添加页眉图片或艺术字的方法来模仿水印的外观。所以在这篇文章中,我将向您演示来如何通过在Excel中创建和插入页眉图片来为excel添加水印。之前我也分享了如何给word文档添加水印和pdf文件添加水印的方法,有需要也可以参考。
这里我下载了一个E-iceblue公司开发的免费版的Excel组件- Free Spire.XLS,这样既节省时间,又简化了代码。
控件安装后,创建项目,添加安装目录下的dll文件作为项目的引用,并添加如下命名空间:
using System;
using System.Drawing;
using System.Windows.Forms;
using Spire.Xls;
这是原excel表的截图:
以下是详细步骤和代码片段:
步骤1:首先定义一个DrawText()方法,并在字符串的内容基础上创建一个图片。字符串可以是“机密”、“草稿”、“样品”或任何你想要显示为水印的文本。
private static System.Drawing.Image DrawText(String text, System.Drawing.Font font, Color textColor, Color backColor, double height, double width) <br>{
//创建一个指定宽度和高度的位图图像
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;
}
步骤2:初始化一个新的工作簿并加载添加水印的文件。
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.xlsx");
步骤3:调用DrawText()方法新建一个图片,并将页眉图片设置为左对齐。其次,因为在视图模式是布局的状态下页眉图片才会显示,所以一定要记得将视图模式改为布局。
Font font = new System.Drawing.Font("arial", 40);
String watermark = "内部资料";
foreach (Worksheet sheet in workbook.Worksheets)
{
//调用DrawText()方法新建图片
System.Drawing.Image imgWtrmrk = DrawText(watermark, font, System.Drawing.Color.LightCoral, System.Drawing.Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
//将页眉图片设置为左对齐
sheet.PageSetup.LeftHeaderImage = imgWtrmrk;
sheet.PageSetup.LeftHeader = "&G";
//水印只会在此种模式下显现
sheet.ViewMode = ViewMode.Layout;
}
步骤4:保存并打开文件。
workbook.SaveToFile("水印.xlsx", ExcelVersion.Version2010);
System.Diagnostics.Process.Start("水印.xlsx");
效果图:
全部代码:
using System;
using System.Drawing;
using System.Windows.Forms;
using Spire.Xls;
namespace Add_Watermark_To_Excel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//初始化一个新工作簿并加载要添加水印的文件
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.xlsx");
//在页眉插入图片
Font font = new System.Drawing.Font("arial", 40);
String watermark = "内部资料";
foreach (Worksheet sheet in workbook.Worksheets)
{
//调用DrawText()方法新建图片
System.Drawing.Image imgWtrmrk = DrawText(watermark, font, System.Drawing.Color.LightCoral, System.Drawing.Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
//将页眉图片设置为左对齐
sheet.PageSetup.LeftHeaderImage = imgWtrmrk;
sheet.PageSetup.LeftHeader = "&G";
//水印只会在此种模式下显现
sheet.ViewMode = ViewMode.Layout;
}
workbook.SaveToFile("水印.xlsx", ExcelVersion.Version2010);
System.Diagnostics.Process.Start("水印.xlsx");
}
<br> private static System.Drawing.Image DrawText(String text, System.Drawing.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.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;
}
}
}
感谢您的浏览,希望本文能给您带来一定的帮助,谢谢大家对本站的 支持!
来源:http://www.cnblogs.com/Yesi/p/5915251.html


猜你喜欢
- 本文实例讲述了Java编程实现汉字按字母顺序排序的方法。分享给大家供大家参考,具体如下:String[] str0 = new String
- 在项目开发上,hibernate提供的经验简化了不少工作量和兼容性,但这些绝对需要有经验后才能明白,对于新手来说使用起来很困难。hibern
- 前言:众所周知,大家在很多项目中都会使用到图表,具体表现形式为饼图、折线图、柱状图等,但是网上有很多图表架包都是需要收费的,而Google的
- 本文实例讲述了Android编程使用GestureDetector实现简单手势监听与处理的方法。分享给大家供大家参考,具体如下:添加手势识别
- 本文实例讲述了C#获取两个时间的时间差并去除周末的方法。分享给大家供大家参考。具体分析如下:一般来说取时间差的代码很多,但是能够只取工作日的
- C#实现修改文件的创建、修改和访问时间方法,主要是用到了File类的SetCreationTime、SetLastWriteTime、Set
- RollViewPager是一个自动轮播的Viewpager,支持无限循环。 触摸时会暂停播放,直到结束触摸一个延迟周期以后继续播放。 看起
- 下面是函数定义: NTSTATUS RtlAdjustPrivilege ( ULONG Privilege, BOOLEAN Enable
- 如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用CountDownTimer定时器简单封装下此效果,方便我们
- 上一篇 主要介绍了如何通过蓝牙连接到打印机。这一篇,我们就介绍如何向打印机发送打印指令,来打印字符和图片。1. 构造输出流首先要明确一点,就
- 代码如下所示: public static Bitmap
- 最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记
- 1.创建项目时选择redis依赖2.修改配置文件,使用SpringBoot就避免了之前很多的xml文件2.1学过redis的同学都知道这个东
- 本文实例讲述了Android中ProgressBar用法。分享给大家供大家参考,具体如下:在android中会经常用到ProgressBar
- NPOI 2.0将DataTable对象转换为Excel 2007文件提供下载using NPOI.SS.UserModel;using N
- 本文介绍的仿IOS对话框的实现,先来看一下效果图具体代码如下:public class AlertDialog { private Cont
- 1.概述本篇文章仅是Android小白在写一个小程序,内容仅供参考,有很多不足之处希望各位大神指出,文章末尾有整个项目的下载,不需要币,只求
- 话不多说,请看代码:public FileResult GetExcelFile() {  
- 应用场景假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费如果仓库中没有产品,则生产者将产品放入仓库,否
- 本文介绍了android沉浸式状态栏,分享给大家,希望对大家有帮助一、概述现在主流的App设计风格很多都用到了Materail Design