10分钟学会用Python轻松玩转Excel

举报
Python新视野 发表于 2021/12/06 15:29:49 2021/12/06
【摘要】 前言当你需要每天对 Excel 做大量重复的操作,如果只靠人工来做既浪费时间,又十分枯燥,好在 Python 为我们提供了许多操作 Excel 的模块,能够让我们从繁琐的工作中腾出双手。今天就和大家分享一个快速处理 Excel 的模块 openpyxl,它的功能相对与其他模块更为齐全,足够应对日常出现的问题。 openpyxl 安装直接在命令提示符中输入。pip install openp...

前言

当你需要每天对 Excel 做大量重复的操作,如果只靠人工来做既浪费时间,又十分枯燥,好在 Python 为我们提供了许多操作 Excel 的模块,能够让我们从繁琐的工作中腾出双手。

今天就和大家分享一个快速处理 Excel 的模块 openpyxl,它的功能相对与其他模块更为齐全,足够应对日常出现的问题。

openpyxl 安装

直接在命令提示符中输入。

pip install openpyxl

或使用豆瓣镜像安装。

pip install -i https://pypi.douban.com/simple openpyxl

安装成功后,下面就看看如何使用

打开/创建工作簿

示例工作簿

工作表【一等奖】

工作表【二等奖】

(1)打开本地工作簿

>>> from openpyxl import load_workbook
>>> wb = load_workbook('获奖名单.xlsx')

(2)创建空的工作薄

>>> from openpyxl import Workbook
>>> wb1 = Workbook()

访问工作表

创建新工作表,可指定插入的位置(0:首位,-1:末尾)。

>>> wb.create_sheet('new_sheet', 0)
<Worksheet "new_sheet">

获取工作簿中所有工作表。

>>> wb.sheetnames
['new_sheet', '一等奖', '二等奖']

使用列表推导式遍历获取所有工作表名称。

>>> [sheet.title for sheet in wb]
['new_sheet', '一等奖', '二等奖']

使用 wb[sheetname] 来获取一个工作表对象

>>> wb['二等奖']
<Worksheet "二等奖">

获取活动表(即打开工作簿首先出现的工作表)。

>>> wb.active
<Worksheet "一等奖">

获取工作表行列信息。

>>> sheet1 = wb['一等奖']
>>> sheet1.max_column
7
>>> sheet1.max_row
6

获取单元格信息

访问某个单元格

>>> sheet1['D3']
<Cell '一等奖'.D3>
>>> sheet1.cell(row=3, column=4)
<Cell '一等奖'.D3>

如果访问单元格式添加 value 参数则会修改当前单元格的值。

>>> sheet1.cell(3, 4).value
'基于Spark、Python的医护人员信息抽取与管理'
>>> sheet1.cell(3, 4, value='Python')
<Cell '一等奖'.D3>
>>> sheet1.cell(3, 4).value
'Python'

获取单元格的值、坐标、行索引、列索引。

>>> sheet1['D3'].value
'Python'
>>> sheet1['D3'].coordinate
'D3'
>>> sheet1['D3'].row
3
>>> sheet1['D3'].column
4

访问多个单元格

使用切片来访问多个单元格,这里的切片与列表切片有区别,列表切片是前闭后开,Excel 中的切片是前闭后闭

(1)选取 A1:B2 区域的单元格。

>>> sheet1['A1':'B2']
((<Cell '一等奖'.A1>,
  <Cell '一等奖'.B1>),
 (<Cell '一等奖'.A2>,
  <Cell '一等奖'.B2>))


选取单列数据。

>>> sheet1['D']
(<Cell '一等奖'.D1>,
    ...
 <Cell '一等奖'.D6>)

选取B,C列数据。

 >>> sheet1['B:C']
((<Cell '一等奖'.B1>,
    ...
  <Cell '一等奖'.B6>),
 (<Cell '一等奖'.C1>,
    ...
  <Cell '一等奖'.C6>))

