省事省力让程序自动美化你的表格

hello,大家好,今天给大家分享一下在学习Python自动化办公中遇到的一道题目,是教学视频预留的课后习题,视频资源是在https://www.bilibili.com/video/BV1CQ4y1K7MK?p=30
题目如下:
编写一个Python,要求:
(1)打开文件"7月下旬入库表.xlsx"
(2)找到日期在2018/7/21之前,入库量小于41吨的数据
(3)将其他数据行删掉,中间不要留空行
(4)将入库量小于40.5吨的数据所在行背景填充为红色,字体表为白色
(5)保存该excel文件
我给大家来分享一下自己对于这道题目的理解。
(1)我目前学习的关于Excel知识应对多个变量时,采用分布操作,一个变量一个变量的来,先找出对应日期所在的行代码,在已找到的行代码为依据,筛选出符合入库量的行位置。
(2)删掉数据时如果不添加一行(列),会导致删除空白行时出错
(3)针对删掉无关数据后空白行的去除,我选择了新建表,再删除旧表的方法。这时在新表中再对需要填充行背景的数据进行筛选
(4)我发现使用openpyxl的load_workbook删除空白行,新增行操作时非常慢,等待时间很长。
(5)针对筛选数据的操作建议自定义变量,不然写起来很乱。
这个excel表格我放在百度云了,有兴趣的朋友可以来动手操作一下;针对excel中填充颜色时会用到8位数的16进制代码,我从网上下载了一个ARGB转HEX的小程序,是通过调节三原色来产生代码的,三原色大家可以参考这个网页:https://c.runoob.com/front-end/55
上百度云链接: https://pan.baidu.com/s/1xwdaRdSmFPRCv3d0hfmL7w 提取码: riqs
上代码。

'''7、省事省力让程序自动美化你的表格'''

from openpyxl import load_workbook

'''打开需要筛选表格,筛选需要数据'''
workbook=load_workbook(filename='C:\\Users\\Administrator\\Desktop\\7月下旬入库表.xlsx')
sheet=workbook['7月下旬入库表']


# '''筛选A列,找出列中数值日期在20180722以前的数据所在的 行'''
def SelsctRow(sheetname,col,number):
    SelectRowsNumber = []
    cells = workbook[sheetname][col]
    for cell in cells:
        # print(cell.value)
        if str(cell.value) < str(number):
           SelectRowsNumber.append(cell.row)
    return SelectRowsNumber

FirstSelectRowsNumber=SelsctRow('7月下旬入库表','A','2018-07-22 00:00:00')
print(FirstSelectRowsNumber)

'''针对筛选出的行 根据E列数值低于41再次筛选 行'''
def TwiceSelectRow(firstSelectRowList,col,number):
    SelectRowsNumber = []
    for i in firstSelectRowList:
        if str(sheet[col + str(i)].value) < str(number):
            SelectRowsNumber.append(sheet[col + str(i)].row)
    return SelectRowsNumber

FinalSelectRowsNumber=TwiceSelectRow(FirstSelectRowsNumber,'E',41)
print(FinalSelectRowsNumber)

'''将最终数据转移至新表'''
workbook.create_sheet('表1')
sheet1=workbook['表1']
def SelectRowToNew_sheet(SelectList,NewSheet):
    for i in SelectList:
        SelectRows = []  # 保证不重复
        for cell in sheet[i]:
            # print(cell.value)
            SelectRows.append(cell.value)
            # print(SelectRows)
        # print(SelectRows)
        NewSheet.append(SelectRows)  # 保证每次添加的列表不重复之前存在的内容
SelectRowToNew_sheet(FinalSelectRowsNumber,sheet1)
'''将最终筛选数据 数值小于40.5 上色'''
from openpyxl.styles import Font,PatternFill
pattern_fill=PatternFill(fill_type='solid',fgColor='FFFF0000')
font=Font(color='FFFFFFFF')
ColorSelectRow=SelsctRow('表1','E','40.5')
print(ColorSelectRow)
for i in ColorSelectRow:
    for cell in sheet1[i]:  #注意,此处是 新表
        # print(cell)
        cell.fill= pattern_fill
        cell.font = font

'''删掉多余行 这个过程运行时间很长 比较鸡肋'''
for i in range(2,1847):
    if i not in FinalSelectRowsNumber:
        sheet.delete_rows(idx=i)
        sheet.insert_rows(idx=i)
workbook.remove(sheet)
sheet1.title=('筛选')

workbook.save(filename='C:\\Users\\Administrator\\Desktop\\7月下旬入库表.xlsx')

你可能感兴趣的:(python)