|
发表于 2024-1-28 08:09:19
|
显示全部楼层
当用户输入公式时,中间使用加号作为分隔是不太方便的,因为加号在 Python 中有特殊的意义。但是我们可以采用其他方式来录入公式,并让系统自动识别和转换。
以下是更新后的代码示例:
- import xlrd
- def record_validation_rules(filename):
- workbook = xlrd.open_workbook(filename)
- sheet_validations = dict()
- for sheet_name in workbook.sheet_names():
- sheet = workbook.sheet_by_name(sheet_name)
- row_validations = []
- col_validations = []
- # 用户输入行验证规则
- while True:
- row_rule = input(f"请输入需要验证的行规则(例如:6=7+16+31+38),输入N退出:")
- if row_rule == 'N':
- break
- # 解析行规则
- row_num, formula = row_rule.split('=')
- row_num = int(row_num) - 1
- row_validations.append((row_num, formula))
- # 用户输入列验证规则
- while True:
- col_rule = input(f"请输入需要验证的列规则(例如:E=F+G+H+I),输入N退出:")
- if col_rule == 'N':
- break
- # 解析列规则
- col_letter, formula = col_rule.split('=')
- col_num = xlrd.colname(col_letter) - 1
- col_validations.append((col_num, formula))
- sheet_validations[sheet_name] = {'rows': row_validations, 'cols': col_validations}
- return sheet_validations
- def validate_data(filename):
- workbook = xlrd.open_workbook(filename)
- error_msgs = []
- for sheet_name, validations in record_validation_rules(filename).items():
- sheet = workbook.sheet_by_name(sheet_name)
- for row, formula in validations['rows']:
- try:
- result = eval(formula)
- except (ValueError, IndexError, NameError):
- error_msgs.append(f"Invalid value in Sheet '{sheet_name}', Row {row+1}, Formula '{formula}'")
- for col, formula in validations['cols']:
- try:
- result = eval(formula)
- except (ValueError, IndexError, NameError):
- error_msgs.append(f"Invalid value in Sheet '{sheet_name}', Column '{xlrd.colname(col+1)}', Formula '{formula}'")
- if error_msgs:
- print("Validation Failed. Errors detected:")
- for error in error_msgs:
- print(error)
- else:
- print("Validation Successful. No errors detected.")
- filename = "汇总表.xls"
- validate_data(filename)
复制代码
现在,用户可以直接输入类似 "6=7+16+31+38" 和 "E=F+G+H+I" 的格式来表示行和列的验证规则,系统会自动解析并转换为适合的数据结构。此外,只要用户不输入 "N",系统就会持续要求用户录入行(或列)的规则,并逐一转换留存。
希望这次的更新能够满足您的需求。如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|