InDesignでの連結セルの扱い方を教えて下さい。

[10149]InDesignでの連結セルの扱い方を教えて下さい。 投稿者:paragraph 投稿日:2006/10/30(Mon) 20:23
はじめまして。宜しくお願いします。
-----------------------------
mac OS 10.3.9
InDesign CS2 4.0.4
-----------------------------

InDesignドキュメント内の選択した表の罫線の幅を置換するjavascriptを作成しております。
例えば選択セルの罫線幅を0.5mmに設定する場合

var replaceWeight = 0.5; //置換罫線
var selectObj = app.selection[0].cells;

for( i=0; i<selectObj.length; i++ ){
selectObj[i].rightEdgeStrokeWeight = replaceWeight;
selectObj[i].leftEdgeStrokeWeight = replaceWeight;
selectObj[i].topEdgeStrokeWeight = replaceWeight;
selectObj[i].bottomEdgeStrokeWeight = replaceWeight;
}

上記により通常のセルの罫線は処理出来るのですが
表中に連結したセルが含まれる場合に、処理出来ません。

InDesignでの連結セルの扱い方を教えて下さい。
» 1
[10149へのレス]Re: InDesignでの連結セルの扱い方を教えて下さい。 投稿者:ミシマバイカモ 投稿日:2006/10/31(Tue) 20:38
InDesignでの連結セルの扱い方を教えて下さい。

教えられるほど理解できていませんが、多少は適用できる方法です。

var replaceWeight = 0.5; //置換罫線
with (app.selection[0]){
try { innerColumnStrokeWeight = replaceWeight; } catch(e){}
try { innerRowStrokeWeight = replaceWeight; } catch(e){}
try { rightEdgeStrokeWeight = replaceWeight; } catch(e){}
try { leftEdgeStrokeWeight = replaceWeight; } catch(e){}
try { topEdgeStrokeWeight = replaceWeight; } catch(e){}
try { bottomEdgeStrokeWeight = replaceWeight; } catch(e){}
}

セルの選択の仕方によっては上手くない場合があります。
try catchはなくてもいいのかも知れません。(最初から入れて書いてしまいましたので)

CS2でJavascriptを使われているのでしたら、ExtendScript Toolkitの利用をお勧めします。
varで宣言したローカル変数の中身を調べることができますので、var sellectObj = app.selection[0];等とすることで、選択されたObjectが何で、そのプロパティの中身がどうなっているか等も調べることができます。

連結セルがどうなっているのかについては、ご自身でお調べください。
» 2
ご回答ありがとうございます。

説明不足でした。

目的としては
複数の罫線幅を使用した1つの表組内の罫線幅を
よくある検索置換ダイアログを表示して
入力された罫線幅を入力された罫線幅に置換したいのです。

連結セルの扱いかたを知りたかった為、初めに質問させて頂く際に掲載したスクリプトは罫線操作以外の部分等を削除したものを掲載いたしました。

>CS2でJavascriptを使われているのでしたら、ExtendScript Toolkitの利用をお勧めします。
ExtendScript Toolkitは使用しています。プロパティ等も色々調べて思考錯誤しましたが、なかなか思う結果が得られない為、質問しました。

InDesignにて一度設定してしまった罫線幅を変えるのは手間のかかる作業だと思いますが皆さん手作業なのでしょうか?
» 3
こちらの過去ログをご覧ください。
JavaScriptではなくAppleScriptですが。
https://dtp-bbs.com/indesignbbs/archives/2006/09/08/1404009917.html
» 4
[10149へのレス]Re: InDesignでの連結セルの扱い方を教えて下さい。 投稿者:梅花藻(ミシマバイカモ@会社) 投稿日:2006/11/01(Wed) 15:00
連結セルの扱い方を問題にされている事を理解しました。
私の場合、ある方法(今回の場合ですと、私の行った直接選択されているものの罫線を扱う方法)だと上手くいくけれど、通常の方法(paragraphさんのように選択されているものの中のひとつひとつのセルの罫線を操作する方法 )だと上手くいかない、という場合には、上手くいく状態に持っていくことを考えます。
以下は、paragraphさんのスクリプトに少し手を加えたものです。

var replaceWeight = 0.5; //置換罫線
var selectObj = app.selection[0].cells;

for( i=0; i<selectObj.length; i++ ){
var tempObj = selectObj[i];
if (tempObj.columnSpan > 1 || tempObj.rowSpan > 1){
app.selection = tempObj;
tempObj = app.selection[0];
}
with (tempObj){
rightEdgeStrokeWeight = replaceWeight;
leftEdgeStrokeWeight = replaceWeight;
topEdgeStrokeWeight = replaceWeight;
bottomEdgeStrokeWeight = replaceWeight;
}
}
» 5
皆さんありがとうございました。

>上手くいく状態に持っていくことを考えます。
多方面からのアプローチが問題解決の鍵ですよね。参考になります。
助かりました。

これで煩わしい罫線処理をしなくてすみそうです。
» 6
梅花藻(ミシマバイカモ@会社)さん参考に成りました。
少し手を加えてみました。

