python实现Excel自动化办公

news2025/2/23 7:30:09

准备工作

  • 安装相关模块

        pip install openpyxl lxml pillow

  • 基本定义

        工作簿:一个电子表文件为一个工作簿

        活动表:用户当前查看的表活关闭Excel最后查看的表

        sheet表

        单元格

Excel数据读取操作

  • 打开工作簿并创建一个对象:

        wb = openpyxl.load_workbook('E:\PyCharm\pythonProject\test\venv\test.xlsx')

  • 获取工作簿中所有sheet表的表明:

        wb.sheetnames

  • 获取指定的sheet表对象:

        sheet = wb['升级内容']

  • 获取活动表对象:

        sheet_ac = wb.active

  • 获取单元格对象:

        cell = sheet['A4']

  • 获取单元格内容:

        print(cell.value)

  • 获取坐标:        

        print(cell.row)  #获取行坐标
        print(cell.column)  #获取列坐标
        print(cell.coordinate)  #获取整个坐标

  • 通过行、列索引定位单元格对象

        print(sheet.cell(row=4,column=3).value)

  • 便利选定区域,选定区域返回为元组

        for cell_row in sheet['C2':'D11']:
            for cell in cell_row:
                print(cell.value,cell.coordinate)

  • 获取特定行和列的单元格的值:利用工作表对象的rows和columns属性

        (返回一个生成器对象,可以用list()格式化成列表,并遍历指定的行或列)

        print(list(sheet.rows))
        print(list(sheet.columns))

        for cell_row in list(sheet.rows)[0]:
            print(cell_row.value)
        for cell_row in list(sheet.columns)[0]:
            print(cell_row.value)

  • 获取工作表中的最大行与最大列的数量

        print(sheet.max_row,sheet.max_column)

写入Excel文档

  • 创建一个新的工作簿对象

        wb = openpyxl.Workbook()

  • 给工作表改名

        sheet.title = "记录表"

  • 保存工作簿

        wb.save('C:\\Users\\Admin\\Desktop\\Date.xlsx')

  • 创建新工作表

        wb.create_sheet(title='记录表2')
        wb.create_sheet(index=1,title='记录表3')

            #index=1:表示把新创建的工作表放在第几个位置

  • 删除工作表

        del wb['记录表3']

  • 写入单元格

        sheet['A1'] = 'hello'

        sheet.cell(row=1, column=2).value = 100

单元格样式制定

  • 设置字体

        导入字体工具类:

                from openpyxl.styles import Font

        设置字体:

                sheet['A3'].font = Font(name = '楷体')

        设置颜色:

                sheet['A3'].font = Font(color = '8470FF')

        其他设置:

                italic = True #设置斜体

                size = XXX  #设置字体大小

                underline='sigle' #设置单下划线

                b = True  #加粗

                ...

  • 设置背景填充色

         导入背景填充色工具类               

                 from openpyxl.styles import PatternFill

        填充背景色

                sheet['A3'].fill = PatternFill(patternType='solid',fgColor='8470FF')

                        #patternType='solid':patternType为填充样式,solid为填充整个单元格

  • 设置边框

        导入边框工具类Side为边,Border为框

                from openpyxl.styles import Side,Border

        定制边框

                #设置两个边对象,相当于两个模板

                S1 = Side(style='thin',color='8470FF')
                S2 = Side(style='double',color='ff0000')

                #定义A3单元格上边框为S1模板样式

                sheet['A3'].border = Border(top=S1)

                #分别定义单元格A4的4个边框样式
                sheet['A4'].border = Border(top=S2,bottom=S1,left=S2,right=S1)

  • 单元格对齐方式

        导入对齐方式工具类

                 from openpyxl.styles import Alignment

        定义对齐方式

                #horizontal为水平对齐方式,left为左对齐

                sheet['B2'].alignment = Alignment(horizontal='left')

数据筛选与排序

  • 定义筛选器

                #auto_filter:定义一个筛选器对象,ref为选取范围

                sheet.auto_filter.ref = 'C1:C280'

  • 给筛选器添加筛选条件

                (会有一个bug,执行完其实已经生效但是excel表没有显示出来。需要点一下筛选确认一下才行)

                #2为筛选第三列内容,['大肠菌群']为筛选条件

                sheet.auto_filter.add_filter_column(2,['大肠菌群'])

  • 数据排序

                #也需要先定义一个筛选器

                sheet.auto_filter.ref = 'C1:C280'

                #参数1:排序列,  参数2:升降序

                sheet.auto_filter.add_sort_condition(ref='C3:C20',descending=True)

其他设置

  • 公式操作

        添加公式

                sheet['A3'] = '=SUM(A1:A2)'     

        在打开一个带有公式的表想要读取数据而不是公式时需要只读模式,有个bug:如果没有生效需要打开excel重新保存一遍

                xl = openpyxl.load_workbook('C:\\Users\\Administrator\\Desktop\\10.19.xlsx',read_only=True)

  • 设置行列

        设置行高

                #sheet.row_dimensions:获取行,返回为包含行对象的字典,一行一个key和对应的对象值。选择key为2对应的对象也就是第二行高度设置成50

                sheet.row_dimensions[2].height = 50

        设置列宽

                sheet.column_dimensions['A'].width = 80

  • 拆分合并单元格

        合并单元格

                sheet.merge_cells('A1:D7')

        拆分单元格

                sheet.unmerge_cells('A1:D7')

  • 冻结与解冻窗口

        冻结

                sheet.freeze_panes = 'A2'

        解冻

                sheet.freeze_panes = None

                

绘制图表

        #'G1':为图标添加的位置

综合示例

如下表,公司要求每天统计两个sheet页企业和政府中检测项目的检测次数和检测方法简称并输出到新的excel中,其中检测项目后缀带数字的为检测次数(例如有两个大肠杆菌*5,两个大肠杆菌,总次数为2*5+2)

代码:

from  openpyxl.styles import  Alignment
import  openpyxl
xl = openpyxl.load_workbook('C:\\Users\\Admin\\Desktop\\10.19.xlsx')
ls = xl.sheetnames
sheet1 = xl[ls[0]]
sheet2 = xl[ls[1]]
countDate = {}

for row in range(2,sheet1.max_row + 1):
    state = sheet1['C' + str(row)].value
    name = sheet1['D' + str(row)].value
    if state != None:
        countDate.setdefault(state,{'counts':0,'检测方法简称':name})
        countDate[state]['counts'] += 1
        print(countDate)
for row in range(2,sheet2.max_row + 1):
    state = sheet2['C' + str(row)].value
    name = sheet2['D' + str(row)].value
    if state != None:
        countDate.setdefault(state,{'counts':0,'检测方法简称':name})
        countDate[state]['counts'] += 1

countNum = {}
for key,value in countDate.items():
    numm = key.find('*')
    if numm < 0:
        if countNum.get(key) == None:
            countNum.setdefault(key,value)
        else:
            countNum[key]['counts'] += int(countDate[key]['counts'])

    else:
        names = key[0:numm]
        nums =int(key[numm+1:]) * int(countDate[key]['counts'])
        namess = countDate[key]['检测方法简称']
        if countNum.get(names) == None:
            countNum.setdefault(names,{'counts':nums,'检测方法简称':namess})
        else:
            countNum[names]['counts'] += nums
print("++++++++++++++++++++++++++++++++++")
print(countNum)

wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = '统计数据'
sheet.column_dimensions['A'].width=25
sheet.column_dimensions['A'].horizontal='left'
sheet.column_dimensions['C'].width=100
no1 = 0

