当Excel遇上Python

文 | 漫想,秋叶优秀学员

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

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

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

玩了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

通过以下代码实现安装:

pip install Pillow

验证一下是否安装成功:

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()	#关闭文件

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

导出的TXT文件如下:

3- EXCEL填充单元格

1.准备TXT文件

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

– 在【打开】中选择该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

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

讲解VBA循环语句

For Each 元素 In 组合
语句1
语句2
语句N
Next [元素]

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


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




4- 总结

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

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

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

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

 

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

 

 

联系作者

公众号:拉小登 | 微博:拉登Dony | B站:拉小登Excel

One Reply to “当Excel遇上Python”

回复 乐乐

您的电子邮箱地址不会被公开。 必填项已用 * 标注