電子文書では透かしを使用して著作権を保護したり、状態を指定したりすることがよくあります。Microsoft Excel には Excel に透かしを追加するための機能はありませんが、ヘッダー画像やワードアートを挿入するなど、透かし効果を実現するための特別な方法を使用することができます。この記事では、Spire.XLS for .NET を使用して、C# および VB.NET でプログラムによって Excel に透かしを追加する方法を紹介します。
Spire.XLS for .NET をインストールします
まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.XLS
C# と VB.NET で Excel に透かしを追加する
ヘッダー画像を作成するために、DrawWatermarkImage() というカスタムの方法を定義しました。この方法では、文字列(機密、ドラフト、内部使用などの透かしとして表示するテキスト)に基づいてカスタムの画像を生成できます。画像を生成したら、Worksheet.PageSetup.LeftHeaderImage と Worksheet.PageSetup.LeftHeader プロパティを使用して、画像をワークシートのヘッダーのセクションに追加できます。詳細な手順は次のとおりです。
- Workbook クラスのインスタンスを作成します。
- Workbook.LoadFromFile() メソッドを使用して Excel ファイルをロードします。
- フォントを作成し、テキストを定義します。
- Excel 内のすべてのワークシートをループします。
- DrawWatermarkImage() メソッドを使用して、テキストに基づいて透かしの画像を作成します。
- Worksheet.PageSetup.LeftHeaderImage プロパティを使用して、各ワークシートの左側のヘッダーの画像ソースとして画像を設定します。
- Worksheet.PageSetup.LeftHeader プロパティを 「&G」 に設定して、左側のヘッダーのセクションに画像を表示します。
- シートのビューモードを透かしを見るためのページレイアウトに変更します。
- Workbook.SaveToFile() メソッドを使用して結果ファイルを保存します。
- C#
- VB.NET
using Spire.Xls;
using System.Drawing;
namespace AddWatermark
{
class Program
{
static void Main(string[] args)
{
//Workbookクラスのインスタンスを初期化し、Excelファイルをロードする
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"Sample.xlsx");
//フォントを作成する
Font font = new Font("Arial", 40);
//テキストを定義する
string watermark = "機密";
//ファイル内のすべてのシートをループする
foreach (Worksheet sheet in workbook.Worksheets)
{
//DrawWatermarkImage()メソッドを使用して、テキストに基づいて画像を作成する
Image imgWtrmrk = DrawWatermarkImage(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth);
//各シートの左ヘッダーのセクションに画像を追加する
sheet.PageSetup.LeftHeaderImage = imgWtrmrk;
sheet.PageSetup.LeftHeader = "&G";
//シートのビューモードを透かしを見るためのページレイアウトに変更する
sheet.ViewMode = ViewMode.Layout;
}
///結果ファイルを保存する
workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2013);
}
private static Image DrawWatermarkImage(string text, 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;
}
}
}
Imports Spire.Xls
Imports System.Drawing
Namespace AddWatermark
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'Workbookクラスのインスタンスを初期化し、Excelファイルをロードする
Dim workbook As Workbook = New Workbook()
workbook.LoadFromFile("Sample.xlsx")
'フォントを作成する
Dim font As Font = New Font("Arial", 40)
'テキストを定義する
Dim watermark = "機密"
'ファイル内のすべてのシートをループする
For Each sheet As Worksheet In workbook.Worksheets
'DrawWatermarkImage()メソッドを呼び出してテキストに基づいて画像を作成する
Dim imgWtrmrk As Image = DrawWatermarkImage(watermark, font, Color.LightCoral, Color.White, sheet.PageSetup.PageHeight, sheet.PageSetup.PageWidth)
'各シートの左ヘッダーのセクションに画像を追加する
sheet.PageSetup.LeftHeaderImage = imgWtrmrk
sheet.PageSetup.LeftHeader = "&G"
'シートのビューモードを透かしを見るためのページレイアウトに変更する
sheet.ViewMode = ViewMode.Layout
Next
'結果ファイルを保存する
workbook.SaveToFile("AddWatermark.xlsx", ExcelVersion.Version2013)
End Sub
Private Shared Function DrawWatermarkImage(ByVal text As String, ByVal font As Font, ByVal textColor As Color, ByVal backColor As Color, ByVal height As Double, ByVal width As Double) As Image
'指定した幅と高さの画像を作成する
Dim img As Image = New Bitmap(width, height)
'画像からグラフィックのオブジェクトを作成する
Dim drawing As Graphics = Graphics.FromImage(img)
'テキストのサイズを取得する
Dim textSize As SizeF = drawing.MeasureString(text, font)
'指定されたトランスレーションをグラフィックの変換マトリックスに前置きして座標系の原点を変更する
drawing.TranslateTransform((CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2)
'ローテーションを適用する
drawing.RotateTransform(-45)
'指定されたトランスレーションをグラフィックの変換マトリックスに前置きして座標系の原点を変更する
drawing.TranslateTransform(-(CInt(width) - textSize.Width) / 2, -(CInt(height) - textSize.Height) / 2)
'背景をペイントする
drawing.Clear(backColor)
'テキストのブラシを作成する
Dim textBrush As Brush = New SolidBrush(textColor)
'グラフィックの中心にテキストを描画する
drawing.DrawString(text, font, textBrush, (CInt(width) - textSize.Width) / 2, (CInt(height) - textSize.Height) / 2)
drawing.Save()
Return img
End Function
End Class
End Namespace
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。