Python openpyxl详解

本文介绍了Python的openpyxl库,用于读写Excel文件,包括创建工作簿、获取sheet、单元格操作、插入删除行列,以及生成折线图和柱状图的方法。openpyxl支持xlsx格式,不支持xls,适用于大部分Excel操作需求。
摘要由CSDN通过智能技术生成

目录

一:openpyxl简介

二: openpyxl的基本操作

1,创建一个表格

2,打开excel获取目标sheet页

3,单元格常见操作

4,插入删除行列

5,生成折线图和柱状图


一:openpyxl简介

        Python处理excel常见的的第三方库有:xlrd,xlwt,openpyxl等,其中xlrd擅长读excel,xlwt擅长写excel,这里介绍一下openpyxl,拥有读和写excel的能力,但是要说读写功能都超过上面两个,是不存在的,但是可以满足大部分的excel操作需求。需要注意的是openpyxl不支持xls文件。

二: openpyxl的基本操作

1,创建一个表格

from openpyxl import Workbook

# 创建一个工作簿对象
wb = Workbook()
# 在索引为0的位置创建一个名为mySheet的sheet页
ws = wb.create_sheet('mySheet',0)
# 对sheet页设置一个颜色(16位的RGB颜色)
ws.sheet_properties.tabColor = 'ff72BA'
# 将创建的工作簿保存为ftz.xlsx
wb.save('ftz.xlsx')
# 最后关闭文件

在本目录下生成一个ftz.xlsx的excel文件,创建一个新sheet页

2,打开excel获取目标sheet页

from openpyxl import load_workbook
# 加载工作簿
wb2 = load_workbook('ftz.xlsx')
# 获取所有sheet页名字
print(wb2.get_sheet_names())
print(wb2.sheetnames)
# 获取sheet页
ws2 = wb2['mySheet']
ws3 = wb2.get_sheet_by_name('mySheet')
# 打印sheet页的颜色属性值
print('color:',ws2.sheet_properties.tabColor)
wb2.close()

顺带介绍一下工作表的其他操作

#修改工作表名称
sheet.title="ftz"    
#获取工作表名称
sheet.title

3,单元格常见操作

原始表格数据如下:

获取单元格对象和值

from openpyxl import load_workbook
# 加载工作簿
wb2 = load_workbook('ftz.xlsx')
# 获取sheet页
ws2 = wb2.get_sheet_by_name('mySheet')
#获取单元格对象
cellIns1 = ws2.cell(1,1)
cellIns2 = ws2['A1']

#获取单元格的值
cellValue1 = cellIns1.value
cellValue2 = cellIns2.value
print(cellValue1)
print(cellValue2)
wb2.close()

往单元格写入值


#方式一
ws2.cell(5,1).value="海南"
ws2.cell(5,2).value="三亚"
#方式二
ws2["A6"]="北京"
ws2["B6"]="天安门"
#方式三s
ws2.cell(7,1,"山东")
ws2.cell(7,2,"趵突泉")
#保存工作簿
wb2.save("ftz.xlsx")

获取工作表的最大行和最大列

#获取最大行:
ws2.max_row
#获取最大列:
ws2.max_column

 获取多个单元格

#获取A1到A3的单元格
cell1=ws2['A1:A3']
#获取第一行和第二行的单元格
cell2=ws2[1:2]
#获取A列到C列的单元格
cell3=ws2['A:B']

print(cell1[0][0].value,cell1[1][0].value)
print(cell2)
print(cell3)

         下面方法同样可以,下面也提供了两种方式,第一种方式获取的是单元格对象,第二种方式加了一个参数然后进行循环遍历获取的是单元格的值

#方法二:iter_rows 和 iter_cols 方法,此方法得到的是一个可迭代序列
#获取行数1-2且列数1-2的单元格,逐行读取
cell4=ws2.iter_rows(min_row=1, max_row=2, min_col=1, max_col=2)
for cell in cell4:
    print(cell)
