DTP駆け込み寺
  1. [15872] script 特定の色で塗られたセル内のtxtの色を変える ごえもん 2013/08/09 13:10
    1. [15873] Re: script 特定の色で塗られたセル内のtxtの色を (z-) 2013/08/09 13:41
    2. [15875] Re: script 特定の色で塗られたセル内のtxtの色を (z-) 2013/08/09 15:50
      1. [15878] Re^2: script 特定の… 流星光輝 2013/08/10 13:10
        1. [15880] Re^3: script 特定の… ごえもん 2013/08/11 11:11

[ 返信 ]

script 特定の色で塗られたセル内のtxtの色を変える

いつもお世話になってます。
環境はMacOS10.58、IndesignCS3です。JavaScriptはまだまだ勉強中の身です。

表内の特定のスウォッチで塗られたセル内のテキストの色を変えるというスクリプトを、色々な方のスクリプトを参考に作成してみたのですが、うまく動作しません。。

(function(){
var tableObj = app.activeDocument.selection;
for (i=0; i<tableObj[0].rows.length; i++)
{
for(k=0; k<tableObj[0].rows[i].columns.length; k++)
{
var cell = tableObj[0].rows[i].cells[k];
if (cell.fillColor == "AAAA")
{
for (var l=0; l<cell.characters.length; l++)
{
cell.characters[l].fillColor = "BBBB";
}
}
}
}
})();

”AAAA”というスウォッチで塗られているセル内のテキストを"BBBB"というスウォッチに変えたいのですが、エラーこそ起きないものの変化がありません。。

そもそも組み立て方が間違ってるのかも知れませんが、どなたかお力添え頂けたら嬉しいです。
よろしくお願い致します。

[15872] ごえもん (2013/08/09 Fri 13:10)

[ 返信 ]


Re: script 特定の色で塗られたセル内のtxtの色を

どういう選択範囲で実行されているかが不明瞭ですが、
テキストフレームを選択しておいて
var tableObj = app.activeDocument.selection[0].tables[0];
とし、以降ではtableObj[0]ではなくtableObjとして扱う方がすっきりするかも。
実際試していなくて申し訳ないですが、動かない原因はここからはっきりさせないことには。

また、セルを全部処理するのであればrowとcolumnで分けなくても
for(var i=0; i<tableObj.cells.length; i++){ }
でだいじょうぶです。
また、characterも1つずつやらなくても
cell.texts[0].fillColor="BBBB";
でいけます。
ESTKで要所要所止めながら、変数が目論み通りのプロパティを持っているか確認して直してみてください。

提示されたスクリプトに沿ってのレスは以上ですが、例文として
app.selection[0].tables[0].cells.everyItem().fillColor="AAAA";
app.selection[0].tables[0].cells.everyItem().texts.everyItem().fillColor="BBBB";
でいけます。

[15873] (z-) (2013/08/09 Fri 13:41)

[ 返信 ]


Re: script 特定の色で塗られたセル内のtxtの色を

ごめんなさい追記
> for(k=0; k<tableObj[0].rows[i].columns.length; k++)
> {
> var cell = tableObj[0].rows[i].cells[k];

変数kがcolumnsとcellsどっちつかずになっています。
ここはcellsに統一かな

[15875] (z-) (2013/08/09 Fri 15:50)

[ 返信 ]


Re^2: script 特定の…

動かないのは色の設定時に正しく設定されないためでしょう。
エラーにならないのは、色々な値を受け取れるハズなんだけど(笑)

スウォッチを拾って、変数で渡せば解決すると思います。
とりあえず、こんなソースを書いて確認しました。

#target indesign
(function(){
var sw=app.activeDocument.swatches.itemByName("BBBB");
if (app.selection.length!=0) { // 表選択なら選択範囲は1つだけ
var tableObj = app.selection[0];
if (tableObj.constructor.name.match(/^Table|Cell$/)) {
for (var i=0; i<tableObj.cells.length; i++) {
if (tableObj.cells[i].fillColor.name=="AAAA"){
tableObj.cells[i].texts[0].fillColor=sw;
}
}
}
}
})();

[15878] 流星光輝 (2013/08/10 Sat 13:10) web

[ 返信 ]


Re^3: script 特定の…

返信が遅れてしまい申し訳ありません。

z-様
セルとテキストを全部処理する方法、そういう指定の仕方があったんですね!
これだとテキストボックス単位でまとめて処理できそうなのでより効率があがりそうです。
とても参考になりました、ありがとうございます!

流星光輝様

なるほど、色の指定がおろそかだったわけですね。。
書いていただいたソースを参考に理解を深めたいと思います。
ありがとうございました!

[15880] ごえもん (2013/08/11 Sun 11:11)