文 | 蠻想丹壕,秋葉優(yōu)秀學(xué)員
說(shuō)到Excel拾枣,你想到的可能就是函數(shù)公式沃疮,各種數(shù)據(jù)整理,圖表制作梅肤,又或者是數(shù)據(jù)分析司蔬。
我一直認(rèn)為這就是Excel的頂級(jí)應(yīng)用場(chǎng)景了,也經(jīng)常拿這些「專業(yè)術(shù)語(yǔ)」姨蝴,去嚇唬秋葉Office訓(xùn)練營(yíng)小白們俊啼。
正所謂無(wú)巧不成書(shū),故事最精彩的地方左医,往往是劇情的反轉(zhuǎn)授帕,前兩天我就被反轉(zhuǎn)了一次,而且還是個(gè)女生浮梢。
玩了10年跛十,我還是第1次看到,身邊能有人在Excel畫(huà)像素畫(huà)秕硝,而且那個(gè)人不是我芥映,是一個(gè)叫做漫想的女生。
具體是怎么做的呢?我們來(lái)聽(tīng)一聽(tīng)奈偏,漫想給我們講的坞嘀,Excel遇上Python那點(diǎn)事兒。
1- Excel像素畫(huà)原理
1-讀取圖片中的RGB值霎苗,將其轉(zhuǎn)化成網(wǎng)絡(luò)色彩姆吭,最后還原成RGB值;
2-將經(jīng)過(guò)處理的RGB值存為文本唁盏;
3-新建Excel内狸,導(dǎo)入文本值;
4-借助VBA進(jìn)行填充厘擂。
2- Python讀取像素值
備注:我的python環(huán)境為3.6昆淡,我用的IDE是pycharm。
這里如何就不花篇幅介紹如何設(shè)置python環(huán)境刽严。還沒(méi)有配的小朋友昂灵,可以看這篇文章。
https://zhuanlan.zhihu.com/p/28789759
1.安裝pillow模塊
PIL(Python Imaging Library)是Python中一個(gè)強(qiáng)大的圖像處理庫(kù)舞萄,但目前其只支持到Python2.7眨补。pillow是PIL的一個(gè)分支,雖是分支但是其與PIL同樣也具有很強(qiáng)的圖像處理庫(kù)倒脓。
Pillow的文檔:https://pillow.readthedocs.io/en/latest/
Pillow的github:https://github.com/python-pillow/Pillow
在windows系統(tǒng)下安裝PIL模塊:
方法一:pip安裝
cmd進(jìn)入你正在運(yùn)行的python代碼文件夾的lib中撑螺,即包含有pip.exe文件的文件夾中,代碼為:cd 文件夾位置崎弃。例如: cd D:\python\untitled\venv\Scripts
通過(guò)以下代碼實(shí)現(xiàn)安裝:
pip install Pillow
驗(yàn)證一下是否安裝成功:
python
import PIL
如圖就是安裝成功了甘晤。(我之前安裝過(guò)了)
方法二:(不建議)下載pillow
下載合適文件后,在文件夾中安裝饲做,之前有講過(guò)线婚,只要放對(duì)了位置就行。
PIL官方鏈接:http://pythonware.com/products/pil/
2.Python實(shí)現(xiàn)代碼
通過(guò)PIL來(lái)讀取圖像的RGB值盆均,輸出到txt文本中塞弊。(代碼均有備注)
#coding=utf-8
from PIL import Image #導(dǎo)入之前安裝的包
imload = Image.open('4.jpg') #加載圖像文件,如果之后要實(shí)現(xiàn)其他的泪姨,可以換圖像文件的名稱游沿,注意!驴娃!該圖片需要在同一文件夾下奏候,否則需要絕對(duì)或者相對(duì)路徑
im = imload.convert("RGB") #轉(zhuǎn)換為RGB的格式
width = im.size[0] #獲取寬度
height = im.size[1] #獲取高度
demo = open('rgb_4.txt','a') #為之后生成的值,生成一個(gè)txt文件唇敞,a是寫(xiě)入文件的意思
#迭代輸出蔗草,以行為單位咒彤,y在外層
for y in range(height):
for x in range(width):
r,g,b = im.getpixel((x,y)) #這里是重點(diǎn),用getpixel()方法獲取圖片像素點(diǎn)的RGB值
rgb =r,g,b
demo.write(str(rgb)+ '\t') #寫(xiě)入文件中咒精,并且rgb之間加入制表符
demo.write("\n") #換行則也換行
demo.close() #關(guān)閉文件
最終镶柱,在該python文件下,就可以看到生成的txt文件模叙。
導(dǎo)出的TXT文件如下:
3- EXCEL填充單元格
1.準(zhǔn)備TXT文件
因?yàn)榍懊鎝ython中生成的TXT歇拆,有括號(hào)和空格,需要在讀取RGB之前替換為空范咨。
- 在【打開(kāi)】中選擇該TXT文件導(dǎo)入故觅。此時(shí)會(huì)出現(xiàn),【導(dǎo)入文本向?qū)А壳。皟刹蕉际悄J(rèn)選項(xiàng)输吏,第三步中選擇【文本】的形式顯示。這里也可以在導(dǎo)入成功后替蛉,全選所有表格贯溅,在【開(kāi)始】選項(xiàng)卡中把【格式】全部換成【文本】。
- 替換查找6悴椤它浅!用替換查找把括號(hào)去掉!就是CTRL+H镣煮,將【(】和【)】替換為空
- 調(diào)整列寬和行高為正方形姐霍!注意!這里寬度與行高的單位是不一樣的怎静,每列的寬度8.43單位邮弹,等于64像素黔衡。每行高度15點(diǎn)蚓聘,等于20像素∶私伲總之調(diào)整像素一樣夜牡,就是正方形啦。
2.VBA實(shí)現(xiàn)RGB填充
右擊工作表sheet侣签,選擇查看代碼塘装,就可以自由的編輯VBA代碼了~
VBA代碼:
Sub Set_RGB()
Dim r As Range, arr #定義r
For Each r In Range("A:AFA") #注意這里的Range中的“A:AFA”指的是列的位置,這里每次都需要手動(dòng)修改影所,所以還是有些麻煩蹦肴,等過(guò)段時(shí)間,我再優(yōu)化一下
arr = Split(r, ",") #利用猴娩,來(lái)分割RGB值
r.Interior.Color = RGB(CInt(arr(0)), CInt(arr(1)), CInt(arr(2))) #CInt的作用是四舍五入后取整阴幌,如果要取整的浮點(diǎn)數(shù)小數(shù)部分恰好是0.5的情況勺阐,則向最接近的偶數(shù)取整。
Next
End Sub
運(yùn)行VBA代碼矛双,可能會(huì)出現(xiàn)越界錯(cuò)誤9 渊抽,但是沒(méi)關(guān)系,其實(shí)已經(jīng)生成RGB顏色啦议忽!
講解VBA循環(huán)語(yǔ)句
For Each 元素 In 組合
語(yǔ)句1
語(yǔ)句2
語(yǔ)句N
Next [元素]
最后運(yùn)行代碼懒闷,并調(diào)整EXCEL界面的大小,就可以看到細(xì)節(jié)啦~
越簡(jiǎn)單的圖栈幸,實(shí)現(xiàn)起來(lái)越快捷愤估,效果也越好呀!圖片太大了速址,電腦有可能帶不起來(lái)哦灵疮!
4- 總結(jié)
是不是從沒(méi)想過(guò)EXCEL也可以實(shí)現(xiàn)如此功能?
其實(shí)只要你敢想壳繁,你就做的出來(lái)震捣。
多一點(diǎn)耐心,多動(dòng)手闹炉,這份撩妹神器就到手蒿赢。
如此撩妹神器,不如現(xiàn)在就上手試一試渣触?程序員特有的浪漫送給你心儀的他/她一副十字繡畫(huà)吧
我是拉小登羡棵,源于Excel,不只是Excel