上一篇文章我们学习了如何使用openpyxl读取excel数据。当然除此之外,我们还可以向excel文档中写入数据。写入数据的过程在某种程度上与读取数据的过程十分类似。我们可以创建excel工作表,在单元格内写入文字、数字或方程,在修改完毕之后关闭文件。此外我们还会创建、删除工作表,应用设置、字体和样式,设置单元格和工作区的宽度和高度,合并和取消合并单元格。
Let's GOOOOOOO!
Excel文档创建与保存
首先我们需要学习如何用python创建与保存文档。先导入openpyxl模块,并且创建一个工作簿
>>> import openpyxl
>>> mywb = openpyxl.Workbook()
上面的代码会创建一个只包含一个工作表的工作簿,如上一章描述的那样,我们可以用下列代码确认工作表的名字,数量和活动的工作表。
>>> mywb.get_sheet_names()
['Sheet']
>>> sheet = mywb.active
>>> sheet.title
'Sheet'
现在我们可以修改工作表的名字,示例如下
>>> sheet.title = 'MyNewTitle'
>>> wb.get_sheet_names()
['MyNewTitle']
>>>mywb.save('NewExcelFile.xlsx')
这样一个新的excel文件就创建完成了,此时如果你打开你的当前工作路径就可以看到刚刚创建的文件——‘NewExcelFile’工作簿里有唯一的一个叫做‘MynewTitle’的工作表。
载入Excel文件并保存
在把一个现有的excel文件读入内存,并对它进行一系列修改之后,必须使用save()
方法,将其保存,否则所有的更改都会丢失。不过保存副本的方法其实非常简单,只是将读取excel文件与保存文件的方法结合起来即可,详见下面的代码
>>> import openpyxl
>>> mywb = openpyxl.load_workbook('filetest.xlsx')
>>> sheet = mywb.active
>>> sheet.title = 'Working on Save as'
>>> mywb.save('example_filetest.xlsx')
从上面的代码我们可以看到,我们读取了一个已经存在的文件,更改了工作表的名字然后保存了一个工作簿副本。在这个案例当中原工作簿与新创建的工作簿都会在你的工作路径里,你可以尝试打开看一下,是否按照你的思路成功更改了工作表名。
通常用python修改excel文件时,最好能保存为一个与原文件不同名字的副本,这样能预防你的程序中存在bug或者工作时出现任何错误。
创建新的工作表
要在工作簿中创建一个新的工作表,只需使用create_sheet()
方法即可。类似的,要删除一个工作表只需使用remove_sheet()
方法即可。
>>> import openpyxl
>>> mywb = openpyxl.Workbook()
>>> mywb.get_sheet_names()
['Sheet']
>>> mywb.create_sheet()
<Worksheet "Sheet1">
>>> mywb.get_sheet_names()
['Sheet', 'Sheet1']
>>> wb.create_sheet(index=0, title='1st Sheet')
<Worksheet "1st Sheet">
>>> mywb.get_sheet_names()
['1st Sheet', 'Sheet', 'Sheet1']
>>>mywb.create_sheet(index=2, title='2nd Sheet')
<Worksheet "2nd Sheet">
>>>mywb.get_sheet_names()
['1st Sheet', 'Sheet', '2nd Sheet', 'Sheet1']
使用create_sheet()
方法创建的新工作表默认排在工作簿的最后一个,当然我们也可以用index具体规定新建工作表的位置,并且还可以在创建的同时对其命名。使用index排序的规则继承了python的排序方法,index从0开始。
删除工作表
当我们想删除一个特定的工作表的时候,使用remove_sheet()
方法,具体展示如下
>>>mywb.get_sheet_names()
['1st Sheet', 'Sheet', '2nd Sheet', 'Sheet1']
>>> mywb.remove_sheet(mywb.get_sheet_by_name('1st Sheet'))
>>> mywb.remove_sheet(mywb.get_sheet_by_name('Sheet1'))
>>> mywb.get_sheet_names()
['Sheet', '2nd Sheet']
从上述代码中可以看出,在真正删除一个工作表之前,我们需要选中一个工作表对象。remove_sheet()
方法将一个工作表对象作为输入,而不是工作表名。使用get_sheet_by_name()
方法,输入工作表名,即可返回一个工作表对象了。当然在最后不要忘记使用save()
方法对所作更改进行保存。
向单元格写入数据
现在我们终于来到了如何在选定的单元格中写入数据。其实方法也非常简单,见下
>>> import openpyxl
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.get_sheet_by_name('Sheet')
>>> mysheet['F6'] = 'Writing new Value!'
>>> mysheet['F6'].value
'Writing new Value'
从上述代码可以看到,直接向单元格进行赋值即可写入数据。如果你还记得第一章的内容的话,你一定知道,还有另一种方法可以指向单元格的值。我们同样可以用cell()
函数指向单元格,并且对其写入数据,示例如下
>>> import openpyxl
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.get_sheet_by_name('Sheet')
>>> mysheet.cell(row=2, column=4).value = 'Let\'s try again!'
>>> mysheet['D2'].value
'Let\'s try again!'
注意,使用cell()
函数进行写入时,必须使用value
方法,否则就会发生下述的错误
>>> mysheet.cell(row=2, column=4) = 'Let\'s try again!'
File "<stdin>", line 1
SyntaxError: can't assign to function call
向单元格写入方程
excel中的方程是一项非常重要的功能,实际上工作簿的威力就在于它的方程。我们可以使用openpyxl在任何指定的单元格中输入公式,我们需要做的只不过是对单元格赋值一个等号以及你想写的公式,就像这样
>>>mysheet['F6'] = '=Sum(D7:D20)'
看上去与向单元格写入数据的方法并没有什么区别,只是加了等号的公式而已。上面的公式会将D7至D20单元格中所有的数值相加,并存入F6单元格。让我们来看看别的例子
>>> import openpyxl
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.active
>>> mysheet['F6'] = 500
>>> mysheet['F7'] = 800
>>> mysheet['D3'] = '=SUM(F6:F7)'
>>> mywb.save('Applyingformula.xlsx')
这个例子是对方程使用的一个完整的呈现,我们在F6中输入500,在F7单元格中输入800。单元格D3有一个把F6和F7加起来的公式。打开电子表格以后,你就会在D3看到1300的数值。
那么至此,我们已经学完了如何读取,写入,修改以及保存excel文件。那么接下来我们将学习如何对表格进行设置和调整,以及如何用openpyxl画图。
敬请期待啦!!!
网友评论