ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

InDesignでJavaScript その23

InDesignでJavaScript その23。

昨年某お仕事で作ったJavaScript。

InDesignで棒グラフを作るScript。

「数が1000個あるからIllustratorじゃ無理なんですー」と後輩が泣きついてきたので考えてみた。

仕様としてはInDesign上で画像フレームを重ねて棒グラフを作っておいて

Excelから抜き出した数値(タブ区切り)を読み込ませると

グラフが自動的に完成するよっていうもの。

下記のようなFMTを作って…

ピクチャ 1

下記のようにグラフが作成されますよー。

ピクチャ 2

スクリプトラベルとかは、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] + "点" ;

}

}

}

}