セル内のオーバーフローを解消するスクリプト
[1784]セル内のオーバーフローを解消するスクリプト |
投稿者:あか |
投稿日:2008/09/22(Mon) 20:40:07
いつも拝見させていただいています。
MacOSX(10.4)InDesignCS3でjavaScriptを勉強中なのですが、つまづいてしまったので、ご教授願います。
選択したセルがあふれていた場合、長体をかけてセル内に収める(複数段落があれば最後の段落のみに長体)というスクリプトを考えています。
以下のようにしてみたのですが、
sel = app.activeDocument.selection[0];
for (var i = 0; i < sel.cells.length; i++) {
var txtObj = sel.cells[i];
var danraku = txtObj.paragraphs.length-1;
for (var w=100; w >= 10; w--){
if (!txtObj.overflows) break;
txtObj.paragraphs[danraku].horizontalScale = w;
}
}
これだと、オーバーフローが解消しても10%まで長体かけられます。何が悪いのか、さっぱり分かりません。
どなたかご指摘をよろしくお願いします。
» 1
MacOSX(10.4)InDesignCS3でjavaScriptを勉強中なのですが、つまづいてしまったので、ご教授願います。
選択したセルがあふれていた場合、長体をかけてセル内に収める(複数段落があれば最後の段落のみに長体)というスクリプトを考えています。
以下のようにしてみたのですが、
sel = app.activeDocument.selection[0];
for (var i = 0; i < sel.cells.length; i++) {
var txtObj = sel.cells[i];
var danraku = txtObj.paragraphs.length-1;
for (var w=100; w >= 10; w--){
if (!txtObj.overflows) break;
txtObj.paragraphs[danraku].horizontalScale = w;
}
}
これだと、オーバーフローが解消しても10%まで長体かけられます。何が悪いのか、さっぱり分かりません。
どなたかご指摘をよろしくお願いします。
[1785]Re: セル内のオーバーフローを解消するスクリプト |
投稿者:せうぞー |
投稿日:2008/09/23(Tue) 02:41:31
これ、たとえば一番最後の行に
eval ("app.activeDocument.selection[0].cells[0].overflows;");
などと強制的に再評価してもtrueが返ります。内部的に再描画されていない感じ。
一般的なtextFrameに関しては、問題ないようです。
ほぼ同じことをAppleScriptでやらせると
tell application "Adobe InDesign CS3"
tell document 1
repeat with i in every cell of selection
set w to horizontal scale of paragraph -1 of i
repeat while overflows of i
set w to w - 1
if w < 10 then exit repeat
set horizontal scale of paragraph -1 of i to w
end repeat
end repeat
end tell
end tell
これは正しく動くようです。
したがって、JavaScriptのバグっぽいと思うんですがいかがでしょうか?
ちなみに、AppleScriptではfourさんの「OverFlowsCanceller(テキストのオーバーフローを解消)」があります。
http://psychocat.net/scriptNote/files/article.php?id=1
» 2
eval ("app.activeDocument.selection[0].cells[0].overflows;");
などと強制的に再評価してもtrueが返ります。内部的に再描画されていない感じ。
一般的なtextFrameに関しては、問題ないようです。
ほぼ同じことをAppleScriptでやらせると
tell application "Adobe InDesign CS3"
tell document 1
repeat with i in every cell of selection
set w to horizontal scale of paragraph -1 of i
repeat while overflows of i
set w to w - 1
if w < 10 then exit repeat
set horizontal scale of paragraph -1 of i to w
end repeat
end repeat
end tell
end tell
これは正しく動くようです。
したがって、JavaScriptのバグっぽいと思うんですがいかがでしょうか?
ちなみに、AppleScriptではfourさんの「OverFlowsCanceller(テキストのオーバーフローを解消)」があります。
http://psychocat.net/scriptNote/files/article.php?id=1
[1786]Re: セル内のオーバーフローを解消するスクリプト |
投稿者:せうぞー |
投稿日:2008/09/23(Tue) 03:38:44
あ、overflowsを評価する前に
txtObj.recompose();
を挿入するとうまくいきました。
var sel = app.activeDocument.selection[0];
for (var i = 0; i < sel.cells.length; i++) {
var txtObj = sel.cells[i];
var danraku = txtObj.paragraphs[-1];
for (var w=danraku.horizontalScale; w >= 10; w--){
txtObj.recompose();
if (txtObj.overflows == false) {break}
danraku.horizontalScale = w;
}
}
» 3
txtObj.recompose();
を挿入するとうまくいきました。
var sel = app.activeDocument.selection[0];
for (var i = 0; i < sel.cells.length; i++) {
var txtObj = sel.cells[i];
var danraku = txtObj.paragraphs[-1];
for (var w=danraku.horizontalScale; w >= 10; w--){
txtObj.recompose();
if (txtObj.overflows == false) {break}
danraku.horizontalScale = w;
}
}
[1787]Re: セル内のオーバーフローを解消するスクリプト |
投稿者:あか |
投稿日:2008/09/23(Tue) 14:34:24
せうぞーさんありがとうございます。
何でtrue繰り返すのかなって思ってましたが、バグっぽいんですね…早速試してみます。
fourさんの「OverFlowsCanceller」は使ってみたんですが、今自分がしたいことにはしっくりこなかったので、自分で作ることにしたんですよ。AppleScript今のところよくわからないですし…
今後いろいろ勉強していきます。またつまづいた時には、ご教授お願いします。
» 4
何でtrue繰り返すのかなって思ってましたが、バグっぽいんですね…早速試してみます。
fourさんの「OverFlowsCanceller」は使ってみたんですが、今自分がしたいことにはしっくりこなかったので、自分で作ることにしたんですよ。AppleScript今のところよくわからないですし…
今後いろいろ勉強していきます。またつまづいた時には、ご教授お願いします。
[1790]Re: セル内のオーバーフローを解消するスクリプト |
投稿者:お~まち |
投稿日:2008/09/24(Wed) 10:16:18
Windowsでも同様ですね。
同様のことをVBScriptでやると
Set sel = app.ActiveDocument.selection(1)
For i = 1 To sel.cells.Count
Set txtObj = sel.cells(i)
danraku = txtObj.paragraphs.Count
For w = 100 To 10 Step -1
If txtObj.overflows = False Then Exit For
txtObj.paragraphs(danraku).horizontalScale = w
Next
Next
オーバーフローを返してくれますが、JavaScriptでは正しく返してくれませんね。
#この間たまたまセルのオーバーフローを調べるルーチンを含んだスクリプトを書いてたんですが、VBScriptでした。
JavaScriptだったら私が質問してました。ありがとうございました。
同様のことをVBScriptでやると
Set sel = app.ActiveDocument.selection(1)
For i = 1 To sel.cells.Count
Set txtObj = sel.cells(i)
danraku = txtObj.paragraphs.Count
For w = 100 To 10 Step -1
If txtObj.overflows = False Then Exit For
txtObj.paragraphs(danraku).horizontalScale = w
Next
Next
オーバーフローを返してくれますが、JavaScriptでは正しく返してくれませんね。
#この間たまたまセルのオーバーフローを調べるルーチンを含んだスクリプトを書いてたんですが、VBScriptでした。
JavaScriptだったら私が質問してました。ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)