見出し画像

openpyxlでドロップダウンリスト

Excelを使って複数の人にアンケートを取ることがありますが、Excelは自由に入力できてしまうので、入力制御をしないと大変なことになります。そこで今回はドロップダウンリストを使って入力制御をしていきます。

まずは必要なclassを読み込みます。

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation

wb=openpyxl.load_workbook("Adverse Event2.xlsx")
ws=wb["AE"]

そして以下のように、formula1で選択肢をカンマ区切りで入れます。
allow_blank=Trueでブランクを許可します。
タイトルCell以外のD列にこの定義を適用し、wsにこの定義を適用させます。

dv = DataValidation(
        type="list",
        formula1='"recovered,recovering,not recovered"',
        allow_blank=True,
    )
dv.add(f"D2:D{ws.max_row}")
ws.add_data_validation(dv)

するとこのように選択肢で選べるようになります。

しかしこれだけでは、まだ自由記載ができてしまいます。

そこでvalidation定義に、エラーメッセージを加えて警告するようにします。

dv = DataValidation(
        type="list",
        formula1='"recovered,recovering,not recovered"',
        allow_blank=True,
        showErrorMessage=True,
        errorStyle="warning",
        errorTitle="直接入力は、選択リストにない場合のみ!!!!!",
    )

選択肢以外の直接入力をすると、以下のように警告がでます。しかし値は入力できます。

errorStyle="information" とすると以下のBoxが出ますが、入力できます。

errorStyle="stop" だと以下のBoxが出てリスト以外の入力ができなくなります。

以上、ドロップダウンリスト設定でした。


いいなと思ったら応援しよう!