Practice makes Perfect !

ExtendedScript素人です。同じ境遇の方、一緒に脱素人を目指しましょう!

実験003_2021.11-1

指定したページに、指定したマスターを当てるスクリプト

ページものを作っていて、各カテゴリや各章ごとにマスターが変わるときに、2・3個のマスターなら手動で割り当ててあげればいいのですが、マスターが10個とか20個とかあると、もうそれだけでうんざり…

f:id:YustinBieber:20211126114824p:plain
マスターが多すぎて嫌になる…
f:id:YustinBieber:20211126111619p:plain
いちいち手動で設定していくのが手間でした

なんとかならないものだろうかと考えていたんです。


それで次の工程で考えてみました。

  1. エクセルを使って、何ページに何番目のマスターが当たるかを設定しておき、テキストファイルに書き出す
  2. 書き出したテキストファイルを1行ずつ読み込んで、各ページに指定されたマスターが当たるようにスクリプトで処理
f:id:YustinBieber:20211126111717p:plain
エクセルで何番目のマスターを当てるか設定しておく

上の図はあくまで例なのですが、1~2ページに1番目のマスター、3~4ページに2番目のマスター…といった感じです。マスターをなしにする場合は空白にしておきます。

それで考えてみたのが以下のスクリプトです。

var docObj = app.activeDocument;
var pageObj = docObj.pages;

var filename = File.openDialog("リストのテキストファイルを選択してください。");
if (filename)
{
var fileObj = new File(filename);
 // 読み込みモード
fileObj.open("r");

//テキストファイルを1行ずつ読み込み最終行まで繰り返し
while(!fileObj.eof) {
	try{
		for (var i=0; i<pageObj.length; i++){
		var line= fileObj.readln();
		if(line!="") {
		pageObj[i].appliedMaster =app.activeDocument.masterSpreads[line-1];
		}else{
		//リストでマスターの指定がない場合はマスター[なし]にする		
		pageObj[i].appliedMaster =null;
		}
	}
		}catch(e){}
}
fileObj.close();
alert("終了しました");
}else{
	exit();
	}

実行結果は図のページパレットをご覧いただけるとわかると思います。
f:id:YustinBieber:20211126114331p:plain
これでマスターの数分だけ、いちいち手動で割り当てていた作業が数秒で終わるようになりました。

蛇足ですがエクセルでは先に範囲選択をしておけば、数値入力後にCtrl+Enterで選択範囲内に同じ数値が一発で入りますよ。