随分と昔に質問として投稿しました「表に対して縦方向への流し込むスクリプト」(当時の投稿記事はサイトにURLを貼っておきました。当時と名前が変わっているのはお察しください)
このスクリプトが無事に解決出来たので感謝の意を込めてこちらに投稿させていただきます。
※なお実務で使えたら良いと思っての事なのでセルの結合時などは視野の外、表と単語の数が合わなかった時にはアラートを表示して中止にしています。
InDesign CC2022
app.doScript(main,ScriptLanguage.JAVASCRIPT,[],UndoModes.FAST_ENTIRE_SCRIPT);
main();
function main() {
CR = String.fromCharCode(13); //改行
TAB = String.fromCharCode(9); //タブ
if (app.selection.length == 1) {
var tblObj = app.selection[0];
switch (app.selection[0].constructor.name) {
case "Cell":
case "Table":
case "Row":
case "Column":
break;
default:
}
var clipAry = new Array();
var myDoc = app.activeDocument;
with (txtfrmObj = myDoc.textFrames.add()) {
visibleBounds = ["0cm", "0cm", "18cm", "21cm"];
contents = "ダミー";
app.selection = characters.itemByRange(0, -1);
app.paste();
while (characters[-1].contents == CR) characters[-1].remove(); //最後の改行を削除
var clipstr = "" + contents;
}
if (clipstr != "") {
var tblRows = tblObj.rows.length;
var tblCols = tblObj.columns.length;
var wordCount = clipstr.split(/\s+/).length; // クリップボードの単語数を数える
if (wordCount > tblRows * tblCols) {
alert("クリップボードの単語数が表のセル数を超えています。");
} else {
try {
var rowIdx = 0;
var colIdx = 0;
var clipAry = clipstr.split(CR);
for (var i = 0; i < clipAry.length; i++) {
tblObj.rows[rowIdx].cells[colIdx].contents = clipAry[i];
rowIdx++;
if (rowIdx >= tblRows) {
rowIdx = 0;
colIdx++;
if (colIdx >= tblCols) break;
}
}
} catch (e) {
alert("表組みへの流し込み中にエラーが発生しました。\r" + e);
}
}
} else {
alert("クリップボードの内容がありません。");
}
txtfrmObj.remove();
}
}
特に問題なく動いていますが、何かおかしい点などがありましたらご指摘などあると助かります…!
改編などはご自由に。
[21227] DTP屋の柴犬 (2023/04/18 Tue 11:30) web