#target illustrator var doc = app.activeDocument; var sel = doc.selection; // Recursive function to collect text frames function getTextFrames(items, result) { for (var i = 0; i < items.length; i++) { var item = items[i]; if (item.typename === "TextFrame") { result.push(item); } else if (item.typename === "GroupItem") { getTextFrames(item.pageItems, result); } } } var frames = []; getTextFrames(sel, frames); if (frames.length === 0) { alert("No text frames found."); } else { var input = prompt("Paste your text (use returns to split):", ""); if (input) { var parts = input.split(/\r\n|\r|\n/); // SORT frames: top-to-bottom, then left-to-right frames.sort(function(a, b) { var ay = a.top; var by = b.top; // If roughly same row, sort left to right if (Math.abs(ay - by) < 5) { return a.left - b.left; } // Otherwise sort top to bottom return by - ay; }); // Fill in order for (var i = 0; i < frames.length; i++) { frames[i].contents = parts[i] || ""; } } }