生成新Excel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
wb = Workbook()
dest_filename = 'empty_book.xlsx'
ws1 = wb.active
ws1.title = "range names"
for row in range ( 1 , 40 ):
ws1.append( range ( 600 ))
ws2 = wb.create_sheet(title = "Pi" )
ws2[ 'F5' ] = 3.14
ws3 = wb.create_sheet(title = "Data" )
for row in range ( 10 , 20 ):
for col in range ( 27 , 54 ):
_ = ws3.cell(column = col, row = row, value = "{0}" . format (get_column_letter(col)))
print (ws3[ 'AA10' ].value)
wb.save(filename = dest_filename)
|
一共创建了三个Sheet
创建Sheet的三种方法
1
2
3
4
5
|
ws1 = wb.create_sheet( "Mysheet" ) # 在末尾添加
# or
ws2 = wb.create_sheet( "Mysheet" , 0 ) # 在开头添加
# or
ws3 = wb.create_sheet( "Mysheet" , - 1 ) # 在倒数第二位添加
|
给Sheet中某cell赋值
1
|
ws2[ 'F5' ] = 3.14
|
赋值cell的值
1
|
ws3.cell(column = col, row = row, value = "{0}" . format (get_column_letter(col)))
|
读取Excel
1
2
3
4
|
from openpyxl import load_workbook
wb = load_workbook(filename = 'empty_book.xlsx' )
sheet_ranges = wb[ 'range names' ]
print (sheet_ranges[ 'D18' ].value)
|
加载文件
1
|
wb = load_workbook(filename = 'empty_book.xlsx' )
|
获取sheet
1
|
sheet_ranges = wb[ 'range names' ]
|
一个例子
我们的目标是将相同考号的数据放入到一行中,并计算总成绩
首先创建一个tab页
这里需要注意直接
1
|
ws = wb[ '总成绩' ]
|
肯定不行,因为这时候没有这个tab呢 直接就会报 KeyError: 'Worksheet 总成绩 does not exist.' 所以需要先检查一下tab页是否存在
1
2
3
|
if not '总成绩' in wb.sheetnames:
wb.create_sheet( '总成绩' )
ws = wb[ '总成绩' ]
|
需要注意的是最后一定要进行保存操作,否则无用 wb.save('first.xlsx')
收集数据
1
2
3
4
5
6
7
8
9
10
|
# 对每个tab中的分数数据进行收集,放入对应的数据行中
for pos, tabName in enumerate (wb.sheetnames):
if tabName ! = '总成绩' :
wstt = wb[tabName]
for row in wstt.iter_rows(min_row = 2 , values_only = True ):
for ind, code in enumerate (ws[ 'A' ]):
if code.value = = row[ 0 ]:
ws.cell(ind + 1 , 4 + pos, row[ 2 ])
break
|
保存总成绩
一开始直接用多字段相加
1
2
|
for po, row in enumerate (ws.iter_rows(min_row = 2 , values_only = True )):
ws.cell(po + 1 , 3 , 0 + row[ 3 ] + row[ 4 ] + row[ 5 ] + row[ 6 ] + row[ 7 ] + row[ 8 ] + row[ 9 ])
|
报错如下
1
2
|
ws.cell(po + 1 , 3 , 0 + row[ 3 ] + row[ 4 ] + row[ 5 ] + row[ 6 ] + row[ 7 ] + row[ 8 ] + row[ 9 ])
TypeError: unsupported operand type (s) for + : 'int' and 'NoneType'
|
原因是其中存在NoneType,int和NoneType不能相加。 可以用int(value or 0)来将对应的None, 0, [], ""这些Python认为是False的转换为1。
总结
人生苦短,我用 Python,在强大的Python帮助下,我们只需几行代码就可以生成我们想要的Excel。
以上就是python openpyxl的使用方法的详细内容,更多关于python openpyxl的使用的资料请关注服务器之家其它相关文章!
原文链接:https://juejin.cn/post/6976175535852371975