InDesignでJavaScript その23。
昨年某お仕事で作ったJavaScript。
InDesignで棒グラフを作るScript。
「数が1000個あるからIllustratorじゃ無理なんですー」と後輩が泣きついてきたので考えてみた。
仕様としてはInDesign上で画像フレームを重ねて棒グラフを作っておいて
Excelから抜き出した数値(タブ区切り)を読み込ませると
グラフが自動的に完成するよっていうもの。
下記のようなFMTを作って…
下記のようにグラフが作成されますよー。
スクリプトラベルとかは、Script読んで想像してください。
やってることはそんなに難しくないっす。
グラフの長さの計算が面倒なぐらいかなー。
~~~~~~~~
//テキスト取得
var filename = File.openDialog("テキストファイルを指定してください");
//作業するドキュメントなどを変数に代入
var docObj = app.activeDocument;
var TAB = String.fromCharCode(9);
var LF = String.fromCharCode(10); //改行
//テキストを一気に読み込むついでに行数も数えておく
var regObj = new RegExp(LF,"g"); //正規表現で目的の文字を探す
// var fileObj = new File(fileListTEXT[t]);
var fileObj = new File(filename);
var flag = fileObj.open("r") ; //ファイルを読み込みモードで開く
if (flag == true) {
var lineAll = fileObj.read() ; //ファイル内容を一度に読み込む
var LFCount = lineAll.match(regObj) ;
//今回のコメント数
if (LFCount == null) { //1行しかなかったら
var comment = 1; //LFの数を数える(最終行に改行がないため+1する)
} else {
var comment = LFCount.length + 1; //LFの数を数える(最終行に改行がないため+1する)
}
}
fileObj.close();
//メイン処理へ
huiji_comment() ;
//保存
// docObj.save(inddFolder + inddName + ".indd") ;
// app.activeDocument.close() ;
//}
//alert(textLength + "ファイルを処理しました")
//メイン処理
function huiji_comment() {
// var fileObj = new File(fileListTEXT[t]);
var fileObj = new File(filename);
var flag = fileObj.open("r") ; //ファイルを読み込みモードで開く
if (flag == true) {
//ページ数分繰り返す
for (i = 0 ; i < comment ; i++) {
var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入
var line = line.split(TAB) ; //タブで区切る
var pageObj = docObj.pages[i] ;
//アイテムのオーバーライド処理
var myObjects = pageObj.masterPageItems
for (h = 0 ; h if (myObjects[h].label != "") { //ラベルがついてなかったら if (myObjects[h].label != "number") { //numberじゃなかったら //アイテムをオーバーライドする myObjects[h].override(pageObj); } } } //バー0 if (line[0] != "0") { pageObj.pageItems.item("bar0").select(); var var0 = app.selection[0] ; var y1 = var0.visibleBounds[0]; var x1 = var0.visibleBounds[1]; var y2 = var0.visibleBounds[2]; var x2 = var0.visibleBounds[3]; var0.visibleBounds = [y1, x1, y2, (24*line[0]) + x1] } else { pageObj.pageItems.item("bar0").select(); var var0 = app.selection[0] ; var0.remove() ; } //バー1 if (line[1] != "0") { pageObj.pageItems.item("bar1").select(); var var0 = app.selection[0] ; var y1 = var0.visibleBounds[0]; var x1 = var0.visibleBounds[1]; var y2 = var0.visibleBounds[2]; var x2 = var0.visibleBounds[3]; var0.visibleBounds = [y1, x1, y2, (24*line[1]) + x1] } else { pageObj.pageItems.item("bar1").select(); var var0 = app.selection[0] ; var0.remove() ; } //バー2 if (line[2] != "0") { pageObj.pageItems.item("bar2").select(); var var0 = app.selection[0] ; var y1 = var0.visibleBounds[0]; var x1 = var0.visibleBounds[1]; var y2 = var0.visibleBounds[2]; var x2 = var0.visibleBounds[3]; var0.visibleBounds = [y1, x1, y2, (24*line[2]) + x1] } else { pageObj.pageItems.item("bar2").select(); var var0 = app.selection[0] ; var0.remove() ; } //バー3 if (line[3] != "0") { pageObj.pageItems.item("bar3").select(); var var0 = app.selection[0] ; var y1 = var0.visibleBounds[0]; var x1 = var0.visibleBounds[1]; var y2 = var0.visibleBounds[2]; var x2 = var0.visibleBounds[3]; var0.visibleBounds = [y1, x1, y2, (24*line[3]) + x1] } else { pageObj.pageItems.item("bar3").select(); var var0 = app.selection[0] ; var0.remove() ; } //バー4 if (line[4] != "0") { pageObj.pageItems.item("bar4").select(); var var0 = app.selection[0] ; var y1 = var0.visibleBounds[0]; var x1 = var0.visibleBounds[1]; var y2 = var0.visibleBounds[2]; var x2 = var0.visibleBounds[3]; var0.visibleBounds = [y1, x1, y2, (24*line[4]) + x1] } else { pageObj.pageItems.item("bar4").select(); var var0 = app.selection[0] ; var0.remove() ; } //星 if (line[5] != "") { pageObj.pageItems.item("star").select(); var var0 = app.selection[0] ; var y1 = var0.visibleBounds[0]; var x1 = var0.visibleBounds[1]; var y2 = var0.visibleBounds[2]; var x2 = var0.visibleBounds[3]; var0.visibleBounds = [y1, x1, y2, (31.314*(line[5]/5)) + x1] } //バー4テキスト if (line[4] != "") { pageObj.pageItems.item("data").select(); var catchFrame = app.selection[0] ; catchFrame.contents = "平均点数" + line[5] + "点" ; } } } }