2010年10月10日日曜日

スクリプトメニューから実行すると遅くなる件

 スクリプトをスクリプトメニューから実行するとかなり実行速度が遅くなる。ちょっとした軽いスクリプトだとわからないが、重いスクリプトを走らせると如実にわかる。
 アクティビティモニタで比較してみると、スクリプトエディタから実行するときは、数秒間CPU使用率が100%近くまで上がり、その後は25%ぐらいで推移し、十数秒で処理を終わらせる。ところが、スクリプトメニューから実行するとCPU使用率は20%ぐらいのままだらだらと推移し、3分ほどかかって処理を終わらせる。バックグラウンドで処理することを考慮してこうなっているのかもしれんが、余計なお世話よ。
 で、これを回避するのに「スクリプトを実行するスクリプト」から実行するという手がある。

run script "実行スクリプトのパス"

例 run script "/Users/username/Library/Scripts/Applications/Excel/excelsum.scpt"

でいい。10.6だとパスの書き方はaliasでもPOSIX pathでもいいみたい。

2010年9月28日火曜日

Numbers:現在表示されているシートを取得/セルの式を取得

 ExcelからiWork'09のNumbersにデータを移植する際、アップルスクリプトの互換性も気になるところ。
 作業中に行き当たったのが、Numbersでは「現在表示されているシート」を示すプロパティがないこと。Excelでいうところの「active sheet」に相当するプロパティがない。もうひとつは、セルの値ではなく「式」を示すプロパティがないこと。Excelでいうところの「formula」に相当するプロパティがない。

 「現在表示されているシート」については、もしセルを選択している状態ならば、以下の方法で現在表示されているシート(active_sheet)を取得することは可能。ただしセルを選択していないと、いずれのitemも{missing value}になってしまい、エラーとなる。

tell application "Numbers"
tell document 1
repeat with a_sheet in sheets
if selection range of tables of a_sheet is not {missing value} then set active_sheet to contents of a_sheet
end repeat
active_sheet
end tell
end tell


 「式」については、一旦セルのformatプロパティをtextに変更し、テキスト化された計算式を取得するというやり方を提案している人がアップルのフォーラムにいる。これが現状では一番簡単なやり方かな。

tell application "Numbers"
tell table 1 of sheet 1 of document 1
set a_cell to a reference to cell of selection range
set a_format to format of a_cell
set format of a_cell to text
set a_formula to value of a_cell
set format of a_cell to item 1 of a_format
a_formula
end tell
end tell


 で、これらを組み合わせて、現在選択しているセルの式を取得するアップルスクリプト。まあこれもtableがひとつというのが前提だから、そこまで突き詰めるとめんどくせー。

tell application "Numbers"
tell document 1
repeat with a_sheet in sheets
if selection range of tables of a_sheet is not {missing value} then set active_sheet to contents of a_sheet
end repeat
active_sheet
end tell
tell table 1 of active_sheet
set a_cell to a reference to cell of selection range
set a_format to format of a_cell
set format of a_cell to text
set a_formula to value of a_cell
set format of a_cell to item 1 of a_format
a_formula
end tell
end tell

2010年9月21日火曜日

アップルスクリプトのページは・・・

アップルスクリプトのページは、右側の「アップルスクリプトのページ」からどうぞ。

2010年9月20日月曜日

復活

復活。
移動先のvoxがサービス終了しちまったたので。
まあ、めったに書かないブログだが、残しておいてよかったわ。

ついでにiswebも終了とのことで、そっちのホームページをこちらにまとめようかと。