使用openpyxl进行excel操作
openpyxl模块用来读写Excel文件。openpyxl工作时,在内存中创建Excel工作簿和工作表,然后在工作表中的单元格中进行各种数据编辑和样式编辑操作,或在工作表中绘制图形,最后再保存文件写入到Excel中。
官方文档: http://openpyxl.readthedocs.io/en/default/
1. 基本操作
1.1. 引入openpyxl库
import openpyxl
1.2. 打开工作簿(xlsx)文件
1.2.1. 全新创建工作簿
wb = openpyxl.Workbook()
得到一个wb对象,它就是我们要操作的工作簿文件的对象。
>>> wb
<openpyxl.workbook.workbook.Workbook object at 0x0000000003543358>
1.2.2. 打开现有xlsx文件:
wb = openpyxl.load_workbook(“test.xlsx”)
1.3. 保存wb对象到xlsx文件
wb.save("test.xlsx")
文件名支持路径。
以上语句获得的一个空的工作簿,默认含有一个名为“Sheet”的工作表页面。
1.4. 工作表(sheet)操作
wb对象既是整个xlsx文件在内存中的存在形式,它一般由一个或多个sheet页面组成,我们对xlsx文件的操作,主要就是在sheet页面上操作;我们在Excel软件中,能对sheet页面进行什么操作,基本使用openpyxl也都能完成。
1.4.1. 工作表的创建和选定
wb对象创建后,默认含有一个默认的名为 Sheet 的 页面,可以使用active来得到它
>>> ws1 = wb.active
>>> ws1
<Worksheet "Sheet">
或使用名称来得到它:
ws1 = wb.get_sheet_by_name('Sheet')
或
ws1 = wb["Sheet"]
名称有中文要使用unicode
也可以使用工作表序号获得该页面: ws1 = wb.worksheets[0]
注:序号从0开始
可以使用 wb.create_sheet() 来创建新的sheet页面。 创建时可以同时关联一个变量。
ws2 = wb.create_sheet()
如:
import openpyxl
wb = openpyxl.Workbook()
# ws1 = wb.active
ws1 = wb.get_sheet_by_name('Sheet')
ws2 = wb.create_sheet()
wb.create_sheet()
wb.create_sheet()
wb.create_sheet()
ws1['A1'] = "This is a test!"
wb.save("test.xlsx")
对于已有的工作表,我们也可以通过遍历名称、序号等方式拿到相应的对象地址。
wb.sheetnames
是所有工作表sheet页面的名称列表。
1.4.2. 工作表命名
工作表sheet可以在创建时候直接指定名字,中文要使用unicode,也可以通过修改对象的title值,来修改名称。
import openpyxl
wb = openpyxl.Workbook()
# ws1 = wb.active
ws1 = wb.get_sheet_by_name('Sheet')
ws1.title = "Test"
ws2 = wb.create_sheet("ABC")
wb.create_sheet(u"中文表名")
ws1['A1'] = "哇嘎嘎"
wb.save("test.xlsx")
>>> print wb.sheetnames
[u'Test', u'ABC', u'\u4e2d\u6587\u8868\u540d']
1.4.3. 工作表的标签颜色修改
修改工作表的标签的颜色,等价于工作表标签右键菜单中“工作表标签颜色”功能:
ws1.sheet_properties.tabColor="0000FF"
颜色的值为颜色的RRGGBB格式。
import openpyxl
wb = openpyxl.Workbook()
#ws1 = wb.active
ws1 = wb.get_sheet_by_name('Sheet')
ws1.title = "Test"
ws2 = wb.create_sheet("ABC")
wb.create_sheet(u"中文表名")
ws1.sheet_properties.tabColor="0000FF"
ws2.sheet_properties.tabColor="FF00FF"
ws1['A1'] = "哇嘎嘎"
ws1['B2'] = "嗯~ o(* ̄▽ ̄*)o"
wb.save("test.xlsx")
1.4.4. 删除工作表
使用wb.remove_sheet()方法删除工作表
wb.remove_sheet(wb.get_sheet_by_name(“中文表名”)) wb.remove_sheet(ws2)
1.5. 单元格操作
获得一个工作表对象后,就可以工作表中的单元格进行操作。
1.5.1. 向单个单元格中写入值
- 按照Excel单元格定位的传统方法,在指定单元格写入数据,之前例子中已有体现:
ws1['A1'] = "哇嘎嘎"ws1['B2'] = "嗯~ o(* ̄▽ ̄*)o"
- 在指定行、列的单元格中写入数据:
ws1.cell(row=3, column=2).value = "AAAAA"
1.5.2. 遍历方式向多个单元格中写入值:
有多种的方式可对多个单元格进行选定:
- 采用iter_cols方法,指定行列范围,对范围内的列进行遍历操作,然后再对列中的单元格操作;
- 对应有iter_rows方法,与inter_cols区别,是遍历出所有行先;
for col in ws1.iter_cols(min_row=2, min_col=2, max_row=7, max_col=6):for cell in col:
- 采用传统的Excel多单元格选择的标记方法,区域选择单元格,遍历与iter_rows相同,返回每行,然后再遍历行中单元格;
for row in ws2["B2:F7"]:for cell in row:
完整示例:
import openpyxl
wb = openpyxl.Workbook()
ws1 = wb.get_sheet_by_name('Sheet')
ws1.title = "Test"
i = 0
# 遍历方式1:
ws1['A1'] = "遍历方式1"
for col in ws1.iter_cols(min_row=2, min_col=2, max_row=7, max_col=6):for cell in col:cell.value = ii = i + 1
ws2 = wb.create_sheet("Test2")
i = 0
# 遍历方式2:
ws2['A1'] = "遍历方式2"
for row in ws2["B2:F7"]:for cell in row:cell.value = ii = i + 1
wb.save("test.xlsx")
可以看出这两种遍历方式遍历的行列顺序是完全不一样的。
import openpyxl
wb = openpyxl.Workbook()
ws1 = wb.get_sheet_by_name('Sheet')
ws1.title = "Test"
i = 0
# 遍历方式1:
ws1['A1'] = "遍历方式1"
print("遍历方式1")
j = 1
for col in ws1.iter_cols(min_row=2, min_col=2, max_row=7, max_col=6):print("Cols No." + str(j) + ": ", end="")print(col)j = j + 1for cell in col:cell.value = ii = i + 1
ws2 = wb.create_sheet("Test2")
i = 0
# 遍历方式2:
ws2['A1'] = "遍历方式2"
print("遍历方式2")
j = 1
for row in ws2["B2:F7"]:print("Row No." + str(j) + ": ", end="")print(row)j = j + 1for cell in row:cell.value = ii = i + 1
wb.save("test.xlsx")
执行后控制台输出:
遍历方式1
Cols No.1: (<Cell 'Test'.B2>, <Cell 'Test'.B3>, <Cell 'Test'.B4>, <Cell 'Test'.B5>, <Cell 'Test'.B6>, <Cell 'Test'.B7>)
Cols No.2: (<Cell 'Test'.C2>, <Cell 'Test'.C3>, <Cell 'Test'.C4>, <Cell 'Test'.C5>, <Cell 'Test'.C6>, <Cell 'Test'.C7>)
Cols No.3: (<Cell 'Test'.D2>, <Cell 'Test'.D3>, <Cell 'Test'.D4>, <Cell 'Test'.D5>, <Cell 'Test'.D6>, <Cell 'Test'.D7>)
Cols No.4: (<Cell 'Test'.E2>, <Cell 'Test'.E3>, <Cell 'Test'.E4>, <Cell 'Test'.E5>, <Cell 'Test'.E6>, <Cell 'Test'.E7>)
Cols No.5: (<Cell 'Test'.F2>, <Cell 'Test'.F3>, <Cell 'Test'.F4>, <Cell 'Test'.F5>, <Cell 'Test'.F6>, <Cell 'Test'.F7>)
遍历方式2
Row No.1: (<Cell 'Test2'.B2>, <Cell 'Test2'.C2>, <Cell 'Test2'.D2>, <Cell 'Test2'.E2>, <Cell 'Test2'.F2>)
Row No.2: (<Cell 'Test2'.B3>, <Cell 'Test2'.C3>, <Cell 'Test2'.D3>, <Cell 'Test2'.E3>, <Cell 'Test2'.F3>)
Row No.3: (<Cell 'Test2'.B4>, <Cell 'Test2'.C4>, <Cell 'Test2'.D4>, <Cell 'Test2'.E4>, <Cell 'Test2'.F4>)
Row No.4: (<Cell 'Test2'.B5>, <Cell 'Test2'.C5>, <Cell 'Test2'.D5>, <Cell 'Test2'.E5>, <Cell 'Test2'.F5>)
Row No.5: (<Cell 'Test2'.B6>, <Cell 'Test2'.C6>, <Cell 'Test2'.D6>, <Cell 'Test2'.E6>, <Cell 'Test2'.F6>)
Row No.6: (<Cell 'Test2'.B7>, <Cell 'Test2'.C7>, <Cell 'Test2'.D7>, <Cell 'Test2'.E7>, <Cell 'Test2'.F7>)
1.5.3. 按行追加数据
采用工作表的append()方法,可以向工作表中按行追加数据:
import openpyxl
wb = openpyxl.Workbook()
ws1 = wb.get_sheet_by_name('Sheet')
ws1.title = "Test"
DATA = [['第一天', 123, 12, 123, 900, 231, 7],['第二天', 13, 56, 3, 900, 231, 90],['第三天', 216, 38, 37, 543, 55, 376],['第四天', 89, 99, 88, 453, 87, 527]
]
for row in DATA:ws1.append(row)
wb.save("test.xlsx")
1.5.4. 加载已有文件,读取数据
已有文件:test2.xlsx
import openpyxl
wb = openpyxl.load_workbook("test2.xlsx")
ws = wb.get_sheet_by_name('Sheet')
print("数据表最大行数:" + str(ws.max_row))
print("数据表最大列数:" + str(ws.max_column))
DATA = []
# 遍历读取
for row in ws.iter_rows(min_col=1, min_row=1, max_row=ws.max_row, max_col=ws.max_column):ROW = []for cell in row:ROW.append(cell.value)DATA.append(ROW)
print("表中读取到的数据:", end="")
print(DATA)
读取指定位置
B2 = ws[‘B2’].value
print("B2 = " + B2)
执行结果:
数据表最大行数:2
数据表最大列数:2
表中读取到的数据:[['测试2', None], [None, 'B列2行']]
B2 = B列2行
1.5.5. 使用公式
可以直接在单元格中写入公式:
import openpyxl
wb = openpyxl.Workbook()
ws1 = wb.get_sheet_by_name('Sheet')
ws1.title = "Test"
DATA = [['第一天', 123, 12, 123, 900, 231, 7],['第二天', 13, 56, 3, 900, 231, 90],['第三天', 216, 38, 37, 543, 55, 376],['第四天', 89, 99, 88, 453, 87, 527]
]
ws1['A1'] = '这是一个测试用表格'
for row in DATA:ws1.append(row)
ws1.append(['合计', '=sum(B2:B5)', '=sum(C2:C5)', '=sum(D2:D5)', '=sum(E2:E5)', '=sum(F2:F5)', '=sum(G2:G5)'])
wb.save("test.xlsx")
2.单元格样式设置
单元格样式的控制,依赖openpyxl.style包,其中定义有样式需要的对象,引入样式相关:
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
- PatternFill 填充
- Font 字体
- Aignment 对齐
- Border 边框
- Side 边线
以上五个基本可满足需要
基本用法是,将单元格对象的设置的属性赋为新的与默认不同的相应对象。
比如设置一个字体对象:
2.1. 字体设置
在 1.5.5. 的示例中,保存文件前先设置一下标题字体:
# 样式
font = Font(size=14, bold=True, name='微软雅黑', color="FF0000")
ws1['A1'].font = font
wb.save("test.xlsx")
2.2. 设置边框
边框Border对象,创建时可指定边框各边的Side对象,根据之前的执行结果,默认都是无边框
# 样式
font = Font(size=14, bold=True, name='微软雅黑', color="FF0000")
thin = Side(border_style="thin", color="0000FF")
border = Border(left=thin, right=thin, top=thin, bottom=thin)
ws1['A1'].font = font
ws1['A1'].border = border
for row in ws1['A2:G6']:for cell in row:cell.border = border
wb.save("test.xlsx")
2.3. 对齐设置
# 对齐
alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
ws1['A1'].alignment = alignment
- wrap_text=True 打开自动换行
2.4. 合并单元格
采用 merge_cells
方法合并单元格
# 对齐
alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
ws1['A1'].alignment = alignment
# 合并单元格
ws1.merge_cells('A1:G1')
wb.save("test.xlsx")
2.5.填充单元格
# 填充
fill = PatternFill(patternType="solid", start_color="33CCFF")
ws1['A1'].fill = fill
for row in ws1.iter_rows(min_row=ws1.max_row, max_col=ws1.max_column):for cell in row:cell.fill = PatternFill(patternType="solid", start_color="0066FF")cell.font = Font(bold=True, color="FFFFFF")cell.alignment = Alignment(horizontal="center")
wb.save("test.xlsx")
如果觉得我的文章对你有帮助,可关注我的blog https://github.com/AwesomeDevin/blog
文章转载自:http://yaoyan.me/2017/08/python-openpyxl1/
使用openpyxl进行excel操作相关推荐
- Python openpyxl 之 Excel 文档简单操作
背景:生活中常常因日常工作,在记录统计方面需频繁处理较多 Excel 表格,这部分工作虽可由人工完成,但这样会显得有些繁琐且可能存在偏差,遂闲时查阅了是否有相关基于python处理Excel表格的学习 ...
- 利用openpyxl模块来操作Excel
python 读写 excel 有好多选择,但是,方便操作的库不多,在我尝试了几个库之后,我觉得两个比较方便的库分别是 xlrd/xlwt.openpyxl. 之所以推荐两个库是因为这两个库分别操作的 ...
- python 操作excel神器_【转】多图+代码 | 详解Python操作Excel神器openpyxl的各种操作!...
转自:https://blog.csdn.net/weixin_41846769/article/details/108273349 前言 大家好,在之前的十几篇办公自动化系列文章中,我们大多是以真实 ...
- python每行输出8个式子_多图+代码 | 详解Python操作Excel神器openpyxl的各种操作!
前言 大家好,在之前的十几篇办公自动化系列文章中,我们大多是以真实的案例需求来讲解Python如何进行自动化办公操作,并且多次使用到openpyxl来处理表格,今天我们就来详细的盘点Python操作E ...
- Python - openpyxl Excel 操作示例与实践
一.引言 使用脚本处理得到数据后需要转化至 excel,由于手动粘贴以及换行符的问题非常不智能,所以改用 openpyxl 库处理脚本得到的数据并完成标注,顺便介绍下 openpyxl 的常用语法,先 ...
- python3打包成exe把openpyxl和pandas_Python openpyxl、pandas操作Excel方法简介与具体实例...
本篇重点讲解windows系统下 Python3.5中第三方excel操作库-openpyxl: 其实Python第三方库有很多可以操作Excel,如:xlrd,xlwt,xlwings甚至注明的数据 ...
- python对excel某一列去重-「总结篇」Python中所有的Excel操作技巧
原标题:「总结篇」Python中所有的Excel操作技巧 Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了! 操作xls文件 xlrd(读操作): import ...
- python在excel中的应用-python中的excel操作
一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...
- Python基础入门:使用openpyxl读写Excel文件
Python中常用的操作Excel的三方包有xlrd,xlwt和openpyxl等,xlrd支持读取.xls和.xlsx格式的Excel文件,只支持读取,不支持写入.xlwt只支持写入.xls格式的文 ...
最新文章
- 计算机系统的搭建步骤,电脑搭建Node.js开发环境的操作教程[多图]
- Changes at Different Environment?
- 使用FCN做图像语义分割(实践篇)
- android glide裁剪图片大小,Glide系列(二)------图片剪裁
- Better Video Better Audio 的时代已经过去了吗?
- 【python】画一个爱心
- Django 时间与时区设置问题
- TestAndSet实现互斥锁
- l2-002 链表去重 (未解决)
- Scala类型系统的目的——Martin Odersky访谈(三)
- js——window.open用法
- virtual box
- 构造一个简单的神经网络,以DQN方式实现小游戏的自动控制
- 使用JavaScript实现长方形、直角三角形、平行四边形、等腰三角形、倒三角、数字三角形...
- 【STM32F407的DSP教程】第1章 初学数字信号处理准备工作
- 侃搜索引擎_信息能如何有效的传递
- 【C++】通信录管理系统
- 【NOIP2014】解方程【秦九韶】【高精度处理】
- Mysql:设置主键自动增长起始值
- 最全的正则表达式大全,手机号、邮箱等等