var selectObj = app.selection[0].cells;

myDialog = app.dialogs.add({name:"罫線の太さ"});
dlgColumn = myDialog.dialogColumns.add();
dlgInt = dlgColumn.realEditboxes.add({editValue:0.5}); // デフォルト

if( myDialog.show() == true ){
var replaceWeight = dlgInt.editValue; //置換罫線
myDialog.destroy();
}

for( i=0; i<selectObj.length; i++ ){
var tempObj = selectObj[i];
if (tempObj.columnSpan > 1 || tempObj.rowSpan > 1){
app.selection = tempObj;
tempObj = app.selection[0];
}
with (tempObj){
rightEdgeStrokeWeight = replaceWeight;
leftEdgeStrokeWeight = replaceWeight;
topEdgeStrokeWeight = replaceWeight;
bottomEdgeStrokeWeight = replaceWeight;
}
}

数値を入れると使い勝手が良くなりました。
横は入りですみません。
» 7
少々余分な話ではありますが、DialogはmyDialog=app.dialogs.add()で1つできますので、myDialog.show() の有無にかかわらず(当然の事ながら、表示されたDialogをキャンセルしたかOKしたかに関係なく)、myDialog.destroy()しなければ、InDesignを終了するまでメモリ中に残ります。

Dialogの数は、ExtendScript ToolkitでターゲットをAdobe InDesign CS2_Jにした状態で、データブラウザのapp=[Object Application]の中のdialogs=[Object Dialogs]の中のlengthで確認出来ます。
» 8
>myDialog.destroy()しなければ、InDesignを終了するまでメモリ中に残ります。
すみません意味が分かってません。
で、もう少し改造してみました。

var selectObj = app.selection[0].cells;
//ダイアログ作成
myDialog = app.dialogs.add({name:"罫線の太さ変更"});
tmp1 = myDialog.dialogColumns.add();
var myTop = tmp1.checkboxControls.add({staticLabel: "上罫線    太さmm", minWidth:120, checkedState:true});
var myLeft = tmp1.checkboxControls.add({staticLabel: "左罫線", minWidth:120, checkedState:true});
//下罫と右罫が反対にしないとだめでもOK仕様?
var myBottom = tmp1.checkboxControls.add({staticLabel: "右罫線", minWidth:120, checkedState:true});
var myRight = tmp1.checkboxControls.add({staticLabel: "下罫線", minWidth:120, checkedState:true});
//数値入力追加メニュー
dlgColumn = myDialog.dialogColumns.add();
dlgInt = dlgColumn.realEditboxes.add({editValue:0.5});
if(myDialog.show() == true ){
var myTop = myTop.checkedState;
var myLeft = myLeft.checkedState;
var myBottom = myBottom.checkedState;
var myRight = myRight.checkedState;
var replaceWeight = dlgInt.editValue;
myDialog.destroy(); //これではダメなんですか?
if(myTop+myLeft+myBottom+myRight !=0){
mycheck(myTop, myLeft, myBottom, myRight);
}
}

function mycheck(myTop, myLeft, myRight, myBottom){
for( i=0; i<selectObj.length; i++ ){
var tempObj = selectObj[i];
if (tempObj.columnSpan > 1 || tempObj.rowSpan > 1){
app.selection = tempObj;
tempObj = app.selection[0];
}
with (tempObj){
if (myTop == true) topEdgeStrokeWeight = replaceWeight;
if (myLeft == true) leftEdgeStrokeWeight = replaceWeight;
if (myBottom == true) bottomEdgeStrokeWeight = replaceWeight;
if (myRight == true) rightEdgeStrokeWeight = replaceWeight;
}
}
}
» 9
>>myDialog.destroy()しなければ、InDesignを終了するまでメモリ中に残ります。
>すみません意味が分かってません。

if(myDialog.show() == true ){

myDialog.destroy(); //これではダメなんですか?

}

if文の中ですので、Dialogが表示された際に「OK」ボタンがクリックされれば(myDialog.show()がtrueを返し)myDialog.destroy()は実行されるのですが、「キャンセル」ボタンをクリックして取りやめた時には(myDialog.show()がfalseを返すので)、myDialog.destroy()は実行されず、Dialogがメモリ中に残ったままになります。

ダイアログが50個くらい溜まっていた所で、メモリを圧迫するという事はないのですが、多少気になったもので。
些末なことをとり上げてしまい申し訳ありません。
» 10
>(myDialog.show()がfalseを返すので)、myDialog.destroy()は実行されず、Dialogがメモリ中
>に残ったままになります。

分かりました。
var replaceWeight = dlgInt.editValue;
if(myTop+myLeft+myBottom+myRight !=0){
mycheck(myTop, myLeft, myBottom, myRight);
}
}
myDialog.destroy(); //これを移動しました。

教えて貰ったルーチンはセル結合したものを処理してくれますが、同じ様な線幅処理するapplescript3本とJavascript1本当方確認済みはセル結合したものを正しく処理しなかったので、気になっていました。罫の数値がないものになっていました。
また、色々改造してみます。有り難う御座いました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア