说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
openpyxl 是一个 Python 库,用于读取/写入 Excel 2010 xlsx/xlsm/xltx/xltm文件。它诞生的背景是生于缺少现有库,无法从 Python 本地读取/写入 Office 开放 XML格式。所有对 PHPExcel 团队的赞扬都是因为 openpyxl 最初是基于 PHPExcel 的。
可以直接使用 pip 命令进行安装:
pip install openpyxl
# 官方推荐导入指定对象
from openpyxl import Workbook
# 也可以整体导入
import openpyxl
import openpyxl as opx
为了能够将图像(jpeg、png、bmp等)包含到 openpyxl 文件中,您还需要“pillow”库,该库可以安装:
pip install pillow
openpyxl 库不支持 xls 格式文件的读取和操作,可以手动打开 xls 文件,然后另存为xlsx 类型的文件。也可以 pywin32 或者 Pandas 转换。
openpyxl 中对于一个 Excel 文件有以下基本概念和三个重要对象:
解释如下图:
分别可以通过以下常用方法定义:
import openpyxl as opx
wb = opx.Workbook() # 定义一个文件对象
wb = opx.load_workbook('20210903.xlsx') # 读取文件
ws = wb.active # 获取当天激活的表单
ws = wb['Sheet2'] # 指定表
# 指定当前激活表的单元格
cell = wb.active.cell(row=15, column=1)
cell = ws['A2'] # 指定单元格
感受一下它简单而又实用的操作方式:
wb = opx.Workbook()
# 获取当前活动工作表
ws = wb.active
# 数据可以直接分配给单元格,进行填充和修改
ws['B4'] = 99
# 行也可以追加
ws.append([1, 2, 3])
# Python 类型将自动转换
import datetime
ws['A2'] = datetime.datetime.now()
# 保存文件
wb.save("sample.xlsx")
Workbook 可以看做是一个 Excel 文件,针对文件,我们可以打开、新建、修改、保存。
wb = opx.load_workbook('gairuo.xlsx')
wb.sheetnames # 所有工作表名列表
[sheet.title for sheet in wb] # 同上
wb.properties # 一系列属性
# 创建一个空工作簿文件对象
wb = opx.Workbook()
wb = opx.Workbook('gairuo.xlsx')
wb.save('文件名称.xlsx')
todo
工作簿始终至少创建一个工作表(worksheet),可以使用工作簿的属性获取它:
ws = wb.active # 获取当前激活的表单
ws3 = wb["GairuoMysheet"] # 通过表名获取
ws.title # 工作表名称
ws.sheet_properties.tabColor # 工作表选项卡背景色
ws.max_row # 获得最大列和最大行
ws.max_column
ws.rows # 获取按行所有的数据
ws.columns # 获取按列所有的数据
默认情况下,该值设置为 0。除非修改其值,否则使用此方法将始终获得第一个工作表。
生成工作簿文件对象时会默认创建一个名为 Sheet 的工作表,如有需要可通过以下几种方式新建工人和表:
ws1 = wb.create_sheet("Mysheet") # 在末尾插入(默认)
ws2 = wb.create_sheet("Mysheet", 0) # 在第一个位置插入
ws3 = wb.create_sheet("Mysheet", -1) # 在倒数第二个位置插入
可以复制一个工作表:
source = wb.active
target = wb.copy_worksheet(source)
# 修改工作表名称
ws.title = "GairuoMysheet"
# 工作表选项卡背景默认不白色,可进行修改
ws.sheet_properties.tabColor = "1072BA"
# 删除表单
wb.remove('表单名')
del wb['表单名']
# 读取A6单元格的值
ws['A6'].value
# 读取第3行,第4列单元格的值
ws.cell(row=3, column=4).value
# 选择范围
ws2['A1':'C3']
ws2['A'] # 以下均为存在数据的单元格
ws2['A:C']
ws2[1]
ws2[1:5]
# 写入数据,三个参数分别是行,列,值
cell(row, column, value)
# 获取指定单元格的值,两个参数分别是行,列
cell(row, column).value
c.coordinate # 'B2' 坐标名称
cell.column_letter # 'B' 列名的字母
cell.column # 2 列索引
cell.row # 2
# 获取链接地址 url (如无会失败)
cell(row=2, column=1).hyperlink.target
与 Pandas 结合提高操作效率:todo
todo
更新时间:2021-11-19 09:46:18 标签:python excel