ObjecTips

Swift & Objective-C で iOS とか macOS とか

AppleScript の JavaScript for Automation で Excel のセルの値を取得する

環境

OS X 10.10.5, Microsoft Office 2011, Microsoft Excel 14.5.4
AppleScriptJavaScript for Automation を使用

準備

スクリプトエディタを起動
ライブラリに Excel を追加して AppleScript のリファレンスライブラリを参照できるようにする。

f:id:Koze:20150820233659p:plain

エディタの言語が AppleScript になっている場合、JavaScript に変更する。

f:id:Koze:20150825061528p:plain

AppleScriptJavaScript for Automation については Apple のリファレンスを参照する。
JavaScript for Automation Release Notes

AppleScript 自体についてはスクリプトエディタのメニューの ヘルプ>AppleScript ヘルプを表示 で日本語ドキュメントが参照できる。
https://help.apple.com/applescript/

スクリプト

まずアプリケーションを取得
AppleScript JavaScript for Automation では Application('AppName') でアプリケーションを取得できる。
バンドルID指定等その他の取得の仕方は Apple のリファレンスに載っている。

app = Application('Microsoft Excel');

次にワークシートのリストからシート名指定で目的のワークシートを取得する。

worksheet = app.worksheets['シート名'];

ワークシートからは横の行(1,2,3...)を表す rows を取得できる。
この時 rows 全体を取得しようとすると処理に時間がかかりすぎてスクリプトエディタと Excel がハングするのでとりあえずインデックス指定で目的の row を取得する。

row = worksheet.rows[1];

rows から縦の列(A,B,C...)を表す columns をインデックス指定して目的の cell を取得する。

cell = rows.columns[0];

cell に入力されている値を取得するには value() を使う。
value() はテキストなら文字列型で、数値なら数値型で入力値を取得できる。
他にも文字列指定で取得する(数値の場合は取得できない)characters() 等いろいろと関数が用意されている。
利用可能なものは ExcelAppleScript リファレンスを参照する。

value = cell.value();

これらの処理を実行し最後にログ出力するスクリプトが以下になる。

これを以下のようなシートに対して実行する。

A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3

出力は A2 となる。

シートの一番左上のセルは縦横0番目のインデックスとなるので、サンプルのスクリプトではシートの上から1番目のインデックス、左から0番目のインデックスに当たるセルの A2 の文字列がログ出力される。
Excel 上で表示されている行数の数値とインデックスの数値は値が異なるので注意。

参考

worksheet の cells からアドレス指定で直接目的の cell を取得する事もできる。
アドレスは文字列で入力する。

cell = worksheet.cells['A2'];