文档章节

workbook数据相关操作

o
 osc_isezqdgg
发布于 2019/09/18 12:57
字数 1199
阅读 21
收藏 0

精选30+云产品,助力企业轻松上云!>>>

访问单个单元格

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名字

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
ExcelPOJO映射库--spreadsheet-mapper

项目简介 用excel导入、导出数据是企业软件里很常见的需求,但是要实现好导入、导出并非易事,主要原因在于excel导入或导出并非简单的对数据库表的操作,往往牵涉到校验、转换等工作。 本项目...

jarchan
2017/03/20
1.5K
0
Python实现数据库一键导出为Excel表格-----转载

依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为excel表格,也可以说是一个很常用的功能...

osc_6pcuizwz
2018/07/14
2
0
Python实现数据库一键导出为Excel表格

依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为excel表格,也可以说是一个很常用的功能...

osc_hsi1evvg
2018/06/23
1
0
基于Python实现excel表格读写

首先安装对应的xlrd和xlwt 打开cmd命令窗口输入pip install xlrd和pip install xlwt就可以安装。之后输入pip list检查是否成功配置: xlrd操作# 接下来就是常用的语法操作: exceldata = xl...

御前带刀红衬衫
2016/05/28
5.8K
31
spreadsheet-mapper 1.0.6 发布

项目简介 用excel导入、导出数据是企业软件里很常见的需求,但是要实现好导入、导出并非易事,主要原因在于excel导入或导出并非简单的对数据库表的操作,往往牵涉到校验、转换等工作。 本项目...

jarchan
2017/04/08
1.2K
10

没有更多内容

加载失败,请刷新页面

加载更多

使用命名管道承载gRPC

最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解...

osc_nq69o22c
28分钟前
16
0
06-敏捷开发框架-apis 脚本库 引用位置无关性设计

动态引入技术的设计,对我们来说非常重要。 同时也说明动态语言的使用对我们来说也是非常重要。 没有动态语言的支撑,有些想法可能不容易实现,或者有替代方案,可能会花更大的代价。 前端开...

osc_5zg9z6t1
30分钟前
21
0
(三)学习了解OrchardCore笔记——灵魂中间件ModularTenantContainerMiddleware的第一行①的模块部分

  了解到了OrchardCore主要由两个中间件(ModularTenantContainerMiddleware和ModularTenantRouterMiddleware)构成,下面开始了解ModularTenantContainerMiddleware中间件第一行代码。   ...

osc_kdarxvx0
31分钟前
15
0
50Mn18Cr4V锻锻环件

电机无磁护环怎么锻性能才能《高高》?50Mn18Cr4V高锰无磁钢在变形温度为900~1 100℃、应变速率为0.1 ~10s-1条件下的热变形行为. 结果,VC第二相的应变诱导析出对50Mn18Cr4V的热变形行为产生...

无磁钢
32分钟前
16
0
【遇见offer】一汽-大众实习生专场来啦!成长+学习+福利,一个也不能少~

在上次一汽-大众的社招直播之后,实习生的专场招聘也终于来啦! 针对2020年暑期,我们提供了非常多的实习岗位给大家选择。 如果你想得到大厂实习的宝贵经验,如果你想得到更快速的成长,如果...

osc_b88oux8w
33分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部