macOS Automator 自动化操作 PowerPoint(格式转换、生成PDF、文件提取)

利用macOS的Automator,可以在Finder菜单中快速对一个或多个PowerPoint文稿进行格式转换、生成PDF、文件提取等操作。此操作需要macOS中安装较新版本的Microsoft Office PowerPoint。

背景:要从物理课的.ppt文件格式的操作中提取出音频用以加速播放及调整进度条,而.ppt文件无法直接解压缩,需要转换为.pptx格式再解压缩后提取出音频。

开始编写Quick Action流程

打开Automator App(默认位于Launchpad的Other文件夹中),新建Quick Action。Quick Action是可以加入Finder菜单、Services菜单的一类Workflow流程。

在左侧查找Filter Finder Items拖入右侧流程中,对输入文件的后缀名称进行过滤。这里仅接受ppt后缀名的文件,若要对pptx pps ppsx等后缀名的文件进行处理,也可以将其加入过滤器中并将规则All改为Any。

开始编写Apple Script,打开PowerPoint文件

参考资料:https://apple.stackexchange.com/questions/217004/how-do-i-get-automator-actions-for-microsoft-powerpoint-and-word

在左侧寻找Run Apple Script,拖入右侧流程图中。下面的代码将ppt转为pptx并保存在同一文件夹中。若要接受更多格式的后缀名,需要修改makeNewPath部分(这里是将后三位ppt截掉,换成pptx)。

on run {input, parameters}
	set output_list to {}
	tell application "Microsoft PowerPoint"
		launch
		set theDial to start up dialog
		set start up dialog to false
		repeat with i in input
			open i
			set output_path to my makeNewPath(i)
			save active presentation in output_path
			close active presentation saving no
			set end of output_list to output_path as alias
		end repeat
		set start up dialog to theDial
		quit
	end tell
	return output_list
end run

on makeNewPath(f)
	set t to f as string
	return (text 1 thru -4 of t) & "pptx"
end makeNewPath

若要转换为PDF格式,则需将

save active presentation in output_path

一句改为

save active presentation in output_path as save as PDF

并修改makeNewPath的部分:

on makeNewPath(f)
    set t to f as string
    if t ends with ".pptx" then
        return (text 1 thru -5 of t) & "pdf"
    else
        return t & ".pdf"
    end if
end makeNewPath

至此,将ppt转为pptx或将ppt/pptx转为pdf的功能已实现完毕。如不需要文件提取,请向后跳到“调试和使用”一节。

编写Shell Script提取pptx中的文件

使用压缩软件打开.pptx文稿即可读取其内容。若要实现自动化处理,可以使用Automator的Run Shell Script模块。

下面是提取全部音频文件的代码,Run Shell Script设置为将输入传达到参数中。

for f in "$@"
do
  unzip "$f" -d "$f Files/"
  mkdir "$f Audio"
  for file in `ls "$f Files/ppt/media/"`
  do
    if [ "${file##*.}" = "wav" ]; then
      mv -f "$f Files/ppt/media/$file" "$f Audio/"
    fi
  done
  rm -rf "$f Files/"
  rm -f "$f"
done

这段代码将pptx中附着的音频文件拷贝到与pptx相同目录下的*.pptx Audio文件夹中,并将源文件删除。

调试和使用

由于在Automator中测试并没有文件读入,测试时可以在流程开始处拖入Get Specified Finder Items指定输入文件(正式在Automator外使用前要删掉)。

之后,按下Command+S保存脚本,输入一个名字,就可以在Finder右键菜单的Services项或是文件的预览栏中找到刚刚编写的脚本了。

.workflow文件的存储位置在~/Library/Services/下,对其重命名即可改变菜单中的名称。

此处有一个问题:在较高版本的macOS中实际执行时会出现读写磁盘权限不足的问题。这时需要对该脚本赋予Full Disk Access权限。打开System Preferences,在Security & Privacy中找到Full Disk Access,左下角解锁后点击加号,将执行该脚本的Finder加入进去并赋予权限。Finder.app的路径在/System/Library/CoreServices中。

可以用了!

Leave a Reply