Numbersのセルに画像を貼り付ける作業を自動化するAppleScript

  • 前書き
    macのiWorksに含まれる表計算ソフトNumbersでは、セルを画像で塗りつぶすことができる。オフィススイートの雄であるMicrosoft Excelでもできるが、両者は相互互換ではない。すなわちNumbersで画像を貼り付けたスプレッドシートをExcelに書き出しても、画像は残らない。だから、これから紹介するTipsは、Numbers内で話が完結する場合に限ることを前提としておく。

  • やりたいこと
    ここに、Numbersのスプレッドシートと、大量の画像データがあり、スプレッドシートへの画像データの貼り付け作業を自動化したいものとする。
    Excelの場合、VBAスクリプトになるが、NumbersではAppleScriptを用いることになる。元ネタになるAppleScriptは、こちらを参考にした。

  • フォルダとスプレッドシートの構成
    なお、画像を格納しているフォルダとNumbersスプレッドシートの構成は以下のようなものを想定する。


    画像格納フォルダの構成


    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書類の特定のセルを選択し、画像をペーストする作業が自動化される。

以上。

この投稿へのコメント

  1. Ryuji said on 2020年4月23日 at 2:13 PM

    初めまして。今回初めてAppleScriptを触るものであります。
    そのため、少し折り入った話ですが、このコードについてもう少し詳しくご教示いただければと存じ上げます。
    何卒よろしくお願いいたします。

    • xanadu6291 said on 2020年4月23日 at 2:33 PM

      はじめまして。このスクリプトはネット検索で見つかったものの改造品です。ご質問にお答えできるか分かりませんが、まずは、何をお知りになりたいのかお知らせください。

      • Ryuji said on 2020年4月23日 at 11:50 PM

        ご返信いただきありがとうございます。
        ・E列の各行の値(セル)が一致するかチェック
        ・F列の各行の値(セル)が画像のファイル名なので取得
        この辺のコードの理解が乏しいのでご教示いただきたい所存であります。
        何卒よろしくお願いいたします。

        • xanadu6291 said on 2020年4月24日 at 12:22 PM

          失礼しました。自分で投稿を振り返って、ひどく分かりにくいものになっていることを確認しました。
          一応、内容を書き改めましたのでご参照ください。
          ちなみに
          E列の各行の値は、画像フォルダの構成に依存し、画像が、例えばメーカーごとのサブフォルダに入っていることを想定しております。
          F列は、改定した投稿通り、画像のファイル名が入っていることを想定しております。

          これで回答になっていますでしょうか? 不明点等あれば遠慮なくコメントください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL