python和excell_当Excel遇上Python

py-1554813289MD001.png

文 | 漫想,秋叶优秀学员

说到Excel,你想到的可能就是函数公式,各种数据整理,图表制作,又或者是数据分析。

我一直认为这就是Excel的顶级应用场景了,也经常拿这些「专业术语」,去吓唬秋叶Office训练营小白们。

正所谓无巧不成书,故事最精彩的地方,往往是剧情的反转,前两天我就被反转了一次,而且还是个女生。

py-1554813289MD002.png

玩了10年,我还是第1次看到,身边能有人在Excel画像素画,而且那个人不是我,是一个叫做漫想的女生。

具体是怎么做的呢?我们来听一听,漫想给我们讲的,Excel遇上Python那点事儿。

1- Excel像素画原理

1-读取图片中的RGB值,将其转化成网络色彩,最后还原成RGB值;

2-将经过处理的RGB值存为文本;

3-新建Excel,导入文本值;

4-借助VBA进行填充。

2- Python读取像素值

备注:我的python环境为3.6,我用的IDE是pycharm。

这里如何就不花篇幅介绍如何设置python环境。还没有配的小朋友,可以看这篇文章。

1.安装pillow模块

PIL(Python Imaging Library)是Python中一个强大的图像处理库,但目前其只支持到Python2.7。pillow是PIL的一个分支,虽是分支但是其与PIL同样也具有很强的图像处理库。

在windows系统下安装PIL模块:

方法一:pip安装

cmd进入你正在运行的python代码文件夹的lib中,即包含有pip.exe文件的文件夹中,代码为:cd 文件夹位置。例如: cd D:\python\untitled\venv\Scripts

py-1554813289MD003.png

通过以下代码实现安装:

pip install Pillow

1

2

pipinstallPillow

py-1554813289MD004.png

验证一下是否安装成功:

python

import PIL

1

2

3

python

importPIL

如图就是安装成功了。(我之前安装过了)

方法二:(不建议)下载pillow

下载合适文件后,在文件夹中安装,之前有讲过,只要放对了位置就行。

2.Python实现代码

通过PIL来读取图像的RGB值,输出到txt文本中。(代码均有备注)

#coding=utf-8

from PIL import Image #导入之前安装的包

imload = Image.open('4.jpg') #加载图像文件,如果之后要实现其他的,可以换图像文件的名称,注意!!该图片需要在同一文件夹下,否则需要绝对或者相对路径

im = imload.convert("RGB") #转换为RGB的格式

width = im.size[0] #获取宽度

height = im.size[1]#获取高度

demo = open('rgb_4.txt','a')#为之后生成的值,生成一个txt文件,a是写入文件的意思

#迭代输出,以行为单位,y在外层

for y in range(height):

for x in range(width):

r,g,b = im.getpixel((x,y))#这里是重点,用getpixel()方法获取图片像素点的RGB值

rgb =r,g,b

demo.write(str(rgb)+ '\t')#写入文件中,并且rgb之间加入制表符

demo.write("\n")#换行则也换行

demo.close()#关闭文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#coding=utf-8

fromPILimportImage#导入之前安装的包

imload=Image.open('4.jpg')#加载图像文件,如果之后要实现其他的,可以换图像文件的名称,注意!!该图片需要在同一文件夹下,否则需要绝对或者相对路径

im=imload.convert("RGB")#转换为RGB的格式

width=im.size[0]#获取宽度

height=im.size[1]#获取高度

demo=open('rgb_4.txt','a')#为之后生成的值,生成一个txt文件,a是写入文件的意思

#迭代输出,以行为单位,y在外层

foryinrange(height):

forxinrange(width):

r,g,b=im.getpixel((x,y))#这里是重点,用getpixel()方法获取图片像素点的RGB值

rgb=r,g,b

demo.write(str(rgb)+'\t')#写入文件中,并且rgb之间加入制表符

demo.write("\n")#换行则也换行

demo.close()#关闭文件

py-1554813289MD005.png

最终,在该python文件下,就可以看到生成的txt文件。

导出的TXT文件如下:

py-1554813289MD006.png

3- EXCEL填充单元格

1.准备TXT文件

因为前面python中生成的TXT,有括号和空格,需要在读取RGB之前替换为空。

– 在【打开】中选择该TXT文件导入。此时会出现,【导入文本向导】,前两步都是默认选项,第三步中选择【文本】的形式显示。这里也可以在导入成功后,全选所有表格,在【开始】选项卡中把【格式】全部换成【文本】。

py-1554813290MD007.png

– 替换查找!!用替换查找把括号去掉!就是CTRL+H,将【(】和【)】替换为空

– 调整列宽和行高为正方形!注意!这里宽度与行高的单位是不一样的,每列的宽度8.43单位,等于64像素。每行高度15点,等于20像素。总之调整像素一样,就是正方形啦。

2.VBA实现RGB填充

右击工作表sheet,选择查看代码,就可以自由的编辑VBA代码了~

VBA代码:

Sub Set_RGB()

Dim r As Range, arr #定义r

For Each r In Range("A:AFA")#注意这里的Range中的“A:AFA”指的是列的位置,这里每次都需要手动修改,所以还是有些麻烦,等过段时间,我再优化一下

arr = Split(r, ",") #利用,来分割RGB值

r.Interior.Color = RGB(CInt(arr(0)), CInt(arr(1)), CInt(arr(2))) #CInt的作用是四舍五入后取整,如果要取整的浮点数小数部分恰好是0.5的情况,则向最接近的偶数取整。

Next

End Sub

1

2

3

4

5

6

7

8

SubSet_RGB()

DimrAsRange,arr#定义r

ForEachrInRange("A:AFA")#注意这里的Range中的“A:AFA”指的是列的位置,这里每次都需要手动修改,所以还是有些麻烦,等过段时间,我再优化一下

arr=Split(r,",")#利用,来分割RGB值

r.Interior.Color=RGB(CInt(arr(0)),CInt(arr(1)),CInt(arr(2)))#CInt的作用是四舍五入后取整,如果要取整的浮点数小数部分恰好是0.5的情况,则向最接近的偶数取整。

Next

EndSub

py-1554813290MD008.png

运行VBA代码,可能会出现越界错误9 ,但是没关系,其实已经生成RGB颜色啦!

讲解VBA循环语句

For Each 元素 In 组合

语句1

语句2

语句N

Next [元素]

1

2

3

4

5

6

ForEach元素In组合

语句1

语句2

语句N

Next[元素]

最后运行代码,并调整EXCEL界面的大小,就可以看到细节啦~

py-1554813290MD009.png

py-1554813290MD010.jpg

越简单的图,实现起来越快捷,效果也越好呀!图片太大了,电脑有可能带不起来哦!

py-1554813292MD011.jpg

py-1554813292MD012.jpg

py-1554813292MD013.jpg

py-1554813292MD014.jpg

4- 总结

是不是从没想过EXCEL也可以实现如此功能?

其实只要你敢想,你就做的出来。

多一点耐心,多动手,这份撩妹神器就到手。

如此撩妹神器,不如现在就上手试一试?程序员特有的浪漫~送给你心仪的他/她一副十字绣画吧~

我是拉小登,源于Excel,不只是Excel

py-1554813293MD015.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值