いろいろ調べてみたら、PowerPointが扱うファイルパス形式に整合性がまったくないことがわかりました。なんなんでしょう、これは。
ファイルのオープン時:alias(HFS path)
これは、とくに問題はありません。最低限のラインはクリアしているといってよいでしょう。
PDF書き出し時:HFS pathのテキスト
fileオブジェクトではなくHFS pathの文字列です。ここでかなり「おかしなプログラムだな」という感想を抱きます。こんなおかしなデータを要求するのはPowerPointぐらいだと思いますよ?
PPTX書類の新規保存時:HFS pathのテキスト
PDF書き出しもPPTX書類の保存も、同じく「save」コマンドで行うので、仕様が同じなのも納得ですが、通常書類のsaveにこれでは相当変わった仕様にしか見えません。
書類のフルパス情報:POSIX path
これは、致命的におかしな挙動であり、呆れるほどおかしな仕様です。担当者が正気なのか疑わしいレベルです。Office 2011のPowerPointでpresentation(書類)のfull name(フルパス情報)を取得してみたところ、HFS path文字列が返ってきたという調査結果が残っていました。
いま、バージョン16.75のPowerPointのpresentation(書類)のfull name(フルパス情報)を取得すると、POSIX pathが返ってきます。
▲Office 2011のPowerPointのパス情報の記述
▲バージョン16.75のPowerPointのパス情報の記述
AppleScript用語辞書上の記載内容にはたいして変化はないのですが、こんな頭のおかしな状態になっているとは思いませんでした。正直、PowerPointで何かまとまった処理を行おうとは思ったことが(それほど)なかったのですが、Keynoteで山のようにいろいろ強烈なScriptを書いているので、PowerPointでもいろいろできるのでは? と、冗談半分で試してこの通りです。
まさか、ExcelとWordもこの調子なのでは?(^ー^;
AppleScript名:オープン中の最前面のPowerPoint書類のフルパスの文字列を取得.scpt |
set a to getPPTpath() of me –> "Cherry:Users:me:Documents:2013-MacUDingCFUD.ppt"–Office 2011 –> "/Users/me/Documents/AppleScript 13/PowerPoint/TESTプレゼンテーション1 .pptx"–Office 2019 –オープン中の最前面のPowerPoint書類のフルパスの文字列を取得 on getPPTpath() tell application "Microsoft PowerPoint" set pCount to count every presentation if pCount = 0 then return false tell active presentation –Documentのフルパスを取得する set aPath to full name return aPath end tell end tell end getPPTpath |
PowerPointの書類からTOCつきのPDFを書き出すAppleScriptを書いた際には、頭のおかしなPowerPoint 16.75が返してくるパス形式をサブルーチン側で吸収して処理するようにしました。ただ、将来的にこの頭のおかしな形式からまともな形式に戻してきたときに問題が発生するので、再変更に備えてもう少し準備しておいたほうがよいのかもしれません。
このPowerPointの担当者は、頭がおかしいです。
AppleScript名:オープン中のPowerPoint書類のパスをalias形式で取得.scpt |
set pptPath to getPPTpath() of me –> alias "Macintosh HD:Users:me:Documents:AppleScript 13:PowerPoint:TESTプレゼンテーション1 (Sectionなし).pptx" –オープン中の最前面のPowerPoint書類のフルパスの文字列を取得 on getPPTpath() tell application "Microsoft PowerPoint" set pCount to count every presentation if pCount = 0 then return false tell active presentation –Documentのフルパスを取得する set aPath to full name end tell end tell set aFile to POSIX file aPath set anAlias to aFile as alias return anAlias end getPPTpath |