你们好,在以前的Python办公自动化系列文章中,咱们已经介绍了两个Python操做Excel的库openpyxl与xlwings,而且相信你们已经了解这二者之间的异同。php
可是在Python中操做Excel库可不止这两个,本文就将介绍另外一个强大的库xlsxwriter。来学习如何用原生的方式操做Excel!css
首先仍是来简单了解下这三个库之间的区别python
比较三者,你可能会以为xlsxwriter这个库也太不行了吧?其实不是的,在写入这方面前两个库比不上它,它的精华在于写入(多张样式图表、图片、表格样式修改等)。话很少说,下面开始讲解!bash
xlsxwriter是用于建立Excel XLSX文件的Python模块,可用于将文本、数字、公式和超连接写入Excel2007 + XLSX文件中的多个工做表。它支持格式化等功能。能够说除了Excel自己,就属这个功能最齐全了。函数
它的缺点就是不支持读取和修改,它只能建立新的文件,若是读者想完美读取功能的话,能够结合xlsxreader来实现,二者结合可谓真正完整的Excel+XLSX再现。学习
其次,它不支持XLS文件的写入,XLS文件是一种二进制格式的文件。若是读者想建立XLS格式文件的话能够参考xlwt模块。字体
安装很简单,没有什么特别要注意的,直接在命令行/终端中安装便可ui
pip install XlsxWriter
在正式讲解以前咱们须要简单了解Xlsxwriter的基本流程以下url
下面我将对操做Excel时常见的几个操做进行举例讲解spa
先导入模块然后使用Workbook()构造函数来建立一个新的工做簿对象。Workbook()接受一个非可选参数---咱们建立文件的文件名。
import xlsxwriter f = xlsxwriter.Workbook()
默认状况下,Excel文件中的工做表按代码执行顺序名称依次为Sheet一、Sheet2等。可是咱们也能够指定一个名称,如上咱们在函数内加入了Data。
worksheet1 = workbook.add_worksheet()
#worksheet2 = workbook.add_worksheet('Data')
若是对单个单元格进行写入数据用以下语法:
worksheet.write(row, col, some_data)
注意的是在XlsxWriter中,row行和col列的索引为零也即工做表的第一个单元格A1为(0,0)
若是咱们须要写入多行多列数据的话,能够用for循环。在这里举个例子呈现。
import xlsxwriter workbook = xlsxwriter.Workbook('data.xlsx') worksheet = workbook.add_worksheet('早起Python') #写入数据以元组套列表形式 data = ( ['春天',20], ['夏天',30], ['秋天',25], ['冬天',10], ) #设置初始的输入数据的位置 row = 0 col = 0 #for循环添加数据 for weather, tem in (data): worksheet.write(row, col,weather) worksheet.write(row, col + 1, tem) row += 1 workbook.close()
效果以下:
worksheet.write_row(“A1”,data,bold) worksheet.write_column(“A1”,data,bold)
第一行代码为按行插入且从A1单元格开始,data为要写入的数据(格式为一个列表),bold为单元格样式。第二行代码与之不一样的是按列插入。
bold = f.add_format({
'bold': True, # 字体加粗 'border': 1, # 单元格边框宽度 'align': 'left', # 水平对齐方式 'valign': 'vcenter', # 垂直对齐方式 'fg_color': '#F4B084', # 单元格背景颜色 'text_wrap': True, # 是否自动换行 })
在上方的写入行列数据中咱们用到的bold参数,这是一个调节单元格样式的参数,经常使用的格式如上代码。
插入图片是xlsxwriter瞩目的地方,接下来将分为小部分详细讲解
worksheet.insert_image('A1','绝对路径')
第一个参数是你要指定哪一个单元格插入图片,第二个参数是存放图片的绝对路径。
worksheet.write_url(row, col, "internal:%s!A1" % ("连接对象"), string="连接显示名字")
row和col参数都是设置位置信息的。
插入图表是xlsxwriter模块的最大闪光点,这里我将详细介绍插入图表的代码及其解释。
首先,先熟悉插入图表的代码
chart = workbook.add_chart({'type': 'column','subtype': 'stacked'})
workbook.add_chartsheet()函数是最经典的插入图表函数,字典里的第一个键type参数指的是放入的图表类型。而第二个键指的是某些图表类型中的图表子类型。
支持的图表类型有如下:
设置了图表类型接下来就是插入数据,插入数据咱们用chart.add_series(options)函数。
这里的options是以字典形式的图表数据,在Excel中图表系列是一组信息(值、轴标签、格式等)。
接下来就是将建立好的chart对象放入倒Excel表格中
worksheet.insert_chart('A7', chart)
insert_chart()函数是将图表插入到工做表指定的位置,第一个参数为单元格位置信息,第二个参数为选定的图表。
咱们用一个例子将上述三个函数结合,并画一个条形图
import xlsxwriter workbook = xlsxwriter.Workbook('条形图.xlsx') worksheet = workbook.add_worksheet('Zaoqi') #若是出现没图像显示就删除里面的参数 chart = workbook.add_chart({'type': 'column'}) data = [ [3, 6, 9, 12, 15], [2, 4, 6, 8, 10], [1, 2, 3, 4, 5], ] worksheet.write_column('A1', data[0]) worksheet.write_column('B1', data[1]) worksheet.write_column('C1', data[2]) chart.add_series({'values': '=Sheet1!$A$1:$A$5'}) chart.add_series({'values': '=Sheet1!$B$1:$B$5'}) chart.add_series({'values': '=Sheet1!$C$1:$C$5'}) worksheet.insert_chart('A7', chart) workbook.close()
效果以下:
上述例子中的插入数据咱们运用了和第一个例子不同的for循环插入,运用的是worksheet.write_column()对整行整列进行数据添加。
注意:若是表格里的图表没有显示则在这代码里改worksheet = workbook.add_worksheet(),删除里面的参数,缘由是Excel的版本问题。
在chart.add_series()函数中咱们用到的字典类型格式为
{'values': '=工做表名!$列对应字母$行对应数字:$列对应字母$行对应数字'}
在这里,列对应字母和行对应数字能够看图片中,咱们须要的是ABC三列中的1-5行数值,故咱们这里引用3个添加函数。
chart.set_x_axis({
'name': 'Zaoqi Python', 'name_font': {'size': 12, 'bold': True}, 'num_font': {'italic': True }, })
第一个参数name是指轴的名称,name_font设置x轴的字体属性,这里设置了粗体和大小。num_font指轴编号(也即如图中x轴下方的1234)的字体属性这里设置了斜体。
同理,y轴、子图xy轴的设置也是同样的,区别在于将代码中的x换成对应的y和x。
咱们在上述2中的代码加上这段代码看效果:编号变斜体、有了标题而且是粗体。
合并图表用combine()函数
import xlsxwriter workbook = xlsxwriter.Workbook('条形图.xlsx') worksheet = workbook.add_worksheet() chart = workbook.add_chart({'type': 'column'}) line_chart = workbook.add_chart({'type': 'line'}) data = [ [3, 6, 9, 12, 15], [2, 4, 6, 8, 10], [1, 2, 3, 4, 5], ] worksheet.write_column('A1', data[0]) worksheet.write_column('B1', data[1]) worksheet.write_column('C1', data[2]) chart.add_series({'values': '=Sheet1!$A$1:$A$5'}) chart.add_series({'values': '=Sheet1!$B$1:$B$5'}) chart.add_series({'values': '=Sheet1!$C$1:$C$5'}) line_chart.add_series({'values': '=Sheet1!$A$1:$A$5'}) line_chart.add_series({'values': '=Sheet1!$B$1:$B$5'}) line_chart.add_series({'values': '=Sheet1!$C$1:$C$5'}) chart.set_x_axis({ 'name': 'Zaoqi Python', 'name_font': {'size': 12, 'bold': True}, 'num_font': {'italic': True }, }) chart.combine(line_chart) worksheet.insert_chart('A7', chart) workbook.close()
效果:
用set_size()函数来设置图表尺寸。
chart.set_size({'width': 720, 'height': 576}) chart.set_size({'x_scale': 1.5, 'y_scale': 2}) worksheet.insert_chart('E2', chart, {'x_offset': -10, 'y_offset': 5})
函数里面有六个参数:width、height,x_offset,y_offset
前两个表明宽度与高度是以像素为单位,默认的图表的宽度*高度为480 x 288像素。
后两个参数是设置类型图片在整个chart图表区域中移动。含义用一张表格来讲明
用set_title()函数
chart.set_title({'name': 'Zaoqi Python title'}) chart.set_title({ 'name': 'Zaoqi Python Title', 'overlay': True, 'layout': { 'x': 0.62, 'y': 0.24, } }) chart.set_title({'none': True}) #关闭此默认标题同时关闭全部其余set_title()选项。
name指标题;overlay表明容许标题覆盖到图表上一般与layout一块儿使用。layout以图表相对单位设置标题的位置(x, y)。
这里咱们只运用第一行代码chart.set_title({'name': 'Zaoqi Python title'})将它放入到4中代码的combine函数上面。获得效果以下:
用set_legend()函数设置图例属性。
chart.set_legend({'none': True}) chart.set_legend({'position': 'none'}) chart.set_legend({'position': 'bottom'}) chart.set_legend({'font': {'size': 4, 'bold': True}}) chart.set_legend({'delete_series': [0, 3]})
none:关闭图例;默认是开启的。position:图例的位置。font:图例的字体属性。delete_series:删除指定图例,以列表呈现。
用set_style(num)函数,用于将图表的样式设置为Excel中“设计”选项卡上可用的48种内置样式之一。参数num就是48种内置样式之一。
咱们这里把num改为6也就是样式6,一样放在4种代码combine那段代码上面。效果以下
用set_chartarea()函数来设置图表区域的属性图表区域,也就是图表背后的区域。
chart.set_chartarea({
'fill': {'color': 'black'} })
fill:设置图表区域的实心填充属性,例如颜色。
用set_table()函数在水平轴下方添加一个数据表。
效果以下:
在上面例子中均可以看到最后都调用了这句代码
workbook.close()
至此,有关xlsxwriter的经常使用操做就基本介绍完毕,相信经过上面的代码与案例讲解,你已经明白xlsxwriter与openpyxl和xlwings的具体区别在哪。
若是想要完全理解,还须要本身动手执行一遍上面的各部分代码来体会,也但愿你们可以在不一样的场景下,灵活运用不一样的Python库。