python3之读写Excel文件(openpyxl)

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,写入如下数据:
python3之读写Excel文件(openpyxl)_第1张图片
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,写入如下数据:
python3之读写Excel文件(openpyxl)_第2张图片

三、修改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)

执行结果:
python3之读写Excel文件(openpyxl)_第3张图片
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)

你可能感兴趣的:(Python,python)