Python玩转Excel神器xlsxwriter详解

本文就将介绍一个强大的库xlsxwriter。来学习如何用原生的方式操作Excel!

首先还是来简单了解下这三个库之间的区别

  • openpyxl:只允许读取和写入.xlsx格式文件并进行增删改增查。
  • xlwings:允许读取和写入.xlsx.xls两种格式文件并进行增删改查。
  • xlsxwriter:只允许写入.xlsx格式的文件。

比较三者,你可能会觉得xlsxwriter这个库也太不行了吧?其实不是的,在写入这方面前两个库比不上它,它的精华在于写入(多张样式图表图片、表格样式修改等)。话不多说,下面开始讲解!

简介

xlsxwriter是用于创建Excel XLSX文件的Python模块,可用于将文本、数字、公式和超链接写入Excel2007 + XLSX文件中的多个工作表。它支持格式化等功能。可以说**除了Excel本身,就属这个功能最齐全了。

image.png

它的缺点就是不支持读取和修改,它只能创建新的文件,如果读者想完美读取功能的话,可以结合xlsxreader来实现,两者结合可谓真正完整的Excel+XLSX再现。

其次,它不支持XLS文件的写入,XLS文件是一种二进制格式的文件。如果读者想创建XLS格式文件的话可以参考xlwt模块。

安装与概览

安装很简单,没有什么特别要注意的,直接在命令行/终端中安装即可

pip install XlsxWriter

在正式讲解之前我们需要简单了解Xlsxwriter的基本流程如下

image.png

常用操作拆解

下面我将对操作Excel时常见的几个操作进行举例讲解

一、创建Excel文件

先导入模块而后使用Workbook()构造函数来创建一个新的工作簿对象。Workbook()接受一个非可选参数---我们创建文件的文件名。
import xlsxwriter
f = xlsxwriter.Workbook()

二、创建工作表

默认情况下,Excel文件中的工作表按代码执行顺序名称依次为Sheet1、Sheet2等。但是我们也可以指定一个名称,如上我们在函数内加入了Data。

image.png

三、写入单个数据

如果对单个单元格进行写入数据用如下语法:

image.png

注意的是在XlsxWriter中,row行和col列的索引为零也即工作表的第一个单元格A1为(0,0)

如果我们需要写入多行多列数据的话,可以用for循环。在这里举个例子呈现。

image.png

效果如下:


image.png

四、写入一整行列数据

image.png

第一行代码为按行插入且从A1单元格开始,data为要写入的数据(格式为一个列表),bold为单元格样式。第二行代码与之不同的是按列插入。

五、设置单元格样式

image.png

在上方的写入行列数据中我们用到的bold参数,这是一个调节单元格样式的参数,常用的格式如上代码。

六、插入图片

插入图片是xlsxwriter瞩目的地方,接下来将分为小部分详细讲解

image.png

第一个参数是你要指定哪个单元格插入图片,第二个参数是存放图片的绝对路径。

6.1 插入超链接

image.png

row和col参数都是设置位置信息的。

6.2 插入图表

插入图表是xlsxwriter模块的最大闪光点,这里我将详细介绍插入图表的代码及其解释。

首先,先熟悉插入图表的代码

image.png

workbook.add_chartsheet()函数是最经典的插入图表函数,字典里的第一个键type参数指的是放入的图表类型。而第二个键指的是某些图表类型中的图表子类型。

支持的图表类型有以下:

  • area:创建一个Area(实线)样式表。
  • bar:创建条形样式(转置直方图)图表。
  • column:创建列样式(直方图)图表。
  • line:创建线型图表。
  • pie:创建一个饼图样式图表。
  • doughnut:创建一个甜甜圈样式表。
  • scatter:创建散点图样式图。
  • stock:创建一个股票样式图。
  • radar:创建雷达样式表。

设置了图表类型接下来就是插入数据,插入数据我们用chart.add_series(options)函数。

这里的options是以字典形式的图表数据,在Excel中图表系列是一组信息(值、轴标签、格式等)。

接下来就是将创建好的chart对象放入倒Excel表格中

image.png

insert_chart()函数是将图表插入到工作表指定的位置,第一个参数为单元格位置信息,第二个参数为选定的图表。

我们用一个例子将上述三个函数结合,并画一个条形图

image.png

效果如下:


image.png

上述例子中的插入数据我们运用了和第一个例子不一样的for循环插入,运用的是worksheet.write_column()对整行整列进行数据添加。

注意:如果表格里的图表没有显示则在这代码里改worksheet = workbook.add_worksheet(),删除里面的参数,原因是Excel的版本问题。

chart.add_series()函数中我们用到的字典类型格式为:{'values': '=工作表名!$列对应字母$行对应数字:$列对应字母$行对应数字'}。在这里,列对应字母和行对应数字可以看图片中,我们需要的是ABC三列中的1-5行数值,故我们这里引用3个添加函数。

6.3 设置x轴与y轴属性

image.png

第一个参数name是指轴的名称,name_font设置x轴的字体属性,这里设置了粗体和大小。num_font指轴编号(也即如图中x轴下方的1234)的字体属性这里设置了斜体。

同理,y轴、子图xy轴的设置也是一样的,区别在于将代码中的x换成对应的y和x。

我们在上述2中的代码加上这段代码看效果:编号变斜体、有了标题并且是粗体。

image.png

6.4 合并两个不同类型的图表

合并图表用combine()函数

image.png

效果:

image.png

6.5 设置图表尺寸

set_size()函数来设置图表尺寸。

image.png

函数里面有六个参数:widthheightx_offset,y_offset

前两个代表宽度与高度是以像素为单位,默认的图表的宽度*高度为480 x 288像素。

后两个参数是设置类型图片在整个chart图表区域中移动。含义用一张表格来说明

参数 正负 意义
x_offset 向右偏移
x_offset 向左偏移
y_offset 向下偏移
y_offset 向上偏移

6.6 设置图表标题

set_title()函数

image.png

name指标题;overlay代表允许标题覆盖到图表上通常与layout一起使用。layout以图表相对单位设置标题的位置(x, y)。

这里我们只运用第一行代码chart.set_title({'name': 'Zaoqi Python title'})将它放入到4中代码的combine函数上面。得到效果如下:

image.png

6.7 设置图例

set_legend()函数设置图例属性。

image.png

none:关闭图例;默认是开启的。position:图例的位置。font:图例的字体属性。delete_series:删除指定图例,以列表呈现。

6.8 设置图表样式

set_style(num)函数,用于将图表的样式设置为Excel中“设计”选项卡上可用的48种内置样式之一。参数num就是48种内置样式之一。

我们这里把num改成6也就是样式6,同样放在4种代码combine那段代码上面。效果如下!

image.png

6.9 设置图表区域

set_chartarea()函数来设置图表区域的属性图表区域,也就是图表背后的区域。

image.png

fill:设置图表区域的实心填充属性,例如颜色。

10、在图表下方添加数据表

set_table()函数在水平轴下方添加一个数据表。

效果如下:


image.png

七、关闭Excel文件

在上面例子中都可以看到最后都调用了这句代码

workbook.close()

小结

至此,有关xlsxwriter的常用操作就基本介绍完毕。

如果想要彻底理解,还需要自己动手执行一遍上面的各部分代码来体会,也希望大家能够在不同的场景下,灵活运用不同的Python库。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339