# 上面获取的是单元格,如果想得到单元格的值,只需加个参数
cell4=ws2.iter_rows(min_row=1, max_row=6, min_col=1, max_col=2,values_only=True)
for cell in cell4:
    print(cell)

4,插入删除行列

'''
#插入行
ws2.insert_rows(idx=数字编号,amount=要插入行数)
#删除行
ws2.delete_rows(idx=数字编号,amount=要插入行数)
#插入列
ws2.insert_cols(idx=数字编号,amount=要插入列数)
#删除列
ws2.delete_cols(idx=数字编号,amount=要插入列数)
'''
#从第二行开始插入三行
ws2.insert_rows(idx=2,amount=3)
wb2.save('ftz.xlsx')

        需要注意的是使用openpyxl进行工作的时候,当一个工作结束的时候我们需要进行Excel文件的保存操作:wb.save('Mytest.xlsx')这个保存唯一需要注意的是:文件是默认替换的。也就是说我们在保存文件的时候,openpyxl将进行替换而不发出告警。如果大家想保存不同阶段的文件,则可以在保存文件的时候加一个时间戳。 

5,生成折线图和柱状图

from openpyxl import load_workbook
# 生成折线图
from openpyxl.chart import LineChart,Reference
wb=load_workbook("销售数据.xlsx")
sheet=wb.active
chart=LineChart()
# 图的标题
chart.title="手机销售数据统计"
# y轴标题
chart.y_axis.title="销量(单位:万台)"
# x轴标题
chart.x_axis.title="季度"
# 数据来源
data=Reference(worksheet=sheet,min_row=2,max_row=4,min_col=1,max_col=5)
# 设定X轴项目名称,项目名称来自第一行的第二列至第五行
categories=Reference(sheet,min_col=2,min_row=1,max_col=5,max_row=1)
# 给折线图添加数据,数据源中有系列名称,系列名称来自行,第一行为系列名称
chart.add_data(data,from_rows=True,titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart,"B6")
wb.save("销售数据.xlsx")
from openpyxl import load_workbook
#生成柱状图
from openpyxl.chart import BarChart,Reference
wb=load_workbook("销售数据.xlsx")
sheet=wb.active
bc=BarChart()
# 图的标题
bc.title="手机销售数据统计"
# y轴标题
bc.y_axis.title="销量(单位:万台)"
# x轴标题
bc.x_axis.title="季度"
# 数据来源
bc_data=Reference(worksheet=sheet,min_row=2,max_row=4,min_col=1,max_col=5)
# 设定X轴项目名称,项目名称来自第一行的第二列至第五行
bc_cat=Reference(sheet,min_col=2,min_row=1,max_col=5,max_row=1)
# 给柱状图添加数据,数据源中有系列名称,系列名称来自行,第一行为系列名称
bc.add_data(bc_data,from_rows=True,titles_from_data=True)
bc.set_categories(bc_cat)
sheet.add_chart(bc,"B6")
wb.save("销售数据.xlsx")

 原文保留:

newExcel = r"D:\FTZ\year\5month\kw_ftz\BYTE.xlsx"
if os.path.exists(newExcel):  #文件存在则载入存在的文件
    workBook = openpyxl.load_workbook(filename = newExcel)
else:                         #文件不存在则创建新的文件,并将默认的sheet重命名
    workBook = openpyxl.Workbook()
    defaultWorkSheet = workBook.active
    defaultWorkSheet.title = "BYTE"

#选择要操作的sheet页
worksheet = workBook.get_sheet_by_name("BYTE")  #获取要操作的sheet
#写入                                     
for row in range(0,len(result)):
    worksheet.append(result[row])               #result是一个列表,表示要写入的内容
workBook.save(filename=newExcel)                #保存

人狠话不多,直接看上面的代码吧,注释很全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ftzchina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值