当前位置: 首页 > 后端技术 > Python

openpyxl3.0.3中文手册--教程

时间:2023-03-26 18:27:51 Python

教程创建工作簿不需要事先在文件系统中创建.xlsx文件,只需导入Workbook类即可开始工作:fromopenpyxlimportWorkbookwb=Workbook()创建时aworkbook默认会创建一个工作表,可以使用Workbook.active属性获取:ws=wb.active注意:该方法默认获取工作簿中索引为0的工作表(工作簿中的第一个工作表),除非手动更改为另一个值。使用Workbook.create_sheet()方法创建一个新的工作表:#创建在最后,工作表名称自动按照(Sheet,Sheet1,Sheet2,...)的顺序命名ws0=wb.create_sheet()#Insert在末尾(默认)WorksheetnamedMysheetws1=wb.create_sheet("Mysheet")#在前端插入(即插入的表索引号为0)worksheetnamedMysheetws2=wb.create_sheet("Mysheet",0)#在倒数第二个位置插入名为Mysheet的工作表ws3=wb.create_sheet("Mysheet",-1)创建工作表时,如果不指定创建的工作表名称,会自动安装(Sheet,Sheet1,Sheet2,...)来命名工作表。之后,您可以使用Worksheet.title属性重命名工作表:ws.title="NewTitle"工作表标题选项卡的背景颜色默认为白色,您可以通过Worksheet.sheet_properties更改其背景颜色。tabColor属性,并将值赋给RRGGBB颜色代码:ws.sheet_properties.tabColor="1072BA??"命名工作表后,可以通过工作表名称获取工作表:ws3=wb["NewTitle"]使用Workbook.sheetname查看工作簿中所有工作表名称的属性:print(wb.sheetnames)使用Workbook.copy_worksheet()方法在单个工作簿中创建工作表的副本:source=wb.activetarget=wb.copy_worksheet(source)注意:该方法只复制单元格(包括值、样式、超链接和注释)以及工作表的一些特征(包括维度、格式和属性),不复制工作簿或工作表的其他属性,例如图像、图表。该方法只能在工作簿内复制工作表,不能在工作簿之间复制工作表,如果工作簿以只读或只写模式打开,则不能复制工作表。操作数据以访问单元格现在我们知道如何获取工作表,我们可以开始修改单元格内容了。通过单元格坐标('A4')直接访问单元格:c=ws['A4']其中c的值是A4处的单元格对象,而不是单元格中的值。如果单元格不存在,则会自动创建(创建Access)。可以直接给单元格赋值:ws['A4']=4使用Worksheet.cell()方法按行号和列号访问单元格:d=ws.cell(row=4,column=2,value=10)注意:在内存中创建工作表时,表格中不包含任何单元格,单元格是在第一次访问时创建的。由于这个特性,即使不直接访问单元格或给它们赋值,也可以通过滚动单元格来创建它们。例如:forxinrange(1,101):foryinrange(1,101):ws.cell(row=x,column=y)将在内存中创建100x100个空单元格。访问多个单元格使用切片访问一系列单元格:cell_range=ws['A1':'C2']获取范围行或列:colC=ws['C']col_range=ws['C:D']row10=ws[10]row_range=ws[5:10]使用Worksheet.iter_rows()方法返回指定范围的行:forrowinws.iter_rows(min_row=1,max_col=3,max_row=2):forcell在行中:打印(单元格)输出:Worksheet.iter_cols()方法将返回指定范围的列:forcolinws.iter_cols(min_row=1,max_col=3,max_row=2):forcellincol:print(cell)输出结果:注意:出于性能原因,Worksheet.iter_cols()方法在只读模式下不可用。若要遍历所有行,可以使用Worksheet.rows属性:ws=wb.activews['C9']='helloworld'tuple(ws.rows)输出结果:(,,),(,,),(,,),(,,),(,,),(,,),(,,),(,,),(,,))遍历所有列表,使用Worksheet.columns属性:tuple(ws.columns)输出结果:((,,,,,<细胞表.A6>,...<细胞表.B7>,<细胞表.B8>,<细胞表Sheet.B9>),(,,,,,,,,))注意:出于性能原因,Worksheet.columns属性在只读模式下不可用Onlygetthecellvalueifonlyrequiredinthe工作表值,可以使用Worksheet.values属性。这将以行优先的方式遍历工作表,仅返回单元格值:forrowinws.values:forvalueinrow:print(value)Worksheet.iter_rows()和Worksheet.iter_cols()都可以设置为设置values_only参数让它只返回单元格的值:forrowinws.iter_rows(min_row=1,max_col=3,max_row=2,values_only=True):print(row)outputresult:(None,None,None)(None,None,None)数据存储获取一个cell后,可以为其赋值:c.value='hello,world'print(c.value)输出结果:'hello,world'd.value=3.14print(d.value)输出:3.14另存为文件保存工作簿最简单和最安全的方法是使用Workbook对象的Workbook.save()方法:wb=Workbook()wb.save('balances.xlsx')警告:此操作将覆盖现有文件,恕不另行通知。注意:文件扩展名不是强制指定为xlsx或xlsm,如果没有使用指定的扩展名,应用程序在打开生成的文件时会报错。OOXML文件也属于ZIP文件的范畴,你也可以用自己喜欢的ZIP软件打开。保存为流如果你想将文件保存为流,例如当使用像Pyramid、Flask或Django这样的Web应用程序时,你可以使用NamedTemporaryFile()方法:fromtempfileimportNamedTemporaryFilefromopenpyxlimportWorkbookwb=Workbook()withNamedTemporaryFile()astmp:wb.save(tmp.name)tmp.seek(0)stream=tmp.read()通过指定属性template=True将工作簿保存为模板文件:wb=load_workbook('document.xlsx')wb.template=Truewb.save('document_template.xltx')或将此属性设置为False(默认),另存为文档:wb=load_workbook('document_template.xltx')wb.template=Falsewb.save('document.xlsx',as_template=False)警告:将文档另存为文档模板或将文档模板另存为文档时,应监控数据属性和文档扩展名,否则模板渲染引擎将无法打开文档.注意:以下方法会失败wb=load_workbook('document.xlsx')#需要将扩展??名保存为*.xlsxwb.save('new_document.xlsm')#MSExcel无法打开文档#需要指定属性keep_vba=Truewb=load_workbook('document.xlsm')wb.save('new_document.xlsm')#MSExcel无法打开文档wb=load_workbook('document.xltm',keep_vba=True)#要保存为模板文档,扩展名必须指定为*.xltmwb.save('new_document.xlsm')#MSExcel无法打开文档。从文件加载使用openpyxl.load_workbook()方法打开现有工作簿:fromopenpyxlimportload_workbookwb2=load_workbook('test.xlsx')print(wb2.sheetnames)output:['Sheet2','NewTitle','Sheet1']教程到此结束,大家可以继续浏览简单示例部分