使用 XlsxWriter 创建数据验证

使用 XlsxWriter 创建数据验证

数据验证是 Excel 的一项功能:它可以限制用户在单元格中输入的数据,并显示相应的帮助和警告消息,也可以把输入限制为下拉列表中的值。典型用途是把输入限制为某个范围内的整数,用帮助消息说明要求,并在输入不符合条件时给出警告。使用 XlsxWriter 可以这样实现:

worksheet.data_validation('B25', {'validate': 'integer',
                                  'criteria': 'between',
                                  'minimum': 1,
                                  'maximum': 100,
                                  'input_title': 'Enter an integer:',
                                  'input_message': 'between 1 and 100'})

整数输入提示

如果用户输入不符合指定条件的值,会显示错误消息:

不符合条件时的错误消息

有关数据验证的更多信息,参见 Microsoft 支持文章:向单元格应用数据验证。以下各节介绍 data_validation() 方法及其选项。

data_validation()

data_validation() 用于创建 Excel 数据验证。验证可以应用于单个单元格或一个区域。与其他方法一样,可以使用 A1 或行/列表示法。使用行/列表示法时必须指定区域的四个坐标:(first_row, first_col, last_row, last_col)。对于单个单元格,把 last_ 值设为对应的 first_ 值。A1 表示法可以直接引用一个单元格或一个区域:

worksheet.data_validation(0, 0, 4, 1, {...})
worksheet.data_validation('B1',       {...})
worksheet.data_validation('C1:E5',    {...})

data_validation() 的 options 参数必须是字典,用于描述验证类型和样式。主要参数如下:

参数 同义参数
validate
criteria
value minimum、source
maximum
ignore_blank
dropdown
input_title
input_message
show_input
error_title
error_message
error_type
show_error
multi_range

下面分别说明这些参数。大多数是可选的,但通常需要三个主要选项 validate、criteria、value:

worksheet.data_validation('A1', {'validate': 'integer',
                                 'criteria': '>',
                                 'value': 100})

validate

validate 设置需要验证的数据类型:

worksheet.data_validation('A1', {'validate': 'integer',
                                 'criteria': '>',
                                 'value': 100})

它始终是必需的,没有默认值。允许的值如下:

integer
decimal
list
date
time
length
custom
any

• integer:只允许整数,Excel 称为“整数”(Whole number)。

• decimal:只允许小数。

• list:限制为用户指定的一组值,可以传入 Python 列表或 Excel 单元格区域。

• date:限制为日期值,可以使用 日期时间文档 中的 datetime 对象或日期公式。

• time:限制为时间值,可以使用同一文档中的 datetime 对象或时间公式。

• length:用整数长度限制单元格中的字符串;Excel 称为“文本长度”。

• custom:使用返回 TRUE/FALSE 的外部 Excel 公式限制输入。

• any:数据类型不受限制,主要用于只显示输入消息而不设置验证。

criteria

criteria 设置检验单元格数据的条件。除 list、custom、any 外,它几乎总是必需的,没有默认值:

worksheet.data_validation('A1', {'validate': 'integer',
                                 'criteria': '>',
                                 'value': 100})

允许的值为:

文本条件 符号替代形式
between
not between
equal to ==
not equal to !=
greater than >
less than <
greater than or equal to >=
less than or equal to <=

可以使用第一列中 Excel 的文本描述,也可以使用更常见的符号。下面两种写法等价:

worksheet.data_validation('A1', {'validate': 'integer',
                                 'criteria': '>',
                                 'value': 100})

worksheet.data_validation('A1', {'validate': 'integer',
                                 'criteria': 'greater than',
                                 'value': 100})

list、custom、any 不需要 criteria;即使指定也会被忽略:

worksheet.data_validation('B13', {'validate': 'list',
                                  'source': ['open', 'high', 'close']})

worksheet.data_validation('B23', {'validate': 'custom',
                                  'value': '=AND(F5=50,G5=60)'})

value、minimum、source

value 设置应用 criteria 的限制值,始终必需且没有默认值。也可以使用同义参数 minimum 或 source,使写法更清晰,并更接近 Excel 对该参数的描述:

# Using 'value'.
worksheet.data_validation('A1', {'validate': 'integer',
                                 'criteria': 'greater than',
                                 'value': 100})
# Using 'minimum'.
worksheet.data_validation('B11', {'validate': 'decimal',
                                  'criteria': 'between',
                                  'minimum': 0.1,
                                  'maximum': 0.5})

# Using 'source'.
worksheet.data_validation('B10', {'validate': 'list',
                                  'source': '=$E$4:$G$4'})
# Using 'source' with a string list.
worksheet.data_validation('B13', {'validate': 'list',
                                  'source': ['open', 'high', 'close']})

注意:对 list 验证使用字符串列表时,Excel 在内部把这些字符串存为逗号分隔的字符串,包括逗号在内的总长度不能超过 255 个字符。更长的数据集合应使用上例中的区域引用。此外,字符串中的双引号(例如 '"Hello"')必须双写成 '""Hello""'。

