InDesign:セル群それぞれ結合 & セルのコピペ後に属性だけ復元

鮭がひたすら川の上流を目指すように、DTPオペレーターはデザイナーを志して然るべし、
と思っていた時期が長かったんですが(そのくせがんばってはいなかった)
トータルでディレクションできないぶんにはもにょる作業ばっかり多くて…
もうトシもトシなので、まず問題なく一丁前にできる事をやるのが筋だよなあ、てのもあり。

というわけで、行きがかりですが転職しました。年末に。
素人指示の素人赤字な現場にいたせいで、久々に組版してますという実感。自動化がいくらでも生きる職種。
つまり、イラスター現場からインデデ現場に戻ってきました。
以前のように慌ただしい月刊ファッション誌などではなく書籍系ですね。

そんなんで、また今後InDesignの記事ばっかりになっていくと思います。
というかInDesignしか触らないので、ほかの2つはほかの場でのみ使う感じになりそです。
衰えがこわい。


で、こないだ片付いたのがQuarkドキュメントの改版をInDesignで、というやつ…
もう聞いただけで笑顔が曇りますが。ひとごとならよかったのだがw

中でも表組が、あのー、
タブ送りの複数行に罫線を別置きしただけのやつ。


このまま表に変換してやればいいんだけど、各種セル属性の設定がめんどうなので作り置きの表に流し込みたい。
でも構造上、複数行のセルは実質複数段落でできているので、表に変換するとセルが小分けになっちゃってしまっちゃう。

ので、セルの結合をしたいんだけど、たとえば「n列の3、4行のセルを結合」を列ごとに、みたいなことは一括ではできない(と思う。標準機能で方法わかる方いらしたら教えてください)。

ので、スクリプト書きました。


id_mergeEachLines.jsx

お手元の環境で動かなかったらがまんしてください。


あそびかた

結合したい単位でセル群を選択します。
選択は、1行または1列以内であることが条件となります。
(作り込んでないので)

スクリプト実行します。
上図のような選択であれば、2行分のセルを列ごとに結合します。

で、このような結果に。

逆に、実行時にこのように選択していると、今度は行ごとに結合します。

という判別をしているので、2×2ごとに4つずつ結合、とかは今のところ非対応です。
できると便利なんだろうなあ!(中空を見つめている)


もうひとつある

で、で、整形された表になったとして、ヒョーマットにどう流し込むか、って事なんですけども。
選択セル群の行/列の個数が一致していれば表to表でコピペができます。
が、セルの属性もまるごとペーストされちゃってしまっちゃいます。
表スタイル/セルスタイルなどの用意があっても適用しなおしはちょっとめんどくさい。

ので、スクリプト書きました。


id_restoreCellStyles.jsx

お手元の環境以下略


あそびかた

まず、属性が崩れてもいいので、かまわず一旦コピペしちまいます。

ペースト後の選択状態を残したまま、スクリプトを実行。
セルの文字列を覚えて、ペーストを取り消しして、あらためて文字列を移植する、という処理です。

おーやったー。

コピー元とペースト先、同時には選択できないため、このような設計としてみました。
瞬発的に書いたものなので、複雑なカタチの表では試しておりません。

さあさあさあさあ早く帰りましょう。

 

でーす。

6 thoughts on “InDesign:セル群それぞれ結合 & セルのコピペ後に属性だけ復元

  1. Mac環境でのCS4以降の動作確認しましたので、報告です。
    id_mergeEachLines.jsx
    CS4、CS5、CS6、CC2015 いずれも問題なく動作しています。
    結合しようするセルが既に結合されていると、エラーとなりました。しかし、そんな結合をする奴がイケナイのであって、実際の使用には問題ないと思います。

    id_restoreCellStyles.jsx
    こちらもCS4、CS5、CS6、CC2015 いずれもバッチリです。
    複雑な表組みも大丈夫っぽいです。「複雑」具合によってはどうなるかわかりませんが、キリがないので現状で便利に使わせていただきます。

    どちらもこれまで有りそうで無かったツールですね。確かにモテますよ、これは。

  2. ちょっと前に見て色々ごにょごにょしたので回答をこちらに書いておきますw

    #targetengine session
    var idleTask = app.idleTasks.add({name:’mergeCells’, sleep:200}).addEventListener(IdleEvent.ON_IDLE,mergeCells);
    function mergeCells(){app.idleTasks.itemByName(“mergeCells”).remove();var tgt=app.selection;if(tgt.length==0){idleTask=app.idleTasks.add({name:’mergeCells’,sleep:200}).addEventListener(IdleEvent.ON_IDLE,mergeCells);return;}if(tgt[0].reflect.name==”Cell”&&tgt[0].cells.length>1){while(app.selection[0].cells.length>1)app.selection[0].cells[0].merge(app.selection[0].cells[1]);}idleTask=app.idleTasks.add({name:’mergeCells’,sleep:200}).addEventListener(IdleEvent.ON_IDLE,mergeCells);}

  3. ヨメに昼飯を…

Ten へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。

*