Numbersのセルに画像を貼り付ける作業を自動化するAppleScript
-
前書き
macのiWorksに含まれる表計算ソフトNumbers
では、セルを画像で塗りつぶすことができる。オフィススイートの雄であるMicrosoft Excelでもできるが、両者は相互互換ではない。すなわちNumbersで画像を貼り付けたスプレッドシートをExcelに書き出しても、画像は残らない。だから、これから紹介するTipsは、Numbers内で話が完結する場合に限ることを前提としておく。 -
やりたいこと
ここに、Numbersのスプレッドシートと、大量の画像データがあり、スプレッドシートへの画像データの貼り付け作業を自動化したいものとする。
Excelの場合、VBAスクリプトになるが、NumbersではAppleScriptを用いることになる。元ネタになるAppleScriptは、こちらを参考にした。 -
フォルダとスプレッドシートの構成
なお、画像を格納しているフォルダとNumbersスプレッドシートの構成は以下のようなものを想定する。すなわち、画像はsupplyer_A, B, C…の各フォルダに入っており、そのフォルダが、Imagesというフォルダに入っている。Imagesはデスクトップ上に置かれている。
またNumbersスプレッドシート側はE列が画像が入っているフォルダ名、F列が画像ファイル名、そしてG列が画像を貼り付けるセルがある列である。 -
AppleScript
スクリプトを以下に示す。
本スクリプトでは、変数supplyerを入れ替えて使用するものとする。--カレントユーザーの取得 set userName to do shell script "id -un" --画像がある親フォルダのパス設定 set folder_path to "Macintosh HD:Users:" & userName &":Desktop:Images:" --実際の画像があるフォルダ(子フォルダ)のパス設定 set supplyer to "supplyer_A" set supplyer_path to POSIX path of (folder_path & supplyer & ":") --Numbersの操作 tell application "Numbers" activate --Numbers書類を一番手前に tell document 1 tell sheet 1 tell table 1 --一行目は見出しなので除く repeat with rowCount from 2 to row count --E列の各行の値(セル)が一致するかチェック if value of cell 1 of range ("E" & rowCount) is supplyer then --F列の各行の値(セル)が画像のファイル名なので取得 set image_name to value of cell 1 of range ("F" & rowCount) --画像のフルパスの生成 set image_path to supplyer_path & image_name & ".jpg" --ログ(デバッグ用) log image_path --G列(7番目の列)の幅を350ptにする set the width of column 7 to 350 --各行の高さを250ptにする set the height of row rowCount to 250 --画像をクリップボードに読み込む set the clipboard to (read (image_path) as TIFF picture) --画像を貼り付けるNumbersのセル(G列)を選択 set selection range to range ("G" & rowCount) --画像のペースト tell application "System Events" keystroke "v" using {command down} keystroke return end tell end if end repeat end tell end tell end tell end tell
-
終わりに
本AppleScriptにより、Numbers書類の特定のセルを選択し、画像をペーストする作業が自動化される。
以上。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント
初めまして。今回初めてAppleScriptを触るものであります。
そのため、少し折り入った話ですが、このコードについてもう少し詳しくご教示いただければと存じ上げます。
何卒よろしくお願いいたします。
はじめまして。このスクリプトはネット検索で見つかったものの改造品です。ご質問にお答えできるか分かりませんが、まずは、何をお知りになりたいのかお知らせください。
ご返信いただきありがとうございます。
・E列の各行の値(セル)が一致するかチェック
・F列の各行の値(セル)が画像のファイル名なので取得
この辺のコードの理解が乏しいのでご教示いただきたい所存であります。
何卒よろしくお願いいたします。
失礼しました。自分で投稿を振り返って、ひどく分かりにくいものになっていることを確認しました。
一応、内容を書き改めましたのでご参照ください。
ちなみに
E列の各行の値は、画像フォルダの構成に依存し、画像が、例えばメーカーごとのサブフォルダに入っていることを想定しております。
F列は、改定した投稿通り、画像のファイル名が入っていることを想定しております。
これで回答になっていますでしょうか? 不明点等あれば遠慮なくコメントください。