openpyxl 的用法实例

1.1 Openpyxl 库的安装使用

openpyxl 模块是一个读写 Excel 2010 文档的 Python 库,如果要处理更早格式的 Excel 文 档,需要用到额外的库,openpyxl 是一个比较综合的工具,能够同时读取和修改 Excel 文档。 其他很多的与 Excel 相关的项目基本只支持读或者写 Excel 一种功能。新建、读取、保存工 作簿。

1.2 Excel 的新建、读取、保存

1.2.1 新建保存工作簿(覆盖创建)
新建:openpyxl.Workbook(),注意这个的 W 是大写的(本人吃过亏),可以设置 write_only=True/False 的读写方式,默认是可写。 保存:workbook.save('工作簿名.xlsx')

from openpyxl import Workbook
wb=Workbook() # 新建工作簿
wb.save('我的工作簿.xlsx') # 相对路径保存工作簿

每个 workbook 创建后,默认会存在一个 sheet。也可以自行创建新的 sheet。

1.2.2 读取保存工作簿

读取工作簿:
openpyxl.load_workbook('工作簿名.xlsx'),注意以下相关参数的设置。
read_only=False/True False 表示可以读、写,True 表示只能读、不能写。
guess_types=False/True False 表示转换数据,True 表示不能转换数据。
data_only=False/True False 表示序单元格的真实信息,True 表示只读取值。

from openpyxl import load_workbook
wb=load_workbook('成绩表-1.xlsx') # 读取 工作簿
wb.save('成绩表-2.xlsx') # 保 存工作簿

1.2.3 实例(批量建新工作簿)

from openpyxl import Workbook
for m in range(1,13): wb = Workbook()  # 新建工作簿wb.save('%d 月.xlsx'%m)# 保存工作簿

1.3 工作表对象的获取方法

1.3.1 工作表获取方式:

获取当前活动工作表的:

sheet = wb.active

以索引值方式获取工作表:

sheet= wb.worksheets[2]

以工作表名获取: wb['工作表名'],注意,此表达方式为切片显示,所以没有成员提示。很少用

sheet = wb["Sheet-甲乙-甲乙"]

循环工作表:很好用,一般用sheetnames

wb = wb.worksheets

获取所有工作表名:wb.sheetnames

wb4 = wb.sheetnames

获取指定工作表名

wb7 = wb.sheetnames[2].title()

修改工作表名称

import openpyxlwb = openpyxl.load_workbook('我的工作簿.xlsx')
# wb[wb.sheetnames[1]].title = '南京'
sh_name = wb.sheetnames  # 获取所有sheet
sh = wb[sh_name[1]]
sh.title = "南京"
sheet = wb.sheetnames[1].title()
wb.save('我的工作簿.xlsx')
print(sheet)
1.3.2 实例(批量修改工作表名)
import openpyxlwb = openpyxl.load_workbook('各年业绩表.xlsx')
for sh in wb.worksheets:sh.title = sh.title + '-芝华公司'
wb.save('各年业绩表(修改后).xlsx')

1.4 工作表的新建、复制、删除

1.4.1 新建工作表

可以在新建的工作簿中新建工作表(在新建工作簿时,会默认新建一个工作表)。也能在已经存在的工作簿中新建工作表。

新建工作表时的默认工作表名:

wb.create_sheet()  #默认工作表名为 Sheet1、 Sheet2、 Sheet3……
wb8 = wb.create_sheet('工作表名',指定位置)
1.4.2 复制工作表
wb.copy_worksheet(wb.worksheets[3])
1.4.3 删除工作表

workbook.remove(工作表)

wb.remove(wb.worksheets[2])

1.5 关于工作表的实例应用

