目录
一: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) #保存
人狠话不多,直接看上面的代码吧,注释很全