python使用openpyxl操作execl
openpyxl
openpyxl可以用来对excel进行操作,但只能操作xlsx文件而不能操作xls文件。
主要用到三个概念:Workbooks,Sheets,Cells。
Workbook就是一个excel工作薄;
Sheet是工作表中的一张工作表;
Cell就是简单的一个格。
openpyxl就是围绕着这三个概念进行的:打开Workbook,定位Sheet,操作Cell。
读取与创建
读取Workbooks
可以导入openpyxl.load_workbook()来打开一个已经存在的workbook:
- >>> from openpyxl import load_workbook
- >>> wb2 = load_workbook('test.xlsx')
- >>> print wb2.get_sheet_names()
- ['Sheet2', 'New Title', 'Sheet1']
创建Workbooks与Sheets
在刚开始使用openpyxl的时候,不需要直接在文件系统中创建一个文件,仅仅需要导入Workbook类并开始使用它:
- >>> from openpyxl import Workbook
- >>> wb = Workbook()
一个workbook总是会创建至少一个worksheet(工作表),可以通过openpyxl.workbook.Workbook.active()这个属性去获取:
- >>> ws = wb.active
这个函数使用_active_sheet_index这个属性,默认设置的值是0,除非你指定一个值,否则总是获取到第一个worksheet。
你可以使用openpyxl.workbook.Workbook.create_sheet()来创建一个新的worksheet:
- >>> ws1 = wb.create_sheet("Mysheet") # insert at the end (default)# or
- >>> ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
当创建脚标的时候会自动创建一个名字,按照(Sheet, Sheet1, Sheet2, ...)这个列表名创建,你可以使用tiitle属性来修改这个名字:
- >>> ws.title = "New Title"
一旦给了一个worksheet名字,就可以通过一个key去获取这个worksheet:
- >>> ws3 = wb["New Title"]
你可以使用openpyxl.workbook.Workbook.sheetnames()这个属性获取所有的脚标的名字:
- >>> print(wb.sheetnames)['Sheet2', 'New Title', 'Sheet1']
可以迭代所有的脚标:
- >>> for sheet in wb:
- ... print(sheet.title)
可以使用openpyxl.workbook.Workbook.copy_worksheet()这个属性复制一个worksheet:
- >>> source = wb.active
- >>> target = wb.copy_worksheet(source)
注意:只有cells 和 styles能够被复制,不能在workbooks之间复制worksheets,你可以在一个workbook中复制worksheets
数据操作
获取一个cell
现在我们已经知道怎么访问一个worksheet,我们可以开始修改cell的内容了。(一个cell就是一个单元格)
cell可以直接通过key来获取:
- >>> c = ws['A4']
这将会返回一个cell或创建一个不存在的cell。cell 的值可以直接被赋值:
- >>> ws['A4'] = 4
也可以使用另外一个方法openpyxl.worksheet.Worksheet.cell():
- >>> d = ws.cell(row=4, column=2, value=10)
Note:当在内存当中创建一个worksheet的时候,它没有包含任何cell,当它们第一次被访问的时候被创建
Warning:因为excel表的滚动特性,滚动出来的cell也会被创建出来,即使没有访问那些cell,例如:
- >>> for i in range(1,101):
- ... for j in range(1,101):
- ... ws.cell(row=i, column=j)
这将会创建100*100个空的cell
访问多个cell
使用切片可以访问多个cell
- >>> cell_range = ws['A1':'C2']
行和列能够被轻松的获取到:
- >>> colC = ws['C']
- >>> col_range = ws['C:D']
- >>> row10 = ws[10]
- >>> row_range = ws[5:10]
也可以使用openpyxl.worksheet.Worksheet.iter_rows()这个方法:
- >>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
- ... for cell in row:
- ... print(cell)
- <Cell Sheet1.A1>
- <Cell Sheet1.B1>
- <Cell Sheet1.C1>
- <Cell Sheet1.A2>
- <Cell Sheet1.B2>
- <Cell Sheet1.C2>
相似的方法openpyxl.worksheet.Worksheet.iter_cols()也可以:
- >>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
- ... for cell in col:
- ... print(cell)
- <Cell Sheet1.A1>
- <Cell Sheet1.A2>
- <Cell Sheet1.B1>
- <Cell Sheet1.B2>
- <Cell Sheet1.C1>
- <Cell Sheet1.C2>
如果你想迭代一个文件的所有行或列,可以使用openpyxl.worksheet.Worksheet.rows()这个属性:
- >>> ws = wb.active
- >>> ws['C9'] = 'hello world'
- >>> tuple(ws.rows)
- ((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
- (<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
- (<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
- (<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
- (<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
- (<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
- (<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
- (<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
- (<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
或者openpyxl.worksheet.Worksheet.columns()这个属性:
- >>> tuple(ws.columns)
- ((<Cell Sheet.A1>,
- <Cell Sheet.A2>,
- <Cell Sheet.A3>,
- <Cell Sheet.A4>,
- <Cell Sheet.A5>,
- <Cell Sheet.A6>,
- ...
- <Cell Sheet.B7>,
- <Cell Sheet.B8>,
- <Cell Sheet.B9>),
- (<Cell Sheet.C1>,
- <Cell Sheet.C2>,
- <Cell Sheet.C3>,
- <Cell Sheet.C4>,
- <Cell Sheet.C5>,
- <Cell Sheet.C6>,
- <Cell Sheet.C7>,
- <Cell Sheet.C8>,
- <Cell Sheet.C9>))
数据存储
一旦我们有了一个openpyxl.cell.Cell,我们就可以给它赋值:
- >>> c.value = 'hello, world'
- >>> print(c.value)'hello, world'
- >>> d.value = 3.14
- >>> print(d.value)3.14
也能使用类型和格式推断:
- >>> wb = Workbook(guess_types=True)
- >>> c.value = '12%'
- >>> print(c.value)
- 0.12
- >>> import datetime
- >>> d.value = datetime.datetime.now()
- >>> print d.valuedatetime.datetime(2010, 9, 10, 22, 25, 18)
- >>> c.value = '31.50'
- >>> print(c.value)
- 31.5
保存到文件
最简单和快速的保存一个workbook方法是使用openpyxl.workbook.Workbook模块的openpyxl.workbook.Workbook.save()这个方法:
- >>> wb = Workbook()
- >>> wb.save('balances.xlsx')
Warning:这个方法将会在没有警告提示下覆盖已经有的内容
可以使用template=True将一个workbook保存成一个模版:
- >>> wb = load_workbook('document.xlsx')
- >>> wb.template = True
- >>> wb.save('document_template.xltx')
或者设置这个属性为false(默认)来保存为一个文件:
- >>> wb = load_workbook('document_template.xltx')
- >>> wb.template = False
- >>> wb.save('document.xlsx', as_template=False)
*Warning:当保存文档的时候在模版文档中你应该注意文档的扩展名(后缀名)和数据描述,否则可能会导致文档不能被再次打开,如下错误式例:
注解 以下操作将失败:
- >>> wb = load_workbook('document.xlsx')
- >>> # 应该保存成扩展名为*.xlsx
- >>> wb.save('new_document.xlsm')
- >>> # Excel软件不能再次打开此文件
- >>>
- >>> # 或者
- >>>
- >>> # 应该指定属性keep_vba=True
- >>> wb = load_workbook('document.xlsm')
- >>> wb.save('new_document.xlsm')
- >>> # Excel软件不能再次打开此文件
- >>>
- >>> # 或者
- >>>
- >>> wb = load_workbook('document.xltm', keep_vba=True)
- >>> # 如果我们需要一个模版文件,就必须指定扩展名为 *.xltm.
- >>> wb.save('new_document.xlsm')
- >>> # Excel软件不能再次打开此文件
更多阅读:
Working with Excel Spreadsheets
python使用openpyxl操作execl的更多相关文章
- python通过openpyxl操作excel
python 对Excel操作常用的主要有xlwt.xlrd.openpyxl ,前者xlwt主要适合于对后缀为xls比较进行写入,而openpyxl主要是针对于Excel 2007 以上版本进行操作 ...
- python用openpyxl操作excel
python操作excel方法 1)自身有Win32 COM操作office但讲不清楚,可能不支持夸平台,linux是否能用不清楚,其他有专业处理模块,如下 2)xlrd:(读excel)表,xlrd ...
- Python使用openpyxl操作excel表格
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 ht ...
- 用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中
现代生活中,我们很难不与excel表打交道,excel表有着易学易用的优点,只是当表中数据量很大,我们又需要从其他表册中复制粘贴一些数据(比如身份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法 ...
- python使用openpyxl操作excel总结
安装openpyxl pip install openpyxl 简单示例 from openpyxl import Workbook #创建一个工作薄对象,也就是创建一个excel文档 wb = Wo ...
- python库openpyxl操作excel
废话不多说,看代码,不懂的留言. from openpyxl import * class ExcelUtil: ''' 读取excel文件内容''' def create_work_book(sel ...
- python使用openpyxl操作excel
def initExcel(): file_path = "test.xlsx" file = load_workbook(file_path) table = file[&quo ...
- python 使用openpyxl来写数据到excel表格
使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column ...
- Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
随机推荐
- 十个Python爬虫武器库示例,十个爬虫框架,十种实现爬虫的方法!
一般比价小型的爬虫需求,我是直接使用requests库 + bs4就解决了,再麻烦点就使用selenium解决js的异步 加载问题.相对比较大型的需求才使用框架,主要是便于管理以及扩展等. 1.Scr ...
- Smarty 获取当前日期时间和格式化日期时间
在Smarty 中获取当前日期时间和格式化日期时间与PHP中有些不同的地方,这里就为您详细介绍: 首先是获取当前的日期时间:在PHP中我们会使用date函数来获取当前的时间,实例代码如下:date(& ...
- object_detection faster-rcnn
(t20190518) luo@luo-All-Series:~/MyFile/TensorflowProject/Faster_RCNN/models/research$ (t20190518) l ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_17.RabbitMQ研究-与springboot整合-消费者代码
创建消费者的类 使用@Component把这个类标记成一个Bean 把生产者里面创建的配置文件类复制过来 在原始的消费的方法上面 ,我们是可以拿到channel通道的 message.getBody就 ...
- 学用 ASP.Net 之 System.Collections.ArrayList 类
ArrayList 是 .Net 的动态数组. 主要成员: /* 静态方法 */ ArrayList.Adapter() //把其他 IList 对象包装为 ArrayList 使用 ArrayLis ...
- django 之(三) --- 认证|权限
用户模块 登陆注册1:Django2.0 [ 1:N ] user/url.py from django.urls import path from user.views0 import UserT ...
- kubernetes版本apiversion简单说明
在使用yaml文件部署Deployment项目时,出现过 error: error validating "xx-Deployment.yaml": error validatin ...
- du 和 df命令
测试环境数据库收到磁盘报警时,需要清理部分磁盘空间 df -h 查看整个磁盘占有 找到对应目录 查看每个文件夹占有磁盘量: sudo du -h --max-depth=1 data/ --max-d ...
- 你必须知道的495个c语言问题(笔记)
1.1我该如何决定使用哪种整数类型? 用到较大的数用long:空间很重要(例如有很大的数组或很多的结构)用short:此外用int. win32: int 32bit 4byte char 8b ...
- Windows下直接双击可执行的jar
如果没有设置,那么就是用命令行: jar处在文件夹路径下打开命令行:java -jar xxx.jar 总的来说是有点不方便 首先默认打开jar程序得是相同jdk的java.exe 然后是一闪而过 下 ...