for key,value in countNum.items():
    no1 += 1
    sheet.cell(row = no1 , column=1).value = key
    sheet.cell(row=no1, column=2).value = countNum[key]['counts']
    sheet.cell(row=no1, column=2).alignment = Alignment(horizontal='left')
    sheet.cell(row=no1, column=3).value = countNum[key]['检测方法简称']

wb.save('C:\\Users\\Admin\\Desktop\\Date.xlsx')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1150655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2021ICPC沈阳】EFBJHL

不知道为什么感觉以前的场要比现在的简单一点&#xff0c;虽然这场VP虽然题数到了但是还是差点罚时.... 现在的有些场感觉连签到都要签半天&#xff0c;比如前几天的ICPC西安和CCPC桂林&#xff0c;看了下题都不简单 这场甚至银牌题都没什么思维&#xff0c;只需要算法的板子…

mmcv中出现TypeError: FormatCode() got an unexpected keyword argument ‘verify‘

最近安装Co-DETR项目环境时遇到如下的问题 主要是因为最新版的yapf&#xff08;0.40.2&#xff09;中删除了verify的验证功能 将其降级为旧版即可&#xff1a; pip install yapf0.40.0

照片去文字水印怎么弄?这三个方法快学起来

照片去文字水印怎么弄&#xff1f;你有没有遇到过这样的烦恼呢&#xff1f;我经常在网上找一些好看的照片来做头像或者壁纸&#xff0c;但是总是遇到一些带水印或者不想要的文字的照片&#xff0c;影响了整体的美观度让人很头疼&#xff0c;每次重新找又得花费不少时间和精力&a…

真心话坦白局系统源码

它具有匿名信息的神秘感 但又会给你一点小提示 能让你有无限挖掘下去的好奇感 也能让你说出那些不敢说出口的话 敢来一场坦白局吗&#xff01; 坦白局这个功能类似于悄悄话&#xff0c;只不过是匿名的悄悄话。 有时候我们有些话是开不了口的&#xff0c;坦白局给了我们一个…

每日汇评:黄金多头重回2000美元,接下来会发生什么?

受地缘政治因素影响&#xff0c;金价守住了上周五2000美元上方的强劲涨幅&#xff1b; 美元持稳&#xff0c;因为美国债券市场的行动是美联储本周的关键&#xff1b; 由于可能出现牛十字&#xff0c;黄金价格有望进一步上涨&#xff0c;牛旗仍在图表中延续&#xff1b; 继上周五…

vue3 vue3-particles粒子使用方法

注意&#xff1a;这个vue3-particles和particles.vue3有些许差别的&#xff08;安装、引入方式&#xff09; particles.vue3示例&#xff1a;vue3 使用particles插件粒子_vueparticles_余温无痕的博客-CSDN博客 下面是vue3-particles使用介绍 先看效果&#xff0c;背景图是自…

Qt3D绘制旋转立方体

近期用了款叫DesktopSpace&#xff0c;也想实现一下这款软件实现的效果 具体实现步骤: 使用Qt3D绘制个旋转的立方体&#xff08;一&#xff09;使用快捷键控制立方体显示面&#xff08;二&#xff09;创建6个人虚拟桌面&#xff0c;截取不同虚拟桌面&#xff0c;显示在不同的面…

15、SpringCloud -- 延迟消息、异步下单失败处理方案

目录 延迟消息需求理解:思路:代码:发送延迟消息消费延迟消息:1、订单支付状态:2、回补真实库存:3、回补预库存:4、修改本地标识:测试:清除MQ数据:期望结果:实际结果:问题:异步下单失败需求1:代码:发送消息:消费消息:测试:需求2:延迟消息 需求理解: 用户成…

从制造到创造:揭示中国制造的基础瓶颈及其突破

中国制造的产品遍布全球&#xff0c;但很多人认为中国制造的产品缺乏基础&#xff0c;这是为什么呢&#xff1f;本文将从制造的基础入手&#xff0c;探讨中国制造缺乏基础的原因。 一、制造的基础 制造的基础是工艺&#xff0c;工艺的基础包括三个方面&#xff1a;基础材料的研…