1.5.1 实例应用(批量新建12个月工作表)
import openpyxlwb = openpyxl.Workbook()  # 新建工作簿
for m in range(1, 13):wb.create_sheet('%d 月' % m)  # 新建月份工作表
wb.remove(wb['Sheet'])  # 删除 指定工作表
wb.save('2022 年计划表.xlsx')  # 保存工作簿。
1.5.2 实例应用(删除不符合条件的工作表)
import openpyxl
wb=openpyxl.load_workbook('2021 年.xlsx')  # 读取 工作簿
for sh in wb: # 循环 工作簿中的工作表if sh.title.split('-')[0]!='北京': # 判断 工作表是否不等于北京wb.remove(sh) # 删除 工作表
wb.save('北京.xlsx') # 保 存工作簿
1.5.3 实例应用(批量复制工作表)
import openpyxlwb = openpyxl.load_workbook('模板.xlsx')
for m in range(1, 13):wb.copy_worksheet(wb['测试']).title = '%d 月' % mwb.remove(wb['测试'])wb.save('2018 年各月表格.xlsx')

以上是处理工作表的方式


以下是处理单元格的方法

1.6 单元格信息获取

1.6.1 单元格数据获取

A1 表示法:工作表['A1'],R1C1 表示法:工作表.cell(行号,列号)

import openpyxlwb = openpyxl.load_workbook("各年业绩表.xlsx")
ws = wb.worksheets[0]   #不能使sheetnames
sh2 = ws["a1"].value    #必须是小写
print(sh2)
sh = ws.cell(1,1).value
print(sh)
1.6.2 实例应用(汇总各表各单元格数据)
import openpyxl
wb = openpyxl.load_workbook('各年业绩表.xlsx')
print(sum([s['b14'].value for s in wb]))
print(sum([s.cell(14,2).value for s in wb]))

1.7 单元格区域信息获取

1.7.1 单元格区域数据获取

1.工作表['起始单元格': '终止单元格']或工作表['起始单元格: 终止单元格'],此方法是按行读取的数据。

import openpyxl
wb = openpyxl.load_workbook('demo.xlsx')
sh = wb["天峰集团"]
s = sh["a1":"a2"]
print(s)
wb.save("demo.xlsx")

2.工作表['起始行号': '结束行号']或者工作表['起始行号: 结束行号'],此方法是按行读取的数据。

import openpyxl
wb = openpyxl.load_workbook('demo.xlsx')
sh = wb["天峰集团"]
s = sh["1:3"]
print(s)
wb.save("demo.xlsx")

3.工作表['起始列号': '结束列号']或者工作表['起始列号: 结束列号'],
此方法是按列读取的数据。

import openpyxl
wb = openpyxl.load_workbook('demo.xlsx')
sh = wb["天峰集团"]
s = sh["a:w"]
print(s)
wb.save("demo.xlsx")

4.获取(按行)指定工作表所有已用数据:
list(workbook.worksheets[索引值].values)

print([[c.value for c in row] for row in ws['a1:d3']])

1.7.2 实例应用

按行求和(方法 1)

import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.active
rngs=ws['a2:e71']
print(['%s-%d'%(row[0].value,sum([c.value for c in row][1:])) for row in rngs])

按行求和(方法 )

import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.active
print(['%s-%d'%(row[0],sum(row[1:])) for row in list(ws.values)[1:]])

按列统计平均值

import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.activef=[sum(l)/len(l) for l in list(zip(*list(ws.values)[1:]))[1:]]
n=[c.value for c in ws['1']][1:]
print(['%s-%.2f'%c for c in list(zip(n,f))])print(['%s-%.2f'%(l[0],sum(l[1:])/len(l[1:])) for l in list(zip(*list(ws.values)))[1:]])

1.8 行列信息获取

1.8.1 行列信息获取

按行获取工作表使用区域数据:worksheet.rows

按列获取工作表使用区域数据:worksheet.columns
获取工作表中最小行号:worksheet.min_row
获取工作表中最小列号:worksheet.min_column
获取工作表中最大行号:worksheet.max_row
获取工作表中最大列号:worksheet.max_column
获取单元格的行号:cell.row
获取单元格的列号:cell.column iter
方法获取指定区域:
1.按行获取指定工作表单元格区域:worksheet.iter_rows(……)
2.按列获取指定工作表单元格区域:worksheet.iter_cols(……)
可以通过 min_row、min_col、max_col、max_row 这几个参数进行单元格区域的控制

