リンクをクリップボードにコピー
コピー完了
Photoshop 24.5.0にて、
(投稿者使用:MacBook Pro (Retina, 13-inch, Late 2013)、macOS Big Sur ver 11.7.8)
アートボード名を文字列から一括で入力できるスクリプトを探しています。
例えば
A
B
C
という文字列から「A」「B」「C」と名前のついたアートボードを一括作成するスクリプト
もしくは
新規作成したアートボード3つ(「アートボード1」「アートボード2」「アートボード3」)の
名前を一括で「A」「B」「C」に変更するスクリプト
大量のアートボード名を変更する必要があるため、
ぜひお力いただきたいです。
よろしくお願いいたします。
リンクをクリップボードにコピー
コピー完了
どのようにデータを渡したいか決まらないことには次へ進みにくいと思いますが、
Numbersのデータを羅列として文字列を渡したい場合、最初のデータを一つずつ渡すスクリプトではできませんので(少し書き換え・書き加えが必要)必要になったら言ってくださいね。
リンクをクリップボードにコピー
コピー完了
「Safariでエラーが起きました: You must enable the 'Allow JavaScript from Apple Events' option in Safari's Develop menu to use 'do JavaScript'.」
というエラーが出ました!
JavaScriptを有効にする、にチェックを入れ直して
再度実行しても同様のエラーが出ました。
リンクをクリップボードにコピー
コピー完了
あ、なるほど。
すみませんです、伝え忘れてました..
“開発”メニューの、ここ有効にしてみてください。
リンクをクリップボードにコピー
コピー完了
Safariの環境設定 > 詳細 > メニューバーに “開発” メニューを表示
にチェックを入れて、開発メニューから「JavaScriptを有効にする」を選択、
でどうでしょう。
もう少し様子を見ますが…スレッドの趣旨がPhotoshopからだいぶ遠いところへきているため、流れによってはJapan Roungeフォーラムへ移動させていただくかもしれません。
リンクをクリップボードにコピー
コピー完了
追伸
実行にはJavaScriptが有効であることも必要ですので、ajabon grinsmithさんのものも間違いではありません。
リンクをクリップボードにコピー
コピー完了
すみません。何か操作誤ってダブって投稿されてしまいました...
リンクをクリップボードにコピー
コピー完了
@gjioseh さん
最新のものを残して重複投稿を片付けました。また、残った投稿に、はじめのほうの投稿に貼られていたスクリーンショットを移植させていただきました。
不都合な点があればおっしゃってくださいませ。
リンクをクリップボードにコピー
コピー完了
リンクをクリップボードにコピー
コピー完了
おはようございます。
長らく時間があいてしまいましたが、その後どうでしょう?
やっとPhotoshopが使える状態になったので、ちょっと続きをやってみました。
Numbersで列方向のセルにたとえば、「A」「B」「C」と入力して、入力したところを選択し
Photoshopで新規ドキュメントを開いた状態で、下記スクリプトを実行するとアートボードが作成されると思いますが如何なものでしょう。
アートボードのサイズは、新規ドキュメントを作成したときの大きさを取得してます。
完璧なものではないと思いますが、何かの役に立てば...
use AppleScript version "2.4"
use framework "Foundation"
use scripting additions
tell application "Numbers"
tell front document
tell active sheet
try
set theTable to first table whose class of selection range is range
on error
beep
display alert "何も選択されていません。"
return --何も選択されてなかった場合は終了
end try
tell theTable
set selList to value of (every cell of selection range)
set columnCount to count of (column of selection range) --列をカウント
if columnCount > 1 then
beep
display alert "2列以上選択されています。1列のみ選択してください。"
return
end if
end tell
end tell
end tell
end tell
set aList to {}
repeat with i in selList
set ii to contents of i
if ii is not missing value then --空白を除外
log ii
set the end of aList to ii
end if
end repeat
--set |strings| to retDelimedText(aList, ",") of me --文字列として処理する場合
if application id "com.adobe.Photoshop" is running then
tell application id "com.adobe.Photoshop"
if exists front document then
tell front document
try
--Photoshopでの処理をここに
do javascript "
var dimensions = [app.activeDocument.width.value,app.activeDocument.height.value];
var bottom = dimensions[1];
var left = 0.000000;
var right = dimensions[0];
for (var i = 0;i < arguments.length; i++) {
//alert(arguments[i]);
var idmake = stringIDToTypeID( \"make\" );
var desc66 = new ActionDescriptor();
var idnull = stringIDToTypeID( \"null\" );
var ref13 = new ActionReference();
var idartboardSection = stringIDToTypeID( \"artboardSection\" );
ref13.putClass( idartboardSection );
desc66.putReference( idnull, ref13 );
var idusing = stringIDToTypeID( \"using\" );
var desc67 = new ActionDescriptor();
var idname = stringIDToTypeID( \"name\" );
desc67.putString( idname, arguments[i] );
var idartboardSection = stringIDToTypeID( \"artboardSection\" );
desc66.putObject( idusing, idartboardSection, desc67 );
var idlayerSectionStart = stringIDToTypeID( \"layerSectionStart\" );
desc66.putInteger( idlayerSectionStart, 6 );
var idlayerSectionEnd = stringIDToTypeID( \"layerSectionEnd\" );
desc66.putInteger( idlayerSectionEnd, 7 );
var idname = stringIDToTypeID( \"name\" );
desc66.putString( idname, \"\"\"アートボード 1\"\"\" );
var idartboardRect = stringIDToTypeID( \"artboardRect\" );
var desc68 = new ActionDescriptor();
var idtop = stringIDToTypeID( \"top\" );
desc68.putDouble( idtop, 0.000000 );
var idleft = stringIDToTypeID( \"left\" );
desc68.putDouble( idleft, left );
var idbottom = stringIDToTypeID( \"bottom\" );
desc68.putDouble( idbottom, bottom );
var idright = stringIDToTypeID( \"right\" );
desc68.putDouble( idright, right );
var idclassFloatRect = stringIDToTypeID( \"classFloatRect\" );
desc66.putObject( idartboardRect, idclassFloatRect, desc68 );
executeAction( idmake, desc66, DialogModes.NO );
left = right + 100;
}
" with arguments aList --リストを引数として
--データを文字列として処理する場合。こんな感じ??
(*
do javascript "
var array = " & (quoted form of |strings|) & ".split(',');
for (var i = 0;i < array.length; i++) {
alert(array[i]);
}
"
*)
on error msg
return msg
end try
end tell
end if
end tell
end if
-- 数字を削除。このように使う。
--regexReplace("1あ1いうえお0123", "\\d", "") of me
--return regexReplace("1あ1いうえお0123", "[0-90-9]", "") of me
--正規表現を使ってテキストを置き換えするときに使うハンドラ
on regexReplace(aText as text, pattern as text, replacement as text)
--require framework: Foundation
set regularExpression to current application's NSRegularExpression's regularExpressionWithPattern:pattern options:0 |error|😞missing value)
return (regularExpression's stringByReplacingMatchesInString:aText options:0 range:{location:0, |length|:count aText} withTemplate:replacement) as text
end regexReplace
--リストを入力し、指定の区切り文字で区切ったテキストを返すハンドラ
on retDelimedText(aList, aDelim)
set aText to ""
set curDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to aDelim
set aText to aList as text
set AppleScript's text item delimiters to curDelim
return aText
end retDelimedText
リンクをクリップボードにコピー
コピー完了
コードの一部が絵文字になってしまった..
これなら??
https://drive.google.com/uc?export=view&id=19RdaSNLxGvLSi2O6416INsF-MiCgwyAD
リンクをクリップボードにコピー
コピー完了
おはようございます。
実の所、少々諦めモードになっておりました...
gjiosehさんに今回いただいたスクリプト実行してみたところ、
うまくいきました...!
感動しています...作業時間が大幅に削減できそうです!
今回のトピックに参加してくださったみなさんに感謝申し上げます。
本当にありがとうございました。
リンクをクリップボードにコピー
コピー完了
仕様的に少しばかりの不安がありましたが、お役に立てたようで良かったです!^^
アドビコミュニティ(フォーラム)が進化します!新しい体験を1月にお届けします。
詳細はこちら