使用C#實現為Excel文檔添加水印
向 Excel 電子表格添加水印是一種常見方法,可用于品牌標識或標記文檔保密性。雖然 Microsoft Excel 本身沒有直接提供水印功能,但可以通過在工作表頁眉或頁腳插入圖片,或將圖片設置為背景的方式來實現類似效果。
本文將介紹如何在 C# 中通過頁眉圖片或背景圖片,為 Excel 添加水印效果。
準備開發(fā)環(huán)境
在開始之前,需要在 .NET 項目中引用相關 Excel 處理庫的 DLL 文件??梢酝ㄟ^ NuGet 安裝或從官方渠道下載后手動添加引用。
PM> Install-Package Spire.XLS
頁眉圖片水印 vs 背景圖片水印
頁眉圖片水印
優(yōu)點:
- 水印會保留在打印輸出中,確保最終文檔中可見
缺點:
- 在 Excel 的“普通視圖”中不可見,只能在“頁面布局”或“分頁預覽”中看到
- 如果要將水印居中顯示,需要手動調整頁邊距,尤其是上邊距和左邊距
背景圖片水印
優(yōu)點:水印會鋪滿整個工作表區(qū)域,視覺效果更統(tǒng)一
缺點:不會出現在打印結果中,打印輸出時水印會消失
使用 C# 通過頁眉圖片向 Excel 添加水印
Spire.XLS for .NET 提供了 PageSetup 類,可用于控制打印工作表的外觀和布局相關設置。該類包含 CenterHeader 和 CenterHeaderImage 屬性,可用于在頁眉的居中區(qū)域設置圖片。
以下是在 C# 中通過頁眉圖片為 Excel 添加水印的步驟:
- 創(chuàng)建 Workbook 對象
- 從指定文件路徑加載 Excel 文檔
- 使用 Image.FromFile() 方法加載圖片
- 從工作簿中獲取指定工作表
- 通過將 Worksheet.PageSetup.CenterHeader 屬性設置為 “&G”,在頁眉中添加圖片占位符
- 使用 Worksheet.PageSetup.CenterHeaderImage 屬性將圖片應用到頁眉居中位置
- 將工作簿保存為新的 Excel 文件
示例代碼如下:
using Spire.Xls;
using System.Drawing;
namespace 通過頁眉為Excel添加水印
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 對象
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];
// 在頁眉中間區(qū)域添加圖片占位符
worksheet.PageSetup.CenterHeader = "&G";
// 將圖片添加到頁眉中間位置
worksheet.PageSetup.CenterHeaderImage = image;
}
// 保存結果文件
workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2016);
// 釋放資源
workbook.Dispose();
}
}
}使用 C# 通過背景圖片為 Excel 添加水印
在 Spire.XLS for .NET 中,PageSetup 類提供了 BackgroundImage 屬性,可用于獲取或設置工作表的背景圖片,從而實現水印效果。
以下是在 C# 中通過背景圖片為 Excel 添加水印的操作步驟:
- 創(chuàng)建 Workbook 對象
- 從指定路徑加載 Excel 文件
- 加載圖片文件,并轉換為 Bitmap 格式
- 獲取工作簿中的指定工作表
- 通過 Worksheet.PageSetup.BackgroundImage 屬性將圖片設置為工作表背景
- 將結果保存為新的 Excel 文件
示例代碼如下:
using Spire.Xls;
using System.Drawing;
namespace 通過背景圖片為Excel添加水印
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 對象
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];
// 將圖片設置為工作表背景
worksheet.PageSetup.BackgoundImage = bitmapImage;
}
// 保存結果文件
workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2016);
// 釋放資源
workbook.Dispose();
}
}
}知識擴展
向 Excel 文檔添加水印在 C# 中沒有單一的官方標準方法,通常需要通過模擬來實現,最穩(wěn)妥、功能最強大的方式是使用成熟的商業(yè)庫。
主流方案可分為核心推薦方案和備選與底層方案,以下分別介紹。
對于企業(yè)級應用,首選 Aspose.Cells 或 Spire.XLS,穩(wěn)定高效且功能全面。若對成本敏感且水印需求簡單,可優(yōu)先考慮 EPPlus。
核心推薦:使用商業(yè)庫
1.Aspose.Cells
Aspose.Cells 可以精準地將藝術字 (WordArt) 添加到工作表作為水印,并調整其填充色、透明度等,實現最佳效果。
1. 安裝 NuGet 包在“程序包管理器控制臺”中運行:
Install-Package Aspose.Cells
2. 添加文本水印的完整代碼
using Aspose.Cells;
using Aspose.Cells.Drawing;
using System.Drawing;
public static void AddTextWatermarkWithAspose()
{
// 1. 創(chuàng)建工作簿對象(也可直接加載已有文件)
Workbook workbook = new Workbook();
// 2. 獲取第一個工作表
Worksheet sheet = workbook.Worksheets[0];
// 3. 添加藝術字形狀作為水印
// AddTextEffect(預設效果, 水印文字, 字體名, 字號, 字體傾斜, 粗體, 上偏移, 左偏移, 高度, 寬度, 旋轉角度, ZOrder)
Aspose.Cells.Drawing.Shape watermark = sheet.Shapes.AddTextEffect(
MsoPresetTextEffect.TextEffect1,
"機密文檔",
"Arial Black",
50,
false,
true,
18, 8,
1, 1,
130, 800
);
// 4. 設置水印的填充屬性
watermark.FillFormat.SetOneColorGradient(Color.Red, 0.9, GradientStyleType.Horizontal, 1);
watermark.FillFormat.Transparency = 0.9;
// 5. 使邊框不可見
watermark.LineFormat.IsVisible = false;
// 6. 保存工作簿
workbook.Save("WatermarkedWorkbook.xlsx");
}該方法通過 AddTextEffect() 添加藝術字,并調整填充色和透明度來模擬文本水印,功能強大且效果專業(yè)。其核心參數 ZOrder 為 800 表示水印層疊于正文之上但透明度極高,不影響正常編輯。
支持與資源上述代碼基于 Aspose.Cells for .NET API。如果在開發(fā)中遇到問題,可以查閱官方文檔,或訪問其支持論壇尋求幫助。
2.方案二:Spire.XLS
Spire.XLS 可以通過兩種方式實現水印效果:
- 插入藝術字(類似 Aspose):使用
Shapes.AddTextEffect()方法; - 設置頁面布局模式(推薦):利用頁眉圖片模擬水印,既能保證水印在各視圖中可見又不會干擾用戶對單元格的編輯,適合批量生成需要在打印時顯示水印的文檔。
using Spire.Xls;
using System.Drawing;
public static void AddWatermarkWithSpire()
{
Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
// 設置字體
Font font = new Font("宋體", 40);
string watermarkText = "內部使用";
foreach (Worksheet sheet in workbook.Worksheets)
{
// 根據文本生成圖片水印
Image img = DrawTextWatermark(watermarkText, font, Color.LightCoral, Color.White,
sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
// 將圖片作為頁眉添加到工作表
sheet.PageSetup.LeftHeaderImage = img;
sheet.PageSetup.LeftHeader = "&G";
// 切換視圖模式以預覽水印效果
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)建一個與工作表頁面大小相同的圖像
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.DrawString(text, font, new SolidBrush(textColor), 0, 0);
drawing.FillRectangle(new SolidBrush(backColor), 0, 0, img.Width, img.Height);
// 釋放資源
drawing.Dispose();
return img;
}此方法通過自定義 DrawTextWatermark 函數將文本動態(tài)生成為圖像,然后設置為頁眉圖片,實現了“打印即顯示”的水印效果。
備選與底層方案
3.EPPlus (開源)
EPPlus 可以將水印圖片插入到 Excel 文檔的頁眉或頁腳中,使其在打印時可見。
特別注意:EPPlus 從 5.0 版本起已轉為商業(yè)許可。這意味著如果你用于商業(yè)用途,需要購買許可證,否則會觸發(fā)限制。如果你的項目對成本極為敏感,且僅在非商業(yè)環(huán)境中使用,可以考慮尋找更早期的版本,但更推薦選擇上述商業(yè)庫或繼續(xù)使用免費方案 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];
// 在頁眉居中位置插入圖片作為水印
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 應用程序添加水印,但此方案高度不穩(wěn)定,極易出現資源泄漏,強烈不推薦在生產環(huán)境中使用。
- Open XML SDK:能夠直接操作文檔底層 XML 結構,實現極高自由度的控制,但需要開發(fā)者對 Excel 文件格式有深入的了解,代碼實現極其復雜,調試成本高。
總結
本文演示了如何使用 C# 通過背景圖片為 Excel 工作表添加水印效果。整體實現思路是利用 Spire.XLS 提供的 Workbook 和 PageSetup 功能,將圖片設置為工作表的背景,從而在視覺上形成水印效果。
實現流程主要包括:先創(chuàng)建 Workbook 對象并加載目標 Excel 文件,然后讀取圖片并轉換為 Bitmap 格式。接著遍歷工作簿中的所有工作表,將背景圖片應用到每個 Sheet 的 PageSetup 屬性中,最后保存為新的 Excel 文件并釋放資源。
這種方式可以快速為多個工作表統(tǒng)一添加背景水印,適用于需要批量標識文檔或進行品牌標注的場景。不過需要注意的是,背景圖片水印在打印時通常不會被保留,因此更適合用于屏幕展示場景。
到此這篇關于使用C#實現為Excel文檔添加水印的文章就介紹到這了,更多相關C# Excel添加水印內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.
本篇文章,小編為大家介紹關于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介紹方法,有需要的朋友可以參考一下2013-04-04