import openpyxl
wb=openpyxl.load_workbook('demo.xlsx')
ws=wb.active
minr=ws.min_row
minc=ws.min_column
maxr=ws.max_row
maxc=ws.max_column
rngs=ws.iter_rows(min_row=minr+1,min_col=minc+2,max_row=maxr-1,max_col=maxc-1)
col=ws.iter_cols(min_row=minr+1,min_col=minc+1,max_row=maxr-1,max_col=minc+1)
total=([sum([v.value for v in row]) for row in rngs])
cp=([[v.value for v in row] for row in col][0])
print(list(zip(cp,total)))

1.8.2 实例应用

import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[0]
for row in ws.iter_rows(min_row=36,min_col=2,max_col=4,max_row=40):print([c.value for c in row])
import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[0]
for row in list(ws.rows)[1:]:l=[v.value for v in row]print(l[0],sum(l[1:]))
import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[0]
for col in list(ws.columns)[1:]:l=[v.value for v in col]print(l[0],max(l[1:]))
import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[0]
total=[sum([c.value for c in row]) for row in ws.iter_rows(min_col=2,min_row=2)]
name=[c.value for c in ws['a']][1:]
print(list(zip(name,total)))
import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[0]
total=[sum([c.value for c in col]) for col in ws.iter_cols(min_col=2,min_row=2)]
name=[c.value for c in ws[1][1:]]
print(list(zip(name,total)))

单元格的写入

1.9.1 单元格与区域数据写入

A1 表示法:工作表['A1']=值,R1C1 表示法:工作表.cell(行号,列号,值)

import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[1]
s = ws['a1']=123
ws.cell(2,3,'我是中国人')
ws.cell(3,3).value='我是四川人'
print(s)
wb.save('test.xlsx')
1.9.2 实例应用(九九乘法表)
import openpyxl
wb=openpyxl.Workbook()
ws=wb.active
ws.title='九九表'
for x in range(1,10):for y in range(1,x+1):ws.cell(x,y,f'{y}×{x}={x*y}')
wb.save('九九表.xlsx')

1.10 批量写入数据

1.10.1 按行写入数据 (追加)

在最后一行写入数据:工作表.append(列表)

import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[0]
ws.append({'a':'张三','b':56,'c':'fdgsfg'})
wb.save('test.xlsx')

1.10.2 实例应用(九九乘法表)

wb=openpyxl.load_workbook('demo.xlsx')
ws=wb.active
# for r in [['%d*%d=%d'%(y,x,x*y) for y in range(1,x+1)] for x in range(1,10)]:
#     ws.append(r)
# ws.delete_rows(1)
# wb.save('demo.xlsx')
for row in ws['a1:c6']:for c in row:c.value=1
wb.save('demo.xlsx')

1.11 循环方式批量写入数据

1.11.1 循环获取单元格对象,再写入

之前我们可以通过组合单元格来获取或者写入数据,但还有一种方法,就是直接循环单 元格区域来写入数据。与循环读取的表示方式基本相同,只是多了一个赋值。

import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.worksheets[0]
for row in ws['a1:g9']:print(row)for c in row:print(c.value)
wb.save('test.xlsx')
1.11.2 实例应用(大于等于 90 分为优秀)
import openpyxl
wb=openpyxl.load_workbook('demo.xlsx')
ws=wb.active
rngs=ws.row("2:2")
for row in rngs:for c in row:if c.value>=90:c.value=str(c.value)+'(优秀)'
wb.save('demo1.xlsx')
1.11.3 实例应用(每个人的总分大于等于300为优秀)

最后加一列写优秀

import openpyxl
wb=openpyxl.load_workbook('demo.xlsx')
ws=wb.active
rngs=ws.iter_rows(min_row=2,min_col=2)
for row in rngs:sm=sum([c.value for c in row][0:4])if sm>=300:row[-1].value='优秀' #切片用的多
wb.save('demo2.xlsx')

