![見出し画像](https://assets.st-note.com/production/uploads/images/149334434/rectangle_large_type_2_ddb7cb67a2ee31aa7af345ebd00494e8.png?width=1200)
InDesignの表の幅を調整するスクリプト
「表の横幅をテキストフレームいっぱいに合わせる」ことをよくやるのですが、手作業でがんばってきました。
ChatGPTにお願いしてみたところ、サクっとできましたの共有します。
すべての列幅を均等に
![](https://assets.st-note.com/img/1722563338112-Wm8znGteLq.png?width=1200)
#target indesign
// メイン関数
function main() {
var doc = app.activeDocument;
var sel = app.selection;
if (sel.length == 0 || !(sel[0].hasOwnProperty('baseline'))) {
alert("テーブル内にカーソルを置いてください。");
return;
}
var cursor = sel[0];
var parentTable = null;
// テーブルを含むセルを見つける
if (cursor.constructor.name === "InsertionPoint") {
if (cursor.parent.constructor.name === "Cell") {
parentTable = cursor.parent.parent;
}
} else if (cursor.constructor.name === "Text") {
if (cursor.parentTextFrames.length > 0) {
var frame = cursor.parentTextFrames[0];
if (frame.tables.length > 0) {
for (var i = 0; i < frame.tables.length; i++) {
var table = frame.tables[i];
if (table.storyOffset.index <= cursor.index && cursor.index <= table.storyOffset.index + table.characters.length) {
parentTable = table;
break;
}
}
}
}
}
if (!parentTable) {
alert("テーブル内にカーソルを置いてください。");
return;
}
// テキストフレームの幅を取得
var textFrame = parentTable.parent;
while (textFrame.constructor.name !== "TextFrame" && textFrame.constructor.name !== "Story") {
textFrame = textFrame.parent;
}
if (textFrame.constructor.name === "TextFrame") {
var frameWidth = textFrame.geometricBounds[3] - textFrame.geometricBounds[1];
// テーブルの幅をテキストフレームの幅に設定
parentTable.width = frameWidth;
} else {
alert("テーブルがテキストフレーム内に見つかりません。");
}
}
main();
最終列のみを調整
![](https://assets.st-note.com/img/1722563340350-KRSgNkJ0fT.png?width=1200)
#target indesign
// メイン関数
function main() {
var doc = app.activeDocument;
var sel = app.selection;
if (sel.length == 0 || !(sel[0].hasOwnProperty('baseline')) || !(sel[0].constructor.name === "InsertionPoint" || sel[0].constructor.name === "Text")) {
alert("テーブル内にカーソルを置いてください。");
return;
}
var cursor = sel[0];
var parentTable = null;
// テーブルを含むセルを見つける
if (cursor.constructor.name === "InsertionPoint") {
if (cursor.parent.constructor.name === "Cell") {
parentTable = cursor.parent.parent;
}
} else if (cursor.constructor.name === "Text") {
if (cursor.parentTextFrames.length > 0) {
var frame = cursor.parentTextFrames[0];
if (frame.tables.length > 0) {
for (var i = 0; i < frame.tables.length; i++) {
if (frame.tables[i].storyOffset <= cursor.index && frame.tables[i].storyOffset + frame.tables[i].characters.length >= cursor.index) {
parentTable = frame.tables[i];
break;
}
}
}
}
}
if (!parentTable) {
alert("テーブル内にカーソルを置いてください。");
return;
}
// テーブルが含まれているテキストフレームの幅を取得
var textFrameWidth = parentTable.parent.geometricBounds[3] - parentTable.parent.geometricBounds[1];
// テーブルの現在の幅を取得
var currentTableWidth = parentTable.width;
// 最終列を除くすべての列幅の合計を計算
var totalOtherColumnsWidth = 0;
for (var col = 0; col < parentTable.columns.length - 1; col++) {
totalOtherColumnsWidth += parentTable.columns[col].width;
}
// 最終列の幅を計算して設定
var newLastColumnWidth = textFrameWidth - totalOtherColumnsWidth;
parentTable.columns[parentTable.columns.length - 1].width = newLastColumnWidth;
}
main();
オマケ:選択したフレームをマージン幅に
![](https://assets.st-note.com/img/1722566865606-UepIt4jjGt.png?width=1200)
// ドキュメントと選択アイテムを取得
var doc = app.activeDocument;
var selection = app.selection;
// 選択されているアイテムが存在するか確認
if (selection.length > 0) {
// ドキュメントのマージン情報を取得
var marginPreferences = doc.marginPreferences;
// マージン幅を計算
var marginWidth = doc.documentPreferences.pageWidth - marginPreferences.left - marginPreferences.right;
// 選択されているすべてのアイテムに対して処理を実行
for (var i = 0; i < selection.length; i++) {
var item = selection[i];
// フレーム(テキストフレーム、グラフィックフレーム、その他)であるか確認
if (item.hasOwnProperty('geometricBounds')) {
// フレームの幅をマージン幅に設定
var bounds = item.geometricBounds;
bounds[3] = bounds[1] + marginWidth; // 左の位置 + マージン幅
item.geometricBounds = bounds;
}
}
}
ダウンロード
スクリプト
KeyboardMaestroマクロ
ここから先は
0字
/
1ファイル
¥ 100
期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる
Amazonギフトカード5,000円分が当たる
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5