オープン中のKeynote書類のうち、指定タイトルのスライドを取得するAppleScriptです。
Keynoteには、ページにScript Labelを付ける機能が用意されておらず、一意にスライドを指定する方法がありません。先頭から●ページ目、というアクセスはできますが、それだけのことです。
そこで、各スライドのタイトルを指定して、該当するタイトルを持つスライドを取得するAppleScriptを作成して使用しています。ただし、タイトルについては途中に強制改行が入っていたりするケースもあるので、改行を削除した状態に変換してから指定文字列とのマッチングを行っています。
ただし、表紙のタイトルに長い題名を入力した場合など、ユーザーが意図して入れたものではない改行が途中で入ることもあるため、そのあたりでいろいろゴニョゴニョと改行削除のための悪あがきをしています。
さらに、スライド上の表(table)の指定文字のヘッダーのセルのデータを取り出したり、設定したりするScriptを作成し、最終的にはこれらを配列変数のようにパラメータを指定するだけでストレージ的にアクセスできるようにルーチンを整備しました。
AppleScript名:タイトルを指定して該当するスライドにアクセス.scptd |
— – Created by: Takaaki Naganoya – Created on: 2018/12/21 — – Copyright © 2018 Piyomaru Software, All Rights Reserved — use AppleScript version "2.5" — El Capitan (10.11) or later use framework "Foundation" use scripting additions set keynoteSlideObj to getSlideFromFrontKeynoteDocumentByTitleString("用途別のフレームワークを知ろう") of me –> slide 4 of document id "EFC0FE62-C92E-471E-82C7-DE7298AB083C" if keynoteSlideObj = false then return tell application "Keynote" tell keynoteSlideObj properties end tell end tell –Keynote タイトル指定してslideを取得する on getSlideFromFrontKeynoteDocumentByTitleString(targString) set repTargList to {string id 10, string id 11, string id 13} –LF,CR,VTab一括置換 tell application "Keynote" if (count every document) = 0 then return false tell front document set tList to object text of default title item of every slide end tell end tell –タイトルごとにゴミ取り(改行文字の削除) set outList to {} set sCount to 1 set hitF to false repeat with i in tList set j1 to contents of i set jTmp to (paragraphs of j1) as string –しつこい改行文字(?)を除去するための処理 set j2 to replaceTextMultiple(jTmp, repTargList, "") of me as string if j2 is equal to targString then set hitF to true exit repeat end if set sCount to sCount + 1 end repeat if hitF = false then return false tell application "Keynote" tell front document return item sCount of (every slide) end tell end tell end getSlideFromFrontKeynoteDocumentByTitleString –リストを指定デリミタで区切ったテキストに変換 on listToStringUsingTextItemDelimiter(sourceList as list, textItemDelimiter as string) set anArray to current application’s NSArray’s arrayWithArray:sourceList set aString to anArray’s componentsJoinedByString:textItemDelimiter return (aString as string) end listToStringUsingTextItemDelimiter –任意のデータから特定の文字列を複数パターン一括置換 on replaceTextMultiple(origData as string, origTexts as list, repText as string) set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to origTexts set origData to text items of origData set AppleScript’s text item delimiters to {repText} set origData to origData as text set AppleScript’s text item delimiters to curDelim return origData end replaceTextMultiple |
More from my site
(Visited 51 times, 1 visits today)