|
MacOS10.5.8 InDesignCS3 5.0.4を使用しています。
表題の件ですが,JavaScriptにて流し込んだWordデータの 正規表現による置換を行おうとプログラムを組んでいます。 テキストのみを選んだ場合(テキストフレーム選択ではなく,流したテキストをドラッグして選んでいます)は正規表現と段落スタイルの適用がうまくいったのですが,うまくできない場所があり,その箇所を選択したところ属性が「Table」や「Cell」になっていました。
試しにCell内のデータにも同じ処理を施してみたのですが, 段落スタイルを適用させようとすると 「applyParagraphStyleが関数ではありません」 というエラーになります。 要はセルやテーブルのテキストを選んだ後,段落スタイルパレットをダブルクリックして任意のスタイルを適用させるところまで自動で行いたいのですが,行き詰まってしまいました。
抽象的で恐縮ですが,お力をお貸しいただければ幸いです。
|
No.4090 2010/01/27(Wed) 21:29:39
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
|
Re: JavaScriptにて表内やセル内の段落スタイル適用/正規表現置換をしたい / mg |
|
|
|
GUI操作のイメージでそのまま 〜〜〜.cellObj.applyParagraphStyle(〜〜)と書いているなら
cellObjのあとにtextsなりparagraphsなりを入れてあげるか セルスタイルでcellObj.appliedCellStyle=〜〜〜 でどうだろう?
|
No.4091 2010/01/29(Fri) 10:54:28
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9
|
|
Re: JavaScriptにて表内やセル内の段落スタイル適用/正規表現置換をしたい / 五月 貴 |
|
|
|
mg様
コメントありがとうございました。 ですが当方の力量不足で,割り当て方がどうしても理解できませんでした。
以下,ソースを公開します。 (所々alertが入っているのは内容を表示させて確認するためです)
selObj = app.activeDocument.selection; var pStyle=app.activeDocument.paragraphStyles.item("基本"); var len = selObj.length; if(!len){ alert("テキストか表組を選択してください。"); exit; }else{ alert("要素数:"+len+"個"); for (z=0; z<len; z++) { var elemNam = selObj[z].constructor.name; // 表を選んだ場合の処理 if(elemNam == "Table"){ alert("要素名:"+elemNam); tblObj = selObj[z]; alert(tblObj); var row = tblObj.bodyRowCount; var col = tblObj.columnCount; alert(row+"列×"+col); for(x=0; x<tblObj.rows.length; x++){ for(y=0; y<tblObj.rows[x].columns.length; y++){ var txt = tblObj.rows[x].contents; alert(txt); tblObj.rows[x].contents = txt.replace(/[0-9A-Za-z、\[\]\{\}<><>]/g,repFunc); alert("置換後:"+tblObj.rows[x].contents); tblObj.rows[x].contents.applyParagraphStyle(pStyle); } } }else{ if(elemNam == "Cell"){ // セルを選んだ場合の処理 alert("要素名:"+elemNam); CellObj = selObj[z].contents; alert(CellObj); CellObj = txt.replace(/[0-9A-Za-z、\[\]\{\}<><>]/g,repFunc); alert("置換後::"+selObj[z].contents); selObj[z].paragraphs.applyParagraphStyle(pStyle);
}else{ if(elemNam == "Paragraph" || elemNam== "Text"){ alert("要素名:"+elemNam); txt = selObj[z].contents; selObj[z].contents = txt.replace(/[0-9A-Za-z、 +-\/\(\)\[\]\{\}<><>]/g,repFunc); alert("置換後::"+selObj[z].contents); selObj[z].applyParagraphStyle(pStyle); for(ln=0; ln<selObj[z].length; ln++){ selObj[z].characters[ln].applyParagraphStyle(pStyle); } } } } } }
function changeTxt(searchTxt){ alert("置換前text:"+searchTxt); searchTxt.replace(/[0-9A-Za-z、\[\]\{\}<><>]/g,repFunc); alert("置換後のtext:"+searchTxt); return searchTxt; }
// 正規表現置換 function repFunc(chr,ptr,allStr) { var hankaku = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789, +ー/()[]{}〈〉〈〉"; var zenkaku = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789、 +-/()[]{}<><>"; var n = zenkaku.indexOf(chr); return hankaku.charAt(n); }
|
No.4093 2010/01/29(Fri) 16:35:46
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
|
|
Re: JavaScriptにて表内やセル内の段落スタイル適用/正規表現置換をしたい / mg |
|
|
|
とりあえずセルの処理で止まっているので、その部分のヒント。
セル、表を選択したなら、app.selection.length=1になります。 なので、selObj=app.documents[0].selection[0]とかにして、 zのforループがいらないです。
オブジェクトと文字列がごっちゃになっています。 セルや文字列に段落スタイルはあてられません。 あてられるのはテキスト系のオブジェクトです、TextsとかParagraphsとか…
階層はまずは順番に潜ったほうがいいです。 選択=表obj>行obj>セルobj>テキストobj>文字列 //var txt = tblObj.rows[x].contents; //tblObj.rows[x].contents = txt.replace(/[0-9A-Za-z、\[\]\{\}<><>]/g,repFunc); //tblObj.rows[x].contents.applyParagraphStyle(pStyle);
var txt = tblObj.rows[x].cells[y].contents; tblObj.rows[x].cells[y].texts[0].contents = txt.replace(/[0-9A-Za-z、\[\]\{\}<><>]/g,repFunc); tblObj.rows[x].cells[y].texts[0].applyParagraphStyle(pStyle);
セルについてはselObj.cellsのためのforループが必要になります。 選択=セルobjの集まり>セルobj>テキストobj>文字列 //CellObj = selObj[z].contents; //CellObj = txt.replace(/[0-9A-Za-z、\[\]\{\}<><>]/g,repFunc); //selObj[z].paragraphs.applyParagraphStyle(pStyle);
CellObj = selObj[0].cells; for(var ccc=0; ccc<CellObj.length; ccc++){ //セルの時のtxtが定義されていない txt = CellObj[ccc].contents; CellObj[ccc].texts[0].contents= txt.replace(/[0-9A-Za-z、\[\]\{\}<><>]/g,repFunc); CellObj[ccc].texts[0].applyParagraphStyle(pStyle); }
|
No.4095 2010/01/29(Fri) 20:03:05
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9
|
|
Re: JavaScriptにて表内やセル内の段落スタイル適用/正規表現置換をしたい / 五月 貴 |
|
|
|
mg様
再び具体的なアドバイスをいただきまして本当にありがとうございます。 これを参考に週末改めて試してみたいと思います。 取り急ぎお礼まで。
|
No.4097 2010/01/29(Fri) 20:53:14
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
|
|
Re: JavaScriptにて表内やセル内の段落スタイル適用/正規表現置換をしたい / 五月 貴 |
|
|
|
ご教示いただいたスクリプト、無事動作しました。 本当にありがとうございました。
|
No.4104 2010/01/31(Sun) 16:07:34
Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; ja-jp) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16
|
|