由于本人早期的参考书版本太低,很多用法都不一样了,决定到官网整理一下。
文件处理
创建文件
建立新的工作表
from openpyxl import Workbook
wb = Workbook()
载入sheet
ws = wb.active #默认只访问第一个sheet
建立更多sheet
ws1 = wb.create_sheet('Sheet1') #默认在尾部增加
ws2 = wb.create_sheet('Sheet2',num) #在num位置增加
sheet命名
ws.title = "New title"
更改背景颜色
使用RRGGBB的代码形式
ws.sheet_properties.tabColor = '1072BA'
使用sheet名称选择表格
ws3 = wb['New Title']
检索所有sheet名称
>>> print(wb.sheetnames)
['Sheet2','New TItle','Sheet1']
复制一个活页
source = wb.active
target = wb.copy_worksheet(source)
读取文件
与创建文件类似
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.sheetnames
['Sheet2', 'New Title', 'Sheet1']
存储文件
最简单和靠谱的方法就是Workbook.save()
但具体有什么不靠谱的方法,官方也没说
咱也不知道,咱也不敢问
wb = Workbook()
wb.save('balances.xlsx')
数据读写
处理一个单元格
利用行列关系读写
c = ws['A4']
ws['A4'] = 4
也可以使用cell(‘行’,‘列’,‘赋值’)
此类方法遍历范围较大时候,会增加内存负担,即在当前的内存中创建所有的区域
d = ws.cell(row=4, column=2, value=10)
处理多个单元格
根据范围召唤单元格
celll_range = ws['A1':'C2']
行和列的召唤
colC = ws['C']
col_range = ws['C:D']
row10 = ws[10]
row_range = ws[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()同理
注:当表格以只读模式打开时该方法不适用
如果想要遍历所有的行和列,使用Worksheets.rows(or columns)(比较实用)
>>> ws = wb.active
>>> ws['C9'] = 'hello world'
>>> tuple(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>))
Worksheet.columns 同理
读取单元格内容
如果只想调用一个表格的内容,可以使用Worksheet.values,这将遍历整个工作页然后返回每个单元格的内容
for row in ws.values:
for value in row:
print(value)
同时,*Worksheet.iter_rows()和Worksheet.iter_cols()*都可以只读取数据,需要加入values_only的参数
>>> 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.value = 'hello, world'
>>> print(c.value)
'hello, world'
>>> d.value = 3.14
>>> print(d.value)
3.14
作为流(stream)储存
这部分内容没用过,不清楚,需要的兄弟可以到官网查找介绍。
所有示例均转自官网
参考网站:openpyxl官网教程
此外还有一个简单使用的教程示例,这个整理必要俺觉得不大,就看看时间了
参考网站:Simple usage