【发布时间】:2022-11-09 06:31:00
【问题描述】:
语境
我有一个 g-sheet,它充当一种“主表”,其中所有内容都从一堆其他外部电子表格中涌入,这些电子表格全天都在实时更新。
我连接的每个外部电子表格都通过 importrange 函数路由到我们的主电子表格中自己的选项卡
所有这些选项卡然后使用行 ID # 路由到一个主选项卡 - 以便每个人都可以从该选项卡工作。
问题
在这个所有内容所在的主选项卡中,我有一个宏对行进行排序,以将最近的行置于顶部,除其他外,以保持数据清洁。随着时间的推移,随着我连接更多工作表,我添加到宏中的数字以容纳新行。
几天前宏开始抛出“服务电子表格在访问带有 id 的文档时超时......”然后 id 是主选项卡本身的 id #。
知道在不使用大带宽宏的情况下可能有更流畅的方法来完成这项工作,但是优化脚本以最适合用例远远超出了我的经验水平。我的宏如下:
function MasterSormat2() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('D1').activate();
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues([''])
.build();
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria);
criteria = SpreadsheetApp.newFilterCriteria()
.build();
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria);
criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues([''])
.build();
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria);
spreadsheet.getRange('A1:AP11001').activate();
spreadsheet.getActiveRange().offset(1, 0, spreadsheet.getActiveRange().getNumRows() - 1).sort({column: 4, ascending: false});
spreadsheet.getRange('A:AM').activate();
spreadsheet.getActiveRangeList().setFontFamily('Calibri')
.setHorizontalAlignment('left');
spreadsheet.getRange('P:S').activate();
spreadsheet.getActiveRangeList().setHorizontalAlignment('right');
spreadsheet.getRange('U:U').activate();
spreadsheet.getActiveRangeList().setHorizontalAlignment('right');
spreadsheet.getRange('AA:AG').activate();
spreadsheet.getActiveRangeList().setHorizontalAlignment('right');
spreadsheet.getRange('AL:AL').activate();
spreadsheet.getActiveRangeList().setHorizontalAlignment('right')
.setNumberFormat('"$"#,##0.00');
spreadsheet.getRange('D4').activate();
};
在改进这一点时,谁能指出我正确的方向?
感谢您在这里提供的任何帮助,我期待进一步学习
【问题讨论】:
-
请学习如何在不过度使用 activate() 的情况下编写宏;
标签: javascript google-apps-script google-sheets optimization macro-recorder