The most complete actual combat and explanation summary of openpyxl in python

There are three types of openpyxl modules (first letter capitalized):

Workbook 		是对工作簿的抽象
Worksheet 		是对表格的抽象
Cell 			是对单元格的抽象

1. Installation: pip install openpyxl

2. Create a new workbook

from openpyxl import Workbook 	#导入模块
wb = Workbook('abc.xlsx') 		#新建名为abc的工作簿
wb.save('abc.xlsx')				
#保存工作簿,完成新工作簿的建立(将覆盖同名文件且无警告)

3. Open an existing workbook:

from openpyxl import load_workbook		#导入模块
wb = load_workbook('abc.xlsx')	#打开名为abc的工作簿
wb = load_workbook('abc.xlsx',date_only=True)	
#设置单元格显示为值显示(默认为显示公式)

4. Create and delete worksheets

ws1 = wb.create_sheet('Mysheet') 	#插入到最后(默认)
ws2 = wb.create_sheet('Mysheet',0)	#插入到最前
ws3 = wb.create_sheet('Mysheet',-1)	#插入到倒数第二
wb.remove('Mysheet')				#删除工作表(方法一)
del wb('Mysheet')					#删除工作表(方法二)

5. Modify the name of the worksheet

ws.title = "New Title"

6. Modify the label background color of the worksheet

ws.sheet_properties.tabColor = '1072BA'	#默认为白色

7, view the worksheet name

print(wb.sheetnames)	#打印输出所有工作表
for sheet in wb:		#遍历并打印输出所有工作表
print(sheet.title)

wb.get_sheet_names()	#获取文档所有工作表名称(旧版,不建议使用)
wb.get_sheet_by_name()	#获取单个工作表名称(旧版,不建议使用,新版会警告)
wb.get_active_sheet()	#获取当前活跃的工作表(旧版,不建议使用)

wb.sheetnames 			#获取文档所有工作表名称(新版)
wb['Sheet1'] 			#获取指定的工作表(新版)
wb.active 				#获取当前活跃的工作表(新版)

wb.worksheets 			#以列表形式返回所有工作表
wb.read_only 			#判断是否以只读方式打开

8, copy

source = wb.active 				   #获取当前活跃的工作表
target = wb.copy_worksheet(source) #复制工作表

说明:只有单元格(包括值、样式、超链接、备注)和一些工作表对象
(包括尺寸、格式和参数)会被复制。其他属性不会被复制,如图片、图表;
无法在两个文档中复制工作表。当文档处于只读或只写状态时也无法复制工作表。

9, attribute operation

wb.encoding		#获取文档的字符集编码
wb.properties 	#获取文档的元数据如标题,创建者,创建日期等

10. Data manipulation

①Cell operation

c = ws['A6']	#c值为A6处单元格对象
print("A列单元格内容",sheet["A"])		#打印A列内容
d = ws.cell(row=4,column=2,value=10)	#通过行列号访问单元格
for i in range(1,101):					#只要访问就创建
	for j in range(1,101):
		ws.cell(row=i,column=j)


print(sheet.max_row)					#获取最大行
print(sheet.max_column)					#获取最大列
cell_range = ws['A1':'C2']				#通过切片访问多个单元格
colC=ws['C']							#获取范围行或列(下同)
col_range = ws['C:D']
row10 = ws[10]
row_range = ws[5:10]
rows 									#按行获取单元格-生成器
columns 								#按列获取单元格-生成器
freeze_panes 							#冻结窗口,格式为sheet.freeze_panes='C3'
values 									#按行获取表格内容(数据)-生成器
append 									#在表格末尾添加数据


#合并和拆分单元格
sheet.merge_cells('A1:C1')	#合并A1,B1,C1为A1
sheet.unmerge_cells('A2:D2')	#拆分A2为A2,B2,C2,D2

wb['Sheet1']['C3']					#通过坐标获取工作表对象
wb['Sheet1'].cell(row=3,column=3)	#通过行列号获取工作表对象
sheet['C10'] = '=sum(C1:C9)'		#单元格计算(需保存文件后才能显示)


#单元格属性
row:所在行
column:所在列
value:值
coordinate:坐标
wb['Sheet1'].cell(row=1,column=2).value 	#获取单元格的值



#行列置换
form openpyxl.utils import get_column_letter,column_index_from_string	#导入模块
print(get_column_letter(2))					#根据列的数字返回字母
print(column_index_from_string('D'))		#根据字母返回列的数字

#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()方法返回列
#出于性能考虑,列方法不支持只读模式
>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):	#列方法
...     for cell in col:										#遍历列
...         print(cell)											#打印列
输出结果:
<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2>

#遍历文件内的所有行和列(单元格属性有提及)
Worksheet.rows
Worksheet.columns				#出于性能考虑,Worksheet.columns属性不支持只读模式
ws = wb.active					#获取文档工作表
ws['C9'] = 'hello world'		#赋值
tuple(ws.rows)					#按行输出单元格
tuple(ws.columns)				#按列输出单元格

#工作表中获取值:Worksheet.values
#将遍历工作表中所有行,只返回单元格值
for row in ws.values:
	for value in row:
		print(value)

②Stream file storage: NamedTemporaryFile() method

#方法一
>>> wb = load_workbook('document.xlsx')
>>> wb.template = True
>>> wb.save('document_template.xltx')
#方法二
>>> wb = load_workbook('document_template.xltx')
>>> wb.template = False
>>> wb.save('document.xlsx', as_template=False)

③Set cell format

from openpyxl.styles import Font,colirs,Alignment	#导入模块
#格式设置:加粗斜体绿色等线24号字,cell的font属性
style1 = Font(name='等线', size=24, italic=True, color=colors.GREEN, bold=True)	
sheet['A1'].font = style1		#格式赋予A1单元格
#格式设置:垂直和水平居中,cell的aligment属性
sheet['A2'].alignment = Alignment(horizontal-'center',vertical='center')	#格式赋予A2单元格
sheet.row_dimensions[6].height = 6		#设置6行的行高为6
sheet.column_dimensions['C'].width = 6	#设置C列的宽度为6




#创建abc的excel文件
from openpyxl import Workbook
wb = Workbook('abc.xlsx') 	 #创建文件
ws1 = wb.active		      	 #获取文档第一个工作表(默认)
ws1.title = '1'			  	 #修改表的名称
ws2 = wb.create_sheet('2',0) #新建2的工作表到最前
ws2['A1'] = '1'				 #为2的工作表添加数据(下同)
ws2['A2'] = '2'
ws2['A3'] = '3'
ws2['B1'] = 'A'
ws2['B2'] = 'B'
ws2['B3'] = 'C'
ws2['B4'] = datetime.datetime.now().strftime('%Y=%m-%d')	#添加日期和时间
sheet = wb['Sheet2']		 #获取工作表
sheet = wb.active 			 #变更工作表
sheet.freeze_panes = 'C3'	 #C3单元格左列和上行冻结
wb1 = wb.copy_worksheet('abc.xlsx')							#复制文档
wb.save('abc.xlsx')			 #保存文档,完成新文档的建立		
wb1.save('abc1.xlsx')		 #保存复制的文档

Guess you like

Origin blog.csdn.net/qq_41952762/article/details/107725674