|
|
发表于 2022-9-22 19:42:31
|
显示全部楼层
你是不是会经常简单且重复地操作excel表格?并且这些操作的技术含量低。
本文给你介绍如何使用python高效操作excel,按照本文的教程,你可以快速高效地完成各种excel的骚操作。
你需要做的只有逐个实操本文中的例子,并且消化吸收,直到掌握。
本文中使用的操作系统是Windows,开发环境是Python3.8,使用的openpyxl的版本是3.0.5。
文中的代码,全部都是我亲自测试过的,你可以直接使用,如果有什么问题,可以私信我。
本文将按照如下顺序进行展开:
1. excel表基础知识
上图是常见的excel表格,我们虽然每天都在使用excel表格,但是一些常见的基础知识也需要普及,因为在介绍这些知识的过程,其实是在为excel表格建模的过程。上图中紫色框选中的是工作簿,红色框选中的是该工作簿下的行,绿色框选中的是该工作簿下的列,黄色框选中的是该工作簿的单元。
通过上一段文字的介绍,我们可以发现,其实excel表格是一个三层结构,最高层是表格,第二层是工作簿,第三层是行、列和单元。
在后面章节中,我们会发现,为了操作一个excel表格,都是按照这样的流程,首先打开表格,指定工作簿,再操作指定的行,列和单元。
2. openpyxl库
openpyxl是一个Python库,用于读取/写入Excel 2010 xlsx / xlsm / xltx / xltm文件。首先通过一个例子来感受下openpyxl的威力。
from openpyxl import Workbookimport datetimewb = Workbook()ws = wb.activews['A1']=42ws.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 openpyxlCollecting openpyxl Downloading openpyxl-3.0.5-py2.py3-none-any.whl (242 kB) |████████████████████████████████| 242 kB 4.3 kB/sRequirement 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: openpyxlSuccessfully installed openpyxl-3.0.5
当提示”Successfully installed openpyxl-3.0.5“,说明安装成功。也可以通过如下的方式进行验证。
在命令窗中继续输入python,进入Python运行环境,输入
>>> import openpyxl
如果没有报错,则也可以说明安装成功了。
C:\Users\Administrator>pythonPython 3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32Type "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()# 激活 worksheetws = wb.active# 保存表格wb.save("test.xlsx")
读取已有表格
针对系统中已经存在的excel表格,可以使用读取文件的方式。
from openpyxl import load_workbookwb2 = load_workbook("C:\\Users\\Administrator\\Desktop\\新建 Microsoft Excel 工作表.xlsx")print(wb2.sheetnames)
执行结果:
['Sheet1']
2.3 创建工作簿
我们可以使用create_sheet()方法创建新的工作簿。
from openpyxl import Workbookwb = 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 Workbookwb = Workbook()ws = wb.activeprint(wb.sheetnames)ws.title = "New Title"print(wb.sheetnames)
查看执行结果:
['Sheet']['New Title']
2.4 访问单元格
访问一个单元
可以使用两种方法来获取和修改一个单元格的值。
第一种是直接指定单元格,第二种是通过指定行和列的cell()方法。
from openpyxl import Workbookwb = Workbook()ws = wb.activews['A4'] = 10c=ws['A4'].valueprint(c)d=ws.cell(4,2,1000)print(d.value)
执行结果:
101000
访问多个单元
可以使用切片访问单元格范围,也可以使用行或列范围来访问多个单元,如示例所示。
from openpyxl import Workbookimport randomwb = Workbook()ws = wb.activefor 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 Workbookimport randomwb = Workbook()ws = wb.activefor 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。
注意,由于本例子数字都是随机数,你的执行结果可能不一样。
<hr>学习python需要从基础知识开始,这里推荐几本书供大家学习。
Python编程 从入门到实践 第2版(图灵出品)¥74.50起
Python数据处理+Python数据分析基础 2本套装京东¥180.00去购买
再推荐本excel表的书籍。
Word Excel PPT office办公应用从入门到精通计算机办京东¥48.00去购买
<hr>码字不易,如果真的解决了您的问题。
请您点赞支持。
您可以关注我,我会持续回答计算机相关问题。
我有2个Python专栏。1个专门针对Python初学者,手把手教你入门Python;1个专门介绍强大的第三方库。 |
|