リンクをクリップボードにコピー
コピー完了
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」に変更するスクリプト
大量のアートボード名を変更する必要があるため、
ぜひお力いただきたいです。
よろしくお願いいたします。
リンクをクリップボードにコピー
コピー完了
というわけで(探すのをお手伝い)
このあたりとか?
Custom script for renaming artboards, with multiple elements
その「文字列」というものがどこに存在しているのかによりますが。
リンクをクリップボードにコピー
コピー完了
ありがとうございます!!
当方の知識不足によりうまくお伝えできず申し訳ないです...
文字列はNumbersから拾いたいです。
表に名前が羅列されているので、それをそのまま各アートボード名にするイメージです。
リンクをクリップボードにコピー
コピー完了
Numbersから値を取得するにはAppleScriptなどの、ExtendScript以外の言語を利用することとなります。
AppleScriptでもPhotoshopは制御可能ですが、ネット上に公開されている例文やフリー公開のスクリプトというと極端に弾数が少ないですね。
ExtendScript内で部分的にAppleScriptや他のスクリプト言語を実行することも可能なので、今回はそれをふまえてNumbersのパート、Photoshopのパートそれぞれで探して、どうにかこうにか組み合わせるか、もしくはNumbersパートを妥協して若干の手作業を混ざるか、といったところかと思います。
書ける人に有償依頼する意思があるならその旨を表明しておけば誰か来てくれるかなーとも思います。
リンクをクリップボードにコピー
コピー完了
もう少し模索を続けたいと思います...!
ありがとうございます...!
リンクをクリップボードにコピー
コピー完了
ここまでのものをもとにして、
主にこのどちらかになるかと思います。
引数(文字列)の受け渡しさえなんとかなれば、といったところですね。
あとはもう「探す」は限界だと思います。
リンクをクリップボードにコピー
コピー完了
初歩的な質問で大変申し訳ないのですが、
macであればスクリプトエディタでファイルを開き、
実行する形で問題ないでしょうか...?
リンクをクリップボードにコピー
コピー完了
そうですそうです。
gjiosehさんのコードはAppleScriptなので、新規ドキュメントに全文ペーストして、ウィンドウ左上の選択がAppleScriptになっているのを確認して実行。
(いつの日か)うまく動いた時はそのドキュメントを保存してください。
保存時のファイルフォーマットを「アプリケーション」にすれば、スクリプトエディタで開かなくてもファイルのダブルクリックで実行できるようになります。
ただ現状、gjiosehさんの返信にあるとおり、Photoshopにやらせる部分が未実装なのです。エラーメッセージに出た「 JavaScript コードがありませんでした」そのままの意味ですね。
それは別途用意して組み込む必要があります。
最初に返信したリンク先のコードの、リネーム用の文字列を取得した後の部分(アートボードすべての名前を変更していくところ)は大変参考になると思います。
あとは、AppleScriptが持っている、Numbersから取得した文字列を、どうやってPhotoshopを担当するExtendScriptに渡すか、が解決できればゴールは目前ですね。
検索ワードは「AppleScript do JavaScript 引数」などです。
リンクをクリップボードにコピー
コピー完了
ありがとうございます!
初心者が欲張ってしまい申し訳ないです...
お二人が送ってくださったものを参考にもう少し奮闘します!
リンクをクリップボードにコピー
コピー完了
いえー、欲張りとてもだいじです。
まだスクリプトが書けなくても、探し方がうまいとか、人に書き起こしてもらう時の要件定義が具体的だとかはかなり強力な武器になりますので、そっちを伸ばしていくのはとても有効だと考えています。
今回、手元のMacにNumbersをインストールする余地がなくて、やむなく声援にまわっています…
リンクをクリップボードにコピー
コピー完了
下記はNumbersで選択したひとつの列からデータを取り出し、Photoshopへ渡すことができるかもしれないAppleScriptです。
ちょっと歯切れが悪いですが、私の環境では現状Photoshopが使えなくて動作確認およびコードの作成ができません。
どなたか作ってくださると.....
下記スクリプトとしては、Numbersでひとつの列にデータを書き込んでおき、その列を選択、実行するとスクリプト内の変数「ii」にリピートでデータが順に一つずつ入ります。
その変数を使ってそれをPhotoshopへ渡し、アートボードが作成できればいけるような気はしてます。
「do javascript "" --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
repeat with i in selList
set ii to contents of i
if ii is not missing value then
log ii
if application id "com.adobe.Photoshop" is running then
tell application id "com.adobe.Photoshop"
if exists front document then
tell front document
try
do javascript "" --Photoshopでの処理をここに
on error msg
return msg
end try
end tell
end if
end tell
end if
end if
end repeat
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
リンクをクリップボードにコピー
コピー完了
Photoshop内の処理のスクリプトについて、
模索し試してみたいと思います!
本当にありがとうございます!
リンクをクリップボードにコピー
コピー完了
実行してみましたところ、
「Photoshopの一般エラーが発生しました。 この機能は、このバージョンの Photoshop で使用できない可能性があります。
- JavaScript コードがありませんでした」
と表示されてしまいました。
こちらの対処法をもしご存知でしたらお教えいただきたいです。
当方プログラミングの知識が浅く...
可能であればで大丈夫です!よろしくお願いします!
リンクをクリップボードにコピー
コピー完了
すみません。説明が足らなかったですね。
ajabon grinsmithさんから詳細の説明があったので私からの詳細は要りませんね..
AppleScriptからPhotoshop側のJavaScript(ExtendScript)への引数は文字列を渡すだけなんで可能です。
その引数(データ)をひとつずつ渡すのか、データを区切り文字で羅列してまとめて渡し、
JavaScript側で配列に変換しデータを回すのかくらいです。
AppleScriptにExtendScriptを実装するのが使いやすいかもしれません。
AppleScript側で何か仕様変更したいことがあれば言ってくださいね。
できる限り応援させてもらいます。
リンクをクリップボードにコピー
コピー完了
あ、データの羅列渡しても出来なかったかも。
あれもこれもやってみないとですが、いい加減なこと書いてしまったかもしれません。
すみません。
私の方で試せたらいいんですけど、もしできるならもう少し込み入ったところまでできたかもしれません。
色々やってみてください。
リンクをクリップボードにコピー
コピー完了
いえ...!こちらこそ、無知であるにも関わらず、
無理なお願いをしてしまい申し訳ありませんでした。
プログラムを組んだことがなく、本当に浅い知識で挑んでしまったので、
流石に無理がありました...
もう少し知識を得てから取り組もうと思います...!
たくさん助けていただきありがとうございました!!
リンクをクリップボードにコピー
コピー完了
ためしにですが、gjiosehさんのコードの
do javascript "" --Photoshopでの処理をここに
のところを
do javascript "alert(arguments[0])" with arguments ii
に差し替えて実行してみてください。( ↑ すみません一箇所しくじって投稿後編集しました)
それでPhotoshop上でアラートが出れば成功でっす。
ちょっとの懸念点がありまして、
文字列の要素数とアートボード数が合わない場合を考えたり、
1回ずつPhotoshopに投げたとして、2回目以降は前回リネームしたアートボードの次をやらないといけないので、そのあたりの判定が面倒そうです。
なので、
のどっちかがいいかなあとも思います。
リンクをクリップボードにコピー
コピー完了
実行してみたところ、以下のアラートが出ました...!
書類 Numbersで選択されたひとつの列にあるデータを読み取ってPhotoshopで処理.txt を自動保存できませんでした。(エラー-1,752)
これは成功?のアラートではないですよね...?
リンクをクリップボードにコピー
コピー完了
成功…じゃないほうのアラートですね…
投稿直後にミス直して下の文言にゴメンナサイ追記したのを認識いただいた上でこのエラー出てすんですかね?
リンクをクリップボードにコピー
コピー完了
はい!修正の投稿をしていただいた後のものを入力し、実行させていただいております...!
すでにPhotoshopの質問では無くなってしまっていますね、本当に申し訳ありません...!
リンクをクリップボードにコピー
コピー完了
どういたしまして^^
最初は誰でもできないところからだと思います。
私も?好きで続いてます。
そのうち面白いものが出来上がるかもしれませんよ。
徐々にでも覚えていってください。
初めは、気になるコードをコピペで動かしてみるといいと思います。
データの羅列を渡す場合、下記はSafariの例ですがPhotoshop(ExtendScript)でも、多分.. 同じような感じで渡せると思います。
-- 配列(リスト)を区切り文字で区切ったテキストに
set |strings| to retDelimedText({"1", "2", "3", "4", "5"}, ",") of me
--> 1,2,3,4,5
tell application "Safari"
if exists front document then --ドキュメントが開かれている場合以下を実行
--変数をテキストとして扱うため変数をシングルクォートで囲み文字列として扱い、.split(',')で分割し配列に
--for文で配列の要素を一つずつ取り出し
do JavaScript "
var array = " & (quoted form of |strings|) & ".split(',');
for (var i = 0;i < array.length; i++) {
alert(array[i]);
}
" in front document
end if
end tell
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
リンクをクリップボードにコピー
コピー完了
ちなみにこのスプリクトを実行するとどのような結果になりますでしょうか...?
まだ読み取ることができなくて...!
(できればで大丈夫です...!ものすごくお時間取らせてしまっていると思うので...)
リンクをクリップボードにコピー
コピー完了
時間はお気になさらずに^^
Safariが立ち上がっててウインドウ開いた状態だと動きがわかりやすいんですけど、
実行するとただ単純に1〜5の数字(テキスト)が順にアラート表示されるだけです。
プログラミング始めたてでよくやる?(動きを見る)ものだと思います。
ただ、今回の場合、
データをリスト(配列)で用意し、それを区切り文字で連結、ExtendScript上でその文字列を配列に変換し処理しているところが重要です。
ExtendScript上で配列として扱えれば繰り返しの処理がやりやすいと思います。
リンクをクリップボードにコピー
コピー完了
ありがとうございます...!
そのまま実行してみたところ、エラーが出てしまいました...が、
これを参考に進めてみます...!本当にありがとうございます!
リンクをクリップボードにコピー
コピー完了
どんなエラー出ました?
新しいアドビコミュニティで、さらに多くのインスピレーション、イベント、リソースを見つけましょう
今すぐ検索