DTP駆け込み寺

[ 返信 ]

Javascriptで表組み作成

Javascriptで表組み作成

InDesignCC2022
テキストだけが入ったテキストフレームから特定の文字を表に変換して、「表1、テキスト1、表2、テキスト2」といった表とテキストを交互に入れるスクリプトを書いているのですが、なぜか表2を入れた瞬間に表1が消えてしまいます。

// スクリプトを実行
app.doScript(main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);

function main() {
var doc = app.activeDocument;

for (var i = 0; i < doc.textFrames.length; i++) {
var textFrame = doc.textFrames[i];
var originalText = textFrame.contents;

// 行ごとに分割
var lines = originalText.split('\r');

for (var j = 0; j < lines.length; j++) {
var line = lines[j];
if (/^01\t/.test(line)) {
textFrame.contents = "";
var table = textFrame.tables.add();
table.columnCount = 2; // 2列の表を作成
table.bodyRowCount = 1; // 1行の表を作成
var firstCell = table.cells[0];
firstCell.contents = "01";
var secondCell = table.cells[1];
secondCell.contents = line.replace(/^01\t/, ""); // 1行2列目に残りのテキストを挿入
textFrame.insertionPoints[-1].contents += "\r" + originalText;
}
}
//ここを消すと1行2列の表が入り表示していると入らない。
if (/【A5】/.test(originalText)) {
findA5(textFrame);
}
}
}

function findA5(textFrame) {
var story = textFrame.parentStory;
var text = story.contents;
var a5Pattern = /【A5】/;
var match = text.match(a5Pattern);
if (match) {
var a5Text = text.substring(match.index + match[0].length); // A5以降の文字列を取得
var a5PreviousText = text.substring(0, match.index);
story.contents = a5PreviousText;
var tableSize = textFrame.tables.add();
tableSize.columnCount = 6; // 6列の表を作成
tableSize.bodyRowCount = 6; // 6行の表を作成
textFrame.insertionPoints[-1].contents += a5Text;
}
}

画像の右側にあるテキストフレームの形が目指しているものですが、「if (/【A5】/.test(originalText)) {…」を入れていると、表2(下段の表)だけが入り、この部分を消すと表1(上段の表)だけが入るようになってしまっています。
こういう時の解決方法はあるのでしょうか?
助言をいただけると幸いです。

[21296] DTP屋の柴犬 (2023/10/06 Fri 18:41)


残り4件

  1. [21296] Javascriptで表組み作成 DTP屋の柴犬 2023/10/06 18:41 *
    1. [21297] Re: Javascriptで表組み作成 (z-) 2023/10/10 12:32
      1. [21298] Re^2: Javascriptで表組み作成 DTP屋の柴犬 2023/10/10 17:41
        1. [21300] Re^3: Javascriptで表組み作成 DTP屋の柴犬 2023/10/10 18:30
    2. [21301] Re: Javascriptで表組み作成 DTP屋の柴犬 2023/10/11 11:00