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;
  }

 }
}

感谢您的浏览,希望本文能给您带来一定的帮助。

(0)

相关推荐

  • .net c# gif动画如何添加图片水印实现思路及代码

    复制代码 代码如下: public static Bitmap WaterMarkWithText(System.Drawing.Bitmap origialGif, string text,string filePath) { //用于存放桢 List<Frame> frames = new List<Frame>(); //如果不是gif文件,直接返回原图像 if (origialGif.RawFormat.Guid != System.Drawing.Imaging.Imag

  • C#实现Excel动态生成PivotTable

    Excel 中的透视表对于数据分析来说,非常的方便,而且很多业务人员对于Excel的操作也是非常熟悉的,因此用Excel作为分析数据的界面,不失为一种很好的选择.那么如何用C#从数据库中抓取数据,并在Excel 动态生成PivotTable呢?下面结合实例来说明. 一般来说,数据库的设计都遵循规范化的原则,从而减少数据的冗余,但是对于数据分析来说,数据冗余能够提高数据加载的速度,因此为了演示透视表,这里现在数据库中建立一个视图,将需要分析的数据整合到一个视图中.如下图所示: 数据源准备好后,我们

  • C#图片添加水印的实现代码

    本文实例介绍了C#图片添加水印的实现方法,可以为图片加文字水印,及判断是否是图片文件,分享给大家供大家参考,具体内容如下 效果图: 以下是HovercWarter类的代码: using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace HoverTreeBatch.HovercFrame { public class HovercWarter { public static Image AddText

  • C#的Excel导入、导出

    本篇主要介绍C#的Excel导入.导出,供大家参考,具体内容如下 一. 介绍 1.1 第三方类库:NPOI 说明:NPOI是POI项目的.NET 版本,可用于Excel.Word的读写操作. 优点:不用装Office环境. 下载地址:http://npoi.codeplex.com/releases 1.2 Excel结构介绍 工作簿(Workbook):每个Excel文件可理解为一个工作簿. 工作表(Sheet):一个工作簿(Workbook)可以包含多个工作表. 行(row):一个工作表(S

  • C#(.net)水印图片的生成完整实例

    本文以一个完整实例讲述了C#水印图片的生成方法.是非常实用的技巧.分享给大家供大家参考. 具体实例代码如下: /* * * 使用说明: * 建议先定义一个WaterImage实例 * 然后利用实例的属性,去匹配需要进行操作的参数 * 然后定义一个WaterImageManage实例 * 利用WaterImageManage实例进行DrawImage(),印图片水印 * DrawWords()印文字水印 * */ using System; using System.Drawing; using

  • C#组件系列 你值得拥有的一款Excel处理神器Spire.XLS

    前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点是NPOI搞不定的: 1.导入Excel后,需要切割Excel的Sheet页,然后每个Sheet页单独生成一个PDF文件. 2.导出Excel的时候,项目里面需要将一些数据表格以图表的形式在Excel里面展示. 找了一圈资料,对于Excel生成pdf,网上的答案千篇一律:使用COM组件的方式,通过调

  • C# 给站点指定位置的某种格式的图片添加水印

    复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; usi

  • C#.NET 图片水印添加代码

    本文实例为大家分享了C#.NET添加 图片水印的方法,供大家参考,具体内容如下 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; namespace Pub.Class { /// <summary> /// 添加水印类 只支持添加图片水印 /// </summary> public class Wate

  • C# 添加文字水印类代码

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.IO; using System.Drawing.Imaging; namespace Chen { public class warterfont { public void addtexttoimg(string filename, string text) { if

  • C# 添加图片水印类实现代码

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.IO; using System.Drawing.Imaging; using System.Web; using System.Drawing.Drawing2D; using System.Reflection; namespace Chen { public clas

随机推荐