Skip to main content
Known Participant
March 18, 2021
Question

表のセルの列を横方向にまとめて結合したい。

  • March 18, 2021
  • 2 replies
  • 2778 views

よろしくお願いいたします。
教えていただきたいことは、表題のとおりです。
ご覧のとおり表メニューからは、それらしきものが見つからず、一行づつ選択しては結合するしかないのでしょうか?

    This topic has been closed for replies.

    2 replies

    Known Participant
    March 20, 2021

    戻り橋さん、Ten Aさん、ご対応をありがとうございます。

     

    スクリプトですか。。。。

    今持ち合わせているわたしのスキルでは、ハードルが高すぎてしまい。。。

     

    InDesignを使いこなすには、スクリプトの勉強もしなくてはいけないんでしょうか??

    その場合、よろしければ、解りやすい勉強方法や教科書があれば、教えてくださらないでしょうか?

    いかがでしょう?

    Inspiring
    March 20, 2021

    私が書いたスクリプトを確認する方法を記載します。

    今日は、Windows PCしかないので、Windows PCでの手順です。

     

    〇前順次

    • 添付ファイルをダウンロードして、拡張子をjsxに変更します。

    〇InDesign・[スクリプト]パネル表示

    • [ウィンドウ]↓[ユーティリティ]↓[スクリプト]メニューを選択し、[スクリプト]パネルを表示させます。

    〇スクリプト登録

    • [スクリプト]パネル上の[ユーザー]項目を選択し、右クリックします。
      表示されるメニュー[エクスプローラーで表示]を選択し、エクスプローラーを表示させます。
    • 表示されたエクスプローラーで、"Scripts Panel"フォルダ以下に、jsxファイルをコピーします。

    〇スクリプトの実行

    • 表の結合するセルを選択します。
    • [スクリプト]パネル上の[セル結合(行単位).jsx]項目をダブルクリックします。

     

     

    Known Participant
    March 20, 2021

    戻り橋さん!
    わぁ! ありがとうございます。
    ウィンドウメニュー/ユーティリティ/スクリプト

    知りませんでした。
    わたしはMac使いなのですが、てっきりターミナルを使うのかしらん?
    と思いこんでいました。
    まぁ、わたしには難しそうですが、自分なりにがんばって勉強いたします。

    これからも、何かのご縁があれば、よろしくご教示いただきたくお願いいたしあす。
    改めて、ありがとうございました。

    Ten A
    Community Expert
    Community Expert
    March 18, 2021

    セルの結合という機能は選択した複数セルに対して機能するものです。デフォルトの機能では全ての行を一度に横方向を結合処理出来ませんが、スクリプトなどを利用すると対応できるでしょう。

     

    var r=app.selection[0].tables[0].rows;for (var i=0;i<r.length;i++)r[i].merge();

     

    ここに挙げたワンライナーは選択したテキストフレームに含まれる1つ目の表の行に対して横方向に結合する機能を書いたものです。

    Inspiring
    March 19, 2021

    私もスクリプトを書いてみました。

    セル選択領域の行単位セル結合です。

     

    • macOS Mojave(10.14.3)
    • InDesign 2021(16.1)
    do {
        if (app.documents.length == 0) {
            alert("ドキュメントが開かれていません。");
            break;
        }
        // アクティブドキュメント
        var idDoc = app.activeDocument;
        // 選択オブジェクト
        var selObj= idDoc.selection;
        var targetObjs=[]; 
        for (nPos = 0; nPos < selObj.length; nPos++) {
            if (selObj[nPos].constructor.name=='Cell' ) {
                targetObjs.push(selObj[nPos]);
            }
        }
        if (targetObjs.length == 0) {
            alert("表セルが選択されていません。");
            break;
        }
        for (nPos = 0; nPos < targetObjs.length; nPos++) {
            var idCell = targetObjs[nPos];
            idColSpan = idCell.columnSpan;
            if (idColSpan > 1) {
                idColPos = idCell.parentColumn.index;
                idColEnd = idColPos + idColSpan;
                idRowSpan = idCell.rowSpan;
                for (nRowPos = 0; nRowPos < idRowSpan; nRowPos++) {
                    var idRow = idCell.rows[nRowPos];
                    idCellSpan = idRow.cells.length;
                    if (idColPos < idCellSpan) {
                        var idAnchorCell = idRow.cells[idColPos];
                        while (true) {
                            if ((idColPos + 1) < idRow.cells.length) {
                                var idMergeCell = idRow.cells[idColPos + 1];
                                if (idMergeCell.parentColumn.index < idColEnd) {
                                    idAnchorCell.merge(idMergeCell);
                                } else {
                                    break;
                                }
                            } else {
                                break;
                            }
                        }
                    }
                }
            }
        }
        alert("処理が終了しました。");
    } while (false);