Excelのワークシート上にドラッグ&ドロップして配置された画像のセルのアドレスを推定するAppleScriptの試作品です。
ただし、pictureオブジェクトは単にExcel書類上に重ね合わせて配置されている「異物」であり、どこかのセルに置かれているわけではありません。オブジェクトからpropertiesを取得しても、セルのアドレスを取得できたりはしません。ワークシート左上を原点とする座標値が取得できるだけです。
ただ、pictureの配置座標を取得して、その座標からセルを求める処理を行ったとしても(やりました)、配置座標と実際に置かれているセルは異なります。
実際に、Excelワークシート上に配置されている画像を個別に書き出す処理(リサイズして高解像度化する処理つき)を書いて動かしてみましたが、書き出したファイル名にセルのアドレスを反映させたら使いやすいのではないかと考え、解決策を試してみました。
上の画面キャプチャでいえば、R22C2のセルにpicture 1が存在している(始点座標が存在している)わけなのですが、実際に目で見た感じではR23C2に存在している(ユーザーがそのように作業を行った)ものと推定されます。この画像をファイル書き出しする際に、R22C2というファイル名をつけてしまっては、後で整理する際に「ナニコレ?」という話になってしまいます。
そこで、複数のセルにまたがってpictureオブジェクトの矩形領域と、それぞれ重なっているセルの矩形領域の共通部分を求め、面積を計算。共通面積が最も大きいものを採用するための試作品を作ってみた次第です。
AppleScript名:pictureが置かれているセルのアドレスを推定する.scpt |
— – Created by: Takaaki Naganoya – Created on: 2023/08/07 — – Copyright © 2023 Piyomaru Software, All Rights Reserved — use AppleScript use scripting additions use framework "Foundation" set aRect to retExcelCellRect(22, 2) of me set bRect to retExcelCellRect(23, 2) of me tell application "Microsoft Excel" tell active workbook tell active sheet set anImage to picture 1 set tmpX to left position of anImage set tmpY to top of anImage set tmpW to width of anImage set tmpH to height of anImage end tell end tell end tell set aZRect to current application’s NSMakeRect(tmpX, tmpY, tmpW, tmpH) –共通部分の矩形座標を計算 set a1Res to (current application’s NSIntersectionRect(aRect, aZRect)) as {record, list} set b1Res to (current application’s NSIntersectionRect(bRect, aZRect)) as {record, list} –共通部分の面積を計算 set a1Area to calcAnArea(a1Res) of me set b1Area to calcAnArea(b1Res) of me –大小判定 if a1Area > b1Area then return "a is larger" else return "b is larger" end if –NSRectの面積を計算する on calcAnArea(aRect) if class of aRect = list then set xWidth to (item 1 of item 2 of aRect) set yHeight to (item 2 of item 2 of aRect) else set xWidth to (aRect’s |size|’s width) set yHeight to (aRect’s |size|’s height) end if set anArea to xWidth * yHeight return anArea end calcAnArea on retExcelCellRect(y, x) tell application "Microsoft Excel" tell active workbook tell active sheet tell row y tell cell x set xMin0 to left position set yMin0 to top set xWidth0 to width set yHeight0 to height end tell end tell end tell end tell end tell set a1Rect to current application’s NSMakeRect(xMin0, yMin0, xWidth0, yHeight0) return a1Rect end retExcelCellRect |
More from my site
(Visited 6 times, 1 visits today)