最も簡単なサンプル~書き方を示すもの。
from openpyxl.worksheet.datavalidation import DataValidation
dv = DataValidation(type="list", formula1='"A,B,C"') # 適用するセルの指定 dv.add(sheet.cell(1, 1)) # シートに入力規則を登録 sheet.add_data_validation(dv)
formula1 に、文字列で指定する場合、カンマ区切りで分割できなければならない。
add_data_validation で入力規則を登録しなければならない。
シートのセルから入力規則とする場合(←もっともよくある書き方)
都道府県名のプルダウンをサンプルとして、、、
# -*- coding: UTF-8 -*- import openpyxl from openpyxl.worksheet.datavalidation import DataValidation wb = openpyxl.Workbook() sheet = wb.active sheet.title = 'sheet1' fsheet = wb.create_sheet('form') states = "北海道,青森県,岩手県,宮城県,秋田県,山形県,福島県,群馬県,栃木県,茨城県,埼玉県,千葉県," \ "東京都,神奈川県,新潟県,富山県,石川県,福井県,山梨県,長野県,岐阜県,静岡県,愛知県,三重県,滋賀県," \ "京都府,大阪府,兵庫県,奈良県,和歌山県,鳥取県,島根県,岡山県,広島県,山口県,徳島県,香川県,愛媛県," \ "高知県,福岡県,佐賀県,長崎県,熊本県,大分県,宮崎県,鹿児島県,沖縄県" states = states.split(",") for i in range(len(states)): fsheet.cell(i+1, 2).value = states[i]
↑ states リストを作成してこれを "form" シートの A列に1行目から書いておく。
dv = DataValidation(type="list", formula1="form!$A$1:$A$%d" % len(list))
この入力規則を、3列目、2行目と3行目に適用する場合、
dv.add(sheet.cell(2, 3)) dv.add(sheet.cell(3, 3))
これは、DataValidationオブジェクトの ranges で以下を実行するのと同等
dv.ranges = 'C2 C3'
空白文字区切りである。
大量の行を、cell(row, columns) で指定するのに、いくら forループで書けば良いといっても
それはあんまりです。
Excel の範囲の書き方を ranges で書けるらしく、
例えば、B列全てに入力を適合させる場合、Excel行の最大値=1,048,576 行から
dv.ranges = 'B1:B1048576'
と設定する。