文 | 蛮想,秋叶优秀学员
说到Excel,你想到的可能就是函数公式,各种数据整理,图表制作,又或者是数据分析。
我一直认为这就是Excel的顶级应用场景了,也经常拿这些「专业术语」,去吓唬秋叶Office训练营小白们。
正所谓无巧不成书,故事最精彩的地方,往往是剧情的反转,前两天我就被反转了一次,而且还是个女生。
image玩了10年,我还是第1次看到,身边能有人在Excel画像素画,而且那个人不是我,是一个叫做漫想的女生。
具体是怎么做的呢?我们来听一听,漫想给我们讲的,Excel遇上Python那点事儿。
1- Excel像素画原理
1-读取图片中的RGB值,将其转化成网络色彩,最后还原成RGB值;
2-将经过处理的RGB值存为文本;
3-新建Excel,导入文本值;
4-借助VBA进行填充。
2- Python读取像素值
备注:我的python环境为3.6,我用的IDE是pycharm。
这里如何就不花篇幅介绍如何设置python环境。还没有配的小朋友,可以看这篇文章。
https://zhuanlan.zhihu.com/p/28789759
1.安装pillow模块
PIL(Python Imaging Library)是Python中一个强大的图像处理库,但目前其只支持到Python2.7。pillow是PIL的一个分支,虽是分支但是其与PIL同样也具有很强的图像处理库。
Pillow的文档:https://pillow.readthedocs.io/en/latest/
Pillow的github:https://github.com/python-pillow/Pillow
在windows系统下安装PIL模块:
方法一:pip安装
cmd进入你正在运行的python代码文件夹的lib中,即包含有pip.exe文件的文件夹中,代码为:cd 文件夹位置。例如: cd D:\python\untitled\venv\Scripts
image通过以下代码实现安装:
pip install Pillow
image
验证一下是否安装成功:
python
import PIL
如图就是安装成功了。(我之前安装过了)
方法二:(不建议)下载pillow
下载合适文件后,在文件夹中安装,之前有讲过,只要放对了位置就行。
PIL官方链接:http://pythonware.com/products/pil/
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() #关闭文件
image
最终,在该python文件下,就可以看到生成的txt文件。
导出的TXT文件如下:
image3- EXCEL填充单元格
1.准备TXT文件
因为前面python中生成的TXT,有括号和空格,需要在读取RGB之前替换为空。
image- 在【打开】中选择该TXT文件导入。此时会出现,【导入文本向导】,前两步都是默认选项,第三步中选择【文本】的形式显示。这里也可以在导入成功后,全选所有表格,在【开始】选项卡中把【格式】全部换成【文本】。
- 替换查找!!用替换查找把括号去掉!就是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
image
运行VBA代码,可能会出现越界错误9 ,但是没关系,其实已经生成RGB颜色啦!
讲解VBA循环语句
For Each 元素 In 组合
语句1
语句2
语句N
Next [元素]
最后运行代码,并调整EXCEL界面的大小,就可以看到细节啦~
imageimage
越简单的图,实现起来越快捷,效果也越好呀!图片太大了,电脑有可能带不起来哦!
imageimage
image
image
4- 总结
是不是从没想过EXCEL也可以实现如此功能?
其实只要你敢想,你就做的出来。
多一点耐心,多动手,这份撩妹神器就到手。
如此撩妹神器,不如现在就上手试一试?程序员特有的浪漫送给你心仪的他/她一副十字绣画吧
image我是拉小登,源于Excel,不只是Excel
网友评论