菜鸟学Python”,选择“星标”公家号
超等无敌干货,第一时间送达!!!
做者:Sinchard
来源:python中文社区
各人好,我是菜鸟哥。
今天给各人分享一篇用openpyxl操做Excel的文章。
各类数据需要导入Excel?多个Excel要合并?目前,Python处置Excel文件有良多库,openpyxl算是此中功用和性能做的比力好的一个。接下来我将为各人介绍各类Excel操做。
翻开Excel文件
新建一个Excel文件
>>> fromopenpyxl importWorkbook
>>> wb = Workbook
翻开现有Excel文件
>>> fromopenpyxl importload_workbook
>>> wb2 = load_workbook( 'test.xlsx')
翻开大文件时,按照需求利用只读或只写形式削减内存消耗。
wb = load_workbook(filename= 'large_file.xlsx', read_only= True)
wb = Workbook(write_only= True)
获取、创建工做表
获取当前活开工做表:
>>> ws = wb.active
创建新的工做表:
>>> ws1 = wb.create_sheet( "Mysheet") # insert at the end (default)
# or
>>> ws2 = wb.create_sheet( "Mysheet", 0) # insert at first position
展开全文
# or
>>> ws3 = wb.create_sheet( "Mysheet", -1) # insert at the penultimate position
利用工做表名字获取工做表:
>>> ws3 = wb[ "New Title"]
获取所有的工做表名称:
>>> print(wb.sheetnames)
[ 'Sheet2', 'New Title', 'Sheet1']
利用 for轮回遍历所有的工做表:
>>> forsheet inwb:
... print(sheet.title)
保留
保留到流中在收集中利用:
>>> fromtempfile importNamedTemporaryFile
>>> fromopenpyxl importWorkbook
>>> wb = Workbook
>>> withNamedTemporaryFile astmp:
wb.save(tmp.name)
tmp.seek( 0)
stream = tmp.read
保留到文件:
>>> wb = Workbook
>>> wb.save( 'balances.xlsx')
保留为模板:
>>> wb = load_workbook( 'document.xlsx')
>>> wb.template = True
>>> wb.save( 'document_template.xltx')
单位格
单位格位置做为工做表的键间接读取:
>>> c = ws[ 'A4']
为单位格赋值:
>>> ws[ 'A4'] = 4
>>> c.value = 'hello, world'
多个单位格 能够利用切片拜候单位格区域:
>>> cell_range = ws[ 'A1': 'C2']
利用数值格局:
>>> # set date using a Python datetime
>>> ws[ 'A1'] = datetime.datetime( 2010, 7, 21)
>>>
>>> ws[ 'A1'].number_format
'yyyy-mm-dd h:mm:ss'
利用公式:
>>> # add a simple formula
>>> ws[ "A1"] = "=SUM(1, 1)"
合并单位格时,除左上角单位非分特别,所有单位格都将从工做表中删除:
>>> ws.merge_cells( 'A2:D2')
>>> ws.unmerge_cells( 'A2:D2')
>>>
>>> # or equivalently
>>> ws.merge_cells(start_row= 2, start_column= 1, end_row= 4, end_column= 4)
>>> ws.unmerge_cells(start_row= 2, start_column= 1, end_row= 4, end_column= 4)
行、列
能够零丁指定行、列、或者行列的范畴:
>>> colC = ws[ 'C']
>>> col_range = ws[ 'C:D']
>>> row10 = ws[ 10]
>>> row_range = ws[ 5: 10]
能够利用 Worksheet.iter_rows 办法遍历行:
>>> forrow inws.iter_rows(min_row= 1, max_col= 3, max_row= 2):
... forcell inrow:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>
同样的 Worksheet.iter_cols 办法将遍历列:
>>> forcol inws.iter_cols(min_row= 1, max_col= 3, max_row= 2):
... forcell incol:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2>
遍历文件的所有行或列,能够利用 Worksheet.rows 属性:
>>> ws = wb.active
>>> ws[ 'C9'] = 'hello world'
>>> tuple(ws.rows)
((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
(<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
(<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
(<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
(<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
(<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
(<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
(<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
(<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
或 Worksheet.columns 属性:
>>> tuple(ws.columns)
((<Cell Sheet.A1>,
<Cell Sheet.A2>,
<Cell Sheet.A3>,
<Cell Sheet.A4>,
<Cell Sheet.A5>,
<Cell Sheet.A6>,
<Cell Sheet.B7>,
<Cell Sheet.B8>,
<Cell Sheet.B9>),
(<Cell Sheet.C1>,
<Cell Sheet.C2>,
<Cell Sheet.C3>,
<Cell Sheet.C4>,
<Cell Sheet.C5>,
<Cell Sheet.C6>,
<Cell Sheet.C7>,
<Cell Sheet.C8>,
<Cell Sheet.C9>))
利用 Worksheet.append 或者迭代利用 Worksheet.cell 新增一行数据:
>>> forrow inrange( 1, 40):
... ws1.append(range( 600))
>>> forrow inrange( 10, 20):
... forcol inrange( 27, 54):
... _ = ws3.cell(column=col, row=row, value= "{0}".format(get_column_letter(col)))
插入操做比力费事。能够利用 Worksheet.insert_rows 插入一行或几行:
>>> fromopenpyxl.utils importget_column_letter
>>> ws.insert_rows( 7)
>>> row7 = ws[ 7]
>>> forcol inrange( 27, 54):
... _ = ws3.cell(column=col, row= 7, value= "{0}".format(get_column_letter(col)))
Worksheet.insert_cols 操做类似。 Worksheet.delete_rows 和 Worksheet.delete_cols 用来批量删除行和列。
只读取值
利用Worksheet.values 属性遍历工做表中的所有行,但只返回单位格值:
forrow inws.values:
forvalue inrow:
print(value)
Worksheet.iter_rows 和 Worksheet.iter_cols 能够设置 values_only 参数来仅返回单位格的值:
>>> forrow inws.iter_rows(min_row= 1, max_col= 3, max_row= 2, values_only= True):
... print(row)
( None, None, None)
( None, None, None)
好书保举
都是豆瓣高分册本,想要那两书的同窗,
能够后台输入:小助手,找他征询
入门: 最全的零根底学Python的问题 | 零根底学了8个月的Python |实战项目 | 学Python就是那条捷径
干货:爬取豆瓣短评,片子《后来的我们》 | 38年NBA更佳球员阐发 |从万寡等待到口碑扑街!唐探3令人绝望 | 笑看新倚天屠龙记 | 灯谜答题王 | 用Python做个海量蜜斯姐素描图 | 碟中谍那么火,我用机器进修做个迷你保举系统片子
兴趣:弹球游戏 | 九宫格 | 标致的花 | 两百行Python《天天酷跑》游戏!
AI:会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍那么火,我用机器进修做个迷你保举系统片子
小东西: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保留为pdf! |再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 造做一款钉钉低价机票提醒器! |60行代码做了一个语音壁纸切换器天天看蜜斯姐! |
年度爆款案牍
1). 卧槽!Pdf转Word用Python轻松搞定 !
2).学Python实香!我用100行代码做了个网站,帮人PS游览图片,赚个鸡腿吃
3).首播过亿,火爆全网,我阐发了《披荆斩棘的姐姐》,发现了那些奥秘
4). 80行代码!用Python做一个哆来A梦分身
5).你必需掌握的20个python代码,短小精悍,用途无限
6). 30个Python奇淫技巧集
7). 我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
8). 再见Python!我要学Go了!2500字深度阐发 !
9).发现一个舔狗福利!那个Python爬虫神器太爽了,主动下载妹子图片