Keynote書類で、タイトルに入っている丸つき数字を取得して、同スライド内にある「表」の行数を追加し、追加したヘッダーカラムに丸つき数字を追加するAppleScriptです。Cocoa Scripting Courseで手間のかかるページの作業を効率化するために作成しました。
本ScriptはKeynote 14.3で作成していますが、とくにあたらしめの機能は使っていないため、かなり古いバージョンに対しても使えるはずです。
Keynoteの現在表示中のスライドからテキストを抽出し、そこから丸つき数字の文字だけを取り出します。
それぞれの丸つき数字文字を数値に変換し、最大値を求めます。この最大値と表の行数を比較。表で足りない行数を計算して、表に行を新規追加。カラムヘッダーに丸つき数字を補います。
こうした処理を選択中の複数のスライド(ページ)に対して実行します。
表の「中身」についても、実際にスライド上に配置しているので自動で抽出できてもよさそうですが、そこに時間をかけても仕方がないのでいまはこのままです。あとで、そういう処理ができるようになるかもしれません。
AppleScript名:Cocoa Scripting Course用、タイトルの丸つき数字から表を編集 v2(複数スライド選択用).scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/12/23 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions tell application "Keynote" tell front document set sSel to selection if class of first item of sSel is not equal to slide then return repeat with curSlide in sSel set current slide to curSlide tell current slide –タイトルから丸つき数字文字のみ抽出 set myTitle to object text of default title item set numStr to holdNumberWithSignOnly(myTitle) of me set numList to characters of numStr –丸つき数字のうち最大のものを取得 set cList to {} repeat with i in numList set j to decodeNumFromNumWithSign(i) of me set the end of cList to j end repeat set sList to shellSortDescending(cList) of me set theLargestNum to first item of sList –最大値 –表の情報を取得 tell table 1 set rCount to count every row set tHeight to height of it end tell –追加が必要な行数を算出 set addRows to theLargestNum + 2 – rCount if addRows > 0 then tell table 1 set row count to (rCount + addRows) repeat with i from (rCount – 1) to (rCount + addRows – 2) tell row (i + 1) tell cell 1 set value to convNumToNumWithSign(i) of me end tell end tell end repeat tell row -1 tell cell 1 set value to "返り値" end tell end tell –Resize Heiight set curRows to row count set height to (tHeight / rCount) * curRows end tell end if end tell end repeat end tell end tell –文字列から丸つき数字のみ抽出 on holdNumberWithSignOnly(aStr as text) set aNSString to current application’s NSString’s stringWithString:aStr return (aNSString’s stringByReplacingOccurrencesOfString:"[^\\U000024EA-\\U000024EA\\U00002460-\\U00002473\\U00003251-\\U000032BF\\U000024FF-\\U000024FF\\U00002776-\\U0000277F\\U000024EB-\\U000024F4\\U00002780-\\U00002789\\U0000278A-\\U00002793\\U000024F5-\\U000024FE]" withString:"" options:(current application’s NSRegularExpressionSearch) range:{0, aNSString’s |length|()}) as text end holdNumberWithSignOnly –丸つき数字を数字に変換 on decodeNumFromNumWithSign(aStr as string) set numStr to "①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿" if numStr does not contain aStr then return false using terms from scripting additions set bNum to offset of aStr in numStr end using terms from return bNum end decodeNumFromNumWithSign –数字を丸つき数字に変換 on convNumToNumWithSign(aNum as number) if (aNum ≤ 0) or (aNum > 50) then return "" set aStr to "①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿" set bChar to character aNum of aStr return bChar end convNumToNumWithSign –入れ子ではないリスト(1D List)の昇順ソート on shellSortAscending(aSortList) script oBj property list : aSortList end script set len to count oBj’s list’s items set gap to 1 repeat while (gap ≤ len) set gap to ((gap * 3) + 1) end repeat repeat while (gap > 0) set gap to (gap div 3) if (gap < len) then repeat with i from gap to (len – 1) set temp to oBj’s list’s item (i + 1) set j to i repeat while ((j ≥ gap) and (oBj’s list’s item (j – gap + 1) > temp)) set oBj’s list’s item (j + 1) to oBj’s list’s item (j – gap + 1) set j to j – gap end repeat set oBj’s list’s item (j + 1) to temp end repeat end if end repeat return oBj’s list end shellSortAscending –入れ子ではないリスト(1D List)の降順ソート on shellSortDescending(aSortList) script oBj property list : aSortList end script set len to count oBj’s list’s items set gap to 1 repeat while (gap ≤ len) set gap to ((gap * 3) + 1) end repeat repeat while (gap > 0) set gap to (gap div 3) if (gap < len) then repeat with i from gap to (len – 1) set temp to oBj’s list’s item (i + 1) set j to i repeat while ((j ≥ gap) and (oBj’s list’s item (j – gap + 1) < temp)) set oBj’s list’s item (j + 1) to oBj’s list’s item (j – gap + 1) set j to j – gap end repeat set oBj’s list’s item (j + 1) to temp end repeat end if end repeat return oBj’s list end shellSortDescending |
More from my site
(Visited 1 times, 1 visits today)