300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python excel 库 知乎_办公自动化利器openpyxl 高效操作excel的Python库

python excel 库 知乎_办公自动化利器openpyxl 高效操作excel的Python库

时间:2021-07-25 17:36:36

相关推荐

python excel 库 知乎_办公自动化利器openpyxl 高效操作excel的Python库

你是不是会经常简单且重复地操作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个专门介绍强大的第三方库。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。