Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

Numbers+ignoring application responsesの注意点

Posted on 11月 21 by Takaaki Naganoya

Numbersは、表からのデータ取得は高速なのに表にデータを設定するのが1000倍以上遅いという特徴を持っています。Numbersの表にデータを連続設定するのが、ある意味現行環境で一番重いAppleScriptのベンチマークと言われてしまうほどに。

そんな中、「ignoring application responses」句で囲って、非同期コマンド実行を行うと、Numbersでも100倍ぐらいの高速化が図れます。AppleScriptの処理系はすぐに解放されますが、Numbers側でコマンドをバッファリングして処理を継続します。

速くなりすぎなので、どこかに副作用があるのでは? と、かなり懐疑的な目で見ていましたが、どうやら危ないポイントが見えてきました。

5×5000セルを連続値で埋める、というテストを「ignoring application responses」つきで行なっていたところ、2万2000を超えたあたりでNumbersの表にデータが書き込まれなくなっていました。


▲10x 5,000のセルを選択して、連続値で埋める処理を非同期モードで実行した結果。この処理では、31,717まで実行したところで終わった

AppleEventのコマンドのバッファリングをアプリ側で行なっているような挙動だったのですが、このバッファに一定の上限があるという仮説を立てています。

ちょっとした処理を行うだけではこの「上限」に達することはないものと思われますが、Numbersに対してセルに値を連続かつ大量に設定するような場合には気をつけてください。

実施環境は、Numbers v14.2+macOS 15.2beta+MacBook Air M2(RAM 16GB)です。

ちなみに、同一環境でMicrosoft Excelで選択範囲(10×5,000)のデータ取得+書き換え+書き戻しをAppleScriptで行なってみたら、1.1秒で終わりました。データの取りこぼしは一切ありません。

AppleScript名:選択中のセルをシーケンシャル値で埋める(ベンチマーク用).scpt
use AppleScript
use scripting additions
use framework "Foundation"

script spd
  property aList : {}
end script

set a1Dat to current application’s NSDate’s timeIntervalSinceReferenceDate()

set sNum to 1
tell application "Numbers"
  tell front document
    tell active sheet
      tell table 1
        set (aList of spd) to cell of selection range
        
        
set iCount to 0
        
set newList to {}
        
repeat with i in (aList of spd)
          set the end of newList to sNum + iCount
          
          
ignoring application responses
            set value of i to sNum
          end ignoring
          
          
set sNum to sNum + 1
        end repeat
      end tell
    end tell
  end tell
end tell

set b1Dat to current application’s NSDate’s timeIntervalSinceReferenceDate()
set c1Dat to (b1Dat – a1Dat)

★Click Here to Open This Script 

More from my site

  • 新刊電子書籍「AppleScript基礎テクニック(33)選択中のオブジェクト取得」を刊行新刊電子書籍「AppleScript基礎テクニック(33)選択中のオブジェクト取得」を刊行
  • Numbersの選択範囲で空欄でないセルに指定の文字を入れるNumbersの選択範囲で空欄でないセルに指定の文字を入れる
  • Numbersで選択中の2列のセルを比較して並べ直して書き戻す v2Numbersで選択中の2列のセルを比較して並べ直して書き戻す v2
  • Numbersで選択範囲のセルの前後の空白を削除Numbersで選択範囲のセルの前後の空白を削除
  • iWork Appsがv14.2にアップデートiWork Appsがv14.2にアップデート
  • iWork Appsでオブジェクトの削除を安全にiWork Appsでオブジェクトの削除を安全に
(Visited 2 times, 2 visits today)
Posted in How To | Tagged ignoring application responses Numbers | Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 13.6.5 AS系のバグ、一切直らず
  • CotEditorで2つの書類の行単位での差分検出
  • Apple純正マウス、キーボードのバッテリー残量取得
  • macOS 15, Sequoia
  • ディスプレイをスリープ状態にして処理続行
  • 初心者がつまづきやすい「log」コマンド
  • Adobe AcrobatをAppleScriptから操作してPDF圧縮
  • 与えられた文字列の1D Listのすべての順列組み合わせパターン文字列を返す v3(ベンチマーク用)
  • 指定のWordファイルをPDFに書き出す
  • メキシカンハットの描画
  • macOS 13 TTS環境の変化について
  • 2023年に書いた価値あるAppleScript
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • 可変次元のベクトルに対応したコサイン類似度計算
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • Cocoa Scripting Course 続刊計画
  • macOS 13.6.2アップデート Cocoa-AppleScript Applet修正はなし

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (586) 10.15savvy (437) 11.0savvy (281) 12.0savvy (201) 13.0savvy (141) 14.0savvy (89) 15.0savvy (65) CotEditor (63) Finder (51) iTunes (19) Keynote (112) NSAlert (60) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (51) NSDictionary (27) NSFileManager (23) NSFont (19) NSImage (41) NSJSONSerialization (21) NSMutableArray (62) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (117) NSURL (97) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (67) Pages (51) Safari (44) Script Editor (26) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC