python小程序嵌入excel_用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!...
大家好,在之前的Python办公自动化系列文章中,我们已经介绍了两个Python操作Excel的库openpyxl与xlwings,并且相信大家已经了解这两者之间的异同。
但是在Python中操作Excel库可不止这两个,本文就将介绍另一个强大的库xlsxwriter。来学习如何用原生的方式操作Excel!
首先还是来简单了解下这三个库之间的区别
openpyxl:只允许读取和写入.xlsx格式文件并进行增删改增查。
xlwings:允许读取和写入.xlsx和.xls两种格式文件并进行增删改查。
xlsxwriter:只允许写入.xlsx格式的文件。
比较三者,你可能会觉得xlsxwriter这个库也太不行了吧?其实不是的,在写入这方面前两个库比不上它,它的精华在于写入(多张样式图表、图片、表格样式修改等)。话不多说,下面开始讲解!
简介
xlsxwriter是用于创建Excel XLSX文件的Python模块,可用于将文本、数字、公式和超链接写入Excel2007 + XLSX文件中的多个工作表。它支持格式化等功能。可以说除了Excel本身,就属这个功能最齐全了。
它的缺点就是不支持读取和修改,它只能创建新的文件,如果读者想完美读取功能的话,可以结合xlsxreader来实现,两者结合可谓真正完整的Excel+XLSX再现。
其次,它不支持XLS文件的写入,XLS文件是一种二进制格式的文件。如果读者想创建XLS格式文件的话可以参考xlwt模块。
安装与概览
安装很简单,没有什么特别要注意的,直接在命令行/终端中安装即可
pip install XlsxWriter
在正式讲解之前我们需要简单了解Xlsxwriter的基本流程如下
常用操作拆解
下面我将对操作Excel时常见的几个操作进行举例讲解
一、创建Excel文件
先导入模块而后使用Workbook()构造函数来创建一个新的工作簿对象。Workbook()接受一个非可选参数---我们创建文件的文件名。
import xlsxwriter
f = xlsxwriter.Workbook()
二、创建工作表
默认情况下,Excel文件中的工作表按代码执行顺序名称依次为Sheet1、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','绝对路径')
第一个参数是你要指定哪个单元格插入图片,第二个参数是存放图片的绝对路径。
6.1 插入超链接
worksheet.write_url(row, col, "internal:%s!A1" % ("链接对象"), string="链接显示名字")
row和col参数都是设置位置信息的。
6.2 插入图表
插入图表是xlsxwriter模块的最大闪光点,这里我将详细介绍插入图表的代码及其解释。
首先,先熟悉插入图表的代码
chart = workbook.add_chart({'type': 'column','subtype': 'stacked'})
workbook.add_chartsheet()函数是最经典的插入图表函数,字典里的第一个键type参数指的是放入的图表类型。而第二个键指的是某些图表类型中的图表子类型。
支持的图表类型有以下:
area:创建一个Area(实线)样式表。
bar:创建条形样式(转置直方图)图表。
column:创建列样式(直方图)图表。
line:创建线型图表。
pie:创建一个饼图样式图表。
doughnut:创建一个甜甜圈样式表。
scatter:创建散点图样式图。
stock:创建一个股票样式图。
radar:创建雷达样式表。
设置了图表类型接下来就是插入数据,插入数据我们用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个添加函数。
6.3 设置x轴与y轴属性
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中的代码加上这段代码看效果:编号变斜体、有了标题并且是粗体。
6.4 合并两个不同类型的图表
合并图表用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()
效果:
6.5 设置图表尺寸
用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图表区域中移动。含义用一张表格来说明
6.6 设置图表标题
用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函数上面。得到效果如下:
6.7 设置图例
用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:删除指定图例,以列表呈现。
6.8 设置图表样式
用set_style(num)函数,用于将图表的样式设置为Excel中“设计”选项卡上可用的48种内置样式之一。参数num就是48种内置样式之一。
我们这里把num改成6也就是样式6,同样放在4种代码combine那段代码上面。效果如下
6.9 设置图表区域
用set_chartarea()函数来设置图表区域的属性图表区域,也就是图表背后的区域。
chart.set_chartarea({
'fill': {'color': 'black'}
})
fill:设置图表区域的实心填充属性,例如颜色。
6.10 在图表下方添加数据表
用set_table()函数在水平轴下方添加一个数据表。
效果如下:
七、关闭Excel文件
在上面例子中都可以看到最后都调用了这句代码
workbook.close()
小结
至此,有关xlsxwriter的常用操作就基本介绍完毕,相信通过上面的代码与案例讲解,你已经明白xlsxwriter与openpyxl和xlwings的具体区别在哪。
如果想要彻底理解,还需要自己动手执行一遍上面的各部分代码来体会,也希望大家能够在不同的场景下,灵活运用不同的Python库。
python小程序嵌入excel_用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!...相关推荐
- 用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!
来源:早起Python 本文就将介绍一个强大的库xlsxwriter.来学习如何用原生的方式操作Excel! 首先还是来简单了解下这三个库之间的区别 " openpyxl:只允许读取和写入. ...
- python小程序源代码-整理了适合新手的20个Python练手小程序
100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...
- 微信小程序获取微信绑定授权手机号getPhoneNumber 全流程及出现手机号带*号问题详解
微信小程序文档中给出如下示例 获取微信用户绑定的手机号,需先调用login接口. 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的 ...
- 微信小程序中WebView中原生组件限制问题解析
背景 在微信的文档中有一个章节说明了『 原生组件的使用限制 』有这么一段话 『由于原生组件脱离在 WebView 渲染流程外,因此在使用时有以下限制:原生组件的层级是最高的,所以页面中的其他组件无论设 ...
- python恶搞小程序-有趣的python小程序
有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...
- python日历小程序_一个查看网络设备信息Python小程序
原标题:一个查看网络设备信息Python小程序 网络编程中,最常见的一个问题就是,获取设备信息. 首先我们,要学习如何获取本机的网络信息.我们将用到标准库中的socket库.假如说,我们要查看本机的 ...
- 【小程序踩坑系列5】小程序内多重调用原生promise,无返回,无报错,代码卡住...
作者: 蒋欢 问题: 在部分IOS机型上,小程序内使用原生promise实现异步,在嵌套四层后,Promise的resolve和reject均无返回. 环境: 用户机型:iPhone 7 系统版本:I ...
- 几个python小程序
python小程序 1-100求和 1 def Sum(x, y): 2 return x+y 3 print reduce(lambda x,y:x+y,range(1,101)) 4 5 i = ...
- 人工智能python小程序_Python:一个可以套路别人的python小程序
一个可以套路别人的python小程序~ 先简要介绍一下程序. 程序是使用pycharm工具,python语言所写.程序包括客户端 client.py 和服务器端 server.py 两部分,利用了py ...
最新文章
- php 提交网页 传值 获取编辑框的值
- 【字符串】最长回文子串 ( 动态规划算法 ) ★
- mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
- 转:WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
- C++类静态成员与类静态成员函数
- python xlwt写入已有表_Python中,添加写入数据到已经存在的Excel文件
- KnowledgeGraph Slides项目(CCKS系列报告2013-2018)
- 通过一条语句的执行,深入理解innoDB的底层架构
- 中小企业成败关键在于老板
- 16个UEFI固件漏洞影响惠普多个产品线,其中1个影响无数厂商
- 快手内容运营-数据分析面试
- Linux下彻底卸载mysql
- 用matlab算配筋,[配筋计算]连梁的配筋计算 - 土木在线
- seo入门,seo入门基础知识
- C/S模型(客户/服务器模型)
- 智能手环APP有哪些功能,具体解决方案是什么?
- 水气表下行通信规约 188 V1.0 版协议
- Android USB(OTG) 删除文件的探索过程
- mysql 分表-横向,纵向
- 迷惑,不知何去何从。。。。。
热门文章
- 笔记本电脑终于可以待机了
- 个人案例 装修公司官网
- java的“看门狗”锁续期可以用php redis这样实现【php锁续期、分布式锁、无锁请求队列超卖】解决【商家超卖(商品库存控制)、用户超买(秒杀订单控制)】问题。非demo 线上一直在用
- 探针一号的SQL注入学习笔记
- python吃显卡还是内存不足_解决Pytorch 训练与测试时爆显存(out of memory)的问题
- 金蝶物料辅助属性改造
- 【目前点赞排名】投票倒计时五天:继续为你喜欢的征文作品投票吧!
- JavaScript实现队列结构
- python文本信息对比
- Altium Designer 18板子信息命令