オープン中の最前面のKeynoteの書類の各スライド(ページ)のタイトルを取得して、改行文字を削除し、テキストエディット上の新規書類にタイトル一覧文字を入れるAppleScriptです。
Keynote書類は、きちんと各スライドのマスタースライドでタイトル入りのものを使用し、各スライドでタイトル用のテキストアイテムにタイトルを入れてあれば、AppleScriptからタイトルを取得できます。
もしも、スライド(ページ)上にタイトルが存在しない場合には、座標がどこどこ以上で文字サイズがXXXポイント以上のテキストアイテムのうち、もっとも上の方に存在しているものをタイトルとみなして取得する、といった処理も可能なので、そういう対策を行なってもよいでしょう。
ここでは、単にタイトル内容の再利用や内容確認などのためOS標準装備のテキストエディタに出力していますが、Keynote書類上に目次を作成するといった処理も普通に行なっています(仕様書の目次をつける場合など)。
Keynote書類に対する処理は、割と自分的に業務の効率化に寄与しています。毎月作成する説明用資料を、さまざまな書類のデータから数値を集めてKeynote書類を自動作成するといったAppleScriptも実際に存在しています。
▲このようなKeynote書類を……
▲本Scriptで処理するとテキストエディット上にタイトル一覧が展開される
AppleScript名:Keynoteでオープン中の最前面の書類のすべてのページのタイトルを取得してテキスト化 v2 |
— Created 2018-11-28 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" 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 tell front document set tList to object text of default title item of every slide end tell end tell –タイトルごとにゴミ取り(改行文字の削除) set outList to {} 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 not equal to "" then set the end of outList to j2 end if end repeat –リストを改行で区切ったテキストに変換 set aStr to listToStringUsingTextItemDelimiter(outList, return) of me –得られたテキストをTextEditの新規書類上に出力 tell application "TextEdit" activate make new document set text of front document to aStr end tell –リストを指定デリミタで区切ったテキストに変換 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 |