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
                

    上記スクリプトを
    ScriptEditorで開く(注)

    (注)リンクを開くと、2段階の確認ダイアログが表示される。(下図)

    ScriptEditorを開く確認ダイアログ


    Script作成確認ダイアログ

    最初に開くのは、ScriptEditorを開くかどうかを確認するダイアログ。次に開くのはスクリプトの開発元が不明であることを警告するダイアログである。後者のダイアログについて、筆者を信頼するかしないかはお任せするが、このAppleScriptが危険なものか判断できない人は使わないで戴きたい。

  • 終わりに
    本AppleScriptにより、Numbers書類の特定のセルを選択し、画像をペーストする作業が自動化される。

以上。

この投稿へのコメント

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

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

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

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

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

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

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

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

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

コメントを残す

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

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

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

トラックバック URL