使用C#實(shí)現(xiàn)為Excel文檔添加水印
向 Excel 電子表格添加水印是一種常見(jiàn)方法,可用于品牌標(biāo)識(shí)或標(biāo)記文檔保密性。雖然 Microsoft Excel 本身沒(méi)有直接提供水印功能,但可以通過(guò)在工作表頁(yè)眉或頁(yè)腳插入圖片,或?qū)D片設(shè)置為背景的方式來(lái)實(shí)現(xiàn)類(lèi)似效果。
本文將介紹如何在 C# 中通過(guò)頁(yè)眉圖片或背景圖片,為 Excel 添加水印效果。
準(zhǔn)備開(kāi)發(fā)環(huán)境
在開(kāi)始之前,需要在 .NET 項(xiàng)目中引用相關(guān) Excel 處理庫(kù)的 DLL 文件。可以通過(guò) NuGet 安裝或從官方渠道下載后手動(dòng)添加引用。
PM> Install-Package Spire.XLS
頁(yè)眉圖片水印 vs 背景圖片水印
頁(yè)眉圖片水印
優(yōu)點(diǎn):
- 水印會(huì)保留在打印輸出中,確保最終文檔中可見(jiàn)
缺點(diǎn):
- 在 Excel 的“普通視圖”中不可見(jiàn),只能在“頁(yè)面布局”或“分頁(yè)預(yù)覽”中看到
- 如果要將水印居中顯示,需要手動(dòng)調(diào)整頁(yè)邊距,尤其是上邊距和左邊距
背景圖片水印
優(yōu)點(diǎn):水印會(huì)鋪滿(mǎn)整個(gè)工作表區(qū)域,視覺(jué)效果更統(tǒng)一
缺點(diǎn):不會(huì)出現(xiàn)在打印結(jié)果中,打印輸出時(shí)水印會(huì)消失
使用 C# 通過(guò)頁(yè)眉圖片向 Excel 添加水印
Spire.XLS for .NET 提供了 PageSetup 類(lèi),可用于控制打印工作表的外觀和布局相關(guān)設(shè)置。該類(lèi)包含 CenterHeader 和 CenterHeaderImage 屬性,可用于在頁(yè)眉的居中區(qū)域設(shè)置圖片。
以下是在 C# 中通過(guò)頁(yè)眉圖片為 Excel 添加水印的步驟:
- 創(chuàng)建 Workbook 對(duì)象
- 從指定文件路徑加載 Excel 文檔
- 使用 Image.FromFile() 方法加載圖片
- 從工作簿中獲取指定工作表
- 通過(guò)將 Worksheet.PageSetup.CenterHeader 屬性設(shè)置為 “&G”,在頁(yè)眉中添加圖片占位符
- 使用 Worksheet.PageSetup.CenterHeaderImage 屬性將圖片應(yīng)用到頁(yè)眉居中位置
- 將工作簿保存為新的 Excel 文件
示例代碼如下:
using Spire.Xls;
using System.Drawing;
namespace 通過(guò)頁(yè)眉為Excel添加水印
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 對(duì)象
Workbook workbook = new Workbook();
// 加載 Excel 文檔
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// 加載圖片文件
Image image = Image.FromFile("C:\\Users\\Administrator\\Desktop\\confidential.png");
// 遍歷文件中的所有工作表
for (int i = 0; i < workbook.Worksheets.Count; i++)
{
// 獲取指定工作表
Worksheet worksheet = workbook.Worksheets[i];
// 在頁(yè)眉中間區(qū)域添加圖片占位符
worksheet.PageSetup.CenterHeader = "&G";
// 將圖片添加到頁(yè)眉中間位置
worksheet.PageSetup.CenterHeaderImage = image;
}
// 保存結(jié)果文件
workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2016);
// 釋放資源
workbook.Dispose();
}
}
}使用 C# 通過(guò)背景圖片為 Excel 添加水印
在 Spire.XLS for .NET 中,PageSetup 類(lèi)提供了 BackgroundImage 屬性,可用于獲取或設(shè)置工作表的背景圖片,從而實(shí)現(xiàn)水印效果。
以下是在 C# 中通過(guò)背景圖片為 Excel 添加水印的操作步驟:
- 創(chuàng)建 Workbook 對(duì)象
- 從指定路徑加載 Excel 文件
- 加載圖片文件,并轉(zhuǎn)換為 Bitmap 格式
- 獲取工作簿中的指定工作表
- 通過(guò) Worksheet.PageSetup.BackgroundImage 屬性將圖片設(shè)置為工作表背景
- 將結(jié)果保存為新的 Excel 文件
示例代碼如下:
using Spire.Xls;
using System.Drawing;
namespace 通過(guò)背景圖片為Excel添加水印
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 對(duì)象
Workbook workbook = new Workbook();
// 加載 Excel 文檔
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// 加載圖片文件
Bitmap bitmapImage = new Bitmap(Image.FromFile("C:\\Users\\Administrator\\Desktop\\sample.png"));
// 遍歷文件中的所有工作表
for (int i = 0; i < workbook.Worksheets.Count; i++)
{
// 獲取指定工作表
Worksheet worksheet = workbook.Worksheets[i];
// 將圖片設(shè)置為工作表背景
worksheet.PageSetup.BackgoundImage = bitmapImage;
}
// 保存結(jié)果文件
workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2016);
// 釋放資源
workbook.Dispose();
}
}
}知識(shí)擴(kuò)展
向 Excel 文檔添加水印在 C# 中沒(méi)有單一的官方標(biāo)準(zhǔn)方法,通常需要通過(guò)模擬來(lái)實(shí)現(xiàn),最穩(wěn)妥、功能最強(qiáng)大的方式是使用成熟的商業(yè)庫(kù)。
主流方案可分為核心推薦方案和備選與底層方案,以下分別介紹。
對(duì)于企業(yè)級(jí)應(yīng)用,首選 Aspose.Cells 或 Spire.XLS,穩(wěn)定高效且功能全面。若對(duì)成本敏感且水印需求簡(jiǎn)單,可優(yōu)先考慮 EPPlus。
核心推薦:使用商業(yè)庫(kù)
1.Aspose.Cells
Aspose.Cells 可以精準(zhǔn)地將藝術(shù)字 (WordArt) 添加到工作表作為水印,并調(diào)整其填充色、透明度等,實(shí)現(xiàn)最佳效果。
1. 安裝 NuGet 包在“程序包管理器控制臺(tái)”中運(yùn)行:
Install-Package Aspose.Cells
2. 添加文本水印的完整代碼
using Aspose.Cells;
using Aspose.Cells.Drawing;
using System.Drawing;
public static void AddTextWatermarkWithAspose()
{
// 1. 創(chuàng)建工作簿對(duì)象(也可直接加載已有文件)
Workbook workbook = new Workbook();
// 2. 獲取第一個(gè)工作表
Worksheet sheet = workbook.Worksheets[0];
// 3. 添加藝術(shù)字形狀作為水印
// AddTextEffect(預(yù)設(shè)效果, 水印文字, 字體名, 字號(hào), 字體傾斜, 粗體, 上偏移, 左偏移, 高度, 寬度, 旋轉(zhuǎn)角度, ZOrder)
Aspose.Cells.Drawing.Shape watermark = sheet.Shapes.AddTextEffect(
MsoPresetTextEffect.TextEffect1,
"機(jī)密文檔",
"Arial Black",
50,
false,
true,
18, 8,
1, 1,
130, 800
);
// 4. 設(shè)置水印的填充屬性
watermark.FillFormat.SetOneColorGradient(Color.Red, 0.9, GradientStyleType.Horizontal, 1);
watermark.FillFormat.Transparency = 0.9;
// 5. 使邊框不可見(jiàn)
watermark.LineFormat.IsVisible = false;
// 6. 保存工作簿
workbook.Save("WatermarkedWorkbook.xlsx");
}該方法通過(guò) AddTextEffect() 添加藝術(shù)字,并調(diào)整填充色和透明度來(lái)模擬文本水印,功能強(qiáng)大且效果專(zhuān)業(yè)。其核心參數(shù) ZOrder 為 800 表示水印層疊于正文之上但透明度極高,不影響正常編輯。
支持與資源上述代碼基于 Aspose.Cells for .NET API。如果在開(kāi)發(fā)中遇到問(wèn)題,可以查閱官方文檔,或訪(fǎng)問(wèn)其支持論壇尋求幫助。
2.方案二:Spire.XLS
Spire.XLS 可以通過(guò)兩種方式實(shí)現(xiàn)水印效果:
- 插入藝術(shù)字(類(lèi)似 Aspose):使用
Shapes.AddTextEffect()方法; - 設(shè)置頁(yè)面布局模式(推薦):利用頁(yè)眉圖片模擬水印,既能保證水印在各視圖中可見(jiàn)又不會(huì)干擾用戶(hù)對(duì)單元格的編輯,適合批量生成需要在打印時(shí)顯示水印的文檔。
using Spire.Xls;
using System.Drawing;
public static void AddWatermarkWithSpire()
{
Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
// 設(shè)置字體
Font font = new Font("宋體", 40);
string watermarkText = "內(nèi)部使用";
foreach (Worksheet sheet in workbook.Worksheets)
{
// 根據(jù)文本生成圖片水印
Image img = DrawTextWatermark(watermarkText, font, Color.LightCoral, Color.White,
sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
// 將圖片作為頁(yè)眉添加到工作表
sheet.PageSetup.LeftHeaderImage = img;
sheet.PageSetup.LeftHeader = "&G";
// 切換視圖模式以預(yù)覽水印效果
sheet.ViewMode = ViewMode.Layout;
}
workbook.SaveToFile("output.xlsx");
}
private static Image DrawTextWatermark(string text, Font font, Color textColor,
Color backColor, double height, double width)
{
// 創(chuàng)建一個(gè)與工作表頁(yè)面大小相同的圖像
Image img = new Bitmap((int)width, (int)height);
Graphics drawing = Graphics.FromImage(img);
// 計(jì)算文本尺寸并居中
SizeF textSize = drawing.MeasureString(text, font);
drawing.TranslateTransform(((int)width - textSize.Width) / 2,
((int)height - textSize.Height) / 2);
// 設(shè)置文字顏色和背景填充
drawing.DrawString(text, font, new SolidBrush(textColor), 0, 0);
drawing.FillRectangle(new SolidBrush(backColor), 0, 0, img.Width, img.Height);
// 釋放資源
drawing.Dispose();
return img;
}此方法通過(guò)自定義 DrawTextWatermark 函數(shù)將文本動(dòng)態(tài)生成為圖像,然后設(shè)置為頁(yè)眉圖片,實(shí)現(xiàn)了“打印即顯示”的水印效果。
備選與底層方案
3.EPPlus (開(kāi)源)
EPPlus 可以將水印圖片插入到 Excel 文檔的頁(yè)眉或頁(yè)腳中,使其在打印時(shí)可見(jiàn)。
特別注意:EPPlus 從 5.0 版本起已轉(zhuǎn)為商業(yè)許可。這意味著如果你用于商業(yè)用途,需要購(gòu)買(mǎi)許可證,否則會(huì)觸發(fā)限制。如果你的項(xiàng)目對(duì)成本極為敏感,且僅在非商業(yè)環(huán)境中使用,可以考慮尋找更早期的版本,但更推薦選擇上述商業(yè)庫(kù)或繼續(xù)使用免費(fèi)方案 Spire.XLS。
using OfficeOpenXml;
using System.IO;
public static void AddWatermarkWithEPPlus()
{
using (ExcelPackage package = new ExcelPackage(new FileInfo("input.xlsx")))
{
var worksheet = package.Workbook.Worksheets[0];
// 在頁(yè)眉居中位置插入圖片作為水印
worksheet.HeaderFooter.OddHeader.InsertPicture(
new FileInfo("watermark.png"),
PictureAlignment.Centered
);
worksheet.HeaderFooter.EvenHeader.InsertPicture(
new FileInfo("watermark.png"),
PictureAlignment.Centered
);
package.Save();
}
}4.Interop / Open XML SDK
- Microsoft Office Interop:直接在代碼中操作 Excel 應(yīng)用程序添加水印,但此方案高度不穩(wěn)定,極易出現(xiàn)資源泄漏,強(qiáng)烈不推薦在生產(chǎn)環(huán)境中使用。
- Open XML SDK:能夠直接操作文檔底層 XML 結(jié)構(gòu),實(shí)現(xiàn)極高自由度的控制,但需要開(kāi)發(fā)者對(duì) Excel 文件格式有深入的了解,代碼實(shí)現(xiàn)極其復(fù)雜,調(diào)試成本高。
總結(jié)
本文演示了如何使用 C# 通過(guò)背景圖片為 Excel 工作表添加水印效果。整體實(shí)現(xiàn)思路是利用 Spire.XLS 提供的 Workbook 和 PageSetup 功能,將圖片設(shè)置為工作表的背景,從而在視覺(jué)上形成水印效果。
實(shí)現(xiàn)流程主要包括:先創(chuàng)建 Workbook 對(duì)象并加載目標(biāo) Excel 文件,然后讀取圖片并轉(zhuǎn)換為 Bitmap 格式。接著遍歷工作簿中的所有工作表,將背景圖片應(yīng)用到每個(gè) Sheet 的 PageSetup 屬性中,最后保存為新的 Excel 文件并釋放資源。
這種方式可以快速為多個(gè)工作表統(tǒng)一添加背景水印,適用于需要批量標(biāo)識(shí)文檔或進(jìn)行品牌標(biāo)注的場(chǎng)景。不過(guò)需要注意的是,背景圖片水印在打印時(shí)通常不會(huì)被保留,因此更適合用于屏幕展示場(chǎng)景。
到此這篇關(guān)于使用C#實(shí)現(xiàn)為Excel文檔添加水印的文章就介紹到這了,更多相關(guān)C# Excel添加水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
DevExpress TreeList 常見(jiàn)問(wèn)題解決方法
這篇文章主要介紹了DevExpress TreeList 常見(jiàn)問(wèn)題解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
使用C#實(shí)現(xiàn)Windows組和用戶(hù)管理的示例代碼
這篇文章主要介紹了使用C#實(shí)現(xiàn)Windows組和用戶(hù)管理的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01
Winform使用FTP實(shí)現(xiàn)自動(dòng)更新
這篇文章主要為大家詳細(xì)介紹了Winform使用FTP實(shí)現(xiàn)自動(dòng)更新,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
C#中GridView動(dòng)態(tài)添加列的實(shí)現(xiàn)方法
這篇文章主要介紹了C#中GridView動(dòng)態(tài)添加列的實(shí)現(xiàn)方法,涉及C#中GridView的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
WPF中的ValidationRule實(shí)現(xiàn)參數(shù)綁定解決方案
在WPF中,默認(rèn)情況下,DataContext是通過(guò)可視化樹(shù)來(lái)傳遞的,父元素的DataContext會(huì)自動(dòng)傳遞給其子元素,以便子元素可以訪(fǎng)問(wèn)父元素的數(shù)據(jù)對(duì)象,這篇文章主要介紹了WPF中的ValidationRule實(shí)現(xiàn)參數(shù)綁定解決方案,需要的朋友可以參考下2023-08-08
WPF解決大量數(shù)據(jù)刷新時(shí)UI卡頓或效率低下問(wèn)題的方法詳解
在開(kāi)發(fā)WPF數(shù)據(jù)密集型應(yīng)用時(shí),開(kāi)發(fā)者最常遇到的挑戰(zhàn)就是:??當(dāng)需要頻繁更新或顯示大量數(shù)據(jù)時(shí),UI界面會(huì)出現(xiàn)嚴(yán)重的卡頓、閃爍,甚至失去響應(yīng)??,本文將系統(tǒng)性地分析其根本原因,并提供從基礎(chǔ)到高級(jí)的一系列解決方案和實(shí)戰(zhàn)代碼,需要的朋友可以參考下2025-09-09
關(guān)于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.
本篇文章,小編為大家介紹關(guān)于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介紹方法,有需要的朋友可以參考一下2013-04-04

