読者です 読者をやめる 読者になる 読者になる

k_ikiの雑記帳

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

3月4日のJSのプチバージョンアップ

あ。なにやっとんじゃ、私は。
恥ずかしい書き方しててすみません。
でもま、いいや(ぉぃ
前回の問題点の根本的な解決策は棚上げしたままです。
ちょっとおせっかいなアラート出しまくりのプチバージョンアップ。
 
【3月16日追記】
少し訂正。あまりにおせっかいなので、アラートひとつ削りました(^^;
エラー処理のため、テキストファイルの行数と比較する対象をテキストフレームの総数としていたのを、ラベル付テキストフレームに限定。
しかしそれでも、半角算用数字以外の文字列を含むラベルを持つフレームや番号の重複などの理由により、テキストファイルの行数分を流し込むためのラベルに欠番があるかどうかまでは判定できない。
今の私ではやり方が思いつかない……。
 
というわけで、ご使用にあたってはご注意ください。
このスクリプトを利用することで何らかの損害を被ったとしても、当方は一切の責任を負いかねますのでご了承ください。
 
【使い方】
用意したテキストファイルの論理行と一致するスクリプトラベル名を持つテキストフレームにテキストファイルの内容を一行ずつ割り付けます。
ラベルは1から始まる半角算用数字のみ。
なお、グループ化は解除してから流し込んでください。そうしないとInDesignが止まらなくなります。
また、テキストファイルの行番号と一致するラベル名を持つフレームがない場合、InDesignが止まらなくなります。
その場合は強制終了してください。
 
【3月19日追記】
このソースも過去の汚点です。ご利用に際しては無限ループの危険を回避した改良版をどうぞ。もちろん自己責任で。

var myDoc = app.activeDocument;
var myPage = app.activeDocument.pages;

objCnt = 0;
for (var m=0; m<myPage.length; m++) {
	var myObj = myPage[m];
	for (var n=0; n<myObj.textFrames.length; n++) {
		if (myObj.textFrames[n].label !== "") {
			objCnt++;
		}
	}
}
//alert (objCnt);

var mainDialogObj = app.dialogs.add({ name:"複数フレームにテキスト配置", canCancel:true});
with(mainDialogObj){
	with(dialogColumns.add()){
		with(dialogRows.add()){
			staticTexts.add({staticLabel:"配置済みフレームの処理を選択してください"});
		}
		with (dialogColumns.add()){
			var drpList = dropdowns.add({stringList: ["ラベル削除", "ラベル保持"], selectedIndex:0, minWidth:200 });
		}
		with(dialogColumns.add()){
		}
	}
}

flag = mainDialogObj.show();
if (flag == false) {
	exit();
}

filename = File.openDialog("テキストファイルを指定してください");
if (drpList.selectedIndex == 0) {
	alert ("配置済みフレームのラベルを削除します", "選択された処理");
	if (filename) {
		fileObj = new File(filename);
		flag = fileObj.open("r");
		if (flag == true) {
			lineCnt = 0;
			while (!fileObj.eof) {
				fileObj.readln();
				lineCnt = lineCnt + 1;
			}
		}
		flag = fileObj.open("r");
		if (flag == true) {
			lineCount = 1;
			if (objCnt >= lineCnt) {
				while (!fileObj.eof) {
					for (i=0; i<myPage.length; i++) {
						for (j=0; j<myPage[i].textFrames.length; j++) {
							if (myPage[i].textFrames[j].label == lineCount.toString()) {
								myPage[i].textFrames[j].contents = fileObj.readln();
								myPage[i].textFrames[j].label = "";    //割り付けたらラベルは削除
								lineCount = lineCount + 1;
							}
						}
					}
				}
			} else {
				alert("テキストフレームが不足しています");
			}
			fileObj.close();
		} else {
			alert("ファイルが開けませんでした");
		}
	}
} else {
	alert ("配置済みフレームのラベルを保持します", "選択された処理");
	if (filename) {
		fileObj = new File(filename);
		flag = fileObj.open("r");
		if (flag == true) {
			lineCnt = 0;
			while (!fileObj.eof) {
				fileObj.readln();
				lineCnt = lineCnt + 1;
			}
		}
		flag = fileObj.open("r");
		if (flag == true) {
			lineCount = 1;
			if (objCnt >= lineCnt) {
				while (!fileObj.eof) {
					for (i=0; i<myPage.length; i++) {
						for (j=0; j<myPage[i].textFrames.length; j++) {
							if (myPage[i].textFrames[j].label == lineCount.toString()) {
								myPage[i].textFrames[j].contents = fileObj.readln();
								lineCount = lineCount + 1;
							}
						}
					}
				}
			} else {
				alert("テキストフレームが不足しています");
			}
			fileObj.close();
		} else {
			alert("ファイルが開けませんでした");
		}
	}
}
alert("動作完了しました");