访问单个单元格

c = ws['A4'] #返回单元格A4,如果单元格不存在,则会自动创建
ws['A4'] = 4 #为单元格A4赋值为4 d = ws.cell(row=4, column=2, value=10) #给单元格B4赋值为10

  当一个worksheet在内存中创建时,是不包含任何单元格的,只有当第一次访问时才会被创建
  当通过cell()函数访问大批量单元格时,这些单元格虽然没有被赋值,但这些单元格却已在内存中创建

for x in range(1,101):
for y in range(1,101):
ws.cell(row=x, column=y) #会在内存中创建100*100个单元格

访问多个单元格

cell_range = ws['A1':'C2']  #访问从A1到C2的所有单元格

colC = ws['C']  #访问C列的所有单元格
col_range = ws['C:D'] #访问C列和D列的所有单元格 row10 = ws[10] #访问第10行的所有单元格
row_range = ws[5:10] #访问第5行到第10行的所有单元格 #使用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>
''' #使用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>
'''

  出于性能方面的考虑,Worksheet.iter_cols()在read-only模式下是不可用的
  我认为这可能是因为内存的大小是有限的,由于无法事先预估文件的大小,假如文件有一亿行数据
  则iter_cols方法在以列为单位遍历文件时,先遍历第一列,可能遍历到第一千万行时,内存就已经不够了

遍历整个文件的所有行和列

可以遍历整个worksheet中的数据

比如一个worksheet中数据,最大坐标跨度为,最大行数为999,最大列为AA,则遍历的范围将是A1:AA999

相当于在excel的worksheet中,进行ctrl+A的操作

ws['C9'] = 'hello world'
tuple(ws.rows) #获取A1到C9的所有单元格,以行为单位
'''
输出:
((<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>))
''' tuple(ws.columns) #获取A1到C9的所有单元格,以列为单位
'''
输出:
((<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>))
'''

  出于性能方面的考虑,Worksheet.columns在read-only模式下是不可用的

单元格值处理
如果只想处理单元格的值,可使用属性Worksheet.values,该属性只返回单元格的值

#该方法仅遍历单元格的值
for row in ws.values:
for value in row:
print(value) #Worksheet.iter_rows()和Worksheet.iter_cols()方法也可通过制定参数的方式只获取单元格的值
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
print(row)
'''
输出:
(None, None, None)
(None, None, None)
'''

数据存储

c = ws['A4']
c.value = 'hello, world' #给单元格A4赋值

保存文件
使用save()函数是最简单和最安全的方式

wb = Workbook()
wb.save('balances.xlsx')

注意:
  1) 该方式保存的文件会在没有警告的情况下覆盖原来的同名文件,因此要小心
  2) 文件的扩展名不一定非要xlsx,但是如果不是的话,可能会导致office打不开

保存成流

如果将文件保存成流,比如当使用Pyramid, Flask or Django等应用程序时,你可以简单提供一个NamedTemporaryFile()函数

from tempfile import NamedTemporaryFile
from openpyxl import Workbook wb = Workbook()
with NamedTemporaryFile() as tmp:
wb.save(tmp.name)
tmp.seek(0)
stream = tmp.read() #加载一个文档,通过指定属性template为True,就可将workbook保存成template
wb = load_workbook('document.xlsx')
wb.template = True
wb.save('document_template.xltx') #加载一个模板文件,通过指定属性template为False,就可将workbook保存成文档
wb = load_workbook('document_template.xltx')
wb.template = False
wb.save('document.xlsx', as_template=False)

  应该监视数据属性和文档扩展名,以便在模板中保存文档,或者在文档中保存模板,
  否则结果表引擎将无法打开文档

  以下几种情况会保存失败

wb = load_workbook('document.xlsx')
wb.save('new_document.xlsm') #需保存成扩展名为xlsx,否则excel无法打开 wb = load_workbook('document.xlsm')
wb.save('new_document.xlsm') #需指定属性keep_vba=True,否则excel无法打开 wb = load_workbook('document.xltm', keep_vba=True)
wb.save('new_document.xlsm') # 如果需要一个模板, 则需要指定扩展名为*.xltm

加载文件

同时也可以使用openpyxl.load_workbook()打开一个文件

from openpyxl import load_workbook #加载文件需要导入load_workbook类

wb2 = load_workbook('test.xlsx')
print(wb2.sheetnames) #输出:['Sheet2', 'New Title', 'Sheet1'],输出该workbook的worksheet名字

workbook数据相关操作的更多相关文章

  1. SQLserver使用映射表进行数据相关操作

    基本需求: 老数据有老数据的顺序编码规则,新数据有新数据的顺序编码规则,但是老数据的编码还是要更新相应的东西,新数据也得实时更新,在新数据中已经用新编码规则对老数据对进行编码,在上报表中既要新增新数据 ...

  2. mysql 5.7 laravel json类型数据相关操作

    2018年10月16日18:14:21 官方文档中文翻译版 原文:https://dev.mysql.com/doc/refman/5.7/en/json.html 最后有部分实例和一个小总结 11. ...

  3. 创建workbook及相关操作

    通过openpyxl模块创建workbook时,无需本地事先创建好excel,它会直接创建一个新的excel文件 创建workbook时,会至少包含一个worksheet 注意:openpyxl模块只 ...

  4. MySql学习笔记【四、数据相关操作】

    CURD--增改查删 创建数据 INSERT [INTO] tb_name [(col_name,...)] VALUES(val,..) 若列名缺省,表示插入全部列,也可指定部分列名 如: INSE ...

  5. DataTable相关操作,筛选,取前N条数据,获取指定列数据

    DataTable相关操作,筛选,取前N条数据,获取指定列数据2013-03-12 14:50 by Miracle520, 2667 阅读, 0 评论, 收藏, 编辑 1 #region DataT ...

  6. LayUI之table数据表格获取行、行高亮等相关操作

    前言 目前LayUI数据表格既美观有不乏一些实用功能.基本上表格应有的操作已经具备,LayUI作者[贤心]肯定是煞费苦心去优化,此处致敬.但是实话实话,如果单纯那数据表格功能来说,EasUI的数据表格 ...

  7. C# 对 Excel 的相关操作

    C# 对Excel的操作 学习自: 教练辅导 C# 对Excel的读取操作 我们需要额外添加引用: References 搜索Excel 这样我们的基础就添加完成了. 并且在using 中添加: us ...

  8. 从零自学Hadoop(21):HBase数据模型相关操作下

    阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...

  9. 理解CSV文件以及ABAP中的相关操作

    在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...

随机推荐

  1. 44-创建 Machine

    对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机.“创建 Machine” 指的就是在 host 上安装和部署 docker.先执行 doc ...

  2. 腾讯,华为,阿里…7家Java后端面试经验大公开!

    感觉面试还是主要围绕简历来问的,所以不熟悉的东西最好不要随便写上去.项目和基础都很重要,整体的基础知识的框架可以参考GitHub 上 CYC2018的博客,分类很全,但是深入的学习还是要自己去看书,写 ...

  3. [20191127]表 full Hash Value的计算.txt

    [20191127]表 full Hash Value的计算.txt --//曾经做过表full Hash Value的计算,当时我是通过建立简单的schema以及表名的形式,使用hashcat破解o ...

  4. android 启动流程 相关2 init进程 属性服务

    Init属性服务 系统属性服务 属性梳理 来源和读取时机 来源:内核参数 ro.kernel.*   代表有qemu内核参数才会设置(在虚拟机中) ro.boot.*     1.内核设备树相关的设备 ...

  5. Vue.js中 watch(深度监听)的最易懂的解释

    <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text& ...

  6. TYUT程序设计入门第四讲练习题题解--数论入门

    程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...

  7. Eureka工作原理及它和ZooKeeper的区别

    1.Eureka 简介: Eureka 是 Netflix 出品的用于实现服务注册和发现的工具. Spring Cloud 集成了 Eureka,并提供了开箱即用的支持.其中, Eureka 又可细分 ...

  8. 【Web开发】到底什么是短链接

    目录 什么是短链接 为什么使用短链接 节省发送的内容 提升用户体验 便于链接追踪,分析点击来源 一定程度上保护原始网站链接 短链接生成平台 短链接生成原理 参考 今天无意中看到一个名词--" ...

  9. SpringBoot整合MyBatis-Plus3.1详细教程

    作者:Sans_ juejin.im/post/5cfa6e465188254ee433bc69 一.说明 Mybatis-Plus是一个Mybatis框架的增强插件,根据官方描述,MP只做增强不做改 ...

  10. IE浏览器远程代码执行高危漏洞(CVE-2019-1367)

    IE浏览器远程代码执行高危漏洞(CVE-2019-1367)加固遇到的问题 一.背景介绍 Internet Explorer,是微软公司推出的一款网页浏览器.用户量极大.9月23日微软紧急发布安全更新 ...