Pagesの書類上にある表に対して、指定のラベルを持つ行を削除するAppleScriptです。macOS 12.3beta2+Pages 11.2で動作確認しています。
現在作成中のWebブラウザのScripting本で、各種AppleScript実行環境の一覧表を掲載しているのですが、
それぞれの差別化ポイントとして掲載していたデータのうちの1つが、執筆後に一律で解決できることになり(NSAlertダイアログの最前面表示)、そのデータ行については削除することになりました。
そこで、複数のPages書類に記載した表を一括で削除することになり、AppleScriptを組んで削除することにしました。
必要はありませんでしたが、ヘッダー列が1列だけでなく、複数の列になった場合と、ヘッダーの複数セルが1つにまとめられていた場合への対処も行っておきました。ただし、気休め程度であって、本気で対処したものではありません。
AppleScript名:Pages書類内の表の指定ラベルの行を削除.scpt |
— – Created by: Takaaki Naganoya – Created on: 2022/02/14 — – Copyright © 2022 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" use framework "Foundation" use scripting additions set targRowLabel to "NSAlert ダイアログの最前面表示" tell application "Pages" tell front document set tList to every table whose column count = 2 end tell end tell delRowInEveryTable(tList, targRowLabel) of me on delRowInEveryTable(tList as list, targRowLabel as string) tell application "Pages" repeat with i in tList set j to contents of i tell j set hCCount to header column count set hRCount to header column count –ヘッダーカラムが複数存在している場合に対処? repeat with hc from 1 to hCCount tell column hc set aList to value of every cell end tell if targRowLabel is in aList then set aRes to search1DList(aList, targRowLabel) of me –ヘッダー列に削除対象ラベルが存在しつつ、削除対象ラベルがヘッダー行の範囲ではない場所に出現した場合に削除 if (aRes is not equal to false) and (aRes ≥ hRCount) then try –ねんのため delete row aRes end try end if end if end repeat end tell end repeat end tell end delRowInEveryTable on search1DList(aList, aTarg) set anArray to current application’s NSMutableArray’s arrayWithArray:aList set anIndex to anArray’s indexOfObject:aTarg if (anIndex = current application’s NSNotFound) or (anIndex > 9.99999999E+8) then return false end if return (anIndex as integer) + 1 –convert index base (0 based to 1 based) end search1DList |
More from my site
(Visited 46 times, 1 visits today)