求助~~
本帖最后由 yxxxzx123 于 2024-1-29 22:26 编辑问题3:报错了。见如下附件.................此号等级不够,挂不了附件{:5_104:} )
“请输入《事业单位人员》中需要验证的列规则,输N退出:M+N+O+P+Q+R=S+T+U+V+W+X+Y
Traceback (most recent call last):
File "C:\Users\ynyxs\Desktop\报表统计及分析\事业单位统计表0\xtt行列验证2024012902.py", line 98, in <module>
validate_data(filename)
File "C:\Users\ynyxs\Desktop\报表统计及分析\事业单位统计表0\xtt行列验证2024012902.py", line 60, in validate_data
for sheet_name, validations in record_validation_rules(filename).items():
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ynyxs\Desktop\报表统计及分析\事业单位统计表0\xtt行列验证2024012902.py", line 44, in record_validation_rules
col_letter = ord(col_letter.upper()) - ord('A')
^^^^^^^^^^^^^^^^^^^^^^^
TypeError: ord() expected a character, but string of length 11 found”
回复请注意python格式。
问题1:可以使用循环来逐一实现行验证。首先,我们需要获取到行验证规则,然后分别计算每一行的和,并将结果与验证规则进行比较。代码如下:
import openpyxl
def validate_rows(filename):
wb = openpyxl.load_workbook(filename)
sheet = wb.active
validations = [(5, ), (6, ), (15, ), (30, )]# 行验证规则
for row in range(1, sheet.max_row + 1):
if row > len(validations):# 如果超出了验证规则的范围,则退出循环
break
rule = validations# 获取当前行的验证规则
total = sum(sheet.cell(row=row, column=col).value for col in range(1, sheet.max_column + 1))# 计算当前行的和
if total != rule:# 判断和是否满足验证规则
print(f"第{row}行验证失败!")
wb.close()
validate_rows("your_file.xlsx")
问题2:同样地,可以使用循环来逐一实现列验证。首先,我们需要获取到列验证规则,然后分别计算每一列的和,并将结果与验证规则进行比较。代码如下:
import openpyxl
def validate_columns(filename):
wb = openpyxl.load_workbook(filename)
sheet = wb.active
validations = [(4, )]# 列验证规则
for col in range(1, sheet.max_column + 1):
if col > len(validations):# 如果超出了验证规则的范围,则退出循环
break
rule = validations# 获取当前列的验证规则
total = sum(sheet.cell(row=row, column=col).value for row in range(1, sheet.max_row + 1))# 计算当前列的和
if total != rule:# 判断和是否满足验证规则
print(f"第{col}列验证失败!")
wb.close()
validate_columns("your_file.xlsx")
问题3:在处理列验证规则时,可以使用eval()函数对字符串进行求值,从而实现计算等式两边的和并比较。代码如下:
import openpyxl
def validate_data(filename):
wb = openpyxl.load_workbook(filename)
sheet = wb.active
def get_total(expression):
# 根据表达式计算总和
total = 0
for col_letter in expression.split('+'):# 按+号分割每个列字母
col_letter = col_letter.strip()
col = ord(col_letter.upper()) - ord('A') + 1# 将字母转换为列索引
total += sum(sheet.cell(row=row, column=col).value for row in range(1, sheet.max_row + 1))
return total
while True:
rule = input("请输入需要验证的列规则(输入N退出):")
if rule.upper() == 'N':
break
try:
left, right = rule.split('=')
left_total = get_total(left)
right_total = get_total(right)
if left_total != right_total:
print("验证失败!")
else:
print("验证通过!")
except Exception as e:
print(f"验证规则错误:{e}")
wb.close()
validate_data("your_file.xlsx")
请将代码中的`your_file.xlsx`替换为你的实际文件路径。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-29 22:13
问题1:可以使用循环来逐一实现行验证。首先,我们需要获取到行验证规则,然后分别计算每一行的和,并将结 ...
谢谢,我明天测试后来回复。谢谢FishC. yxxxzx123 发表于 2024-01-29 22:19
谢谢,我明天测试后来回复。谢谢FishC.
不客气,希望能帮到你。如果有任何其他问题,请随时向我提问。祝你测试顺利!FishC会一直在这里支持你的。加油!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 解决了吗 cjjJasonchen 发表于 2024-1-30 08:37
解决了吗
下午才能测试,上午有事儿
yxxxzx123 发表于 2024-1-30 11:39
下午才能测试,上午有事儿
{:10_248:}
页:
[1]