k_ikiの雑記帳

DTPのこと、創作のことなど、思いつくまま

placeText2.jsx

夕方に会社で書いたけど、InDesignのない環境(自宅)で修正したため動作未検証。
サブルーチンは市川せうぞー師匠の書き方に学んだ。
InD-Boardで拝見した (z- さんのスクリプトを真似てテキストファイルを改行で分けて配列に入れた。
テキストファイルの内容が何行あろうと、ドキュメント中に行番号と一致するスクリプトラベル(半角算用数字限定)を持つフレームがあればテキストファイルの該当行を割り付ける。
割り付けに成功したフレームのラベルはひっぺがして、一致するラベルを持つフレームがなくなったらループを抜けて終了、と。
 
【2010年3月18日追記】動いた♪ 動作確認環境:WindowsXP/CS3、MAC OS 10.5.8/CS4
 

////////////////////////////////////////////エラー処理 
function myerror(mess) { 
  if (arguments.length > 0) { alert(mess); }
  exit();
}

////////////////ドキュメントとフレームの有無をチェック
if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")}
var myDoc = app.activeDocument;
if (myDoc.textFrames.length == 0) {myerror("テキストフレームがありません\n(スクリプトラベルもお忘れなく)")}

/////テキストを選択し、配列に入れる
var filename = File.openDialog("テキストファイルを指定してください");
if (filename) {
	fileObj = new File(filename);
	flag = fileObj.open("r");
	if (flag == true) {
		var txtObj = fileObj.read();
		fileObj.close();
		var $n = "\n";
		var txtObj2 = txtObj.replace(/\r?\n|\r/g, $n);
		var txtAry = txtObj2.split(/\n/); //改行で分けた配列
	} else {
		alert("読み込みに失敗しました");
	}
}

var myPage = app.activeDocument.pages;
for (var i=0; i<myPage.length; i++) {
	for (var j=0; j<myPage[i].textFrames.length; j++) {
		for (var k=0; k<txtAry.length; k++){
			if (myPage[i].textFrames[j].label == k+1) {
				myPage[i].textFrames[j].contents = txtAry[k];
				
				////↓ラベルを保持する場合はコメントアウト
				myPage[i].textFrames[j].label = "";
				
			}
		}
	}
}
alert("終了しました");