worksheet.datavalidation【入力規則】モジュール
メモ ( 概要 基本 formula【式】の設定値 注意事項 ) 例
関数 クラス: DataValidation【入力規則】 DataValidationList【入力規則リスト】
メモ
概要
- 入力規則に関連するモジュール
- Excelの [データ]-[データツール]-[データの入力規則] に対応
- Excelの [データ]-[データツール]-[データの入力規則] に対応
- モジュール内定義
- 関連モジュール
基本
〔 例 〕- DataValidation【入力規則】生成
- 各種設定は、引数・プロパティで指定
- 対象セル追加
- add【対象セル追加】メソッドで追加
- DataValidation【入力規則】の引数・プロパティでも可
- ワークシートに入力規則を追加
formula【式】の設定値
〔 例 〕- formula1【式1】・formula2【式2】の設定値は下記参照
type
【入力値の種類】operator
【関係演算子】formula1
【式1】formula2
【式2】設定値 None【すべての値】 'list'【リスト】 元の値 ・カンマ区切りの項目
・項目のセル範囲アドレス
・名前定義'custom'【ユーザー設定】 数式 数式 (結果が真:入力可能) その他 'between'【次の値の間】
'notBetween'【次の値の間以外】最小値 最大値 ・定数
・値のセルアドレス
・値になる数式
・名前定義 (単一セル)'equal'【次の値に等しい】
'notEqual'【次の値に等しくない】値 'greaterThan'【次の値より大きい】
'greaterThanOrEqual'【次の値以上】最小値 'lessThan'【次の値より小さい】
'lessThanOrEqual'【次の値以下】最大値
注意事項
- Excel で別シートのセルを参照すると、拡張仕様として保存
- openpyxl で読み込むと未サポートとなり、該当の入力規則を削除
- 代替:別シートのセルを名前定義し、名前定義で参照
外部リンク
- openpyxl (英語)
- ECMA-376:Office Open XML file formats (英語)
SpreadsheetML:- dataValidation (Data Validation)
- dataValidations (Data Validations)
関数〔 例 〕
関数 | 備考 |
---|---|
collapse_cell_addresses( cells, input_ranges=()) | セルアドレス折りたたみ (連続したセルをセル範囲に変換) ※ 現状は、列方向のみ 戻り値 (str)セル範囲アドレス (複数:スペース区切り / 順不同) cells単一セルアドレスのコレクション input_ranges追加セルアドレスのコレクション (変換なし) |
expand_cell_ranges( range_string) | セルアドレス展開 (セル範囲を単一セルに変換) 戻り値 (set)単一セルアドレスの集合型 range_stringセルアドレス (範囲指定可 / 複数:スペース区切り / 順不同) |
DataValidation【入力規則】クラス
クラス定義
クラス | 備考 |
---|---|
親:openpyxl.descriptors.serialisable.Serialisable | |
class DataValidation( type=None, formula1=None, formula2=None, showErrorMessage=True, showInputMessage=True, showDropDown=None, allowBlank=None, sqref=(), promptTitle=None, errorStyle=None, error=None, prompt=None, errorTitle=None, imeMode=None, operator=None, allow_blank=None, | 入力規則 type (str)入力値の種類 formula1式1 formula2式2 showErrorMessage (bool)エラーメッセージの表示有無 showInputMessage (bool)入力時メッセージの表示有無 showDropDown (bool)ドロップダウンリストの表示有無 allowBlank (bool)空白無視の指定 (allow_blank) sqref選択範囲シーケンス promptTitle (str)タイトル (入力時メッセージ) errorStyle (str)スタイル (エラーメッセージ) error (str)エラーメッセージ prompt (str)メッセージ (入力時メッセージ) errorTitle (str)タイトル (エラーメッセージ) imeMode (str)日本語入力モード operator (str)関係演算子 allow_blank (bool)空白無視の指定 (優先) |
プロパティ
プロパティ | 型 | 備考 | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
allowBlank | bool | 空白無視の指定 | ||||||||||||||||||||||
allow_blank | bool | allowBlank【空白無視の指定】のエイリアス | ||||||||||||||||||||||
cells | MultiCellRange | sqref【選択範囲シーケンス】のエイリアス | ||||||||||||||||||||||
error | str | メッセージ (エラーメッセージ) | ||||||||||||||||||||||
errorStyle | str | スタイル (エラーメッセージ)
| ||||||||||||||||||||||
errorTitle | str | タイトル (エラーメッセージ) | ||||||||||||||||||||||
formula1 | str (設定:str 自動変換) | 式1 (詳細は、formula【式】の設定値) | ||||||||||||||||||||||
formula2 | str (設定:str 自動変換) | 式2 (詳細は、formula【式】の設定値) | ||||||||||||||||||||||
hide_drop_down | bool | showDropDown【ドロップダウンリストの表示有無】のエイリアス | ||||||||||||||||||||||
imeMode | str | 日本語入力モード
| ||||||||||||||||||||||
operator | str | 関係演算子
| ||||||||||||||||||||||
prompt | str | メッセージ (入力時メッセージ) | ||||||||||||||||||||||
promptTitle | str | タイトル (入力時メッセージ) | ||||||||||||||||||||||
ranges | sqref【選択範囲シーケンス】のエイリアス | |||||||||||||||||||||||
showDropDown | bool | ドロップダウンリストの表示有無 (入力値の種類:リスト) | ||||||||||||||||||||||
showErrorMessage | bool | エラーメッセージの表示有無 | ||||||||||||||||||||||
showInputMessage | bool | 入力時メッセージの表示有無 | ||||||||||||||||||||||
sqref | MultiCellRange | 選択範囲シーケンス 単一セルアドレス・セル範囲アドレス の下記形式が有効 ・tuplr【タプル】 ・list【リスト】 ・文字列 (スペース区切り) 参照:add【対象セル追加】 | ||||||||||||||||||||||
tagname | str | タグ名 ('dataValidation') | ||||||||||||||||||||||
type | str | 入力値の種類
| ||||||||||||||||||||||
validation_type | str | type【入力値の種類】のエイリアス |
操作
操作 | 備考 |
---|---|
cell in DataValidation | 存在判定 cell判定対象セル 単一セルアドレス セル範囲アドレス Cell【セル】(単一) |
メソッド
メソッド | 備考 |
---|---|
add(cell) | 対象セル追加 cell (str | Cell)対象セル 単一セルアドレス セル範囲アドレス Cell 参照:sqref【選択範囲シーケンス】 |
DataValidationList【入力規則リスト】クラス
メモ
- DataValidation【入力規則】を管理
- Worksheet【ワークシート】 の data_validations【入力規則リスト】プロパティで使用
- Worksheet【ワークシート】 の add_data_validation【入力規則 追加】 で DataValidation【入力規則】追加
クラス定義
クラス | 備考 |
---|---|
親:openpyxl.descriptors.serialisable.Serialisable | |
class DataValidationList( disablePrompts=None, xWindow=None, yWindow=None, count=None, dataValidation=() ) | 入力規則リスト disablePrompts xWindow yWindow count dataValidation |
プロパティ
プロパティ | 型 | 備考 |
---|---|---|
count | 入力規則 数 | |
dataValidation | DataValidation のシーケンス | |
disablePrompts | bool | (未使用) |
tagname | str | タグ名 ('dataValidations') |
xWindow | int | (未使用) |
yWindow | int | (未使用) |
操作
操作 | 備考 |
---|---|
len( DataValidationList ) | 入力規則 数 |
メソッド
メソッド | 備考 |
---|---|
append( dv) | 入力規則を追加 dv (DataValidation)入力規則 ※ Worksheet【ワークシート】 の add_data_validation【入力規則 追加】で間接的に使用 |
to_tree(tagname=None) |
例
基本
from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation
# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active
# 入力規則作成 (セル指定なし)
validation = DataValidation(
type='whole',
operator='between',
formula1=1,
formula2=9,
showInputMessage=True,
promptTitle='タイトル (入力メッセージ)',
prompt='入力メッセージ',
showErrorMessage=True,
errorTitle='タイトル (エラーメッセージ)',
error='エラーメッセージ',
)
# 対象セル追加 (Cell 指定)
cell = ws['B2']
cell.value = 1
validation.add(cell)
# 対象セル追加 (セルアドレス 指定)
ws['B3'] = 2
validation.add('B3')
# 対象セル追加 (プロパティ 指定)
# validation.sqref = ('B2', 'B3')
# validation.sqref = ['B2', 'B3']
# validation.sqref = 'B2 B3'
# ワークシートに入力規則 追加
ws.add_data_validation(validation)
# 入力規則作成 (セル指定)
ws['C2'] = 3
ws['C3'] = 4
ws['C4'] = 5
ws['C6'] = 6
validation = DataValidation(
type='whole',
operator='between',
formula1=1,
formula2=9,
showInputMessage=True,
promptTitle='タイトル (入力メッセージ)',
prompt='入力メッセージ',
sqref=('C2:C4', 'C6'),
# sqref=['C2:C4', 'C6'],
# sqref='C2:C4 C6',
)
# ワークシートに入力規則 追加
ws.add_data_validation(validation)
# 各種チェック
print('C4' in validation)
# 出力:True
print('C5' in validation)
# 出力:False
print(ws['C6'] in validation)
# 出力:True
print('C2:C4' in validation)
# 出力:True
print('C2:C5' in validation)
# 出力:False
print(ws.data_validations.count)
# 出力:2
print(len(ws.data_validations))
# 出力:2
# ワークブック保存
wb.save(WORKBOOK)
formula【式】の設定値
from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl.styles import borders, Border, Side
# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active
# 罫線
COLOR_BORDER = '000000FF'
side = Side(
border_style=borders.BORDER_THICK,
color=COLOR_BORDER)
border = Border(side, side, side, side)
# 入力規則設定 (すべての値:入力時メッセージ)
validation = DataValidation(
type=None,
showInputMessage=True,
promptTitle='タイトル (入力メッセージ)',
prompt='入力メッセージ',
)
ws['B2'] = 'B-2'
ws['B3'] = 'B-3'
ws['B2'].border = border
ws['B3'].border = border
validation.add('B2:B3')
ws.add_data_validation(validation)
# 入力規則設定 (リスト:カンマ区切りの項目)
validation = DataValidation(
type='list',
formula1='"List1,List2,List3"',
)
ws['C2'] = 'List2'
ws['C2'].border = border
validation.add('C2')
ws.add_data_validation(validation)
# 入力規則設定 (リスト:項目のセル範囲アドレス)
ws['D4'] = 'ListA'
ws['D5'] = 'ListB'
ws['D6'] = 'ListC'
validation = DataValidation(
type='list',
formula1='D4:D6',
)
ws['D2'] = 'ListB'
ws['D2'].border = border
validation.add('D2')
ws.add_data_validation(validation)
# 入力規則設定 (リスト:名前定義)
ws['E4'] = 'ListX'
ws['E5'] = 'ListY'
ws['E6'] = 'ListZ'
NAME_LIST = 'name_list'
wb.create_named_range(NAME_LIST, None, 'Sheet!$E$4:$E$6')
validation = DataValidation(
type='list',
formula1=NAME_LIST,
)
ws['E2'] = 'ListY'
ws['E2'].border = border
validation.add('E2')
ws.add_data_validation(validation)
# 入力規則設定 (ユーザー設定:偶数のみ有効)
validation = DataValidation(
type='custom',
formula1='=MOD(F2,2)=0',
prompt='偶数のみ有効'
)
ws['F2'] = 2
ws['F2'].border = border
validation.add('F2')
ws.add_data_validation(validation)
# 入力規則設定 (小数点数:次の値の間・定数)
validation = DataValidation(
type='decimal',
operator='between',
formula1=1.0,
formula2=2.0,
prompt='小数点数:1.0 ~ 2.0'
)
ws['B9'] = 1.5
ws['B9'].border = border
validation.add('B9')
ws.add_data_validation(validation)
# 入力規則設定 (文字列の長さ指定:次の値に等しい・値のセルアドレス)
ws['C11'] = 5
validation = DataValidation(
type='textLength',
operator='equal',
formula1='C11',
prompt='文字列 (長さ指定):[B9]の値'
)
ws['C9'] = 'ABCDE'
ws['C9'].border = border
validation.add('C9')
ws.add_data_validation(validation)
# 入力規則設定 (日付:次の値より小さい・値になる数式)
validation = DataValidation(
type='date',
operator='lessThan',
formula1='=TODAY()',
prompt='日付:本日より前'
)
ws['D9'] = '2001/2/3'
ws['D9'].border = border
validation.add('D9')
ws.add_data_validation(validation)
# 入力規則設定 (時刻:次の値以上・名前定義)
from datetime import time
ws['E11'] = time(12, 0, 0)
NAME_TIME = 'name_time'
wb.create_named_range(NAME_TIME, ws, '$E$11')
validation = DataValidation(
type='time',
operator='greaterThanOrEqual',
formula1=NAME_TIME,
prompt=f'時刻:[{NAME_TIME}] 値以上'
)
ws['E9'] = time(12, 34, 56)
ws['E9'].border = border
validation.add('E9')
ws.add_data_validation(validation)
# ワークブック保存
wb.save(WORKBOOK)
関数
from openpyxl.worksheet.datavalidation import (
collapse_cell_addresses,
expand_cell_ranges,
)
# collapse_cell_addresses
lst_cells = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
adr = collapse_cell_addresses(lst_cells)
print(adr)
# 出力:A1:A3 B1:B3
tpl_cells = ('A1', 'A2', 'A3', 'B3', 'B4', 'B5')
adr = collapse_cell_addresses(tpl_cells)
print(adr)
# 出力:A1:A3 B3:B5
cells = ['A1', 'B1', 'C1']
adr = collapse_cell_addresses(cells)
print(adr)
# 出力:A1 B1 C1
cells = ['A1', 'A3', 'A5', 'A4', 'A2']
adr = collapse_cell_addresses(cells)
print(adr)
# 出力:A1:A5
# collapse_cell_addresses (input_ranges 指定)
cells = ['A3', 'A2', 'A1', 'C2', 'C1', 'C3']
lst_input = ['B1', 'B3', 'B2']
adr = collapse_cell_addresses(cells, lst_input)
print(adr)
# 出力:B1 B3 B2 A1:A3 C1:C3
tpl_input = ('A4', 'B4', 'C4')
adr = collapse_cell_addresses(cells, tpl_input)
print(adr)
# 出力:A4 B4 C4 A1:A3 C1:C3
# expand_cell_ranges
adr = expand_cell_ranges('A1:A5')
print(type(adr))
# 出力:<class 'set'>
print(adr)
# 出力:{'A3', 'A2', 'A1', 'A5', 'A4'}
adr = expand_cell_ranges('A1:A2 B1:B2')
print(adr)
# 出力:{'A1', 'B2', 'A2', 'B1'}