python第三⽅库openpyxl详解
前⾔
openpyxl是⼀个第三⽅库,可以处理xlsx格式的Excel⽂件。
openpyxl(可读写excel表)专门处理Excel2007及以上版本产⽣的xlsx⽂件,xls和xlsx之间转换容易,注意:如果⽂字编码是“gb2312” 读取后就会显⽰乱码,请先转成Unicode。
openpyxl模块有三⼤类(⾸字母⼤写):
Workbook        是对⼯作簿的抽象(⼯作簿,⼀个excel⽂件包含多个sheet。)
Worksheet        是对表格的抽象(⼯作表,⼀个workbook有多个,表名识别,如“sheet1”,“sheet2”等。)
Cell            是对单元格的抽象(单元格,存储数据对象)
安装
pip install openpyxl
基本操作
新建⼯作簿
workbook⾄少创建⼀个worksheet。
通过openpyxl.workbook.Workbook.active()得到worksheet。
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
print(wb)
ws = wb.active  # 获取worksheet对象
print(ws)
运⾏结果:
from openpyxl import Workbook    #导⼊模块
wb = Workbook('abc.xlsx')    #新建名为abc的⼯作簿
python怎么读取xls文件wb.save('abc.xlsx')      #保存⼯作簿,完成新⼯作簿的建⽴(将覆盖同名⽂件且⽆警告)
运⾏结果:
from openpyxl import Workbook
# 实例化
wb = Workbook()
# 激活 worksheet
ws = wb.active
加载已存在的⼯作簿
from openpyxl import load_workbook
wb = load_workbook('⽂件名称.xlsx') # openpyxl第三⽅库只能处理.xlsx格式的Excel表格
获取当前所处⼯作表的sheet表名
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
ws2 = wb.active  #  激活当前sheet表
print(ws2.title)
运⾏结果:
①当名为'sheet1'的sheet表格处于激活状态时,打印的当前所处⼯作表的表名为sheet1。
②当名为'sheet2'的sheet表格处于激活状态时,打印的当前所处⼯作表的表名为sheet2。
修改当前所处⼯作表名称( ws = wb.active # 获取当前所在'激活状态下'⼯作表)【注意】对⼯作簿修改后⼀定要记得执⾏保存操作! wb.save('Excel⽂件名.xlsx')
from openpyxl import Workbook, load_workbook
wb = load_workbook('./test.xlsx')
ws = wb.active
print(ws.title)
ws.title = 'MS'
wb.save('./test.xlsx')
运⾏结果:
创建和删除⼯作表
【注意】对⼯作簿修改后⼀定要记得执⾏保存操作! wb.save('Excel⽂件名.xlsx')
from openpyxl import load_workbook
ws1 = wb.create_sheet('Mysheet')    #插⼊到最后(默认)
ws2 = wb.create_sheet('Mysheet',0)    #插⼊到最前
ws3 = wb.create_sheet('Mysheet',-1)    #插⼊到倒数第⼆
del wb('Mysheet')                    #删除⼯作表(⽅法⼆)
指定sheet⼯作表:sheet表名可以作为字典的key进⾏索引
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
ws = wb['Sheet2']
print(ws, '指定的⼯作表sheet名:', ws.title, end='\n\n')
ws1 = wb.active
print(ws1, '处于激活状态下的⼯作表sheet表名:', ws1.title)
运⾏结果:
【注意】三者区别:
wb.sheetnames            # 获取⽂档所有⼯作表名称
wb['Sheet1']            # 获取指定的⼯作表
wb.active                # 获取当前活跃的⼯作表
获取Excel中已存在的全部sheet表名
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
print(wb.sheetnames)  # ⼯作簿中存在所有sheet表名(以列表格式返回)
print(wb.worksheets)  # 以列表形式返回所有sheet⼯作表对象
运⾏结果:
修改某⼀指定sheet表标签按钮颜⾊
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
ws = wb.active
ws.sheet_properties.tabColor = '1072BA'# 默认为⽩⾊
判断某⼀指定Excel是否以只读⽅式打开(返回True或者False)
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
ad_only)
运⾏结果:
复制Sheet表
【注意】
①只有单元格(包括值、样式、超链接、备注)和⼀些⼯作表对象(包括尺⼨、格式和参数)会被复制,其他属性不会被复制,如图⽚、图表;
②⽆法在两个⽂档中复制⼯作表。
③当⽂档处于只读或只写状态时也⽆法复制⼯作表。
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
source = wb.active  # 获取当前活跃的⼯作表
target = wb.copy_worksheet(source)  # 复制当前活跃的sheet表
print(target)
运⾏结果:
保存⼯作薄
wb.save('⽂件名.xlsx')
Excel属性操作
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
ding, end='\n\n')  # 获取⽂档的字符集编码
print(wb.properties)  # 获取⽂档的元数据如标题,创建者,创建⽇期等
运⾏结果:
获取某⼀指定sheet表中的最⼤⾏数以及最⼤列
ws.max_column
ws.max_row
选择单个单元格:获取指定位置的单元格对象
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
print(wb)
ws = wb.active  # 获取当前活跃的worksheet对象(sheet表)
print(ws)
# 选择单个单元格(获取指定位置的单元格对象)
print(ws['A1'])
ll(1, 1))  # 先⾏后列,都是索引下标
运⾏结果:
单元格属性
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
print(wb)
ws = wb.active  # 获取当前活跃的worksheet对象(sheet表)
print(ws)
cell = ws['A1']  # 获取指定位置的单元格对象
# 单元格列索引
l_idx)
lumn)
# 单元格⾏索引
w)
# 单元格列名
lumn_letter)
# 单元格的坐标
dinate)
# 单元格数字类型
# 默认是
# n:数值
# s:字符串
# d:⽇期时间
print(cell.data_type)
# 单元格编码格式,默认 utf-8
ding)
# 是否有样式
print(cell.has_style)  # 默认样式是 Normal,如果是默认样式,返回False
# 单元格样式
print(cell.style)
# 单元格样式id
print(cell.style_id)
运⾏结果:
单元格的样式属性
获取指定单元格的值
from openpyxl import load_workbook
wb = load_workbook('./test.xlsx')
print(wb)
ws = wb.active  # 获取当前活跃的worksheet对象(sheet表)print(ws)
cell = ws['A1']  # 获取指定位置的单元格对象
print(cell)
# 获取指定单元格的值
print(ws['A1'].value)
ll(1, 1).value)
运⾏结果:
选择单元格
单元格赋值
from openpyxl import load_workbook wb = load_workbook('./test.xlsx') print(wb)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。