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?

Pythonで実現するExcelセルのロックと保護

Posted at

日常の業務や自動化されたレポート作成の中で、Excel ワークシートの重要なセルの内容を誤って変更されないように保護することは、データの安全性と整合性を確保するための基本的な要件です。手動で保護を設定する方法に比べて、Python を使用してワークシートを自動的にロックすることで、作業の効率を大幅に向上させるだけでなく、複数のファイルやテンプレートに一括適用することも可能です。

本記事では、Python を使って Excel ワークシート内のセルをロックする方法について解説し、保護の種類をカスタマイズする方法、パスワードの設定、特定の範囲のみ編集を許可する方法など、便利な機能も紹介します。

  • Pythonで特定のセルをロックする方法
  • Pythonでワークシート保護オプションとパスワードを設定する方法
  • Pythonで編集可能な範囲を設定する方法

使用ライブラリ:Free Spire.XLS for Python
インストールコマンド:pip install spire.xls.free

Pythonでワークシート内の特定のセルをロックする

Excel のセルは既定で「ロック」状態ですが、実際にロックが有効になるのは、ワークシート保護を有効にした場合のみです。そのため、特定のセルのみをロックしたい場合は、まずすべてのセルのロックを解除し、対象セルのみをロック状態に設定する必要があります。手順は以下の通りです:

  1. Workbook インスタンスを作成し、ワークシートを新規作成または読み込みます
  2. ワークシート内のすべてのセルの .Style.Locked = False を設定してロックを解除します
  3. 対象セルのみ .Style.Locked = True を設定してロックします
  4. sheet.Protect(password, SheetProtectionType) を使用して保護を有効にします

コード例

from spire.xls import Workbook, ExcelVersion, SheetProtectionType

# ワークブックを作成してワークシートを追加します
workbook = Workbook()
workbook.CreateEmptySheets(1)
sheet = workbook.Worksheets.get_Item(0)

# セルの内容を設定します
sheet.Range.get_Item("A1").Text = "保護されたセル"
sheet.Range.get_Item("A2").Text = "編集可能なセル"

# デフォルトのロック状態を解除します
sheet.Range.Style.Locked = False

# 特定のセルをロックします
sheet.Range.get_Item("A1").Style.Locked = True

# パスワードを使用してワークシート保護を有効にし、保護タイプを設定します
sheet.Protect("123456", SheetProtectionType.All)

# 書式を調整します
sheet.Range.get_Item(1, 1, 2, 1).Style.Font.FontName = "Yu Gothic UI"
sheet.Range.get_Item(1, 1, 2, 1).Style.Font.Size = 12.0
sheet.AutoFitColumn(1)

# ファイルを保存します
workbook.SaveToFile("output/LockedCells.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

生成されたファイルでは、セル A1 のみが編集不可となり、B1 は編集可能です。

Pythonでワークシート内の特定のセルをロックする

Python でワークシートの保護オプションを設定する

Spire.XLS では、柔軟な保護オプションを SheetProtectionType 列挙体で提供しており、ユーザーの操作を細かく制御できます。以下は代表的な保護オプションです:

  • All: すべての操作を制限
  • Content: セルの内容のみを保護
  • FormattingCells, FormattingRows, FormattingColumns: 書式設定の変更を制限
  • InsertingRows, DeletingRows: 行の挿入や削除を禁止
  • Objects: 図形や画像などのオブジェクトの編集を禁止
  • Sorting, Filtering: 並べ替えやフィルターの使用を制限
  • UsingPivotTables: ピボットテーブルの操作を禁止

例えば、セルの入力は許可しつつ書式変更のみを制限したい場合は以下のように指定します:

sheet.Protect("123456", SheetProtectionType.FormattingCells)

Python で編集を許可する範囲を設定する

ワークシート全体を保護していても、一部のセルはユーザーに自由に入力させたいケースがあります。そのような場合は、AddAllowEditRange() メソッドを使用して特定のセル範囲に編集を許可できます。

# 編集を許可する範囲を追加
sheet.AddAllowEditRange("EditableRange", sheet.Range.get_Item("B1"))

この設定により、ワークシートに保護がかかっていても、セル B1 はパスワードなしで編集できます。


上記の手順により、Python スクリプトを使って Excel のセルに対する細かなロック設定や権限制御を実現できます。自動レポート生成やテンプレート保護、社内データ共有など、さまざまなシーンで活用でき、データの安全性と業務効率の向上に貢献します。

さらに詳しい情報は、Spire.XLS の公式ドキュメントをご参照ください。

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?