鱼C论坛

 找回密码
 立即注册
查看: 477|回复: 7

求助~~

[复制链接]
发表于 2024-1-29 22:11:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yxxxzx123 于 2024-1-29 22:26 编辑


问题3:报错了。见如下附件.................此号等级不够,挂不了附件

“请输入《事业单位人员》中需要验证的列规则,输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格式。








想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-29 22:13:06 | 显示全部楼层
问题1:可以使用循环来逐一实现行验证。首先,我们需要获取到行验证规则,然后分别计算每一行的和,并将结果与验证规则进行比较。代码如下:

  1. import openpyxl

  2. def validate_rows(filename):
  3.     wb = openpyxl.load_workbook(filename)
  4.     sheet = wb.active
  5.     validations = [(5, ), (6, ), (15, ), (30, )]  # 行验证规则
  6.     for row in range(1, sheet.max_row + 1):
  7.         if row > len(validations):  # 如果超出了验证规则的范围,则退出循环
  8.             break
  9.         rule = validations[row - 1]  # 获取当前行的验证规则
  10.         total = sum(sheet.cell(row=row, column=col).value for col in range(1, sheet.max_column + 1))  # 计算当前行的和
  11.         if total != rule[0]:  # 判断和是否满足验证规则
  12.             print(f"第{row}行验证失败!")
  13.     wb.close()

  14. validate_rows("your_file.xlsx")
复制代码


问题2:同样地,可以使用循环来逐一实现列验证。首先,我们需要获取到列验证规则,然后分别计算每一列的和,并将结果与验证规则进行比较。代码如下:

  1. import openpyxl

  2. def validate_columns(filename):
  3.     wb = openpyxl.load_workbook(filename)
  4.     sheet = wb.active
  5.     validations = [(4, )]  # 列验证规则
  6.     for col in range(1, sheet.max_column + 1):
  7.         if col > len(validations):  # 如果超出了验证规则的范围,则退出循环
  8.             break
  9.         rule = validations[col - 1]  # 获取当前列的验证规则
  10.         total = sum(sheet.cell(row=row, column=col).value for row in range(1, sheet.max_row + 1))  # 计算当前列的和
  11.         if total != rule[0]:  # 判断和是否满足验证规则
  12.             print(f"第{col}列验证失败!")
  13.     wb.close()

  14. validate_columns("your_file.xlsx")
复制代码


问题3:在处理列验证规则时,可以使用eval()函数对字符串进行求值,从而实现计算等式两边的和并比较。代码如下:

  1. import openpyxl

  2. def validate_data(filename):
  3.     wb = openpyxl.load_workbook(filename)
  4.     sheet = wb.active
  5.    
  6.     def get_total(expression):
  7.         # 根据表达式计算总和
  8.         total = 0
  9.         for col_letter in expression.split('+'):  # 按+号分割每个列字母
  10.             col_letter = col_letter.strip()
  11.             col = ord(col_letter.upper()) - ord('A') + 1  # 将字母转换为列索引
  12.             total += sum(sheet.cell(row=row, column=col).value for row in range(1, sheet.max_row + 1))
  13.         return total
  14.    
  15.     while True:
  16.         rule = input("请输入需要验证的列规则(输入N退出):")
  17.         if rule.upper() == 'N':
  18.             break
  19.         try:
  20.             left, right = rule.split('=')
  21.             left_total = get_total(left)
  22.             right_total = get_total(right)
  23.             if left_total != right_total:
  24.                 print("验证失败!")
  25.             else:
  26.                 print("验证通过!")
  27.         except Exception as e:
  28.             print(f"验证规则错误:{e}")
  29.    
  30.     wb.close()

  31. validate_data("your_file.xlsx")
复制代码


请将代码中的`your_file.xlsx`替换为你的实际文件路径。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-29 22:19:01 | 显示全部楼层
FishC 发表于 2024-1-29 22:13
问题1:可以使用循环来逐一实现行验证。首先,我们需要获取到行验证规则,然后分别计算每一行的和,并将结 ...

谢谢,我明天测试后来回复。谢谢FishC.

点评

那是论坛设置的AI机器人  发表于 2024-1-29 23:21
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-29 22:19:18 | 显示全部楼层
yxxxzx123 发表于 2024-01-29 22:19
谢谢,我明天测试后来回复。谢谢FishC.


不客气,希望能帮到你。如果有任何其他问题,请随时向我提问。祝你测试顺利!FishC会一直在这里支持你的。加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-30 08:37:44 | 显示全部楼层
解决了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-30 11:39:03 | 显示全部楼层

下午才能测试,上午有事儿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-30 11:39:54 | 显示全部楼层
yxxxzx123 发表于 2024-1-30 11:39
下午才能测试,上午有事儿

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 22:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表