Powershell(7)——批量生成PPT
创作者俱乐部成员
问题来自方盛老师的帖子:当前文件夹里有很多图片,需要新建一个演示文档,每张幻灯片插入3张图片,用完为止。
刚才写了个更详细的帖子,结果一发布就被删除了,还不能编辑,只好简单说一下。。。
代码如下:
🔔 | #&cls&powershell -NoProfile -NoLogo "gc '%~0'|out-string|iex"&pause&exit $arr = (dir -Recurse *.jpg).FullName $arr = $arr | Get-Random -Count $arr.Count $ppt = New-Object -ComObject kwpp.application $ppt.Visible = $true $p = $ppt.Presentations.Add() $n = 0 1..[int]($arr.Count/3) | %{ $s = $p.Slides.Add($_, 12) 1..3 | %{ $i = $s.Shapes.AddPicture($arr[($n++)], 0, 1, ($_ * 200), 250) $i.AnimationSettings.EntryEffect = 3332 } } |
首先可以稍微了解一下powershell的基础
$xxx是变量,通过等号将右边表达式的结果赋值给变量,后面可用
|是管道符,左侧表达式的结果通过管道传递给右侧表达式,作为参数处理
%{}是foreach-object的缩写,表示逐个循环处理左边管道传递过来的数组,大括号里是每次处理的逻辑,$_是每次处理的对象
然后要会查看PPT对象模型的文档,要知道演示文档的常用对象,有哪些属性和方法可用
然后介绍代码:
💡 | #&cls&powershell -NoProfile -NoLogo "gc '%~0'|out-string|iex"&pause&exit |
这是个小技巧,可以把powershell脚本当成bat批处理,方便用户使用
🔔 | $arr = (dir -Recurse *.jpg).FullName $arr = $arr | Get-Random -Count $arr.Count |
dir命令用来获取当前目录里的jpg文件,-Recurse用来包含子文件夹里的jpg,列出所有jpg后,取完整路径,存入数组$arr
应方盛老师需要,第二句用Get-Random命令将$arr数组打乱顺序
📌 | $ppt = New-Object -ComObject kwpp.application $ppt.Visible = $true $p = $ppt.Presentations.Add() $n = 0 1..[int]($arr.Count/3) | %{ $s = $p.Slides.Add($_, 12) 1..3 | %{ $i = $s.Shapes.AddPicture($arr[($n++)], 0, 1, ($_ * 200), 250) $i.AnimationSettings.EntryEffect = 3332 } } |
新建wps演示的com对象,用$ppt变量表示
将$ppt的Visible属性设置为真,意思是显示com对象打开的窗口
在$ppt的Presentations演示文档的集合里,新建Add个空的演示文档,用$p表示
$n用来记录当前处理到哪张图片了,是个从0开始每次加1的序号
[int]($arr.Count/3)用数组长度除以3取整,获得需要新建几张幻灯片
1..x是生成1到x的序列
%{}是对这个序列循环,在Slides幻灯片的集合里,新建Add一个空幻灯片,需要两个参数,位置等于序号$_,模板为空模板12,这个新的幻灯片用$s表示
然后再对1到3这个序号循环,Shapes是图片图形的集合,插入图片AddPicture有7个参数
显示图片名称,从$arr数组里取第$n项,之所以写成$n++,表示每次取出后序号$n增长1
0表示不连接原图片
1表示图片存入pptx文件
($_ * 200)表示图片的位置横轴由序号乘以200计算出来
250表示图片的纵轴都是一样的
后面还可以加上图片的宽度、高度
当前插入的图片用$i表示,AnimationSettings.EntryEffect属性是图片的进入动画,这里的3332是查询文档得到的飞入动画效果
总的来说,通过查看PPT的对象模型的文档,了解需要处理的对象,及其属性和方法,然后用powershell写一些循环判断,最后保存成bat批处理文件,用户只需要放到图片所在文件夹,双击bat即可批量插入图片创建演示文档
powershell的好处是和外部数据的联系比JS宏方便,无论是遍历图片文件、或是从表格、文档里获取数据、图表,插入演示文档都十分方便
创作者俱乐部成员
创作者俱乐部成员