終了

JavaScriptでクリップボードのテキストを取得したい

参加者 ,
Oct 27, 2020 Oct 27, 2020

リンクをクリップボードにコピー

コピー完了

非プログラマです。

スクリプトを使った作業の自動化において、

クリップボードのテキストデータを取得したいです。

 

ブラウザでは、「e.clipboardData.getData」を用いれば取得できるのですが、

Photoshopではこの関数は未定義のようで不可能でした。

Photoshopでクリップボードのテキストを取得できる関数を

ご存じの方いらっしゃれば、ご教示頂きたいです。

 

補足

スクリプトの目的:

エクセルの表データをレイアウトするスクリプト

データの変数は3桁の任意の数×4のため、CSVや変数では直接入力の方が速いので代替不可

キーワード
Windows , アクションとスクリプト

表示

1.5K

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Expert , Oct 27, 2020 Oct 27, 2020

ScriptUIというのはPhotoshop搭載のJavaScript(ExtendScript)の標準機能でユーザーインターフェースを構成するためのライブラリです。少しコツが要りますが、そう難しいものでもありません。

今回の場合、一旦以下のようなUIにペーストしてスクリプトを実行すればUIの方からテキストを取得可能です。

スクリーンショット 2020-10-28 12.43.08.png

 

 

var w = new Window("palette", "Test");
var tx = w.add("edittext", [0,0,250,100], "", {multiline:true});
var bt = w.add("button", undefined, "do");
var cl = w.add("button", undefined, "close");
bt.onClick = function() {
alert(tx.text);
  }
cl.onClick = function() {
w.close();
  }
w.show();

 

このコードでalertしている部分でテキストを抜き出していますので、これを変数に

...

投票

翻訳

翻訳
Community Expert ,
Oct 27, 2020 Oct 27, 2020

リンクをクリップボードにコピー

コピー完了

残念ながらExtendScriptでのクリップボードの操作は一筋縄では行かないのが常です。
Photoshopの場合、正攻法では対応できず、他のスクリプト言語やシェルスクリプト等を利用するなどの対策が必要になります。可用性の問題もありますので、ペースト用のUIをScriptUIやCEPで作るのが現実的な対応かと思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Oct 27, 2020 Oct 27, 2020

リンクをクリップボードにコピー

コピー完了

回答ありがとうございます。

ちょっと素人でこの先は難しいようですね。

今回のお話の中で出てきたものもまだ知識ゼロなので、

Java以外も勉強して出直します。

どうもありがとうございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 27, 2020 Oct 27, 2020

リンクをクリップボードにコピー

コピー完了

ScriptUIというのはPhotoshop搭載のJavaScript(ExtendScript)の標準機能でユーザーインターフェースを構成するためのライブラリです。少しコツが要りますが、そう難しいものでもありません。

今回の場合、一旦以下のようなUIにペーストしてスクリプトを実行すればUIの方からテキストを取得可能です。

スクリーンショット 2020-10-28 12.43.08.png

 

 

var w = new Window("palette", "Test");
var tx = w.add("edittext", [0,0,250,100], "", {multiline:true});
var bt = w.add("button", undefined, "do");
var cl = w.add("button", undefined, "close");
bt.onClick = function() {
alert(tx.text);
  }
cl.onClick = function() {
w.close();
  }
w.show();

 

このコードでalertしている部分でテキストを抜き出していますので、これを変数に入れて以下必要な処理を記述すればUIのボタンから処理可能となります。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

解説やコードまで詳細な情報ありがとうございます。

さっそく試してみましたがうまくいかない点があります。

①教えていただいたコードをESTK上で実行

②新規テキストレイヤー挿入のコードをPhotoshop上で実行

の手順でやってみました。

最初の一回のみalert内のテキストが作成されましたが、

以降はそのテキストのみ(今回は「function」)が作成されます。

変数の設定の仕方が間違っていますでしょうか?test.png

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

補足

①をPhotoshopで実行すると新規ウインドウが表示されない

 

①もPhotoshop上でアラートが出るようになると良いのでしょうか

そうすれば一つのスクリプトで実行できて助かるのですが

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

alertというのはExtendScriptのメソッドなので、その引数のtx.textを操作するのが正解です。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

layObj.textItem.contents =○○○

この行でテキストレイヤーの中身を指定しているのですが、ここに続くのは何でしょうか?

素人なもので・・・

 

①はExtendScriptで実行

②はPhotoshopで実行  は合ってますか?

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

こんな感じでUIにペーストしたら指定layerの文字が変えられるかと…

var w = new Window("palette", "Test");
var tx = w.add("edittext", [0,0,250,100], "", {multiline:true});
var bt = w.add("button", undefined, "do");
var cl = w.add("button", undefined, "close");
bt.onClick = function() {
app.activeDocument.layers[0].textItem.contents = tx.text;
  }
cl.onClick = function() {
w.close();
  }
w.show();

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

度々申し訳ありません。

今しがた頂いた上記コードを私の環境で実行したところ、

ExtendScriptで実行した場合…do/closeのウィンドウが表示されてそこで終了します

Photoshopで実行…何も起きません

ExtendScriptで実行、Photoshopで実行というのは下の画像で選択する対象のことを言っています。

分かりにくかったらすみません。

test2.png

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

補足

一番最初に頂いたアラートで抽出するコードは、ExtendScriptで実行した場合正常に動作しますが、

Photoshopで実行した場合何も起きないので、

①ExtendScriptでテキスト抽出を実行

②Photoshopでテキスト挿入の実行  の2工程でトライしています。

1発のコードで実行する場合、Photoshopを対象に実行すべきなのはわかるのですが、

Photoshopを対象にした場合にアラートのコードが動作しません

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Oct 28, 2020 Oct 28, 2020

リンクをクリップボードにコピー

コピー完了

最新

Photoshopでアラートを出すことは叶わなかったのですが、

別のアプローチで目的のスクリプトを作成できました。

scriptUIについて知ることができたので感謝しております。

どうもありがとうございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines