Python 表格列是这样的,用openpyxl库如何将期中成绩中低于40分的分数,进行加10分操作,如果是“未做完”或“未交”的则不加。

表格列是这样的,用openpyxl库如何将期中成绩中低于40分的分数,进行加10分操作,如果是“未做完”或“未交”的则不加。

for col in ws_new.columns:
    for v in col:
        if v.value=='期中作业':
            qz_row=v.row
            qz_column=v.column
            # print(v.row,v.column)
for i in range(qz_row+1,ws_new.max_row+1):
    # print(ws_new.cell(i, qz_column).value)
    if ws_new.cell(i,qz_column).value != None and ws_new.cell(i,qz_column).value < 40:
        print(type(ws_new.cell(i,qz_column).value),ws_new.cell(i,qz_column).value)

第一列是个合并单元格的一串汉字
期中成绩
66
42
未做完0
71
56
未做完0
81
未交
75
未做完0
73
未做完
未做完0
未做完0
88
请假
76
77
25
72
25

已知:
指定excel下指定sheet下指定line的数据
步骤:
(1)提取指定数据;
(2)按照上述数据处理要求进行分析和处理;
(3)将处理好的数据输入到原文件中;
(4)保存文件并适当提示用户操作完成。
实践方案:
(以下实例中假设指定excel文件绝对路径为C:\Users\ABC\Desktop\test.xlsx;指定工作表为Sheet1;指定列为A列,并且A列第一行是一个合并单元格的一部分)

from openpyxl import load_workbook
path = r'C:\Users\ABC\Desktop\test.xlsx'
wb = load_workbook(path)
sht = wb['Sheet1']
line_A = sht['A']
vals = [i.value for i in line_A]
for num, val in zip(range(len(vals)),vals):#数据处理和输入
    if type(val) == int or type(val) == float:#筛选出分数
        if val <= 40:#筛选出小于等于40分的分数
            #对这些筛选出的分数进行加10分操作
            vals[num] = val + 10#将修改后的分数拷贝到提取出来的数据列表中
    sht[f'A{num+1}'] = vals[num]#对文件的对应位置进行修改
wb.save(path)#保存更新后的文件
print('处理完成。')#提示用户(可有可无)

注:若想尽可能地减小内存占用,可以把第12行的输入语句放到if val <= 40:条件区间下,这样就不会对每一个单元格内的数据进行更新,而是只会对符合“不属于未交或未做完”和“低于40分”条件的那些数据进行更新。
实例配图:

操作前的文件截图

img

操作完成后的文件截图

img

注意:运行该脚本或相同原理改编件之前,请先关闭目标excel文件,否则会出现PermissionError、只读报错或数据误存等错误。