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

openpyxl简单用法

python使用openpyxl操作execl的更多相关文章

  1. python通过openpyxl操作excel

    python 对Excel操作常用的主要有xlwt.xlrd.openpyxl ,前者xlwt主要适合于对后缀为xls比较进行写入,而openpyxl主要是针对于Excel 2007 以上版本进行操作 ...

  2. python用openpyxl操作excel

    python操作excel方法 1)自身有Win32 COM操作office但讲不清楚,可能不支持夸平台,linux是否能用不清楚,其他有专业处理模块,如下 2)xlrd:(读excel)表,xlrd ...

  3. Python使用openpyxl操作excel表格

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 ht ...

  4. 用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中

    现代生活中,我们很难不与excel表打交道,excel表有着易学易用的优点,只是当表中数据量很大,我们又需要从其他表册中复制粘贴一些数据(比如身份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法 ...

  5. python使用openpyxl操作excel总结

    安装openpyxl pip install openpyxl 简单示例 from openpyxl import Workbook #创建一个工作薄对象,也就是创建一个excel文档 wb = Wo ...

  6. python库openpyxl操作excel

    废话不多说,看代码,不懂的留言. from openpyxl import * class ExcelUtil: ''' 读取excel文件内容''' def create_work_book(sel ...

  7. python使用openpyxl操作excel

    def initExcel(): file_path = "test.xlsx" file = load_workbook(file_path) table = file[&quo ...

  8. python 使用openpyxl来写数据到excel表格

    使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column ...

  9. Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

随机推荐

  1. pandas总结

    ### 一.创建对象  # 1.可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引: # s=pd.Series([1,3,5,np.nan,6,8]) # print ...

  2. python之Anaconda python3.7安装

    1.下载 https://www.anaconda.com/distribution/ #你会发现,使用windows下载十分慢,既然这样,为何不尝试centos(linux)安装呢?本人使用cent ...

  3. Ubuntu安装teamview客户端

    1,下载teamviem客户端的Ubuntu版本 下载地址 https://www.teamviewer.com/en/download/linux/ 2,安装 apt install ./teamv ...

  4. unity3d 触屏多点触控(旋转与缩放)

    unity3d 触屏多点触控(旋转与缩放) /*Touch OrbitProgrammed by: Randal J. Phillips (Caliber Mengsk)Original Creati ...

  5. ajax提交文件,django测试脚本环境书写,froms组件,钩子函数

    1.在新版本中,添加app是直接在settings设置中,将INSTALLED_APPS里添加app名字, 但是他的完整写法是   'app01.apps.App01Config'  因为新版本做了优 ...

  6. shell学习笔记1-文件安全与权限

    1,创建文件的用户和他所属的组拥有该文件,文件的属主可以设定谁具有读.写.执行该文件的权限,根用户可以改变任何普通用户的设置. 2,一个文件一经创建,就具有三种访问权限:读(可以显示该文件的内容).写 ...

  7. 【ARM-Linux开发】【DSP开发】AM5728介绍

    AM5728 Sitara Processors 1.    介绍 1.1 AM572x概述 AM572x是高性能,Sitara器件.以28nm技术集成: 结构设计主要考虑嵌入式应用,包括工业通讯,人 ...

  8. 【编程开发】非对称加密过程详解(基于RSA非对称加密算法实现)

    1.非对称加密过程:         假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...

  9. 最新 龙采科技java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.龙采科技等10家互联网公司的校招Offer,因为某些自身原因最终选择了龙采科技.6.7月主要是做系统复习.项目复盘.Leet ...

  10. 子组件props接受父组件传递的值,能不能修改的问题

    参考链接:https://www.cnblogs.com/pangchunlei/p/11139356.html