Python 操作Excel-openpyxl模块使用相关推荐

  1. Python操作excel常用模块汇总

    #收集的python相关信息#可能是全网最完整的 Python 操作 Excel库总结! #https://zhuanlan.zhihu.com/p/353669230#:~:text=%E5%8F% ...

  2. python处理Excel——openpyxl模块

    openpyxl模块 该模块是Python中处理Excel的模块(这个模块只能处理.xlsx的Excel,如果是其它格式,请先转换为.xlsx格式.).这个模块比起其它的处理Excel的模块,在使用上 ...

  3. Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合

    今天,接到一个任务,要生成大约两百个excel文件,从2006年到2013年,每个月两个文件,这些文件中除了几个关于日期的单元格不同外,其他数据都相同,所以就想到可以用python写一个小脚本,自动生 ...

  4. python操作excel(openpyxl,xlrdxlwt)

    目录 对比xlwt,openpyxl,xlrd 图示 实测 xlrd&xlwt读写操作 安装 读操作 写操作 excel时间处理xldate_as_tuple xlrd.xldate_as_t ...

  5. python操作excel之 模块 xlrd

    xlrd是专门用来在python中读取微软execel的模块,可以自己直接下载安装,也可以通过包管理器安装. 官方资料: 下载地址:http://pypi.python.org/pypi/xlrd 官 ...

  6. python操作excel之 模块 xlrd (详解)

    二.使用介绍 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open_workbook('excelFile.xls') 3.使用技巧 获取一个工作表 ...

  7. python中excel制作成绩报表_python制作简单excel统计报表2之操作excel的模块openpyxl简单用法...

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  8. 【博主推荐】Python 基于Xlwings、Openpyxl自己重新封装Python操作Excel类

    1.简介:Python操作Excel,常用Xlwings.Openpyxl类,由于其知识琐碎,使用起来不太方便,因此自己把常用用法重新封装一个操作类. 2.应用场景:使用Python操作Excel,读 ...

  9. Python openpyxl打开有公式的excel表取值错误的解决办法,Python openpyxl获取excel有公式的单元格的数值错误,Python操作excel(.xlsx)封装类

    Python openpyxl打开有公式的表格,如果直接读取,会出现有公式的单元格为空或零的情况. 参见: https://blog.csdn.net/weixin_45903952/article/ ...

  10. python excel取列_python取excel表格第一列数据-python操作excel,使用xlrd模块,获取某一列数据的......

    怎样用python,读取excel中的一列数据 Python对Excel的读写主要有xlrd.copyxlwt.xlutils.openpyxl.xlsxwriter几种. 1.xlrd主要用来读百取 ...

最新文章

  1. 对java多线程里Synchronized的思考
  2. Skelta BPM.NET 2006 初探
  3. 在C语言中是怎么存储的,在C语言中,串的存储方式是()。
  4. 第七天学习Java的笔记(IDEA环境配置)
  5. 如何阅读《深入理解计算机系统》?(文末送书)
  6. Linux Socket Select说明
  7. 梯度下降法(Gradient Descent)初识
  8. OpenCV_Camera Calibration and Rectification under QT creator( 相机标定及矫正 | QT creator环境 )
  9. Scala进阶之路-I/O流操作之文件处理
  10. 世界 图书 学科 分类
  11. 这是一份文科生都能看懂的线性代数简介
  12. 根据rpt文件打印报表
  13. golang的chan有趣用法
  14. 您该怎样科学地准备过年?
  15. R_ggparliament_会议布局
  16. python协同过滤电影推荐_推荐系统:基于用户和模型的协同过滤电影推荐
  17. 卷积神经网络(CNN)详细介绍及其原理详解
  18. MySQL 是如何归档数据的呢?
  19. OSPF 理论一(热爱自己 热爱生活)
  20. 使用bark App实现向手机推送消息的流程

热门文章

  1. 重要硬件了解(硬盘、内存、CPU、显卡)通常是衡量电脑性能的关键指标
  2. 什么是内核态和用户态
  3. 从卸载App开始... 不玩手机可以做些什么?
  4. 第3章第20节:常用图形:使用弧形箭头描述工笔画的四个步骤 [PowerPoint精美幻灯片实战教程]
  5. 大疆无人机连接拍照和电池
  6. 小米9支持android q,小米9升级安卓Q可能出现这些问题! 想好了再升级
  7. JAVA 异常Exception讲解
  8. 第十代酷睿 I7 IPSEC加密转发性能测试报告
  9. 网络原理——IP地址与mac地址
  10. 中兴新支点国产操作系统安装如QQ、office 、WPS常用软件方法