openpyxl教程
第一章 基础教程
1.在内存中熟练操作工作簿
创建一个工作表
这里不需要在文件夹中新建一 个openpyxl文件,只需要导入Workbook类就行了。
from openpyxl import Workbook
wb = Workbook()
一个工作簿通常都会包涵一个工作表,你可以通过使用openpyxl.workbook.Workbook.active()属性来得到它。
ws = wb.active
注意:这个函数使用了_active_sheet_index属性,默认的值为0。除非你更改了它的值,否则你将会一直使用这个方法去创建新的工作表
你也可以使用openpyxl.workbook.Workbook.create_sheet()方法来创建新的工作表。
ws1 = wb.creat_sheet() # 默认是在结尾插入
或者
ws2 = wb.creat_sheet(0) # 在第一个位置插入
表格在被创建的时候会自动的有一个名字。它们被命名在一个队列中(表格1 、表格2、表格3...),你可以使用title属性在任何时候来改变它们的名字。
ws.title = "New Title"
表格名字的背景颜色默认是白色,你可以使用sheet_properties.tabColor属性来更改这个设定(使用RRGGBB颜色)
ws.sheet_properties.taabColor = "1072BA"
一但你给了一个工作表名字,你就得到了这个工作簿和方法openpyxl.workbook.Workbook.get_sheet_by_name()的键
ws3 = wb["New Title"]
ws4 = wb.get_sheet_by_name("New Title")
ws is ws3 is ws4
#True
你可以通过openpyxl.workbook.Workbook.get_sheet_names()方法来检查工作簿中所有工作表的名字。
print(wb.get_sheet_names())
#['Sheet2','New title','Sheet1']
你可以循环这些表格
for sheet in wb:
print(sheet.title)
使用数据,访问一个表格
我们已经知道如何去访问一个工作表,可以开始修饰表格内容了
表格可以很直观的通过工作表的键来进行访问
c = ws['A4']
这个会返回一个在A4位置的表格,如果没有这个表格就会创建一个。数据会被直接分配。
ws['A4'] = 4
同样这也有一个方法openpyxl.worksheet.Worksheet.cell()
c = ws.cell('A4')
你也可以使用行和列标记来访问表格
d = ws.cell(row = 4, clumn = 2)
注意:当一个工作表在内存中被创建时,它里面是没有表格的。它们在第一次被访问的时候才会被创建。我们没有通过这种方法创建一个永远不会被访问的对象,从而来减少内存占用。
警告:因为这个特性,我们要循环表格而不是直接访问它们,这样会将所有的表格在内存中创建,就算你没有访问它们中的任何一个值。示例:
for i in range(1,101):
for j in range(1,101):
ws.cell(row = i, column = j)
这样会在内存中创建一个100 X 100的表格而不会有热河影响
当然这也是一个清除所有我们不想要的表格的方法,这在以后我们会介绍。
访问更多的表格
表格的范围也可以使用一些条件来访问
cell_range = ws['A1':'C2']
你也可以使用这个方法openpyxl.worksheet.Worksheet.iter_rows()
tuple(ws.iter_rows('A1':'C2'))
((<Cell Sheet1.A1>,<Cell Sheet1.B1>,<Cell Sheet1.C1>),(<Cell Sheet.A2>,<Cell Sheet.B2>,<Cell Sheet.C2>))
for row in ws.iter_rows('A1:C2'):
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.rows()这个方法
ws = wb.active
ws['C9'] = 'hello world'
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()这个方法
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.value)
#datetime.datetime(2010, 9, 10,22, 25, 18)
c.value = '31.50'
print(c.value)
#31.5
2.保存至文件
保存一个工作簿最常见和最安全的方法是使用openpyxl.workbook.Workbook.save(),这是openpyxl.workbook.Workbook对象的方法
wb = Workbook()
Wb.save('balances.xlsx')
警告:这个操作会在没有提示的情况下复写现有的文件。
注意:文件扩展名不会强制写成xlsx或xlsm,如果你没有使用一个合法的扩展名的话,在你使用其他软件直接打开这个文件的时候会出一些错误。
像基础压缩文件OOXML之类的,你也可以使用.zip来作为文件名的结尾,并使用你最常用的ZIP文件编辑工具来打开它。
你可以指定属性as_template = True来将文档保存为模板
wb = load_workbook('document_template.xltx')
wb.save('document.xlsx',as_template = False)
wb = load_workbook('document.xlsx')
wb.save('new_document.xlsx',as_template = False)
警告:在保存文档至文档模板中时,你应该注意数据类型和文件扩展名,反之亦然,另外结果表引擎不会打开文档。
注意:下面这几个例子会出错。
wb = load_workbook('document.xlsx')
#Need to save with the extension *.xlsx
wb.save('new_document.xlsm')
# MS Excel can't open the document
# or
# Need specify attribute keep_vba=True
wb = load_workbook('document.xlsm')
wb.save('new_document.xlsm')
# MS Excel can't open the document
# or
wb = load_workbook('document.xltm', keep_vba=True)
#If us need template document, then we need specify extension as *.xltm.
# If us need document, then we need specify attribute as_template=False.
wb.save('new_document.xlsm', as_template=True)
# MS Excel can't open the document
3.从文件加载
和写的方法一样,你可以导入方法
openpyxl.load_workbook()
来打开一个活跃的工作簿:
from openpyxl import load_workbook
wb2 = load_workbook('test.xlsx')
peint wb2.get_sheet_name()
['Sheet2','New Title','Sheet1']
现在基础教程到此就结束了,你可以开始简单的用法教程。
网友评论