作者:星安果
来源:AirPython
上一篇python办公自动化之Excel(上)文章中,我们聊到使用 xlrd、xlwt、xlutils 这一组合操作Excel 的方法。本篇文章将继续聊另外一种方式,即:openpyxl。
不得不说,openpyxl 更强大!它支持 xlsx 格式的表格文件,并且支持 Numpy、Pandas 等包,可用于绘制图表。
准备:首先,我们需要安装依赖包。
# 安装依赖包
pip3 install openpyxl
读取数据:使用 openpyxl 中的 load_workbook(filepath) 加载本地一个 Excel 文件,返回结果是一个工作簿对象。
import openpyxl
# 加载本地的Excel文件
wb = openpyxl.load_workbook(file_path)
利用工作簿对象,可以获取所有的 Sheet 名称及 Sheet 列表。
def get_all_sheet_names(wb):
"""
获取所有sheet的名称
:param wb:
:return:
"""
# sheet名称列表
sheet_names = wb.sheetnames
return sheet_names
def get_all_sheet(wb):
"""
获取所有的sheet
:param wb:
:return:
"""
# sheet名称列表
sheet_names = get_all_sheet_names(wb)
# 所有sheet
sheets = []
for sheet_name in sheet_names:
sheet = wb[sheet_name]
sheets.append(sheet)
return sheets
工作簿对象提供了 active 属性,用于快速获取当前选择的 Sheet。
def get_current_sheet(wb):
"""
获取当前选择的sheet,默认是最后一个sheet
:param wb:
:return:
"""
# 当前选中的sheet
current_sheet = wb.active
return current_sheet
另外,也可以通过 Sheet 名称去获取某一个特定的 Sheet 对象。
def get_sheet_by_name(wb, sheet_name):
"""
通过sheetname去查找某一个sheet
:param wb:
:param sheet_name:
:return:
"""
sheet_names = get_all_sheet_names(wb)
if sheet_name in sheet_names:
result = wb[sheet_name]
else:
result = None
return result
使用 sheet.max_row 和 sheet.max_column 可以获取当前 Sheet 中的数据行数和列数。
def get_row_and_column_num(sheet):
"""
获取sheet的行数和列数
:param sheet:
:return:
"""
# 行数
row_count = sheet.max_row
# 列数
column_count = sheet.max_column
return row_count, column_count
# 行数和列数
row_count, column_count = get_row_and_column_num(sheet)
print('行数和列数分别为:', row_count, column_count)
openpyxl 提供 2 种方式来定位一个