1. 对于用户同时输入的行规则和列规则,可以通过判断录入的规则中是否含有数字和大写字母来进行区分。具体实现如下:
def parse_validation_rule(rule):
if any(char.isdigit() for char in rule) and any(char.isupper() for char in rule):
# 同时包含数字和大写字母,判断为既有行规则又有列规则
row_rule = ''
col_rule = ''
# 将行规则和列规则分开保存
for char in rule:
if char.isdigit():
row_rule += char
elif char.isupper():
col_rule += char
# 返回行规则和列规则
return row_rule, col_rule
else:
# 只有行规则或只有列规则
return rule, None
# 示例
print(parse_validation_rule("3+5+6=7+16+31+38")) # ('3+5+6=7+16+31+38', None)
print(parse_validation_rule("M+N+O+P+Q+R=S+T+U+V+W+X+Y")) # ('MNOPQRSTUVWXYZ', 'STUVWXYZ')
2. 针对每一个工作簿中的每一个sheet,可以使用一个嵌套字典来保存验证规则。其中外层字典的键是sheet名,值是内层字典;内层字典的键是'rows'和'cols',值是对应的行验证规则和列验证规则列表。具体实现如下:
sheet_validations = {}
def save_validation_rule(sheet_name, row_rule, col_rule):
# 如果sheet名不存在,则添加一个新的字典
if sheet_name not in sheet_validations:
sheet_validations[sheet_name] = {}
# 保存行验证规则和列验证规则
if 'rows' not in sheet_validations[sheet_name]:
sheet_validations[sheet_name]['rows'] = []
if 'cols' not in sheet_validations[sheet_name]:
sheet_validations[sheet_name]['cols'] = []
sheet_validations[sheet_name]['rows'].append(tuple(row_rule))
if col_rule:
sheet_validations[sheet_name]['cols'].append(tuple(col_rule))
# 示例
save_validation_rule('sheet1', '3+5+6=7+16+31+38', None)
save_validation_rule('sheet2', '4', '4')
print(sheet_validations) # {'sheet1': {'rows': [('3+5+6=7+16+31+38',)], 'cols': [()]}, 'sheet2': {'rows': [('4',)], 'cols': [('4',)]}}
这样,对于每个相同的sheet名,都会自动调用之前保存的验证规则。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |