使用Python操作Excel文档(一)
Python | 使用Python操作Excel文档(一)
0 前言
在阅读本文之前,请确保您已满足或可能满足以下条件:
请确保您具备基本的Python编程能力。
请确保您会使用Excel。
请确保您的电脑已经安装好Python且pip可用。
另外操作Excel需要使用openpyxl模块,请安装好该模块:
pip install openpyxl
演示环境:
演示环境为win10+Python3.6
openpyxl版本为2.6.2
调试工具为IDLE
1. openpyxl简述
openpyxl操作Excel的第三方库,作者是Eric Gazoni, Charlie Clark。您也可以访问openpyxl的官方网站通过官方手册进行学习。同时附上官方网站的地址:
https://openpyxl.readthedocs.io/en/stable/index.html。
目前openpyxl的最新版本是2.6.2版本。在openpyxl之前,我们使用xlrd和xlwt来操作Excel表格,事实上这两个库也非常好用,一读一写,然而遗憾的是它们只能操作2003及以前的版本,而openpyxl却能支持2010版本。
另外这里附上源码地址,感兴趣的同学可以自行下载学习或者参与开发:
http://bitbucket.org/openpyxl/openpyxl/src
2. 创建/读取一个Excel工作簿
我们知道一个xlsx文件叫做工作簿,工作簿中的每一张表叫做工作表,表中每个格叫做单元格。
创建工作簿,示例代码如下:
from openpyxl import Workbook
wb = Workbook().save("example.xlsx")
Workbook对象是一个用来创建一个工作簿,save方法用来将这个对象保存成一个文件。
可以查看一下,程序执行的目录下是不是出现了一个example.xlsx文件。这时,是一个全新的文件,里面只有一张默认的表。
读取已存在的xlsx文件,使用openpyxl中的load_wordbook()方法。示例代码如下:
from openpyxl import load_workbook
wb = load_workbook("example.xlsx")
4. 操作Excel表:读取,创建,删除,复制
每个工作表都是一个Worksheet对象。
首先访问wb的sheetnames属性来获取文件中的所有工作表的名字,:
wb.sheetnames # ['Sheet']
一般来说,当我们打开一个Excel表格,会看到上次我们保存的表。这个表是活动状态的。我们可以使用Workbook类中的active属性来读取这张表。
ws = wb.active
ws就是我们要操作的表了。你可以使用ws的title属性来获取表明,一般当我们创建一个xlxs文件的时候,会默认创建一张表Sheet,接下来我们对ws的操作,就是对这张表的操作,可以理解成对ws的操作会反映到这张表上。
例如访问ws的title属性,可以获取或修改表名。ws是一个Worksheet对象,也可以使用Workbook类中的get_sheet_by_name("sheet_name")方法读取这张表。也可以使用wb[表名]的方式,但是旧版本的openpyxl可能会不知这种访问方式。使用title给这张表重命名:
ws.title # 'Sheet'
ws = wb.get_sheet_by_name("Sheet")
ws.title # 'Sheet'
ws.title = "demo"
wb.sheetnames # ['demo']
ws = wb["demo"]
创建一张表,使用Workbook中的create_sheet()方法:
ws1 = wb.create_sheet("demo1")
wb.sheetnames # ['demo', 'demo1']
删除一张表,使用Workbook中的remove_sheet()方法:
wb.remove_sheet(ws1)
wb.sheetnames # ['demo']
需要注意的是,也可以使用wb.remove(ws1)或del w["demo1"],但是不建议这种写法。
复制一张表,使用Workbook中的copy_worksheet()方法:
ws2 = wb.copy_worksheet(ws)
wb.sheetnames # ['demo', 'demo Copy']
PS:旧版的openpyxl可能不支持sheetnames属性,这时可以使用Workbook类中的get_sheet_names()方法,旧版中也可能不支持wb[表名]的访问方式以及active属性,这时可以使用get_active_sheet()方法
5. 操作单元格
每个单元格都是一个Cell对象。
访问单元格,需要使用坐标,坐标的表示方式有两种,一种是使用字符串,如‘A1’,表示的是第一列,第一行。。另一种就是使用标准得坐标如,column=1, row=1,利用ws中的cell方法来第一行第一列的单元格。访问单元格的方式是使用如ws['A1'], 即表变量[坐标]
ws['A1'] = 0
ws.cell(row=1, column=1, value=0)
print(ws['A1'].value) # 0
需要强调的是,虽然可以直接给单元格赋值,但是要读取这个值,还是需要访问Cell类中的value属性的。而且坐标必须从1开始。
PS:部分旧版可能不支持表变量[坐标]的访问方式,这时,可以使用ws.Cell('A1')或ws.Cell(column=1, row=1)的方式来访问。
6. 向表中写入大量数据
for i in range(1, 20):
for j in range(1, 20):
ws.cell(i,j,value=i*j)
需要注意的是,使用cell时,坐标至少是1,也就是说,大于0的整数。
wb.save("example.xlsx")
好,到这里,我们保存,来看下效果。
7.复习下今天内容
关于使用openpyxl操作Excel文档,应该要先了解openpyxl提供的三个类:
Workbook类用来创建工作簿、读取、创建,删除,复制工作表等。
load_workbook方法会读取已存在的工作簿,返回Workbook对象
Worksheet类用来进行表的操作,比如访问单元格。返回Cell对象。
使用Python操作Excel文档(一)的更多相关文章
- 用Python操作excel文档
使用Python第三方库 这一节我们学习如何使用Python去操作Excel文档.如果大家有人不知道Excel的话,那么建议先学一学office办公基础.这里想要操作Excel,必须安装一个Pytho ...
- Python处理Excel文档(xlrd, xlwt, xlutils)
简介 xlrd,xlwt和xlutils是用Python处理Excel文档(*.xls)的高效率工具.其中,xlrd只能读取xls,xlwt只能新建xls(不可以修改),xlutils能将xlrd.B ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- python操作docx文档(转)
python操作docx文档 关于python操作docx格式文档,我用到了两个python包,一个便是python-docx包,另一个便是python-docx-template;,同时我也用到了很 ...
- $ 用python处理Excel文档(1)——用xlrd模块读取xls/xlsx文档
本文主要介绍xlrd模块读取Excel文档的基本用法,并以一个GDP数据的文档为例来进行操作. 1. 准备工作: 1. 安装xlrd:pip install xlrd 2. 准备数据集:从网上找到的1 ...
- QTP操作excel文档
对于QTP操作excel的大前提是,保证组建服务里的DCOM配置里存在 microsoft excel application ,具体的查看方式是,在运行框中输入dcomcnfg,然后会打开组件服务的 ...
- $用python处理Excel文档(2)——用xlsxwriter模块写xls/xlsx文档
Refer:<python自动化运维:技术与最佳实践> 更多用法参考xlsxwriter官方文档:http://xlsxwriter.readthedocs.io/ 本文主要总结一下如何使 ...
- python 操作word文档
因为工作需要操作一些word文档,记录一下学习思路 #-*- encoding: utf8 -*- import win32com from win32com.client import Dispat ...
- 利用xlrd模块实现Python读取Excel文档
# -*- coding: cp936 -*- #python读取excel import xlrd def main(): xls=xlrd.open_workbook("d:\\11.x ...
随机推荐
- python 小数精度控制
可以用:round(数值,保留小数位数) 详情参考 https://www.cnblogs.com/herbert/p/3402245.html
- 进阶Java编程(4)多线程深入话题
多线程深入话题 1,优雅的停止线程 在多线程操作之中如果要启动多线程使用的肯定是Thread类中的start()方法,而如果对于多线程需要进行停止处理,Thread类原本提供有stop()方法,但是这 ...
- 手把手教你搭建FastDFS集群(中)
手把手教你搭建FastDFS集群(中) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u0 ...
- SQL Join的应用(转)
INNER JOIN LEFT JOIN RIGHT JOIN OUTER JOIN LEFT JOIN EXCLUDING INNER JOIN RIGHT JOIN EXCLUDING INNER ...
- Update导致SQL Server死锁的典型方法(转载)
此文为转载文章,描述的很好,没有验证过. 最近遇到了一个看上去很奇怪,分析起来很有意思的死锁问题.这个死锁看上去难以理解.而分析过程中,又使用了很多分析SQL Server死锁的典型方法.记录下来整个 ...
- luogu P4688 [Ynoi2016]掉进兔子洞
luogu 我们要求的答案应该是三个区间长度\(-3*\)在三个区间中都出现过的数个数 先考虑数列中没有相同的数怎么做,那就是对三个区间求交,然后交集大小就是要求的那个个数.现在有相同的数,考虑给区间 ...
- vlan linux内核数据流程
转:http://blog.sina.com.cn/s/blog_62bbc49c0100fs0n.html 一.前言 前几天做协议划分vlan的时候看了一些linux内核,了解不深,整理了下vlan ...
- Oracle【序列、索引、视图、分页】
1.Oracle序列语法:create sequence 序列名 特点1:默认是无值,指针指向没有值的位置 特点2:序列名.nextval 每次执行值会自增一次,步长为 1 特点3:序列名.currv ...
- 《Linux就该这么学》day3
ps:原谅我的书法出自鲁迅的<野草> <Linux就该这么学>书本介绍: 本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极 ...
- gyp ERR! stack Error: EACCES: permission denied, mkdir问题解决方案
sudo npm i --unsafe-perm 原因还是权限问题 就是说 npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody ...