Top View


Author sarah

PythonのopenpyxlでExcelにドロップダウンリストを作る

2022/05/16

やりたいこと

今回やりたいのは、Pythonで下図のようなドロップダウン(プルダウン)リストを設定し、例外値も入力できるようにすることです。

あらかじめ設定されたリストの中から入力値を選べるので、簡単に入力操作ができて便利です。
しかし、デフォルトでは、リストにない値の入力が許容されません。
例えば、上図の場合、リストにない "4" を入力しようとすると、
このようなエラーが出てしまって入力できません。

では、例外値が入力できるドロップダウンリストの設定方法を見ていきましょう。

準備

1. パッケージのインストール

openpyxlという、PythonでExcelを操作するときによく使われるパッケージを使いますので、 インストールします。

$ pip install openpyxl

2. サンプルデータの準備

このようなデータが入っているtest.xlsxを準備します。
B2~B4は空欄のままでいいです。

実装

1. 処理したいExcelファイルを読み込む

from openpyxl import load_workbook

# 処理したいファイルを読み込む
wb = load_workbook('test.xlsx') 

# 読み込みたいシートのインデクスを指定して読み込む
ws = wb.worksheets[0]

2. Data Validationを初期化

from openpyxl.worksheet.datavalidation import DataValidation

# Data validationオブジェクトの初期化
# formula1引数でドロップダウンリストの項目を指定
dv = DataValidation(
        type="list",
        formula1='"1,2,3"',
        allow_blank=True,
        showErrorMessage=True,
        errorStyle="warning",
        errorTitle="選択リストにない場合のみ、入力してください",
        error="続けますか?"
    )

ここでポイントとなるのは、errorStyle="warning"です。
これを指定しないと、リスト項目にない値を入力したらエラーが出てしまいます。

3. Data Validationをセルに適用

# セルに適用する
# このように指定すると、Bカラム全体にプルダウンリストが設定されます
dv.add(f"B2:B{ws.max_row}")

# シートに追加する
ws.add_data_validation(dv)

4. Excelの保存

# 任意のファイル名で保存
wb.save('test.xlsx')

最終的なコード

from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation

# 処理したいファイルを読み込む
wb = load_workbook('test.xlsx')

# 読み込みたいシートのインデクスを読み込む
ws = wb.worksheets[0]

# Data validationオブジェクトの初期化
dv = DataValidation(
    type="list",
    formula1='"1,2,3"',
    allow_blank=True,
    showErrorMessage=True,
    errorStyle="warning",
    errorTitle="選択リストにない場合のみ、入力してください",
    error="続けますか?"
)

# セルに適用する
# このように指定すると、Bカラム全体にプルダウンリストが設定されます
dv.add(f"B2:B{ws.max_row}")

# シートに追加する
ws.add_data_validation(dv)

# 任意のファイル名で保存
wb.save('test.xlsx')

実装結果

このように、セルB2〜B4にプルダウンリストの設定ができました。
項目にない値を入力すると、警告が出ますが、「Yes」をクリックすると入力できます。

data validation warning

まとめ

  • openpyxlDataValidationを使えば、Excelにドロップダウンリストを設定できる
  • DataValidationの初期化でerrorStyle='warning'を指定すると、リストにない項目も入力できるようになる
sarah

sarah

Company : Fusic CO., LTD