[InDesign][JS]選択した表の各列を行方向にマージ 07/08
動作確認環境:WindowsXP/CS3(5.0.4)
勉強部屋の件で、表組を列方向にマージするにはこう書けばよさげ。
挿入点ではなく、セルを一つ以上選んでから実行すると、選択した部分の列を上から下までマージします。
【2009/07/08 18:13訂正】※
結果は下図のような感じ。表全体を選んだとき、セルの高さを最小値に設定してたら1行の細長い表になっちゃう(^^;
あと、表全体をマージしちゃうと、「表を結合しない」がグレーアウトしちゃうので要注意。アンドゥは効く。

なお、すでに結合した列がある状態で表全体を選んでこのスクリプトを実行すると下図のようなエラーが出る。まあ、エラーは出るけど、結合済みの列の左側の列は結合される。
こういうときは、結合されてないところを選んで結合する方法もアリw

※訂正箇所
訂正前: var tableObj = app.activeDocument.selection;
訂正後: var tableObj = app.activeDocument.selection[0];
mixiでミシマバイカモさんに教えていただきました。
いつもありがとうございます m(_ _)m
最初の行でこうしておけば、以後3回登場する変数 tableObj について [0] を入れなくて済みます。
勉強部屋の件で、表組を列方向にマージするにはこう書けばよさげ。
挿入点ではなく、セルを一つ以上選んでから実行すると、選択した部分の列を上から下までマージします。
(function (){
var tableObj = app.activeDocument.selection;
for (var i=0; i<tableObj[0].columns.length; i++)
{
var cell1 = tableObj[0].columns[i].cells[0];
var cell2 = tableObj[0].columns[i];
cell1.merge(cell2);
}
}) ();【2009/07/08 18:13訂正】※
(function (){
var tableObj = app.activeDocument.selection[0];
for (var i=0; i<tableObj.columns.length; i++)
{
var cell1 = tableObj.columns[i].cells[0];
var cell2 = tableObj.columns[i];
cell1.merge(cell2);
}
}) ();結果は下図のような感じ。表全体を選んだとき、セルの高さを最小値に設定してたら1行の細長い表になっちゃう(^^;
あと、表全体をマージしちゃうと、「表を結合しない」がグレーアウトしちゃうので要注意。アンドゥは効く。

なお、すでに結合した列がある状態で表全体を選んでこのスクリプトを実行すると下図のようなエラーが出る。まあ、エラーは出るけど、結合済みの列の左側の列は結合される。
こういうときは、結合されてないところを選んで結合する方法もアリw

※訂正箇所
訂正前: var tableObj = app.activeDocument.selection;
訂正後: var tableObj = app.activeDocument.selection[0];
mixiでミシマバイカモさんに教えていただきました。
いつもありがとうございます m(_ _)m
最初の行でこうしておけば、以後3回登場する変数 tableObj について [0] を入れなくて済みます。
コメントの投稿
トラックバック
http://kstation2.blog10.fc2.com/tb.php/361-3b0678a4











今回、私は columns.length を変数にセットしていますが、
cells.length を変数に入れてやれば
cells.name.split(":")
とすることで column の値と row の値が配列として得られます(string型)
なので、記事中のスクリプトを編集して各行を列方向にマージするものに改造するには
columns を
rows に直さないとだめなのですが、
上で書いたように配列にして変数に入れてやれば、
[0] で取り出せば column
[1] で取り出せば row なので、スクリプトを列用に書き換えるのも簡単です^^