0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C# で Excel のセルをロックする方法

0
Posted at

チームコラボレーションやデータのやり取りがますます頻繁になる昨今、Excel ドキュメント内の重要なデータ(数式、ヘッダー、基本パラメーターなど)を、意図しない変更や不正な編集から保護することは、データの整合性を確保するための基本的な要件となっています。

本記事では、Free Spire.XLS for .NET ライブラリを使用して、C# で Excel ワークシートの特定のセル、行、または列を正確にロックする方法を体系的に紹介し、ワークシートの保護と権限設定に関する詳細な解説も行います。

1. ライブラリの選択とインストール

1.1 無料ライブラリのインストール

Free Spire.XLS for .NET は、Microsoft Office をインストールしなくても Excel ドキュメントの作成、読み取り、変更、保護ができる、完全無料の Excel 操作用コンポーネントです。NuGet パッケージマネージャーからのインストールを推奨します。

Visual Studio で「パッケージマネージャーコンソール」を開き、以下を実行します:

Install-Package FreeSpire.XLS

または .NET CLI を使用:

dotnet add package FreeSpire.XLS

1.2 他の .NET Excel ライブラリとの比較

ライブラリ ライセンス Excelのインストール有無 セルの書式/スタイル ワークシート保護とパスワード 特定セルのロック
Free Spire.XLS for .NET 完全無料(制限あり) ❌ 不要 ✅ 全面的にサポート ✅ 完全サポート ✅ 正確にロック
EPPlus(コミュニティ版) 非商用は無料、商用は要ライセンス ❌ 不要 ✅ 豊富 ✅ サポート ✅ サポート
NPOI Apache 2.0 無料 ❌ 不要 ✅ 基本サポート ⚠️ 一部サポート ⚠️ 複雑
Microsoft.Office.Interop.Excel Office ライセンス要 ✅ 必須 ✅ 完全 ✅ サポート ✅ サポート

各ライブラリに一長一短があります。セルの正確なロックと堅牢な保護機能を求めるなら、Free Spire.XLS は直感的な API を提供し、Excel のインストールが不要です。

2. セルロックの核心的な仕組み

Excel のセルロック機構の流れは、次のようにまとめられます:

1️⃣ デフォルト状態:すべてのセルの Style.Locked = true(ただし保護が有効でないと効果なし)
2️⃣ シート全体のロック解除sheet.Range.Style.Locked = false
3️⃣ 特定範囲をロックsheet.Range["A1:C5"].Style.Locked = true
4️⃣ 保護の有効化sheet.Protect(password, SheetProtectionType.All)

重要なポイント
Excel ワークシートの全セルはデフォルトで Locked = true ですが、このプロパティはワークシート保護が有効になった後でなければ編集制限として機能しません。
したがって、正しいロック手順は 「シート全体をロック解除 → 部分ロック → 保護有効化」 です。

3. 基本例:特定セルをロックする

以下のコードは、単一セルと範囲をロックし、パスワード保護を設定する例です。

using Spire.Xls;

class Program
{
    static void Main(string[] args)
    {
        // 1. ワークブックを読み込む
        Workbook workbook = new Workbook();
        workbook.LoadFromFile("input.xlsx");

        // 2. 最初のワークシートを取得
        Worksheet sheet = workbook.Worksheets[0];

        // 3. ワークシート内のすべてのセルのロックを解除
        sheet.Range.Style.Locked = false;

        // 4. セル A2 をロック
        sheet.Range["A2"].Style.Locked = true;
        // 範囲 C3:E9 をロック
        sheet.Range["C3:E9"].Style.Locked = true;

        // 5. ワークシート保護を有効にし、パスワード "123456" を設定
        sheet.Protect("123456", SheetProtectionType.All);

        // 6. ファイルを保存
        workbook.SaveToFile("Locked.xlsx", ExcelVersion.Version2016);
        workbook.Dispose();
    }
}

