你是不是会经常简单且重复地操作excel表格?并且这些操作的技术含量低。
本文给你介绍如何使用python高效操作excel,按照本文的教程,你可以快速高效地完成各种excel的骚操作。
你需要做的只有逐个实操本文中的例子,并且消化吸收,直到掌握。
本文中使用的操作系统是Windows,开发环境是Python3.8,使用的openpyxl的版本是3.0.5。
文中的代码,全部都是我亲自测试过的,你可以直接使用,如果有什么问题,可以私信我。
本文将按照如下顺序进行展开:excel表基础知识
openpyxl库的使用
1. excel表基础知识
上图是常见的excel表格,我们虽然每天都在使用excel表格,但是一些常见的基础知识也需要普及,因为在介绍这些知识的过程,其实是在为excel表格建模的过程。上图中紫色框选中的是工作簿,红色框选中的是该工作簿下的行,绿色框选中的是该工作簿下的列,黄色框选中的是该工作簿的单元。
通过上一段文字的介绍,我们可以发现,其实excel表格是一个三层结构,最高层是表格,第二层是工作簿,第三层是行、列和单元。
在后面章节中,我们会发现,为了操作一个excel表格,都是按照这样的流程,首先打开表格,指定工作簿,再操作指定的行,列和单元。
2. openpyxl库
openpyxl是一个Python库,用于读取/写入Excel xlsx / xlsm / xltx / xltm文件。首先通过一个例子来感受下openpyxl的威力。
from openpyxl import Workbook
import datetime
wb = Workbook()
ws = wb.active
ws['A1']=42
ws.append([1,2,3])
ws['A3'] = datetime.datetime.now()
wb.save('sample.xlsx')
执行上面的代码,执行结束后,在当前文件夹中新增一个名字为“sample.xlsx"的excel表格,打开该excel表格,里面的内容如下图所示。
2.1 安装
在Windows系统中,点击Windows+R键,输入cmd命令,启动windows系统自带的命令窗口,在命令窗口中输入
pip install openpyxl
执行结果如下:
C:\Users\Administrator>pip install openpyxl
Collecting openpyxl
Downloading openpyxl-3.0.5-py2.py3-none-any.whl (242 kB)
|████████████████████████████████| 242 kB 4.3 kB/s
Requirement already satisfied: et-xmlfile in d:\anaconda3\lib\site-packages (from openpyxl) (1.0.1)
Requirement already satisfied: jdcal in d:\anaconda3\lib\site-packages (from openpyxl) (1.4.1)
Installing collected packages: openpyxl
Successfully installed openpyxl-3.0.5
当提示”Successfully installed openpyxl-3.0.5“,说明安装成功。也可以通过如下的方式进行验证。
在命令窗中继续输入python,进入Python运行环境,输入
>>> import openpyxl
如果没有报错,则也可以说明安装成功了。
C:\Users\Administrator>python
Python 3.8.3 (default, Jul 2 , 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
Failed calling sys.__interactivehook__
Traceback (most recent call last):
File "D:\anaconda3\lib\site.py", line 440, in register_readline
readline.read_history_file(history)
File "D:\anaconda3\lib\site-packages\pyreadline\rlmain.py", line 165, in read_history_file
self.mode._history.read_history_file(filename)
File "D:\anaconda3\lib\site-packages\pyreadline\lineeditor\history.py", line 82, in read_history_file
for line in open(filename, 'r'):
UnicodeDecodeError: 'gbk' codec can't decode byte 0x8c in position 636: illegal multibyte sequence
>>> import openpyxl
>>>
2.2 打开和保存表格
打开文件分为2种情况,第1种情况下是新建表格,第2种情况下是读取已有表格。
新建表格和保存表格
上面的例子就是使用新建表格的方式。代码如下所示。
from openpyxl import Workbook
# 实例化
wb = Workbook()
# 激活 worksheet
ws = wb.active
# 保存表格
wb.save("test.xlsx")
读取已有表格
针对系统中已经存在的excel表格,可以使用读取文件的方式。
from openpyxl import load_workbook
wb2 = load_workbook("C:\\Users\\Administrator\\Desktop\\新建 Microsoft Excel 工作表.xlsx")
print(wb2.sheetnames)
执行结果:
['Sheet1']
2.3 创建工作簿
我们可以使用create_sheet()方法创建新的工作簿。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# 新建的工作簿插到末尾
ws1 = wb.create_sheet("Myshee1")
print(wb.sheetnames)
# 新建的工作簿插到首部
ws2 = wb.create_sheet("Mysheet2", 0)
print(wb.sheetnames)
# 新建的工作簿插到倒数第二个位置
ws3 = wb.create_sheet("Mysheet3", -1)
print(wb.sheetnames)
执行结果:
['Sheet', 'Myshee1']
['Mysheet2', 'Sheet', 'Myshee1']
['Mysheet2', 'Sheet', 'Mysheet3', 'Myshee1']
可以将现有的工作簿更改名字。系统默认的名称是“Sheet”。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
print(wb.sheetnames)
ws.title = "New Title"
print(wb.sheetnames)
执行结果:
['Sheet']
['New Title']
2.4 访问单元格
访问一个单元
可以使用两种方法来获取和修改一个单元格的值。
第一种是直接指定单元格,第二种是通过指定行和列的cell()方法。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws['A4'] = 10
c=ws['A4'].value
print(c)
d=ws.cell(4,2,1000)
print(d.value)
执行结果:
10
1000
访问多个单元
可以使用切片访问单元格范围,也可以使用行或列范围来访问多个单元,如示例所示。
from openpyxl import Workbook
import random
wb = Workbook()
ws = wb.active
for i in range(1,40):
for j in range(1,60):
ws.cell(i,j,random.randint(0, 60))
# 使用切片访问
range = ws['A1':'D40']
# 使用列访问
colC=ws['C']
col_range=ws['C:D']
#使用行访问
row10=ws[10]
row_range=ws[5:10]
wb.save("test.xlsx")
执行结束后,查看变量情况。
查看range是个双层列表,第一层列表拥有40个元素,这40个元素同时也是列表,这些列表中包含4个元素,也就是有40*4个元素。对应代码中取出的['A1':‘D40’]的切片范围。
2.5 插入行和列
我们可以使用相关的工作簿插入行或列。
# openpyxl.worksheet.worksheet模块
insert_cols(idx,amount = 1 )
在col == idx之前插入一列或多列
insert_rows(idx,amount = 1 )
在row == idx之前插入一行或多行
默认值为1行或1列。例如,在第7行(在现有第7行之前)插入1行:
>>> ws.insert_rows(7)
例如,在第H列(在现有第H列之前)插入3列。
>>> ws.insert_cols(8,3)
2.6 删除行和列
我们可以使用相关的工作簿删除行或列。
# openpyxl.worksheet.worksheet模块
delete_cols(idx,amount = 1
从col == idx删除一列或多列
delete_rows(idx,amount = 1 )
从row == idx删除一行或多行
默认值为1行或1列。例如,删除列F:H
>>> ws.delete_cols(6, 3)
2.7 使用公式
我们可以使用excel中的所有数学公式,我们以SUM和AVERAGE为例进行说明。
from openpyxl import Workbook
import random
wb = Workbook()
ws = wb.active
for i in range(1,40):
for j in range(1,60):
ws.cell(i,j,random.randint(0, 60))
ws['F45']="=SUM(B1:F39)"
ws['F46']="=AVERAGE(B2:D30)"
wb.save("test.xlsx")
执行完毕后,打开“test.xlsx”,查看执行结果。
我们可以看到F45就是调用了excel中的sum公式,求值范围是B1:F39。
注意,由于本例子数字都是随机数,你的执行结果可能不一样。
学习python需要从基础知识开始,这里推荐几本书供大家学习。
再推荐本excel表的书籍。
码字不易,如果真的解决了您的问题。
请您点赞支持。
您可以关注我,我会持续回答计算机相关问题。
我有2个Python专栏。1个专门针对Python初学者,手把手教你入门Python;1个专门介绍强大的第三方库。