Python openpyxl模块常用方法与属性【一篇就够了】

1. load_workbook()

load_workbook()函数接受文件名,返回一个 workbook 数据类型的值。这个 workbook 对象代表这个 Excel 文件,有点类似 File 对象代表一个打开的文本文件。

>>> import openpyxl 
>>> wb = openpyxl.load_workbook('example.xlsx') 
>>> type(wb) 
<class 'openpyxl.workbook.workbook.Workbook'>
2. get_sheet_names()

可以取得工作簿中所有表名的列表

>>> import openpyxl
>>> wb = openpyxl.load_workbook('example.xlsx') 
>>> wb.get_sheet_names() 
['Sheet1', 'Sheet2', 'Sheet3']
3. get_sheet_by_name()

每个表由一个 Worksheet 对象表示,可以通过向工作簿方法 get_sheet_by_name()传递表名字符串获得。

>>> sheet = wb.get_sheet_by_name('Sheet3')
>>> sheet
<Worksheet "Sheet3">
4. 属性:active

取得工作簿的活动表。活动表是工作簿在 Excel 中打开时出现的工作表。在取得 Worksheet对象后,可以通过 title 属性取得它的名称。

>>> anotherSheet = wb.active
>>> anotherSheet.title
'城市交通连通性'
5. 对象:cell
>>> import openpyxl 
>>> wb = openpyxl.load_workbook('example.xlsx')
>>> sheet = wb.get_sheet_by_name('Sheet1') 
>>> sheet['A1'] <Cell Sheet1.A1> 
>>> sheet['A1'].value datetime.datetime(2015, 4, 5, 13, 34, 2) 
>>> print(sheet['A1'].value) 2015-04-05 13:34:02 
>>> c = sheet['B1'] 
>>> c.value 'Apples'  
>>> 'Row ' + str(c.row) + ', Column ' + str(c.column) + ' is ' + c.value 
'Row 1, Column 2 is Apples' 
>>> 'Cell ' + c.coordinate + ' is ' + c.value 
'Cell B1 is Apples' 
>>> sheet['C1'].value 
73
  • rowcell对象的行
  • columncell对象的列
  • coordinatecell对象的位置信息
6. cell()

调用表的cell方法时,可以传入整数作为 rowcolumn 关键字参数,也可以得到一个单元格。第一行或第一列的整数是 1,不是 0。

>>> sheet.cell(row=1, column=2) 
<Cell Sheet1.B1> 
>>> sheet.cell(row=1, column=2).value 
'Apples' 
>>> for i in range(1, 8, 2): 
	print(i, sheet.cell(row=i, column=2).value) 
1 Apples 
3 Pears 
5 Apples 
7 Strawberries
7. 属性:max_row和max_column
>>> sheet.max_row
7
>>> sheet.max_column
3
8. column_index_from_string()
>>> from openpyxl.utils import get_column_letter, column_index_from_string
>>> column_index_from_string('AA')
27
9. get_column_letter()
>>> get_column_letter(1) 
'A' 
>>> get_column_letter(900) 
'AHP' 
>>> wb = openpyxl.load_workbook('example.xlsx') 
>>> sheet = wb.get_sheet_by_name('Sheet1') 
>>> get_column_letter(sheet.max_column) 
'C'
10. Worksheet 对象切片操作

取得电子表格中一行、一列或一个矩形区域中的所有Cell 对象。然后可以循环遍历这个切片中的所有单元格。

>>> import openpyxl 
>>> wb = openpyxl.load_workbook('example.xlsx') 
>>> sheet = wb.get_sheet_by_name('Sheet1') 
>>> tuple(sheet['A1':'C3'])
((<Cell Sheet1.A1>, <Cell Sheet1.B1>, <Cell Sheet1.C1>), (<Cell Sheet1.A2>, <Cell Sheet1.B2>, <Cell Sheet1.C2>), (<Cell Sheet1.A3>, <Cell Sheet1.B3>, <Cell Sheet1.C3>)) 
>>> sheet['A1':'C3'] 
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>)) 
>>> for rowOfCellObjects in sheet['A1':'C3']: 
		for cellObj in rowOfCellObjects: 		
			print(cellObj.coordinate, cellObj.value) 	
		print('--- END OF ROW ---') 
A1 2015-04-05 13:34:02 
B1 Apples 
C1 73 
--- END OF ROW --- 
A2 2015-04-05 03:41:23 
B2 Cherries 
C2 85 
--- END OF ROW --- 
A3 2015-04-06 12:46:51 
B3 Pears 
C3 14 
--- END OF ROW ---

这个元组包含 3 个元组:每个元组代表 1 行,从指定区域的顶部到底部。这 3个内部元组中的每一个包含指定区域中一行的 Cell 对象,从最左边的单元格到最右边。所以总的来说,工作表的这个切片包含了从 A1 到 C3 区域的所有 Cell 对象,从左上角的单元格开始,到右下角的单元格结束。

11. 属性:columns 和 rows