実行後、A2 セルおよび C3:E10 範囲の内容は、保護解除またはパスワード入力がない限り編集できなくなります。
LockCell.png

4. 応用編:行全体または列全体をロックする

業務シーンでは、タイトル行(例:1行目)や数式列(例:C列)をロックする必要がよくあります。

using Spire.Xls;

Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];

// すべてのセルのロックを解除
sheet.Range.Style.Locked = false;

// 1 行目をロック(行番号は1から始まるが、Rowsコレクションのインデックスは0から始まるため、Rows[0]が1行目に対応)
sheet.Rows[0].Style.Locked = true;
// 3 列目(C列)をロック(列インデックスは0から始まり、C列はインデックス2)
sheet.Columns[2].Style.Locked = true;

sheet.Protect("password", SheetProtectionType.All);
workbook.SaveToFile("行列入力.xlsx", ExcelVersion.Version2013);
workbook.Dispose();

注意Rows および Columns コレクションのインデックスは 0 から始まります。そのため Rows[0] は Excel の 1 行目、Columns[2] は C 列に対応します。

5. 高度な保護オプション

5.1 SheetProtectionType を使った細かい権限制御

SheetProtectionType 列挙型は、保護されたワークシートでユーザーに許可する操作を決定します。ビットごとの組み合わせにより柔軟な権限付与が可能です。

// 並べ替えとフィルターを許可するが、内容と構造の変更は禁止
sheet.Protect("password", 
    SheetProtectionType.Sorting | SheetProtectionType.Filtering);

主な列挙値の意味:

列挙値 説明
SheetProtectionType.Content セルの内容のみ保護
SheetProtectionType.FormattingCells セルの書式設定を許可
SheetProtectionType.FormattingColumns 列の書式設定を許可
SheetProtectionType.FormattingRows 行の書式設定を許可
SheetProtectionType.InsertingRows 行の挿入を許可
SheetProtectionType.DeletingRows 行の削除を許可
SheetProtectionType.Sorting 並べ替えを許可
SheetProtectionType.Filtering フィルターを許可
SheetProtectionType.UsingPivotTables ピボットテーブルの使用を許可
SheetProtectionType.All すべての保護オプションを有効(デフォルト)
SheetProtectionType.None すべての操作を禁止

完全な API リファレンスは公式ドキュメントをご参照ください。

5.2 編集を許可する範囲(AllowEditRange)の作成

ワークシート保護を有効にしても、特定のユーザー向けに編集可能な範囲を事前に設定できます。

// "InputRange" という名前の編集可能範囲を追加(セル B1 に対応)
sheet.AddAllowEditRange("InputRange", sheet.Range["B1"]);

// その後、通常通りワークシートを保護
sheet.Protect("password", SheetProtectionType.All);

これにより、ユーザーは保護されたワークシート内で B1 セルをパスワードなしで編集できます。

📚 6. 拡張:ファイル単位の暗号化と変更権限

ワークシート保護に加えて、Free Spire.XLS for .NET はさらに高いレベルのドキュメントセキュリティもサポートします。

6.1 ドキュメントオープンパスワードの設定

workbook.Protect("openPassword");

6.2 変更権限パスワードの設定

workbook.SetWriteProtectionPassword("modifyPassword");

6.3 最終版としてマーク

カスタムプロパティを追加して、このドキュメントが最終版であることをユーザーに通知します。

workbook.CustomDocumentProperties.Add("_MarkAsFinal", true);

本記事の詳細な説明とコード例を通じて、開発者は C# プロジェクトにおいて Free Spire.XLS for .NET を活用し、Excel のセル保護をきめ細かく実装できるようになるはずです。このライブラリは無料でありながら、日常的な Office オートメーションに十分な機能を提供しており、Excel のセキュリティ要件に対処する信頼できる選択肢の一つです。ドキュメントのロック解除やその他の豊富な Excel 操作機能については、完全なサンプルチュートリアルをご参照ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?