选取单行数据。

>>> sheet1[3]
(<Cell '一等奖'.A3>,
 <Cell '一等奖'.B3>,
    ...
 <Cell '一等奖'.F3>,
 <Cell '一等奖'.G3>)

选取第2,3行数据。

>>> sheet1[2:3]
((<Cell '一等奖'.A2>,
    ...
  <Cell '一等奖'.G2>),
 (<Cell '一等奖'.A3>,
    ...
  <Cell '一等奖'.G3>))

遍历获取数据

按行遍历指定范围(B2:C3)数据。

>>> for row in  sheet1.iter_rows(min_row=2, max_row=3, min_col=2, max_col=3):
        for cell in  row:
            print(cell.coordinate)

B2
C2
B3
C3

按列遍历指定范围(B2:C3)数据。

>>> for col in  sheet1.iter_cols(min_row=2, max_row=3, min_col=2, max_col=3):
        for cell in col:
            print(cell.coordinate)

B2
B3
C2
C3

如果 iter_rows()/iter_cols() 中指定参数 values_only=True,那么将只返回单元格的值

按行遍历所有数据。

>>> tuple(sheet1.rows)
((<Cell '一等奖'.A1>,
  ...
  <Cell '一等奖'.G1>),
  ...
  ...
 (<Cell '一等奖'.A6>,
  ...
  <Cell '一等奖'.G6>))

按列遍历所有数据。

>>> tuple(sheet1.columns)
((<Cell '一等奖'.A1>,
  ...
  <Cell '一等奖'.A6>),
  ...
  ...
 (<Cell '一等奖'.G1>, 
  ...
  <Cell '一等奖'.G6>))

修改工作表

单元格赋值

新增一列计算 作者 人数。

>>> for row_index in range(2, sheet1.max_row + 1):
	      sheet1.cell(row_index, 8).value = len(sheet1.cell(row_index, 6).value.split(','))

使用公式给单元格赋值,H7 统计作者总人数。

>>> sheet1['H7'] = '=SUM(H1:H6)'

追加一行数据

使用列表按序传入值。

>>> sheet1.append([str(n) for n in range(6)])


使用字典指定 列索引:列值

>>> sheet1.append({'A':'1','C':'3'})

插入空白行

在指定位置插入空白行, idx 行索引,插入的位置;amount 插入空白行的数量

>>> sheet1.insert_rows(idx=2, amount=2)

删除工作表

>>> wb.remove(wb['new_sheet'])

保存工作簿

>>> wb.save('获奖名单V1.xlsx')

修改样式

字体

设置 B2 单元格字体格式为,颜色可以用十六进制颜色代码。

>>> from openpyxl.styles import Font

>>> new_font = Font(name='微软雅黑', size=20, color='3333CC', bold=True)
>>> sheet1['B2'].font = new_font

单元格背景颜色

>>> from openpyxl.styles import PatternFill, colors
>>> sheet1["A2"].fill = PatternFill("solid", fgColor=colors.BLUE)
>>> sheet1["A3"].fill = PatternFill("solid", fgColor='FF66CC')

对齐方式

设置 D2 中的数据 垂直居中水平居中

>>> from openpyxl.styles import Alignment
>>> sheet1['D2'].alignment = Alignment(horizontal='center', vertical='center')

行高/列宽

设置第2行行高为40,C列列宽为20。

>>> sheet1.row_dimensions[2].height = 40
>>> sheet1.column_dimensions['C'].width = 20

合并/拆分单元格

合并单元格只需要指定左上角和右下角的单元格坐标。

>>> sheet.merge_cells('A1:C3')

拆分单元格后,合并区域的值会赋给左上角单元格A1。

>>> sheet.unmerge_cells('A1:C3')



对于刚入门 Python 或是想要入门 Python 的小伙伴,可以通过微信搜索Python新视野联系作者,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。