Python办公软件自动化,5分钟掌握openpyxl操作

4周前 (11-12 20:25)阅读1回复0
路亚哦哦哦
路亚哦哦哦
  • 管理员
  • 注册排名7
  • 经验值88765
  • 级别管理员
  • 主题17753
  • 回复0
楼主

菜鸟学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办公软件主动化,5分钟掌握openpyxl操做

Python办公软件主动化,5分钟掌握openpyxl操做

都是豆瓣高分册本,想要那两书的同窗,

能够后台输入:小助手,找他征询

入门: 最全的零根底学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爬虫神器太爽了,主动下载妹子图片

0
回帖

Python办公软件自动化,5分钟掌握openpyxl操作 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息