• 您当前位置:网站首页 >> Python学习 >> 案例:使用Python 对Excel表格文档进行批量处理
  • 案例:使用Python 对Excel表格文档进行批量处理

    iCoA首席特工 逍遥峡谷 发布:2020-01-08 更新:2020-01-09 浏览0条评论
    内容简介

    相关关键词:Python   openpyxl   Excel   表格   案例  

    本文链接:https://www.icoa.cn/a/895.html

    本站文章如非注明皆为原创,未经允许禁止转载。如有问题可以给我留言或发邮件。

    学习了Python 打开和读取 Excel 表格内容Python 编辑 Excel 表格以及Python 批量调整 Excel 表格中字体和样式之后,做一个小案例。

    更多Python相关文章点击:Python学习日志目录

    这个案例是对一个Excel文档进行下面处理:

    打开这个Excel文档,找到 day 列在2014年以后,buy_mount 列大于5的数据;
    删除其他行的数据,中间不要留空行
    将 buy_mount 中大于10的数据行背景标红,字体改为白色,并保存。

    编程思路:

    首先查找表头(第一行)中day和buy_mount的列;
    然后按行循环,先判断day所在列数据是否大于等于20140101;
    同时判断buy_mount所在列的数值是否大于5,保存行号到列表;
    同时找出 buy_mount 大于10的行号,按照要求修改;
    然后倒序,删除;
    保存文档。

    from openpyxl import load_workbook
    from openpyxl.styles import PatternFill,Font
    
    e_xlsx = load_workbook('demo.xlsx')
    s1 = e_xlsx.active
    for first_cell in s1[1]:
        if first_cell.value == 'day':
            day_col = first_cell.column
        elif first_cell.value == 'buy_mount':
            buy_mount_col = first_cell.column
    red = PatternFill(fill_type = 'solid',fgColor = 'ff0000')
    white = Font(color = 'ffffff')
    row_max = s1.max_row
    data_list = [1]
    for row_id in range(2,row_max):
        day_value = s1.cell(row_id,day_col).value
        buy_mount_value = s1.cell(row_id,buy_mount_col).value
        if type(day_value) is int and type(buy_mount_value) is int:
            if day_value >= 20140101 and buy_mount_value > 5:
                data_list.append(row_id)
                if buy_mount_value > 10:
                    rows = s1[row_id]
                    for cell_x in rows:
                        cell_x.fill = red
                        cell_x.font = white
    row_end = row_max + 1
    for row_x in data_list[::-1]:
        s1.delete_rows(row_x+1,row_end-row_x-1)
        print(f'已删除{row_x+1,row_end-row_x-1}')
        row_end = row_x
    print(s1.dimensions)
    e_xlsx.save('demo.xlsx')


    其实我们还有一种思路,就是一边判断数据是否符合要求,如果不符合就删除。但是这样存在一个问题,就是在删除之后,下面的行号就会发生变化,所以我们循环读取的时候,行号和总行数要注意在删除一行之后减1。

    from openpyxl import load_workbook
    from openpyxl.styles import PatternFill,Font
    
    e_xlsx = load_workbook('demo.xlsx')
    s1 = e_xlsx.active
    for first_cell in s1[1]:
        if first_cell.value == 'day':
            day_col = first_cell.column
        elif first_cell.value == 'buy_mount':
            buy_mount_col = first_cell.column
    
    red = PatternFill(fill_type = 'solid',fgColor = 'ff0000')
    white = Font(color = 'ffffff')
    
    row_max = s1.max_row
    
    row_id = 1
    while row_id < row_max:
        row_id += 1
        day_value = s1.cell(row_id,day_col).value
        buy_mount_value = s1.cell(row_id,buy_mount_col).value
        if type(day_value) is int and type(buy_mount_value) is int and day_value >= 20140101 and buy_mount_value > 5:
            if buy_mount_value > 10:
                rows = s1[row_id]
                for cell_x in rows:
                    cell_x.fill = red
                    cell_x.font = white            
        else:
            s1.delete_rows(row_id,1)
            row_id -= 1
            row_max -= 1
    
    print(s1.dimensions)
    e_xlsx.save('demo.xlsx')


    本文链接:https://www.icoa.cn/a/895.html
    关键词: Python   openpyxl   Excel   表格   案例  


    如果您愿意支持本站,欢迎点击打赏哦~



    下一篇:Python 如何定时执行任务和应用实例

    上一篇:案例:用 Python 把最近三个月未修改过的文件进行压缩备份


    - 相关文章 -


    Python 数字与数字型运算 - 2020-09-08

    Python 基础知识之数据类型 - 2020-09-07

    Python 学习中非常好用的编辑器 Sublime Text 3 - 2020-09-07

    Python 基础知识之变量 - 2020-09-03

    Python 详细安装步骤图解 - 2020-09-01

    Python 数据分析模块 Pandas 之 DataFrame 数据 - 2020-02-09

    Python 数据分析模块 Pandas 之 Series 数据 - 2020-02-05

    Python 数据分析第三方库 Numpy 的安装和使用 - 2020-02-03


    - 文章评论 -




    1152

    [由于政策原因,您的留言如果提交成功后,需要审核才能展示,请改天再来查看,请不要重复提交,谢谢支持!]

    - 最新评论[0条评论] -


    [>>>点击查看更多评论]

    版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 | 逍遥峡谷 · 酷品优选
    Copyright©Interstellar Central Occult Agency (I.C.O.A)
    本局纯属虚构,如有雷同,纯属巧合

    冀公网安备13011102001055号 · 冀ICP备06033848号