您的位置:首页 > 编程语言 > Python开发

python 操作Excel openpyxl的使用

2017-09-21 16:48 381 查看

之前在处理一些文件时,因为数据过大,常出现一个问题

ValueError: row index was 65536, not allowed by .xls format

之前解决方案都是在同一个文件中add多个sheet来解决,总算是觉得麻烦了,抽出时间来查找另一个安装包,寻求解决之道——Openpyxl,网上的资料也不是很多,所以直接看它家的文档好了。

Openpyxl is a Python library for reading and writing Excel 2010 xlsx/xlsm/xltx/xltm files.

这是官网的简介,总的来说算是一个比较全能的库了,在使用上,也和xlrd或者是xlwt有些许的不同。
最主要的一点,还是解决了03版本的单页index上限问题。

Create a workbook

from openpyxl import Workbook
wb = Workbook()

一个book的创建至少伴随着一个sheet,通过使用openpyxl.workbook.Workbook.active()方法可以获取到当前book的sheet页

ws = wb.active()
'''or'''
ws = wb.get_active_sheet()#同active是同样的结果

但是,在使用这个方法时,active_sheet_index属性中default = 0,在没有特别定义值的情况下,你使用这个方法时,总是获得这个book的第一个sheet。
需要获得特定的sheet,需要使用的方法是

wb.get_sheet_by_name(title:str)#title为想要获取的sheet_name
'''or'''
ws = wb['Sheet2']#通过list传入名字的方式

在获取工作表的方法中,比起xlrd,少掉了sheet_by_index这样的方式。
同样的,也可以使用create_shee()方法创建新的表格。

ws1 = wb.create_sheet('Sheet1', index=0)#确认了在book中的顺序位置
ws2 = wb.create_sheet('Sheet2',)#默认安插在最后的位置

在自动创建一个Sheet时,名字是按照(Sheet, Sheet1, Sheet2, …)这样的sequence递增的,可以通过title属性更改

ws = wb.active
ws.title = 'TX'

获取工作薄的表名

wb.sheetnames
wb.get_sheet_names()
'''返回都是同样的list'''
For sheet in wb:
Print(sheet.title) #也可以loop所有worksheets

创建一个copies worksheet 通过一个简单的openpyxl.workbook.Workbook.copy_worksheet() 方法

source = wb.active
target = wb.copy_worksheet(source)

Data

访问单元格
访问工作表之后,我们也能对单元格内容进行定义了。

'''单元格可以通过一个确定的进行访问'''
A4 = ws['A4']
'''这样的话,将会返回A4单元格,或者是创建一个原本不存在的单元格,数值可以被改变'''
>>> A4 = 4

此外,也可以通过openpyxl.worksheet.Worksheet.cell()方法
它提供了通过行列号来进行访问的方式

d = ws.cell(row=4, column=2, value=10)

Note
当一个工作表在内存中被创建的时候,是不存在单元格的,只有在第一次访问时,单元格才会被创建。
正式因为这一特性,使用滚动浏览单元格替代确切的访问某一单元格将会吧他们全都在内存中穿件,即使是不对它们进行赋值

for i in range(1,101):
for j in range(1,101):
ws.cell(row=i, column=j)

访问多个单元格

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: