InDesignでJavaScript その18。
mixiには載せてたんだけどこっちには載せてなかったので。
InDesignをJavaScriptで動かしてカレンダーを作ってみた。
正味1日ぐらいかかったけど(仕事の合間に思いつきで書き進めていったから、のべ1週間ぐらいはかかっているんだけどね)。
これで次の仕事のカレンダー作成はわりと楽なはず。
まずエクセルで上の画像のようなシートを作る。
各月が何曜日から始まっているか、何週間あるか、何日あるか、を算出。
大した計算はしてないけど(^^;
次にInDesignで下の画像のようなカレンダーを作成(数字はもちろん入ってませんよ)。
各日のテキストフレーム、フレームを横一列でグループ化したもの、月のテキストフレーム、これらをグループ化したもの、それぞれにスクリプトラベルをつける。
各日のテキストフレームは0~6の繰り返しでつけておく(1~31ではない)。
あとはポチっとして、テキストを選択してOKしたら、カレンダーができてます。
左のエクセルに様々な情報を加えておけば結構いろいろ応用できると思う。
/*
★カレンダー.jsx★
☆ver.1.0☆
Copyright [偽善者こうちゃん]
[2007.07.18] {
ver.1.0作成
}
エクセルで作ったテキストからカレンダーを作るJavaScript。
エクセル作らないとなんの役にも立ちません。
なお、このJavaScriptを使用して損害をこうむっても
私は知りませんので、あしからず。
偽善者こうちゃん
http://macneko.blog77.fc2.com/
*/
var TAB = String.fromCharCode(9);
var filename = File.openDialog("テキストファイルを指定してください");
//作業するドキュメントなどを変数に代入
var docObj = app.activeDocument;
//メイン処理へ
Calender() ;
//メイン処理
function Calender() {
//テキスト流し込み処理開始
if (filename) {
var fileObj = new File(filename);
var flag = fileObj.open("r") ; //ファイルを読み込みモードで開く
if (flag == true) {
//月の数だけ繰り返す(サンプルは1ページ1ヶ月)
for (i = 0 ; i < docObj.pages.length ; i++) {
//一番最初の月だけ最初にテキストを読む。あとは繰り返し処理中に読む
if (i == 0) {
var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入
var line = line.split(TAB) ; //タブで区切る
}
//グループされたカレンダーを選択
docObj.pages[i].pageItems.item("cal").select() ;
var calGroup = app.selection[0];
//月のフレームを選択してテキスト流し込み
calGroup.pageItems.item("month").select() ;
var monthFrame = app.selection[0];
monthFrame.contents = line[0] ; //選択しているテキストフレームに流し込む
//繰り返しのために月に何週あるかを代入(evalで整数化)
var weekAll = eval(line[1])
//週の数だけ繰り返す
for (j = 0 ; j < weekAll ; j++) {
//各週の一番左のフレームは直接流し込む
//週のフレームを選択
calGroup.pageItems.item("week" + j).select() ;
var weekFrame = app.selection[0];
//1日目を流し込み
var weekdayNum = eval(line[3]) ;
weekFrame.pageItems.item("day" + weekdayNum).select() ;
var dayFrame = app.selection[0];
dayFrame.contents = line[4] ; //選択しているテキストフレームに流し込む
//繰り返し処理を開始する前にテキストを読む
var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入
var line = line.split(TAB) ; //タブで区切る
//週2日目以降の処理のために週のフレームを選択
calGroup.pageItems.item("week" + j).select() ;
var weekFrame = app.selection[0];
//週2日目から週最終日まで繰り返し
while (line[2] == "") { //空の間繰り返す(週の切り替えで1になったら抜ける)
var weekdayNum = eval(line[3]) ;
//weekdayNum日目を流し込み
weekFrame.pageItems.item("day" + weekdayNum).select() ;
var dayFrame = app.selection[0];
dayFrame.contents = line[4] ; //選択しているテキストフレームに流し込む
var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入
var line = line.split(TAB) ; //タブで区切る
}
}
}
}
}
fileObj.close();
}