我认为Google表格中的相当简单/简单的代码根据我所在的文件进行一些自动排序。代码可以,但它需要一半一分钟来执行。有什么办法可以优化吗?
以下是代码:
function autoSort(sheet) {
var data = {};
var sortMap = {
"*** Artwork ***": {
tableRange: "A5:R100",
sortCriteria: [
{column: 12, ascending: true},
{column: 5, ascending: true}
]
},
"*** Artists ***": {
tableRange: "A3:Z102",
sortCriteria: [
{column: 2, ascending: true}
]
}
};
if (data = sortMap[sheet.getName()]) {
sheet.getRange(data.tableRange).sort(data.sortCriteria);
}
}
function onEdit(e) {
var activeSheet = e.source.getActiveSheet();
autoSort(activeSheet);
}
答案 0 :(得分:1)
执行涉及大量单元格的任何操作(例如,在您的示例中为100 * 25)以及每次编辑到工作表中将会对性能产生重大影响。 Google表格倾向于排队数据操作以减少服务器负载,因此花费大量时间等待绿灯。 Google只为Sheets / Script用户提供了如此强大的计算能力。
我在这里看到的唯一优化是检查编辑是否对您排序的列进行了编辑。
function onEdit(e) {
var activeSheet = e.source.getActiveSheet();
var activeRange = e.Range;
if ([2, 5, 12].indexOf(activeRange.columnStart) != -1) {
autosort(activeSheet);
}
}
如果您要排序的范围是所有编辑发生的地方,这将无济于事。
更好的方法是放弃在编辑时对事物进行排序的想法,并为此目的向用户提供custom menu item。