maximum

当 criteria 为 'between' 或 'not between' 时,maximum 设置上限:

worksheet.data_validation('B11', {'validate': 'decimal',
                                  'criteria': 'between',
                                  'minimum': 0.1,
                                  'maximum': 0.5})

ignore_blank

ignore_blank 控制 Excel 数据验证对话框中的“忽略空值”。启用后不验证空单元格;默认启用:

    worksheet.data_validation('B5', {'validate': 'integer',
                                     'criteria': 'between',
                                     'minimum': 1,
                                     'maximum': 10,
                                     'ignore_blank': False,
                                     })

dropdown

dropdown 控制 Excel 数据验证对话框中的“提供下拉箭头”。启用时,list 验证会显示下拉列表;默认启用。

input_title

input_title 设置选中单元格时显示的输入消息标题。没有默认值,且只有输入消息显示时才显示标题,参见下面的 input_message。标题最长 32 个字符。

input_message

input_message 设置选中单元格时显示的输入消息,没有默认值:

worksheet.data_validation('B25', {'validate': 'integer',
                                  'criteria': 'between',
                                  'minimum': 1,
                                  'maximum': 100,
                                  'input_title': 'Enter an integer:',
                                  'input_message': 'between 1 and 100'})

上例生成的输入消息如下:

自定义输入消息

可以使用换行符将消息分为多行。消息最长 255 个字符。

show_input

show_input 控制数据验证对话框中的“选定单元格时显示输入信息”。关闭后,即使通过 input_message 设置了消息,也不会显示;默认启用。

error_title

error_title 设置不符合验证条件时显示的错误消息标题,默认是“Microsoft Excel”,最长 32 个字符。

error_message

error_message 设置输入单元格数据时显示的错误消息。默认消息的意思是:“输入的值无效,用户限制了可输入此单元格的值。”可以这样显示自定义消息:

worksheet.data_validation('B27', {'validate': 'integer',
                                  'criteria': 'between',
                                  'minimum': 1,
                                  'maximum': 100,
                                  'input_title': 'Enter an integer:',
                                  'input_message': 'between 1 and 100',
                                  'error_title': 'Input value not valid!',
                                  'error_message': 'It should be an integer between 1 and 100'})

这会产生如下消息:

自定义错误消息

消息可以用换行符分为多行,最长 255 个字符。

error_type

error_type 指定错误对话框类型,有三个选项:

'stop'
'warning'
'information'

默认值为 'stop'。

show_error

show_error 控制数据验证对话框中的“输入无效数据时显示出错警告”。关闭后,即使通过 error_message 设置了消息,也不会显示;默认启用。

multi_range

multi_range 将数据验证扩展到不连续的区域。可以多次调用 data_validation() 来验证工作表中的不同区域;作为一项小优化,Excel 还允许把同一个数据验证应用到多个不连续区域。

XlsxWriter 用 multi_range 实现这一功能。该参数必须包含主验证区域和其他区域,各区域之间用空格分隔。例如,把一个验证应用于 'B3:K6' 和 'B9:K12':

worksheet.data_validation('B3:K6', {'validate': 'integer',
                                    'criteria': 'between',
                                    'minimum': 1,
                                    'maximum': 100,
                                    'multi_range': 'B3:K6 B9:K12'})

数据验证示例

示例 1:只允许大于固定值的整数。

worksheet.data_validation('A1', {'validate': 'integer',
                                 'criteria': '>',
                                 'value': 0,
                                 })

示例 2:只允许大于某个值的整数,该限制值引用另一个单元格。

worksheet.data_validation('A2', {'validate': 'integer',
                                 'criteria': '>',
                                 'value': '=E3',
                                 })

示例 3:只允许固定范围内的小数。

worksheet.data_validation('A3', {'validate': 'decimal',
                                 'criteria': 'between',
                                 'minimum': 0.1,
                                 'maximum': 0.5,
                                 })

示例 4:只允许下拉列表中的值。

worksheet.data_validation('A4', {'validate': 'list',
                                 'source': ['open', 'high', 'close'],
                                 })

示例 5:只允许下拉列表中的值,列表由单元格区域指定。

worksheet.data_validation('A5', {'validate': 'list',
                                 'source': '=$E$4:$G$4',
                                 })

示例 6:只允许固定范围内的日期。

from datetime import date
worksheet.data_validation('A6', {'validate': 'date',
                                 'criteria': 'between',
                                 'minimum': date(2013, 1, 1),
                                 'maximum': date(2013, 12, 12),
                                 })

示例 7:选中单元格时显示消息。

worksheet.data_validation('A7', {'validate': 'integer',
                                 'criteria': 'between',
                                 'minimum': 1,
                                 'maximum': 100,
                                 'input_title': 'Enter an integer:',
                                 'input_message': 'between 1 and 100',
                                 })

另见数据验证示例。


来源:Working with Data Validation。© 2013–2025 John McNamara,jmcnamara@cpan.org。译文按原文顺序保留示例。遵循 BSD 2-Clause。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容