InDesign CS6自動化作戦 (InDesign CS6 Automation Operation)

エクセルのデータを読み込み自動レイアウトする(写真あり)

 まず、エクセルでデータを作成します。ここではラーメン店の名前や住所、評判、写真のあるファイルパスなど6項目が入っているデータとします。



次に、エクセルでデータを作成したら「テキスト(タブ区切り)形式」で保存します。
 変換したファイルは日本語フォルダ名やボリュームを含まないフォルダにコピーまたは移動させます。サンプルではMacintosh HDボリューム内にdata.txtというファイル名で用意してあります。
 自動的にレイアウトさせますが、すでにフォーマットが決まっていて指定位置にテキストフレームを作成する場合には、あらかじめテキストフレームの位置と幅を配列に入れておきます。このようにするとテキストフレームの位置と幅を変更しやすいためです。サンプルでは2行目のtfXがテキストフレームの表示開始位置になっています。3行目がテキストフレームの横幅になっています。ここでは単位は全部cmにしてありますが、必要に応じてmmなどに変更すると良いでしょう。
 テキストフレームの表示開始位置は上から9行目のstartY = 2で指定しています。単位はcmなので4とすると上から4cmの位置からレイアウトが開始されます。
 テキストフレームを作成したらファイルから読み込みを行います。どのファイルを読み込むかは上から4行目で指定します。File()の中で読み込むファイルのパスを指定します。ここではMacintosh用のパス表記にしていますが、安全のため使用しているOS固有のパス指定にしてください。ファイルからreadln()で一行読み込みタブコードで分割します。分割したデータは配列に入りますので、その配列を順番にテキストフレームに入れていくことで自動的にレイアウトが行われます。タブ区切りテキストで書き出した場合、データによっては前後に"(ダブルクォーテーション)が付加されることがあります。これを削除するには先頭の文字がダブルクォーテーションかどうかを調べて、ダブルクォーテーションだった場合には最初と最後の文字以外をsubstringで抜き出します。これでダブルクォーテーションを削除することができます。
 最後に画像を表示していますが、画像を表示するために画像のファイルパスをエクセルデータに入れてあります。これにより任意の場所にある画像ファイルを自動的に配置し表示させることができます。最後の項目になっているためif (i != 5)として最後の項目と、それ以外で処理を分けています。6番目が画像ファイルのパスなので1少ない5を指定します。これは最初のデータが0番目からはじまるためです。


■ソースコード
TAB = String.fromCharCode(9); // タブコード
tfX = [2,4,6,9,12,16]; // 表示する横の位置
tfW = [1.8,1.8,2.8,2.8,3.8,2.8]; // 表示する横の横幅
fileObj = new File("Macintosh HD:data.txt");
flag = fileObj.open("r");
if (flag)
{
pageObj = app.documents.add();
startY = 2; // 上端2cmからレイアウト
while(!fileObj.eof)
{
text = fileObj.readln(); // 1行読み込む
txtItem = text.split(TAB); // タブコードで分割
for (i=0; i<6; i++) // 6項目あるので6回繰り返す
{
txtObj = pageObj.textFrames.add();
x1 = tfX[i]+"cm";
y1 = startY + "cm";
x2 = tfX[i] + tfW[i] + "cm";
y2 = startY + 3 + "cm"; // 縦幅は3cmで固定
txtObj.visibleBounds = [y1,x1,y2,x2];
if (i != 5)
{
tmpText = txtItem[i];
if (txtItem[i].charAt(0) == '"')
{
tmpText = txtItem[i].substring(1,txtItem[i].length-1);
}
txtObj.contents = tmpText;
}else{
// 写真の表示処理
txtObj.place(txtItem[i]);
txtObj.fit(FitOptions.proportionally); // フレームサイズに写真を収める
}
}
startY = startY + 3.5; // 下に3.5cm移動
}
}

■ポイント
 読み込むファイルの日本語文字コードはUnicode (UCS-2)にしてください。つまり、一度エクセルからタブ区切りテキストで書き出した後に、JEDITなどで文字コードを変換するようにした方が安全です。

■実際のスクリプトをダウンロード(sample.jsx.zip)

写真素材 PIXTA