google-apps-script - 平均每次执行 9 秒的脚本,每次执行交付 145 秒
问题描述
我今天早些时候在 GAS 中创建这个脚本时,测试平均每次执行需要 9 秒:
function ProjetoNovasLigas() {
var ss = SpreadsheetApp.getActive();
ss.getRange('Página1!I2:N').copyTo(ss.getRange('Página1!P2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
ss.getRange('Página1!Z2:Z').copyTo(ss.getRange('Página1!S2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
ss.getRange('Página1!Y2:Y').copyTo(ss.getRange('Página1!U2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
ss.getRange('Página1!A2').setFormula('=TEXT(NOW(),"yyyy/mm/dd hh:mm")');
ss.getRange('Página1!A2').copyTo(ss.getRange('Página1!A2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}
通过script.google.com自动触发使其每 10 分钟运行一次,完全运行需要 145 秒:
脚本中是否有任何错误导致它发生?我需要帮助,我会把电子表格留在这里,以防有人想看看可能发生的事情:
https://docs.google.com/spreadsheets/d/15T4UPVtEHv43DLomKcTmdaPuGWMsBUoO7bLvlOhab4k/edit?usp=sharing
解决方案
setValues()
您可以通过使用和数组操作对操作进行批处理来加快执行速度。
示例脚本:
function archivr() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Página1');
var lr = sh.getLastRow();
var values = sh.getRange('I2:Z' + lr).getValues();
values.forEach(function(row){
row.push("", row[16]); //[16] = Col Y; Move Col Y to the right of Col Z
row.splice(6, 11);//Remove Col N to Col Y
});
sh.getRange(2,12, values.length, values[0].length).setValues(values); //set modified values to Col P
sh.getRange('A2').setValue(new Date());
}
参考:
推荐阅读
- java - Java - 读取压缩位图
- extjs - ExtJS 4.1 树形面板 - 扩展树形面板会导致重复记录
- simulink - Raspberry Pi 音频文件在 Simulink 中读取多个音频文件的模块
- c - 如何在 c 中对数组进行子集化?
- android - Facebook Native in feed 广告在 RecyclerView 中相互重叠
- vue.js - 请求后vuejs自动刷新列表
- graph-algorithm - 图中最长的非重复路径?
- javascript - 如何为“活动”元素添加事件侦听器
- java - Java Threadpool 处理无限排队线程?
- dropzone - DropZone parallelUploads 不工作我已将 parallelUploads 设置为 10,但它在一个请求中上传 20