段落スタイルパネル、文字スタイルパネルの選択を返す方法

[9438]段落スタイルパネル、文字スタイルパネルの選択を返す方法 投稿者:たかぽん 投稿日:2018/04/09 09:42:14
いつも参考にさせていただいています。
質問させて下さい。

JavaScriptにてInDesign上の段落スタイルパネル、文字スタイルパネルの反転選択(複数選択の場合も)されている項目のindexあるいはname等を取得する方法を探しています(例えばselectindexのようなモノ……とか)。

方法がありましえたら、ご教示くださいますようお願い致します。
パネル内の項目であれば以下を参考にしてください。
http://www2.rocketbbs.com/11/bbs.cgi?id=thats&mode=pickup&no=9181
https://forums.adobe.com/community/international_forums/japanese/automation
こんなところもできましたので、良ければご利用ください^^/
>お〜まち さま
ありがとうございます。
リンク先の
app.activeDocument.textDefaults.appliedCharacterStyle
で反転選択が1項目であれば取得できました。

>Uske_S さま
リンク先のフォーラム確認しました。今後、活用させていただきたいと思います。

反転選択が複数ある場合についても方法がありましたら引き続き宜しくお願い致します。
あ、意味わかりました。
別にテキストは関係なくて、パネル内の状況を確認したいわけですね。
それならありません。

ところで、パネル内の選択状況を知ってどうするつもりなのでしょう。パネル内の選択状況がわからなくて不便を感じたことはないので、それを知らなくても、必要なことはできるはずですが。
>お〜まち さま

実は下記のようなスタイルの差異を検出するスクリプトを作成しています。

具体的には……

1〜5章の計5つドキュメントがあったとします。
各章のドキュメント内にある特定の同名段落スタイル(複数)の差異を調べたい時があります。
そういった場合、現在は対応の段落スタイル名をコピペして配列に代入。
各ドキュメントの対象スタイルの内容を「reflect.properties」で取得します。
取得した情報を比較して差異を検出してリストを書き出す。

こんな感じです。
最初に書いたドキュメント内の対象スタイル(複数)のコピペが結構面倒なのです(複数あるとパネルを一つずつ開いてコピペするため)。
そこで、反転選択しているスタイルを取得できたら、楽になるかな。と思った次第です。

別の方法を考えてみます。
ありがとうございました。
あくまでご自分用の前提での提案ですが

・パネル上で段落スタイルを複数選択
・ゴミ箱ボタンで削除
・スクリプト実行
 現状の段落スタイル名を変数化(配列・連想配列など)
・app.undo( )
 段落スタイル名の差分を検出

で少しラクになりませんかね。
なるほど。
段落スタイルを自分で選択したいのであれば、スクリプトダイアログを使う手もありますよ。

var selectParaStyle = [];
var cboxes = [];
var doc = app.activeDocument;
var plength = doc.paragraphStyles.length;
var dlg = app.dialogs.add();
var dlc = dlg.dialogColumns.add();
with (dlc.dialogRows.add()) {staticTexts.add({staticLabel:"対象のスタイルを指定"});}
for (var i = 0; i < plength; i++) {
with (dlc.dialogRows.add()) {
cboxes[i] = checkboxControls.add({staticLabel:doc.paragraphStyles[i].name});
}
}
if (!dlg.show()) exit();
for (i = 0; i < plength; i++) {
if (cboxes[i].checkedState) {
selectParaStyle.push(cboxes[i].staticLabel);
}
}
dlg.destroy();
alert(selectParaStyle.toString());

段落スタイルの数が多いと画面からはみ出ちゃいますが。
>(z-)さま

差分の件ありがとうございます。
とりあえず、選択している段落スタイル([基本段落]除く)を取得できるようスクリプトを書いてみました。
残念ながら[基本段落]は無理そうです。


var actDoc=app.activeDocument;

var arr = ["段落スタイル"];
for(var i = 0, len = arr.length; i < len; i++){
app.panels.itemByName(arr[i]).visible = true;

var menu = app.menus.itemByName(arr[i] + "パネルメニュー");
try{
menu.menuItems.itemByName("スタイルを削除...").associatedMenuAction.invoke();
} catch(e){

alert("スタイルチェック中にエラーが発生しました\r\nスタイルを選択していない場合は選択ください。\r\nまた、[基本段落]は対象にできません。")
exit()
}
}
var nokori=actDoc.allParagraphStyles;
actDoc.undo();
var zentai=actDoc.allParagraphStyles;
var selectStyle=sabunCheck(nokori,zentai);

//「selectStyle」に選択したオブジェクトを格納しました。



function sabunCheck(arrA,arrB) {
var tmp=[];
var storage = {};
for (var i=0; arrA.length>i; i++) {
value = arrA[i].name;
storage[value] = value;
}
for (var i=0;arrB.length>i;i++){
value=arrB[i].name
if (!(value in storage)) {
tmp.push(arrB[i])
}
}
return tmp
}
細かいチェックはしていませんが、とりあえず取得できました。


>お〜まち さま

ダイアログ、ウィンドウ等にリストを表示して作業することも考えてみます。
ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア