openpyxl模块安装及使用
openpyxl模块:
是用于解决Excel(WPS等均可使用)中扩展名为xlsx/xlsm/xltx/xltm的文件读写的第三方库。xls文件要使用xlwt 、wlrd两个模块。
主要概念:
Workbooks,Sheets,Cells。Workbook就是一个excel工作簿;Sheet是工作簿中的一张工作表;Cell就是表的一个单元格。openpyxl不管读写都是:打开Workbook,定位Sheet,操作Cell。
安装:
cmd下pip install openpyxl安装。
操作:
在内存中新建一个工作薄:
>>> from openpyxl import Workbook
>>> wb = Workbook()
保存工作薄:
>>> wb = Workbook()
>>> wb.save('test.xlsx') #必须提交保存才能显示操作产生的效果,此操作不能在文件打开(指双击文件打开)时进行,必须先关闭。
读写已经存在的文件sheet:
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx') #加载工作簿
>>> print(wb2.sheetnames)
['Sheet2', 'New Title', 'Sheet1']
获取默认工作表:
>>> ws = wb.active
通过指定的工作表名获取工作表对象:
>>> ws3 = wb["New Title"] #建议使用
或者
>>> ws = wb.get_sheet_by_name('New Title')
创建新的工作表:
>>> ws1 = wb.create_sheet("Mysheet") #默认在最后面创建一个Mysheet工作表,参数也可为空,默认为sheet*
或者
>>> ws2 = wb.create_sheet("Mysheet", 0) #在0索引位置插入一个工作表,此时插入的表名不可为空
复制工作表:
>>> source = wb.active
>>> target = wb.copy_worksheet(source)
删除工作表(删除后新建,相当于清空工作表):
wb.remove(wb['Sheet']) #wb.remove_sheet()已弃用
或
del wb['Sheet']
修改工作表名称:
ws.title = "New Title"
显示所有工作表名称:
>>> print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']
>>> for sheet in wb:
... print(sheet.title)
表中的数据操作:
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> ws = wb.active
修改表中的数据:
>>> ws['A4'] = 4
或者
>>> d = ws.cell(row=4, column=2, value=10) #第4行第2列值为10
>>> c = ws['A4']
>>> c.value = 'hello, world'
>>> print(c.value)
'hello, world'
>>> d.value = 3.14
>>> print(d.value)
3.14
获取行列:
ws.max_row #获取最大行数
ws.max_column #获取最大列数
ws.rows #获取所有行
ws.columns #获取所有列
列的字母与数字互转:
from openpyxl.utils import get_column_letter, column_index_from_string
# 根据列的数字返回字母:
print(get_column_letter(2)) #结果为B
#根据字母返回列的数字:
print(column_index_from_string('D')) #结果为4
获取单元格对象:
>>> c = ws['A4']
切片多选(获取多个单元格):
>>> cell_range = ws['A1':'C2']
选择整行、整列:
>>> colC = ws['C'] #选择C列
>>> col_range = ws['C:D'] #选择C、D列
>>> row10 = ws[10] #选择第10行
>>> row_range = ws[5:10] #选择5-10行
获取单个单元格中的数据:
>>> print(ws['A2'].value)
遍历获取指定区域的数据:
>>> for i in range(1, 3):
... for j in range(1, 3):
... ws.cell(row=i, column=j)
...
<Cell 'Sheet'.A1>
<Cell 'Sheet'.B1>
<Cell 'Sheet'.A2>
<Cell 'Sheet'.B2>
将数据data写入Excel:此处data是由元组组成的列表数据
rows = len(data) #获取数据总行数
columns = len(data[0]) #获取数据总列数
for row in range(3, rows+3): #从第3行开始,前2行是表头for column in range(1, columns+1):zhi = data[row-3][column-1]ws.cell(row, column, value=zhi) #给单元格赋值
合并、取消合并单元格:
ws.merge_cells('B1:G1') #合并B1-G1单元格
ws.unmerge_cells('B1:G1') #取消合并的B1-G1单元格
单元格样式:openpyxl的单元格样式由6种属性决定,每一种都是一个类。
font(字体类):字号、字体颜色、下划线等
fill(填充类):颜色等
border(边框类):设置单元格边框
alignment(位置类):对齐方式
number_format(格式类):数据格式
protection(保护类):写保护
单元格默认样式如下:
>>> from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
>>> font = Font(name='Calibri', #字体
... size=11, #大小
... bold=False, #加粗
... italic=False, #斜体
... vertAlign=None, #纵向对齐
... underline='none', #下划线
... strike=False, #删除线
... color='FF000000') #颜色
#下面2种填充方法均有可能不显示填充色:
>>> fill = PatternFill(fill_type='solid', #填充
... start_color='FFFFFFFF', #前景色
... end_color='FF000000') #背景色
>>> fill = PatternFill(fill_type='solid', bgColor='FFFFFF', fgColor='33FF00') #可显示背景色bgColor为33FF00(但此值为前景色fgColor的值),无法显示前景色
>>> border = Border(left=Side(border_style='thin', ... color='FF000000'), #边框,必须导入Side函数,且颜色必须是FF0000格式
... right=Side(border_style='thin',
... color='FF000000'),
... top=Side(border_style='thin',
... color='FF000000'),
... bottom=Side(border_style='thin',
... color='FF000000'),
... diagonal=Side(border_style='thin',
... color='FF000000'),
... diagonal_direction=0,
... outline=Side(border_style='thin',
... color='FF000000'),
... vertical=Side(border_style='thin',
... color='FF000000'),
... horizontal=Side(border_style='thin',
... color='FF000000')
... )
>>> alignment=Alignment(horizontal='center', #水平方向,left、center、right等
... vertical='bottom', #垂直方向,center、top、bottom等
... text_rotation=0, #文本旋转角度?
... wrap_text=False, #自动换行
... shrink_to_fit=False, #缩小填充
... indent=0) #缩进
>>> number_format = 'General' #数据格式
>>> protection = Protection(locked=True, #锁定
... hidden=False) #隐藏
以上几种样式(字体、填充、边框、位置和保护)实例一旦被创建,实例的属性就不可更改,只能重新创建实例。
PatternFill填充类型:fill_type若没有指定类型,则后续参数都无效。
'none'、'solid'、'darkDown'、'darkGray'、'darkGrid'、'darkHorizontal'、'darkTrellis'、'darkUp'、'darkVertical'、'gray0625'、'gray125'、'lightDown'、'lightGray'、'lightGrid'、'lightHorizontal'、'lightTrellis'、'lightUp'、'lightVertical'、'mediumGray'
border_style类型:border_style若没指定类型,则后续参数都无效。
'thin','dashDot','dashDotDot','dashed','dotted','double','hair','medium','mediumDashDot','mediumDashDotDot','mediumDashed','slantDashDot','thick'
>>> from openpyxl.styles import Font, Color
>>> from openpyxl.styles import colors
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> ws = wb.active
>>> a1 = ws['A1']
>>> d4 = ws['D4']
>>> ft = Font(color=colors.RED)
>>> a1.font = ft
>>> d4.font = ft
>>> a1.font.italic = True #不会生效,样式实例一旦创建,实例的属性就不可改变
>>> # 若要改变样式,必须新建样式实例
>>> a1.font = Font(color=colors.RED, italic=True) #创建字体实例(红色、斜体,其他属性默认)
复制样式:样式可以被复制
>>> from openpyxl.styles import Font
>>> ft1 = Font(name='Arial', size=14)
>>> ft2 = ft1.copy(name="Tahoma") #复制时指定字体为“Tahoma”,其他属性均复制自ft1
>>> ft1.name
'Arial'
>>> ft2.name
'Tahoma'
>>> ft2.size
14.0
基本字体颜色:字体颜色有一些颜色常量,可以直接调用
from openpyxl.styles import Font
from openpyxl.styles.colors import RED
font = Font(color=RED)
font = Font(color="00FFBB00")
也可以按索引创建实例:
from openpyxl.styles.colors import Color
c = Color(indexed=32)
c = Color(theme=6, tint=0.5)
V2.3.5版本中颜色必须使用“00XXXXXX”格式,不能使用“#XXXXXX”格式。如果颜色不生效请查看版本。
应用样式:可以直接应用到单元格:
from openpyxl.workbook import Workbook
from openpyxl.styles import Font, Fill
wb = Workbook()
ws = wb.active
c = ws['A1']
c.font = Font(size=12)
#可以对整行整列设置样式,前提是单元格已创建。
col = ws.column_dimensions['A']
col.font = Font(bold=True)
row = ws.row_dimensions[1]
row.font = Font(underline="single")
数据格式:属性number_format的值是字符串类型,不为对象,直接赋值即可。openpyxl内置了一些数据格式,查看openpyxl.styles.numbers,也支持excel自定义格式,以下两种方式效果相同:
# 使用openpyxl内置的格式
from openpyxl.styles import numbers
ws.cell['D2'].number_format = numbers.FORMAT_GENERAL
ws.cell(row=2, column=4).number_format = numbers.FORMAT_DATE_XLSX15
# 直接使用字符串
ws.cell['D2'].number_format = 'General'
ws.cell(row=2, column=4).number_format = 'd-mmm-yy'
编辑页面设置:
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE #方向-竖屏(LANDSCAPE),横屏(PORTRAIT)
ws.page_setup.paperSize = ws.PAPERSIZE_TABLOID #纸张尺寸
ws.page_setup.fitToHeight = 0 #自适应高度
ws.page_setup.fitToWidth = 1 #自适应宽度
编辑打印选项:
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.print_options.horizontalCentered = True #水平居中
ws.print_options.verticalCentered = True #垂直居中
插入列:
import openpyxl
wb = openpyxl.load_workbook(r"test.xlsx") #读取原表
ws = wb.active
lie = 2 #在第几列后面插入
n = 5 #插入几列
wb2 = openpyxl.Workbook() #创建新表
ws2 = wb2.active
ws2.title = 'new' #设置新表名
for col in range(1, ws.max_column+1):for ro in range(1, ws.max_row+1):if col<=lie:ws2.cell(row=ro, column=col).value=ws.cell(row=ro, column=col).valueelse:ws2.cell(row=ro, column=col+n).value=ws.cell(row=ro, column=col).value
wb2.save(r"test.xlsx") #勿忘保存
插入行:
wb = openpyxl.load_workbook(r"test.xlsx") #读取原表
ws = wb.active
hang = 2 #在第几行后面插入
n = 5 #插入几行
wb2 = openpyxl.Workbook() #创建新表
ws2 = wb2.active
ws2.title = 'new' #设置新表名
for ro in range(1, ws.max_row+1):for col in range(1, ws.max_column+1):if ro<=hang:ws2.cell(row=ro, column=col).value=ws.cell(row=ro, column=col).valueelse:ws2.cell(row=ro+n, column=col).value=ws.cell(row=ro, column=col).value
wb2.save(r"test.xlsx") #勿忘保存
其它第三方库:针对电子表格的第三方库,除了openpyxl之外,还有xlsxwriter:针对Excel 2010格式,如.xlsx;xlrd、xlwt用来处理.xls格式的电子表格。
openpyxl模块安装及使用相关推荐
- python openpyxl模块安装_python之openpyxl模块
一 . Python操作EXCEL库的简介 1.1 Python官方库操作excel Python官方库一般使用xlrd库来读取Excel文件,使用xlwt库来生成Excel文件,使用xlutils库 ...
- Python3 集成openpyxl 模块
openpyxl 模块简介: openpyxl 模块可以读写Excel 文件,包括xlsx.xlsm.xltx和xltm等格式 openpyxl 模块 安装 执行如下安装命令: pip install ...
- python的openpyxl模块下载_python解析.xls/.xlsx文件–openpyxl模块(第三方)
围观人数: 7 标签:book set tle 命令行 文件中 不能 charm 读取 pen 第一part:Excel文件的介绍 Microsoft Excel是Mi ...
- openpyxl模块介绍
官方文档 https://openpyxl.readthedocs.io/en/stable/tutorial.html openpyxl模块是一个读写Excel 2010文档的Python库,如果要 ...
- 使用python的openpyxl模块操作excel
openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易 openpyxl的安装 模块的引入 from openpyxl import ...
- python openpyxl模块追加数据_python openpyxl模块实现excel的读取,新表创建及原数据表追加新数据...
当实际工作需要把excel表的数据读取出来,或者把一些统计数据写入excel表中时,一个设计丰富,文档便于寻找的模块就会显得特别的有吸引力,本文对openpyxl模块的一些常见用法做一些记录,方便工作 ...
- openpyxl模块_Openpyxl让Excel飞(一)
openpyxl 库简介及安装 openpyxl是一个开源的Excel文件处理库,可以用于处理Excel 2010版及以后的文件(官网说法,实际好像2007版Excel文件也可以处理,只要是后缀名为. ...
- Python使用openpyxl模块读写excel文件
Python使用openpyxl模块读写excel文件 openpyxl是一个用于写入和读取xlsx格式的excel文件的Python模块. excel2010后的后缀名为xlsx,不再是xls,使用 ...
- python导入excel模块_python使用openpyxl模块操作excel
python中的openpyxl模块可以操作excel文件. 使用pip安装pip install openpyxl 支持流行的lxml库(如果已安装).这在创建大文件时特别有用. 为了能够将图像(j ...
最新文章
- SQL Server 2012 Express LocalDB
- 2.2.3 调度算法的评价指标
- 视频 + PPT 下载 | 挣脱流量束缚,社交电商的未来在哪里?
- 我的世界手机版java安装失败_我的世界中国版JAVA路径错误的解决方法分享
- Ubuntu版本更新一路走来:朕就是这样的汉子
- HNUSTOJ-1437 无题
- 传感器怎么获取障碍物的宽度信息_机器人感知 -- 测距传感器
- gmm中隐变量是什么的_机器学习-隐变量模型和期望最大算法
- python的shelve库
- a+ open python_python编程之文件操作
- atitit。解决 No suitable Log constructor。。NoClassDefFoundError: org/apache/log4j/Category 找不到类的
- 多组学联合分析整体思路
- 手机当台式电脑摄像头
- JavaScript经典笔试题
- 【综述】方面级情感分析 Aspect-level Sentiment Classification
- 集运系统,集运下单系统,国际物流集运系统,转运系统源码 集运系统源码
- Ubuntu18.04 操作分屏显示快捷键
- 2022年11月骨传导耳机排名,骨传导蓝牙耳机品牌怎么选?
- web前端基础——超链接(dw笔记版)
- 小学生心算CAI系统
热门文章
- ssm茶叶溯源系统、
- 【充电器】小米手机2S电池座充——小米手机官网
- 《2018年度回顾报告》
- android 文件管理器 apk,华为手机文件管理器(com.huawei.hidisk) - 10.11.11.301 - 应用 - 酷安...
- 怎么计算机械设备使用费用,什么是施工机械使用费?施工机具使用费怎么计算?...
- 关于xpath相对路径前加点与不加点的区别
- ISP pipeline、3A(AE、AF、AWB)、Pdaf原理及验证方法、曝光原理。
- 兄弟mfc9140cdn无法识别_兄弟MFC-9140CDN一体机驱动
- Python数学函数
- 房子我有了你还是个处女么