openpyxl 库简介及安装
openpyxl是一个开源的Excel文件处理库,可以用于处理Excel 2010版及以后的文件(官网说法,实际好像2007版Excel文件也可以处理,只要是后缀名为.xlsx、.xlsm、xltx)。
基本上,使用openpyxl 可以进行Excel绝大部分操作。主要常用功能有以下:
新建、加载、保存xlsx表格
工作表sheet的操作
单元格操作
行列操作
格式设置
图表应用
打印设置
结合numpy或Pandas使用
openpyxl的安装,使用pip 进行安装即可,安装的命令如下:
pip install openpyxl
如果不太了解pip 安装python库,可以参考以下文章:
Python 库管家----pip
![f5604b3f4f49cd9c19e59d37091f648f.gif](https://img-blog.csdnimg.cn/img_convert/f5604b3f4f49cd9c19e59d37091f648f.gif)
openpyxl Excel文件及sheet工作表操作
建议在Pycharm中尝试以下功能,新建一个python文件,并使用以下代码导入openpyxl库。
from openpyxl import Workbookfrom openpyxl import load_workbook #使用load_workbook需要用到这部分功能
新建表格(此时并未保存表格,wb为变量名)
wb = Workbook()
加载现有表格
wb = load_workbook('Excel name.xlsx')#如果Excel名前未加文件路径,则默认在相应python project路径下寻找同名表格加载#如果是加上路径,则是加载指定下路径的Excel表格
保存表格
wb.save('Excel name.xlsx')#如果需要更换位置保存,则在Excel名前加入路径,例如'C:\Excel name.xlsx'
将当前激活的sheet工作表定义为ws(变量名)
ws = wb.active#假设现在打开Excel name.xlsx是Sheet1处于编辑状态,则wb.active选择的是Sheet1#如果Sheet2处于编辑状态,则wb.active选择的是Sheet2
通过指定sheet工作表定义ws
ws = wb["Sheet2"]#将Sheet2定义为ws
创建sheet 工作表
ws = wb.create_sheet("NewSheet", 0)#括弧内0指创建的新工作表位置,0表示第一张sheet工作表。#如果有同名sheet,也会新建,但新建的sheet名后会加数字1,如NewSheet1
获取所有sheet工作表名
sheetname = wb.sheetnames#wb.sheetnames 可以获取表格wb中所有的sheet工作表。并储存为列表sheetname
通过指定sheetname 列表定义ws
sheetname = wb.sheetnamesws = wb[sheetname[0]]
修改sheet工作表名
ws.title = "UpdateTitle"#sheet名可以通过title属性进行更改
删除sheet工作表
wb.remove(ws)
更改sheet工作表栏颜色
ws.sheet_prperties.tabColor = "2A22AB"#2A22AB为十六进制数字,代表RGB三原色。
![f5604b3f4f49cd9c19e59d37091f648f.gif](https://img-blog.csdnimg.cn/img_convert/f5604b3f4f49cd9c19e59d37091f648f.gif)
单元格操作
单元格赋值 (一)
ws['A1'] = 10 #在A1单元格输入数字10ws['A2'] = 'Trial' #在A2单元格输入文本'Trial'
单元格赋值 (二)
ws.cell(row =1, column = 2).value = "IT" #给第一行第二列赋值文本'IT'
单元格赋值 (三)
ws.cell(row=1, column=1, value='Trial') #给第一列第一行单元格赋值'Trial'
单元格赋值 (四)
ws.cell(2,1,99) #给第二行第一列单元格赋值99
获取单元格值(一)
cellvalue = ws['A1'].value #value 属性可以获取单元格的值,将'A1'单元格的值赋值给cellvalueprint(ws['A1']) #打印单元格信息,不是单元格的值print(cellvalue) #打印'A1'单元格值,下图为基于”单元格赋值(一)“代码结果
获取单元格值(二)
cellvalue = ws.cell(row=1,column=1).valueprint(ws.cell(row=1,column=1)) #打印单元格信息,不是单元格的值print(cellvalue) #打印第一行第一列单元格值,下图为基于”单元格赋值(三)“代码结果
获取单元格值(三)
cellvalue = ws.cell(2,1).valueprint(ws.cell(2,1)) #打印单元格信息,不是单元格的值print(cellvalue) #打印第二行第一列单元格值,下图为基于”单元格赋值(四)“代码结果
单元格输入公式
ws['A1'] = '=SUM(2,2)' #A1单元格输入Excel SUM函数,求2+2的和ws['A2'] = '=A1&"ABC"' #A2单元格输入Excel &函数,求A1单元格文本与“ABC”合并后结果
PS:如果打印有公式的单元格的值,只会是打印公式的内容,而不是公式计算出来的值,目前暂时还无法从程序中直接获取计算后的值。如打印上面例子中A1单元格的值,就还是公式内容。
获取单元格的所在行数
cellrow = cell.row
获取单元格的所在列数
cellcol = cell.column
获取单元格的所在Excel坐标
cellcoordinate = cell.coordinate
多个单元格赋值(一)
for i in range (1,6): for j in range (1,5): ws.cell(i,j).value = i+j #给从第一行到第五行中的第一列到第四列的单元格中赋值
#for x in range(m,n):是一个非常常用而且简单的循环语句,基本用法可以参照上面程序
多个单元格操作(二)----iter_rows函数
for row in ws.iter_rows(min_row=1, max_col=3, max_row=3): #定义行列范围 for cell in row: print(cell) #输出单元格信息 cell.value = cell.row + cell.column #将单元所在的行数与列数之和赋值给单元格
从打印的单元格信息可以看出,iter_rows函数是逐行处理数据,第一行的数据处理完后,再处理第二行。
多个单元格操作(三)----iter_cols函数
for col in ws.iter_cols(min_col=1, max_row=3, max_col=3): #定义行列范围 for cell in col: print(cell) #输出单元格信息 cell.value = cell.row + cell.column #将单元所在的行数与列数之和赋值给单元格
从打印的单元格信息可以看出,iter_cols函数是逐列处理数据,第一列的数据处理完后,再处理第二列。
![f5604b3f4f49cd9c19e59d37091f648f.gif](https://img-blog.csdnimg.cn/img_convert/f5604b3f4f49cd9c19e59d37091f648f.gif)
实例
写一个简单的实例,创建一个Excel表格,然后在表格中分别创建三个sheet 工作表,并给sheet工作表中单元格赋值。以下是代码:
from openpyxl import Workbook #从openpyxl 库中导入Workbook模块import os #导入os 库,python标准库不需要安装wb = Workbook() #新建表格ws1 = wb.active #定义ws1ws1.title = "trial 1"for col in ws1.iter_cols(min_col=1, max_row=3, max_col=3): #定义行列范围 for cell in col: cell.value = cell.row #将单元所在的行数与列数之和赋值给单元格ws2 = wb.create_sheet("Trial 2", 1) #创建ws2for row in ws2.iter_rows(min_row=1, max_col=3, max_row=3): #定义行列范围 for cell in row: cell.value = cell.coordinate #将单元所在的坐标赋值给单元格ws3 = wb.create_sheet("Trial 3", 2) #创建ws3for i in range (1,6): for j in range (1,5): ws3.cell(i,j).value = i+j #给从第一行到第五行中的第一列到第四列的单元格中赋值wb.save('D:\Trial.xlsx') #保存表格os.startfile('D:\Trial.xlsx') #打开上一步保存的表格
![f5604b3f4f49cd9c19e59d37091f648f.gif](https://img-blog.csdnimg.cn/img_convert/f5604b3f4f49cd9c19e59d37091f648f.gif)
![f5604b3f4f49cd9c19e59d37091f648f.gif](https://img-blog.csdnimg.cn/img_convert/f5604b3f4f49cd9c19e59d37091f648f.gif)
关注公众号”Start Python“,一起学习Python开发
![6c46610fff8af1681df032ca77d82d21.png](https://img-blog.csdnimg.cn/img_convert/6c46610fff8af1681df032ca77d82d21.png)