Script Editor上で選択中の1D List(1次元配列)のテキストを評価してリストとして解釈し、それをもとにKeynoteの新規書類上に表を作成するAppleScriptです。
こんな感じ(↑)に、Script Editor上で1D List(1次元配列)のテキストが存在しているものを、資料化するためにKeynote上で表にすることがありますが、これが個人的に超絶かったるいです。
きれいにデータになっているものを、表のセルに細切れにして突っ込む作業がかったるいので、おそらくそれを手動で行う数倍の時間をかけてAppleScriptで自動化しておきました。
(1)Script Editor上でListの箇所を選択しておく
(2)Script Menuに入れておいた本Scriptを呼び出す
(3)Keynoteで新規書類を作成し、1ページ目に表を新規作成し、(1)の内容を1行目に代入
という動作を行います。上記のとおり、Script Menuに入れて呼び出すことを前提にしています。もし、そうでなければ当該部分をコピーしておいて、クリップボード経由で受け取るようにしてみてください。
当初は本Scriptもそういう構造になっていましたが、選択部分をコピーするのを忘れることが多いため、選択箇所から取得するように変更しました。
本Scriptは自分自身で使うことを前提に作ったため(本Blogまるごとそんなもんですが)、run scriptコマンドで文字列をAppleScriptとして評価して実行して結果を取得するという、ひじょーーーーーにセキュリティホールになりやすい処理を行っています。
本来、取得した文字列をAppleScriptとして評価して、構文要素的に「コマンド類」が入っていないか(とくにdo shell script)を評価する必要があると思います。その上で、もしもコマンド類が入っていた場合にはユーザーに再考を促すようにダイアログを表示するなどの処理を行うのがまっとうなやりかたでしょう。
このあたり、ものすごくラフに作ったので、利用はあくまで自己責任で行ってください(本Blogまるごとそんなもんですが)。
AppleScript名:選択中のリストのテキスト(多分)をもとにKeynoteの表を作成 |
— – Created by: Takaaki Naganoya – Created on: 2019/07/31 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aTargMasterSlide to "空白" –This string is *Localized* in Japanese. This is "Blank" tell application "Script Editor" tell front document set bText to contents of selection end tell end tell if bText = "" then return try set aRes to run script bText –Danger!! Take Care of. set aClass to class of aRes on error display dialog "The contents of clipboard seems not to be an AppleScript list (1)." with title "Error" return end try if aClass is not equal to list then display dialog "The contents of clipboard seems not to be an AppleScript list (2)." with title "Error" return end if set aLen to length of aRes tell application "Keynote" activate set aDoc to (make new document with properties {document theme:theme "ホワイト", width:1024, height:768}) — –This string is *Localized* in Japanese. This is "White" tell aDoc set masList to name of every master slide if aTargMasterSlide is not in masList then return –多分ないと思うが、作成予定のマスタースライドが現在有効でない場合に処理打ち切り set base slide of current slide to master slide aTargMasterSlide tell current slide set aTable to make new table with properties {header column count:0, header row count:1, row count:2, column count:aLen, name:"Test Table"} tell aTable repeat with y from 1 to 1 tell row y repeat with x from 1 to aLen tell cell x set value to (item x of aRes) as string end tell end repeat end tell end repeat end tell end tell end tell end tell |