1.1 安装
pip install openpyxl
1.2 工作簿
函数 | 说明 |
---|---|
wb = load_workbook(filename) | 打开工作簿 |
wb = Workbook() | 创建空白工作簿 |
wb.save(filename) | 保存工作簿 |
1.2.1 打开电子表格文件
类似于双击打开工作簿。
工作簿类型:Workbook
from openpyxl import Workbook, load_workbook
wb: Workbook = load_workbook("d:/hello.xlsx")
print(wb.sheetnames)
load_workbook 读取电子表格文件, 返回工作簿(Workbook)对象:
def load_workbook(filename, read_only=False, keep_vba=KEEP_VBA,data_only=False, keep_links=True):
参数:
- filename: 打开工作表的文件名
- read_only:只读模式,提升速度
- keep_vba:保存vba内容
- data_only:控制带有公式的单元格是否具有公式(默认值)或上次Excel读取工作表时存储的值
- keep_links: 是否应保留对外部工作簿的链接。默认为True
1.2.2 创建空白工作簿
from openpyxl import Workbook
wb: Workbook = Workbook()
print(wb.sheetnames)
1.2.3 保存工作簿
from openpyxl import Workbook
wb: Workbook = Workbook()
print(wb.sheetnames)
wb.save(r"d:\1.xlsx") # 保存工作簿
1.3 工作表
打开工作簿后,可以获取工作表。
工作表类型:Worksheet
函数 | 说明 |
---|---|
wb["工作表名称"] | 获取工作表对象 |
wb.active | 获取激活的工作表 |
wb.worksheets | 获取所有的工作表并放入列表返回 |
sh.title | 获取工作表名称 |
wb.remove(工作表对象) | 删除工作表 |
wb.create_sheet('工作表名称', 0) | 在指定位置创建工作表 |
wb.copy_worksheet(工作表对象) | 复制工作表 |
sh.title = "工作表新名称" | 工作表改名 |
1.3.1 按名称获取工作表对象
根据工作表名称,获取工作表对象。
# 工作簿["工作表名称"]
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
sh = wb["Sheet"]
print(sh) # <Worksheet "Sheet">
1.3.2 获取激活的工作表对象
激活的工作表就是打开电子表格高亮显示的工作表。
# 工作簿.active
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
sh = wb.active
print(sh)
1.3.3 获取所有工作表对象
获取所有工作表对象,并以列表的形式返回。
# 工作簿.worksheets
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
sh = wb.worksheets
print(sh)
# [<Worksheet "a1">, <Worksheet "a2">, <Worksheet "Sheet2">]
1.3.4 获取工作表名称
# 工作表.title
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
for sh in wb.worksheets:
print(sh.title)
'''
a1
a2
Sheet2
'''
1.3.5 删除工作表对象
# 工作簿.remove(工作表对象)
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
sh = wb["Sheet2"]
wb.remove(sh)
1.3.6 创建工作表
# 工作簿.create_sheet('工作表名称', 索引)
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
wb.create_sheet('database',0)
1.3.7 复制工作表
# 工作簿.copy_worksheet(工作表对象)
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
sh = wb.copy_worksheet(wb["a2"]) # 生成 `a2 Copy` 工作表对象
1.3.8 工作表改名
# 工作表.title = "新名"
from openpyxl import load_workbook
wb = load_workbook("d:/1.xlsx")
sh = wb.copy_worksheet(wb["a2"])
sh.title = "a3"
1.4 单元格
类型:Cell
获取数据方法 | 说明 |
---|---|
工作表["a1"] | 获取一个单元格 |
工作表["a1:b10"] | 获取指定范围的单元格 |
工作表["c"] | 获取C列数据 |
工作表[1] | 获取第一行数据 |
工作表.cell(row=行, column=列) | 获取指定行与列的数据 |
工作表.iter_rows(最小行,最大行,最小列,最大列) | 获取指定行与列范围的数据 |
工作表.values | 获取整个工作表的值 |
工作表.rows | 获取所有行 |
工作表.columns | 获取所有列 |
utils.get_column_letter(数字) | 获取列标题字母 |
utils.column_index_from_string(字母) | 获取标题字母对应的列 |
工作表.max_row | 获取最大行数 |
工作表.max_column | 获取最大列数 |
1.4.1 通过名称获取一个单元格
# 工作表["单元格地址"]
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
cell = sh["a1"] # 获取a1单元格
print(cell,type(cell))
1.4.2 通过名称获取指定范围单元格
它返回一个元组组成的表格。
# 工作表["单元格范围"]
# 工作表["C"] 获取C列
# 工作表[1] 获取第一行
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
cell = sh["a1:b2"]
print(cell)
# ((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>), (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>))
1.4.3 通过行列获取一个单元格
# 工作表.cell(row=行, column=列)
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
cell = sh.cell(row=1, column=1)
print(cell)
1.4.4 通过行列获指定范围的单元格
# 工作表.iter_rows(最小行,最大行,最小列,最大列)
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
range = sh.iter_rows(min_row=1, max_row=2, min_col=1, max_col=2)
for row in range:
print(row)
'''
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>)
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>)
'''
1.4.5 获取整个工作表的数据(值)
获取的数据放在了一个可迭代对象中(以二维表格的形式存储)
# 工作表.values
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
for row in sh.values:
print(row)
'''
(1, 4)
(2, 5)
(3, 6)
'''
### 1.4.6 获取所有行
工作表.rows 会生成所有行的可迭代对象(生成器)
# 工作表.rows
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
for row in sh.rows:
print(row)
'''
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>)
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>)
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>)
'''
1.4.7 获取所有列
同获取所有行类似
# 工作表.columns
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
for col in sh.columns:
print(col)
"""
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>)
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>)
"""
1.4.8 列数(数字)与列标题(字母)的相互转换
给定列数,返回对应的列标题字母
给定列标题字母,返回对应的列数
# utils.get_column_letter(数字)
# utils.column_index_from_string(字母)
from openpyxl import load_workbook
from openpyxl import utils
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
col_title = utils.get_column_letter(1)
cell = sh[col_title+"2"]
print(cell) # <Cell 'Sheet1'.A2>
col = utils.column_index_from_string("AA")
print(col) # 27
1.4.9 获取最大行,最大列
# 工作表.max_row
# 工作表.max_column
from openpyxl import load_workbook
wb = load_workbook("d:/test.xlsx")
sh = wb["Sheet1"]
print(f"max_row:{sh.max_row}, max_column:{sh.max_column}")
标签:load,openpyxl,PYTHON,工作,sh,workbook,wb
From: https://www.cnblogs.com/three-sheep/p/16944077.html