当前位置:   article > 正文

python可以嵌在vba中吗_【Python+VBA】当蔡徐坤在Excel中打起了篮球!

excel vba蔡徐坤

鬼畜不可怕,就怕鬼畜有文化

准备好了吗各位?

f9069bd3e2d81f8521ccf0b56d2bd4e6.png

下面再现一下历史名场面

让坤坤在Excel中给大家跳一支舞

Go!

看完内心直喊666。

下面讲下制作的过程:

e9bc149405a27bd8292143f078ce0a51.png 获取原视频,切割原视频关键帧的图片 这 里使用Video to Picture软件,将下载好的视频切割成多个图片 。

a518f47a68f928f4acfb3fc425e07d86.png

切割好之后,是下面的效果:

cb6fad658ce5bc6a2e53647eb57302c0.png

837b1b12c59a9eadb33e85a1f3739e31.png

接着就要上Python大法了!

我把图片放到了D盘某个目录下,运行Python程序,将每个图片转换成二进制文件,并保存到单独的txt中(多少个图片就有多少个txt)。

import osfrom PIL import Imagefrom os import listdirdef picture2code(filename1,filename2):    image_file = Image.open(filename1)    # 缩放成60*70    image_file = image_file.resize((180200))    # 转成黑白图像    image_file = image_file.convert('1')     width,height=image_file.size    f1=open(filename1,'r')    f2=open(filename2,'w')    for i in range(height):        for j in range(width):            # 获取每个像素值            pixel=int(image_file.getpixel((j,i))/255)            # 黑白图像中0代表黑色,1代表白色            # 我希望有内容的部分表示为1,所以将01互换            if(pixel==0):                pixel=1            elif(pixel==1):                pixel=0            f2.write(str(pixel) + ' ')            if(j==width-1):                # 换行                f2.write('\n')    f1.close()    f2.close()path_picture='D:\\pictures'path_txt='D:\\txt'# 文件夹下所有文件pictureList=listdir(path_picture)m=len(pictureList)for i in range(m):    pictureNameStr=pictureList[i]    # 图像路径的完整表示    picturelocation=os.path.join(path_picture, pictureNameStr)    # 获取文件前缀,即文件名    pictureStr=pictureNameStr.split('.')[0]    # 生成的文本路径的完整表示    txtlocation=os.path.join(path_txt, '%s.txt'%pictureStr)    picture2code(picturelocation,txtlocation)

转换过的TXT是这样的。

5d82af13625ab90cde61ea46a64ca8e1.png

b3fceb472bb2f880773b056af40f285e.png

接下来交给VBA完成其余的工作

我们把刚才的txt手动倒导入一个看下效果

8b7a2ab3690ef2dad5afc2333aecb1c0.png

显然,这不是我们想要的样子,我们需要用条件格式,把单元格的值是1的凸显出来。

36b55f4c3bdc8c67699fb1fad6336981.gif

但是一百多个txt,如果手动一个一个导入实在是太慢了,我们想到了使用VBA来批量导入txt,并且设置条件格式和调整列宽。

实现代码:

Sub 读取txt()    Application.ScreenUpdating = False    strr = Dir(ThisWorkbook.Path & "\" & "*.txt")  '取出第一个文件    Do While strr <> ""  '当取出来的文件名不是空的时候,才运行循环体内部的代码        Workbooks.OpenText Filename:=ThisWorkbook.Path & "\" & strr '打开文本文件        i = i + 1        ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "第" & i & "张"        ActiveWorkbook.Worksheets(1).UsedRange.Copy ThisWorkbook.Worksheets("第" & i & "张").Range("a1")        ActiveWorkbook.Close        Call 调整表格        strr = Dir  '再使用一次Dir函数,取出下一个txt文件名,直到取出的文件名为空的时候,结束循环    Loop    Application.ScreenUpdating = TrueEnd SubSub 调整表格()    ActiveWindow.Zoom = 10    Columns("A:FW").Select    Selection.ColumnWidth = 5    Rows("1:202").Select    Selection.RowHeight = 20    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _    Formula1:="=1"    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority    With Selection.FormatConditions(1).Interior        .PatternColorIndex = xlAutomatic        .ThemeColor = xlThemeColorLight1        .TintAndShade = 0    End WithEnd Sub

做完上述操作以后,基本上就大功告成了,只需要不断切换Sheet,就能看到动画效果。

a8a701c531c94d201249dd3aa8b34e0c.gif

我们也使用VBA代码循环切换Sheet

Sub 切换表格()    For i = 1 To Worksheets.Count - 1        Worksheets("第" & i & "张").Select        DoEvents    NextEnd Sub

大功告成!

这样,文章开头的效果就做出来了!

ed64828875727c390615007c647eaa02.png

害怕律师函,告辞!

=  推荐阅读  

【经验】快速学习VBA

【新手必备】VBA练手专题

Excel提取Word简历数据.xls

代码存储美化工具测评-【VBE2019】

代码合集,各取所需【操作图片】


本文附件可私信找我获取(逃...

另外,觉得不错点个再看再走~

ada234618284b352a83fb1fc0967c7d7.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/205401
推荐阅读
相关标签
  

闽ICP备14008679号