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

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

前言


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


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


openpyxl 安装


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

pip install openpyxl
复制代码


或使用豆瓣镜像安装。

pip install -i https://pypi.douban.com/simple openpyxl
复制代码

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


打开/创建工作簿


示例工作簿

image.png


工作表【一等奖】

image.png


工作表【二等奖】

image.png


(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>))
复制代码

image.png

选取单列数据。

>>> 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(','))
复制代码

image.png


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

>>> sheet1['H7'] = '=SUM(H1:H6)'
复制代码

image.png


追加一行数据

使用列表按序传入值。

>>> sheet1.append([str(n) for n in range(6)])
复制代码

image.png


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

>>> sheet1.append({'A':'1','C':'3'})
复制代码

image.png


插入空白行

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

>>> sheet1.insert_rows(idx=2, amount=2)
复制代码

image.png


删除工作表

>>> 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
复制代码

image.png


单元格背景颜色

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

image.png


对齐方式

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

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

image.png


行高/列宽

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

>>> sheet1.row_dimensions[2].height = 40
>>> sheet1.column_dimensions['C'].width = 20
复制代码

image.png


合并/拆分单元格

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

>>> sheet.merge_cells('A1:C3')
复制代码

image.png


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

>>> sheet.unmerge_cells('A1:C3')
复制代码

image.png

相关文章
|
9天前
|
Python
python_读写excel、csv记录
python_读写excel、csv记录
13 0
|
5天前
|
存储 Python Windows
轻松学会openpyxl库,Python处理Excel有如神助
轻松学会openpyxl库,Python处理Excel有如神助
|
5天前
|
NoSQL Python
在Python中,我们可以使用许多库来处理Excel文件
Python处理Excel常用pandas和openpyxl库。pandas的`read_excel`用于读取文件,`to_excel`写入;示例展示了数据框操作。openpyxl则用于处理复杂情况,如多工作表,`load_workbook`加载文件,`iter_rows`读取数据,`Workbook`创建新文件,写入单元格数据后保存。
13 1
|
11天前
|
Python
Python异步编程|PySimpleGUI界面读取PDF转换Excel
Python异步编程|PySimpleGUI界面读取PDF转换Excel
16 1
|
16天前
|
小程序 数据挖掘 iOS开发
Python + Excel 办公自动化 01 —— 硬菜马上就来
Python + Excel 办公自动化 01 —— 硬菜马上就来
22 1
|
16天前
|
存储 Python
终于,手把手教会 HR 实现 Python + Excel 「邮件自动化」发工资条了
终于,手把手教会 HR 实现 Python + Excel 「邮件自动化」发工资条了
24 0
|
16天前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
12 0
|
22天前
|
Python
Python—提取页面上所有信息输出excel
Python—提取页面上所有信息输出excel
|
22天前
|
开发者 Python
如何让excel 运行python代码
如何让excel 运行python代码
|
1月前
|
Python
【python】提取多个excel的工作簿,生成新的excel
【python】提取多个excel的工作簿,生成新的excel