之前两篇文章已经向大家讲解了如何利用python读取和写入数据,本次就向大家介绍一下如何使用openpyxl对excel文件进行设置,以及如何在excel文件中绘制图表。
设置字体
使用python对excel文件进行操作,可以对其设置不同的字体样式,强调突出某些特定行或列等等。利用openpyxl,写上短短几行代码,就可以自动定制和更改数百万行的数据的样式了。
首先,让我们导入openpyxl模块,并且导入模块中的Font和Style函数。下述代码将会展示,如何新建一个excel工作簿,并且将F6单元格的字体大小设置为32,字体为斜体。
>>> import openpyxl
>>> from openpyxl.styles import Font, Style
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.get_sheet_by_name('Sheet')
>>> italic32Font = Font(size=32, italic=True)
>>> sobj = Style(font=italic24Font)
>>> mysheet['F6'].style = sobj
>>> mysheet['F6'] = 'Applying Styles!'
>>> mywb.save('Appliedstyle.xlsx')
在openpyxl模块中,每个单元格都有一个样式对象,这个样式对象用于存储在单元格的样式.style
属性中。因此,我们需要创建一个样式对象,并将其指定给一个具体的单元格。
>>> sobj = Style(font=italic24Font)
很显然,Style()
函数就是用来生成样式对象的,它需要将字体对象当作参数输入
>>> italic32Font = Font(size=32, italic=True)
字体对象有四个参数可供输入:
-
Name:输入一个字符串,引用字体名称,比如'Arial'
-
Size:输入一个代表字体大小的整数值
-
Bold:输入一个布尔值,True代表字体需要加粗
-
Italic:输入一个布尔值,True代表字体为斜体
在上面的代码当中,我们使用了Font()
函数建立了一个字体对象并赋值给了italic32Font变量,然后将其作为参数输入给Style()
函数。接下来我们来看一个更完整的例子,你可以选择跟着这个例子完整地操作一次。
>>> import openpyxl
>>> from openpyxl.styles import Font, Style
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.get_sheet_by_name('Sheet')
>>> firstFontObj = Font(name='Arial', bold=True)
>>> firstStyleObj = Style(font=firstFontObj)
>>> mysheet['F6'].style = firstStyleObj
>>> mysheet['F6'] = 'Bold Arial'
>>> secondFontObj = Font(size=32, italic=True)
>>> secondStyleObj = Style(font=secondFontObj)
>>> mysheet['D7'].style = secondStyleObj
>>> mysheet['D7'] = '32 pt Italic'
>>> mywb.save('ApplicationofStyles.xlsx')
调整行高列宽
我们可以使用openpyxl设置行高和列宽,还可以将某行或某列隐藏。详见下面的代码示例
>>> import openpyxl
>>> mywb = openpyxl.Workbook()
>>> mysheet = mywb.active
>>> mysheet['F6'] = 'Tall row'
>>> mysheet['D7'] = 'Wide column'
>>> mysheet.row_dimensions[3].height = 65
>>> mysheet.column_dimensions['F'].width = 25
>>> mywb.save('Heightandwidth.xlsx')
从上述代码中不难看出,.row_dimensions
方法和.column_dimensions
方法是将选中需要调整的行和列作为参数输入,后面紧跟的.height
和.width
属性是用来保存行高和列宽的值。excel工作表中默认的行高值为12.75'点',其中一个'点'代表1/72英寸。你可以在0-409的范围内设置想要的行高,类似的,也可以在0-255范围内设置列宽。
行高和列宽都可以设置为整数或小数,想要隐藏某行或某列的方法也非常简单,只需将该行或列的高和宽设置成0即可自动隐藏。
单元格合并与取消合并
我们还可以使用openpyxl合并和取消合并单元格。首先让我们尝试合并单元格的操作,具体的代码应该是这个样子的
>>> import openpyxl
>>>my wb = openpyxl.Workbook()
>>> mysheet = mywb.active
>>> mysheet.merge_cells('B2:D3')
>>> mysheet['A1'] = 'cells merged together.'
>>> mysheet.merge_cells('F6:F7')
>>> mysheet['G5'] = 'Two merged cells.'
>>> mywb.save('Mergingcells.xlsx')
仍然非常简单,只需调用.merge_cells
方法,将两个单元格的地址作为参数输入即可。第一个输入的单元格地址应为左上角的单元格,第二个单元格应为右下角,那么中间的矩形区域即为合并区域。
那么重点来了,如果我们想对合并区域进行赋值,该如何操作呢?openpyxl规定,对合并区域的左上角单元格进行赋值,即.merge_cells
方法中的第一个输入的单元格地址进行赋值即可。
现在让我们来尝试一下取消合并单元格,看下面的例子
>>> import openpyxl
>>> mywb = openpyxl.load_workbook('Mergingcells.xlsx')
>>> mysheet = mywb.active
>>> mysheet.unmerge_cells('B2:D3')
>>> mysheet.unmerge_cells('F6:F7')
>>> mywb.save('unmerged.xlsx')
可以看到,操作与合并单元格非常类似,调用.unmerge_cells
方法,将合并区域左上角与右下角的单元格地址输入就可以取消合并了。
绘制Excel图表
openpyxl模块支持利用工作表中数据创建各种常用类型的图表,如柱状图、折线图、散点图和饼状图。使用openpyxl创建excel图表的步骤很简单,总结如下
- 在使用矩形框选取要作图的单元格前,必须保证对象已经创建
- 将选取的对象转化并创建成序列对象
- 创建一个图表对象
- 将步骤2中创建的序列对象附加到步骤3中创建的图表对象中
- 设置图表顶部、左侧的位置,以及图表的宽度和高度
- 将图表对象添加到工作表对象中
这样看起来有些抽象,让我们来看一个实际的例子帮助理解
>>> import openpyxl
>>> chartwb = openpyxl.Workbook()
>>> sheet = chartwb.get_active_sheet()
>>> for x in range(1, 10):
sheet['A' + str(i)] = i
>>> referenceobj = openpyxl.charts.Reference(sheet, (1, 1), (10, 1))
>>> serObj = openpyxl.charts.Series(referenceObj, title='Chart Series')
>>> chartObject = openpyxl.charts.BarChart()
>>> chartObject.append(serObj)
>>> chartObject.drawing.top = 50
>>> chartObject.drawing.left = 100
>>> chartObject.drawing.width = 300
>>> chartObject.drawing.height = 200
>>> sheet.add_chart(chartObject)
>>> chartwb.save('example.xlsx')
上面的例子给大家展示了如何绘制一个柱状图,当然用openpyxl来绘制折线图,散点图,饼状图也都是不在话下的。创建过程与上述例子也非常类似,使用Openpyxl.charts.LineChart()
,Openpyxl.charts.ScatterChart()
和Openpyxl.charts.PieChart()
即可创建折线图,散点图,饼状图了。
所以,通过创建引用对象和openpyxl函数,我们可以使用python在excel文件中创建大多数类型的图表。当然,我们根本不需要打开excel软件。
插入与删除行和列
在2.5.0版本之后的openpyxl有了一个新的实用性很强的功能,那就是插入与删除行和列。这个功能可以让大家在使用python做excel文件的时候,不用事先将文件中的行列数都算好,而是可以根据数据的改变动态地自动修改excel文件的版面设计。
插入行和列的操作非常简单,展示如下:
>>> sheet.insert_rows(7)
>>> sheet.insert_cols(6)
这样就可以了!我们已经成功在第7行插入了一行,在第6列插入了1列。注意,插入的函数默认只插入一个新的行或列,并且在已经存在的行或列之前。
删除行和列的方法也很简单,就像这样:
>>> sheet.delete_cols(6,3)
>>> sheet.delete_rows(2)
这样就成功删除了F到H列和第2行。当使用删除函数时,向函数传递的第一个参数表示需要删除的首行或首列号,第二个参数表示需要连续删除的行或列数量,如果没有第二个参数,则默认只删除一行或一列。
那么至此,python帮你做excel——openpyxl基础教程已经结束了。相信这三篇教程的内容可以基本覆盖到日常的excel操作,已经可以帮你省下不少重复劳动的时间了。未来如果大家还有哪些常用的操作想要学习,可以写在留言区哦!!
下一篇文章,就会开启一个全新的系列教程了。
敬请期待啦!
网友评论