如何修改Adobe InDesign脚本使其仅作用于选中的Table/Text Frame
解决方案
直接将原脚本中遍历全文档文本框的逻辑替换为处理当前选中对象的逻辑即可,修改后代码如下:
var mySelections = app.selection; var myWidths = [.5,.35,.44,.44]; // 遍历所有选中对象 for(var s = 0; s < mySelections.length; s++){ var sel = mySelections[s]; // 如果选中的是文本框,处理里面所有表格 if(sel.constructor.name == "TextFrame"){ for(var i = 0; i < sel.tables.length; i++){ setTableColumnWidths(sel.tables[i]); } } // 如果直接选中的是表格,直接处理 else if(sel.constructor.name == "Table"){ setTableColumnWidths(sel); } } // 封装设置列宽的公共方法,避免重复代码 function setTableColumnWidths(table){ for(var j = 0; j < myWidths.length; j++){ // 加一层判断避免表格列数不足时报错 if(j < table.columns.length){ table.columns[j].width = myWidths[j]; } } }
修改说明
- 用
app.selection读取当前用户选中的所有对象,不再遍历全文档内容 - 新增类型判断逻辑,同时支持两种使用场景:
- 选中一个或多个文本框,自动处理文本框内所有表格
- 直接选中一个或多个表格,仅处理选中的表格
- 额外新增了列数校验逻辑,当表格列数少于
myWidths数组长度时不会报错
注意事项
- 你可以根据实际需求调整
myWidths数组里的宽度参数,确保数值对应你要设置的前N列宽度即可 - 未选中符合要求的对象时,脚本不会执行任何操作,不会影响文档其他内容
内容的提问来源于stack exchange,提问作者A.Y. McDonald
相关产品推荐
相关产品推荐