sheet.columnssheet.rowsgenerator

for cellObj in list(sheet.columns)[1]: 
	print(cellObj.value)
Apples 
Cherries 
Pears 
Oranges 
Apples 
Bananas 
Strawberries
12. Workbook()
>>> import openpyxl 
>>> wb = openpyxl.Workbook() 
>>> wb.get_sheet_names() 
['Sheet'] 
13. 保存:save()

当修改Workbook 对象或它的工作表和单元格时,电子表格文件不会保存,除非你调用 save()工作簿方法。

>>> import openpyxl 
>>> wb = openpyxl.load_workbook('example.xlsx') 
>>> sheet = wb.get_active_sheet()
>>> sheet.title = 'Spam Spam Spam' 
>>> wb.save('example_copy.xlsx')

这里,我们改变了工作表的名称。为了保存变更,我们将文件名作为字符串传递给save()方法。传入的文件名与最初的文件名不同,例如’example_copy.xlsx’,这将变更保存到电子表格的一份拷贝中。 当你编辑从文件中加载的一个电子表格时,总是应该将新的、编辑过的电子表格保存到不同的文件名中。这样,如果代码中有缺陷,导致新的保存到文件中数据不对或讹误,还有最初的电子表格文件可以处理。 补充: 有时候调用 save函数时报错如下:

>>> wb.save('styled.xlsx') 
Traceback (most recent call last): 
	File "<input>", line 1, in <module> 
	File "G:python36libsite-packagesopenpyxlworkbookworkbook.py", line 396, in save 
		save_workbook(self, filename) 
	File "G:python36libsite-packagesopenpyxlwriterexcel.py", line 292, in save_workbook 
		archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True) 
	File "G:python36libzipfile.py", line 1090, in __init__ 
		self.fp = io.open(file, filemode) 
PermissionError: [Errno 13] Permission denied: 'styled.xlsx'

解决:关闭打开的 excel 文档

14. 创建表格:create_sheet()
>>> import openpyxl 
>>> wb = openpyxl.Workbook() 
>>> wb.get_sheet_names() ['Sheet'] 
>>> wb.create_sheet() 
<Worksheet "Sheet1"> 
>>> wb.get_sheet_names() 
['Sheet', 'Sheet1']
>>> wb.create_sheet(index=0, title='First Sheet') <Worksheet "First Sheet"> 
>>> wb.get_sheet_names() 
['First Sheet', 'Sheet', 'Sheet1'] 
>>> wb.create_sheet(index=2, title='Middle Sheet') 
<Worksheet "Middle Sheet"> 
>>> wb.get_sheet_names() 
['First Sheet', 'Sheet', 'Middle Sheet', 'Sheet1']

create_sheet()方法返回一个新的 Worksheet 对象,名为 SheetX,它默认是工作簿的最后一个工作表。或者,可以利用 index 和 title 关键字参数,指定新工作表的索引或名称。

>>> wb.create_sheet(index=0, title='First Sheet') 
<Worksheet "First Sheet"> 
>>> wb.get_sheet_names() 
['First Sheet', 'Sheet', 'Sheet1'] 
>>> wb.get_active_sheet() 
<Worksheet "First Sheet"> 
>>> wb.create_sheet(index=0, title='new First Sheet') 
<Worksheet "new First Sheet"> 
>>> wb.get_sheet_names() 
['new First Sheet', 'First Sheet', 'Sheet', 'Sheet1'] 
>>> wb.get_active_sheet() 
<Worksheet "new First Sheet">
15. 删除表格:remove_sheet()
>>> wb.get_sheet_names() 
['new First Sheet', 'First Sheet', 'Sheet', 'Sheet1'] 
>>> wb.remove(wb.get_sheet_by_name('new First Sheet')) 
>>> wb.remove(wb.get_sheet_by_name('Sheet1')) 
>>> wb.get_sheet_names() 
['First Sheet', 'Sheet']

remove_sheet()方法接受一个 Worksheet 对象作为其参数,而不是工作表名称的字符串。如果你只知道要删除的工作表的名称,就调用get_sheet_by_name(),将它的返回值传入 remove_sheet()。 在工作簿中添加或删除工作表之后,记得调用save()方法来保存变更。

16. 将值写入单元格
>>> import openpyxl 
>>> wb = openpyxl.Workbook() 
>>> sheet = wb.get_sheet_by_name('Sheet') 
>>> sheet['A1'] = 'Hello world!' 
>>> sheet['A1'].value 
'Hello world!'
17. add_image()

单元格中插入图片

from openpyxl.drawing.image import Image
img_file = ".//images//1.jpg"
img = Image(img_file)
sheet.column_dimensions['B'].width = 15.0
sheet.row_dimensions[row].height = 80
img.width = 100.0
img.height = 100.0
sheet.add_image(img, 'B{}'.format(row))

注意:这里的Image是从openpyxl.drawing.image导入的,不是PIL

  • 38
    点赞
  • 323
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值