如何将word格式的文档转换成markdown格式的文档

如何将word格式的文档转换成markdown格式的文档 前言 A. 介绍Markdown和Word格式文档 什么是Markdown&#xff1f; Markdown是一种轻量级标记语言&#xff0c;旨在简化文本格式化和排版的过程。它以纯文本形式编写&#xff0c;通过使用简单的标记语法&#xff0c;使文档更具…

HarmonyOS开发:基于http开源一个网络请求库

前言 网络封装的目的&#xff0c;在于简洁&#xff0c;使用起来更加的方便&#xff0c;也易于我们进行相关动作的设置&#xff0c;如果&#xff0c;我们不封装&#xff0c;那么每次请求&#xff0c;就会重复大量的代码逻辑&#xff0c;如下代码&#xff0c;是官方给出的案例&am…

0003net程序设计-net旅游景点推荐系统

文章目录 摘 要目录系统设计开发环境 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#…

【IDEA】设置sql提示

第一步&#xff1a;注入SQL语言 1.首先选择任意一条sql语句&#xff0c;右击&#xff0c;选择 ‘显示上下文操作’ 2.选择 ‘注入语言或引用’ 3. 往下翻&#xff0c;找到MySQL 第二步&#xff1a;配置MySQL数据库连接 1.首先点击侧边的数据库&#xff0c;再点击上面的加号 2…

antv/g6使用教程及图配置

介绍 G6 是一款由蚂蚁金服 AntV 团队开发的 JavaScript 图形引擎&#xff0c;用于构建各种交互式可视化图形&#xff0c;包括但不限于图表、网络拓扑图、关系图、流程图等。无论是数据分析、决策支持&#xff0c;还是信息可视化&#xff0c;G6 都是一个强大的工具。 以下是 G…

python采集电商jd app商品详情数据(2023-10-30)

一、技术要点&#xff1a; 1、cookie可以从手机app端用charles抓包获取&#xff1b; 2、无需安装nodejs&#xff0c;纯python源码&#xff1b; 3、商品详情接口为&#xff1a;functionId "wareBusiness"&#xff1b; 4、clientVersion "10.1.4"同…

自学C语言的最恐怖的地方是什么?

自学C语言的最恐怖的地方是什么&#xff1f; 当年在网吧学C&#xff0c;人家在玩游戏&#xff0c;我在敲代码&#xff0c;基本上从9点敲到1点&#xff0c;然后再开始玩游戏。。。当时不是装逼&#xff0c;就是觉得有意思&#xff0c;而且当时计算机的确是一门很高大上的职业。…

redis加入window服务及删除

1、命令redis-server.exe --service-install redis.windows.conf&#xff0c;在服务中可配置自动启动 删除redis服务&#xff0c;先停止redis服务运行&#xff0c;管理员cmd模式&#xff0c;sc delete "redis" ,

mysql 间隙锁

mysql 默认是可重复读的隔离级别&#xff0c;这种默认会有幻读&#xff0c;幻读指的什么现象呢&#xff0c;就是在同一个事物中前后两次查到的结果不一致&#xff0c;那么mysql是怎么解决幻读的呢&#xff0c;这就是mvcc mvcc 什么是mvcc呢&#xff0c;就是多版本并发控制&am…

数据结构之树(图解)

文章目录 前言一、树是什么&#xff1f;二、树的特点三、树的相关概念四、树的表示方法&#xff08;孩子兄弟表示法&#xff09;总结 前言 在学习完线性结构&#xff0c;例如顺序表、链表、栈、队列后&#xff0c;我们要开始学习一个新的数据结构----树 一、树是什么&#xf…

超全整理,Jmeter性能测试-脚本error报错排查/分布式压测(详全)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能脚本error报错…