openpyxl

作者: f550c7326662 | 来源:发表于2020-02-29 14:21 被阅读0次

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']

现在基础教程到此就结束了,你可以开始简单的用法教程。

相关文章

网友评论

      本文标题:openpyxl

      本文链接:https://www.haomeiwen.com/subject/ameifxtx.html