openpyxl 库可实现读Excel文件、写Excel文件和修改Excel文件,但openpyxl 库不支持老版Office2003 的 xls 格式的Excel文档。
一、安装openpyxl模块
1、Windows下Pythonxx\Lib\site-packages目录下安装命令:
pip install openpyxl
2、验证安装是否成功:
新建python文件,导入import openpyxl,不报错说明模块安装成功
二、读写Excel文档常用方法
1、导入openpyxl模块
import openpyxl
2、创建Excel Book 对象
excelBook = openpyxl.Workbook()
3、创建Excel Book 对象时会自动生成一个sheet对象,可通过active获取sheet对象
# 3、创建Excel Book 对象时会默认生成一个sheet对象,可通过active获取sheet对象
sheetName = excelBook.active # 获取当前 sheet 对象
# sheet对象.title获取sheet对象名称
print("创建Excel Book 对象时会默认生成sheet名称:" , sheetName.title)
4、sheet对象.title修改默认sheet名称
# 4、sheet对象.title修改默认sheet名称
sheetName.title = 'Test'
print("修改后的sheet名称:" , sheetName.title)
5、新建sheet对象
Book对象.creat_sheet(title , index)方法可实现创建sheet功能
title:非必填参数,sheet名称,默认名称为Sheet
index:非必填参数,sheet位置,其中0代表第一个位置,1代表第二个位置,默认最后
excelBook.create_sheet('测试') # 新建测试sheet位于最后
6、获取所有sheet对象
Book对象.sheetnames获取所有sheet对象名称,返回列表
print("所有sheet对象名称:" , excelBook.sheetnames)
7、获取某个sheet对象
Book对象[sheet名称]可获取“sheet名称”的sheet对象
print("获取某个sheet:" , excelBook['Test'])
8、单元格写入内容
A)sheet对象[单元格位置]赋值
sheetName["A1"] = '序号'
B)sheet对象.cell(row , col , value)
row:行号,注意openpyxl行数从1开始
col:列数,注意openpyxl列数从1开始
value:单元格内容
sheetName.cell(2 , 1 , 1) # 第二行,第一列单元格内写入1
C)sheet对象.cell(row , col).value赋值
row:行号,注意openpyxl行数从1开始
col:列数,注意openpyxl列数从1开始
sheetName.cell(3 , 1).value = 2 # 第三行,第一列单元格内写入2
9、获取单元格内容
sheet对象.cell(row , col).value获取单元格内容
row:行号,注意openpyxl行数从1开始
col:列数,注意openpyxl列数从1开始
print("第三行,第一列单元格内容:" , sheetName.cell(3 , 1).value)
10、保存Excel文件
Book对象.save(filename)保存Excel文件,openpyxl修改完Excel文档后需使用save()方法保存,才能确保修改内容保存在Excel文档中
filename:文档路径(含文档名称),必填参数
excelBook.save(excelPath)
11、实例
A)字典型数据写入Excel文档
"""
将字典型数据写入Excel中
"""
# 1、导入openpyxl
import openpyxl
dictData = {
'科比' : 24,
'库里' : 30,
'克莱汤普森' : 11,
'格林' : 23,
'杜兰特' : 35,
'伊戈达拉' : 9,
'乔丹' : 23,
'韦德' : 3,
}
# 2、打开Excel文档
excelPath = "./Excel/openpyxl_excel.xlsx"
excelBook = openpyxl.load_workbook(excelPath)
# 3、新建sheet
sheet = excelBook.create_sheet("NBA球员信息")
# 4、设置标题栏
sheet["A1"] = "球员姓名"
sheet.cell(1 , 2).value = "球员号码"
# 5、设置起始行数
rowNum = 2
# 6、写入内容
for name , number in dictData.items():
# 第一列写入姓名name
sheet.cell(rowNum , 1).value = name
# 第二列写入号码number
sheet.cell(rowNum , 2 , number)
# 行数增加1
rowNum = rowNum + 1
# 7、保存文件
excelBook.save(excelPath)
执行结果:openpyxl_excel.xlsx文件内新建一个“NBA球员信息”sheet,写入如下数据:
B)列表或元组型数据写入Excel文档
若数据在列表或元组,可以使用append()方法在sheet的末尾添加新行,写入数据
"""
列表或元组型数据写入Excel文档:
数据在列表或元组,可以使用append()方法在sheet的末尾添加新行,写入数据
"""
# 1、导入openpyxl
import openpyxl
listData = [
['科比' , 3300],
['库里' , 3200],
['克莱汤普森' , 3100],
['格林' , 3000],
['杜兰特' , 3250],
['伊戈达拉' , 2250],
['乔丹' , 3500],
['韦德' , 2500]
]
tupData = (
('加内特' , 3200),
('邓肯' , 3200),
('诺维斯基' , 3100),
('麦迪' , 3250),
('艾弗森' , 3150)
)
# 2、创建book对象
excelPath = "./Excel/openpyxl_excel.xlsx"
Book = openpyxl.load_workbook(excelPath)
# 3、新建sheet
sheet = Book.create_sheet("NBA球员薪资")
# 4、设置标题栏
sheet["A1"] = "球员姓名"
sheet.cell(1 , 2).value = "球员薪资"
# 5、list型数据写入
for row in listData:
sheet.append(row)
# 6、tuple型数据写入
for row in tupData:
sheet.append(row)
# 7、保存文件
Book.save(excelPath)
执行结果:openpyxl_excel.xlsx文件内新建一个“NBA球员薪资”sheet,写入如下数据:
三、修改Excel文档常用方法
1、修改单元格内容
修改单元格内容方法同单元格写入内容
1、sheet对象[单元格位置]赋值
2、sheet对象.cell(row , col , value)
3、sheet对象.cell(row , col).value赋值
2、插入行、插入列
sheet 对象的 insert_rows() 和 insert_cols() 方法,分别用来插入行和列,语法:
insert_rows(index , amount):
index:必填参数,某行的位置插入;如第二行插入,index即为2
amount:非必填参数,插入行数;插入两行,amount即为2
第二行的位置插入两行,即:第二、第三行为空(新插入行)
insert_cols(index , amount):
index:必填参数,某列的位置插入;如第二列插入,index即为2
amount:非必填参数,插入列数;插入两列,amount即为2
第两列的位置插入两列,即:第二、第三列为空(新插入列)
# 在第3行的位置插入1行
sheet.insert_rows(3)
# 在第4行的位置插入3行
sheet.insert_rows(4,3)
# 在第2列的位置插入1列
sheet.insert_cols(2)
# 在第2列的位置插入3列
sheet.insert_cols(2,3)
3、删除行、删除列
sheet 对象的 delete_rows() 和 delete_cols() 方法,分别用来删除行和列,语法:
delete_rows(index , amount):
index:必填参数,某行的位置删除;如第二行删除,index即为2
amount:非必填参数,删除行数;删除两行,amount即为2
delete_cols(index , amount):
index:必填参数,某列的位置删除;如第二列删除,index即为2
amount:非必填参数,删除列数;删除两列,amount即为2
# 8、删除行和列
# 在第3行的位置删除1行
sheet.delete_rows(3)
# 在第4行的位置删除3行
sheet.delete_rows(4,3)
# 在第2列的位置删除1列
sheet.delete_cols(2)
# 在第2列的位置删除3列
sheet.delete_cols(2,3)
4、单元格样式风格设置
修改单元格样式风格需要导入“from openpyxl.styles import fonts , colors”
"""
单元格样式风格设置
"""
import openpyxl
# 导入 Font 对象 和 colors 颜色常量
from openpyxl.styles import Font,colors
# 1、创建Book对象
excelPath = "./Excel/静夜思.xlsx"
excelBook = openpyxl.load_workbook(excelPath)
# 2、获取sheet对象
sheet1 = excelBook['静夜思']
# 3、设置单元格字体风格
sheet1['A1'].font = Font(color = colors.BLUE , # 设置字体蓝色
size=15, # 设定文字大小
bold=True, # 设定为粗体
italic=True # 设定为斜体
)
# 使用RGB数字表示颜色
sheet1['A2'].font = Font(color="981818") # 设置字体颜色
# 4、设置整行、整列风格
rowFont = Font(color = colors.BLUE)
colFont = Font(color = colors.BLUE)
# 设置行风格:第二行第三四列
for colnum in range(3 , 5): # range(N , M)生成一个列表,从N开始到M-1(不包含M)
sheet1.cell(2 , colnum).font = rowFont
# 设置列风格:第五列第三四行
for rownum in range(3 , 5):
sheet1.cell(rownum , 5).font = colFont
# 保存文件
excelBook.save(excelPath)
执行结果:
5、单元格设置背景色
"""
单元格设置背景色
"""
# 导入 PatternFill
from openpyxl.styles import PatternFill
import openpyxl
# 创建Book对象
path = './Excel/openpyxl_excel.xlsx'
Book = openpyxl.load_workbook(path)
# 获取sheet
sheet = Book.create_sheet('单元格设置背景色')
# 指定单个单元格背景色
sheet['A1'].fill = PatternFill("solid", "E39191")
# 指定 整行 背景色, 此处第2行
fill = PatternFill("solid", "E39191")
for row in range(3, 6): # 第 3 到 5 行
for col in range(2, 5): # 第 2 到 4 列
sheet.cell(row , col).fill = fill
Book.save(path)
执行结果:
5、插入图片
"""
openpyxl 向指定单元格添加图片并修改图片大小,以及修改单元格行高列宽
"""
import openpyxl
from openpyxl.drawing.image import Image
# 创建book对象
path = r'./Excel/openpyxl_excel.xlsx'
book = openpyxl.load_workbook(path)
# 新建sheet
sheet = book.create_sheet('插入图片')
# 读取图片
img = Image('./Excel/Kobe.jpg')
print("图片宽度:" , img.width)
print("图片高度:" , img.height)
print("图片格式:" , img.format)
# 修改列A的列宽
sheet.column_dimensions['A'].width = 62.5
# 修改行1的行高
sheet.row_dimensions[1].height = 230
# 向A1单元格内指定添加图片
sheet.add_image(img, 'A1')
book.save(path)