我已经建立了一个Google Sheet来为我们公司派送送货卡车。我们有一张名为“未安排的工作”的工作表,其中列出了所有等待完成的工作。在规划当天的路线时,这些路线会移动到以每个驱动程序命名的工作表。当司机完成他的交付时,他将标记每个工作完成。每隔5分钟运行一个脚本,将标记为已完成的作业移动到名为“已完成作业”的工作表中,并在作业完成时插入驱动程序名称(列O)以及日期和时间戳(列N)。
我们目前的脚本相当慢,所以我尝试使用数组但没有取得任何成功。我非常喜欢这个,所以如果有人回复可以解释他们的代码在做什么,我将不胜感激。
我正在尝试使用的代码:
function reschedule() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName('Driver'));
var sheet = ss.getSheetByName('Driver');var clearrange = sheet.getRange(3, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
var targetSheet = ss.getSheetByName('Completed');
var val = sheet.getRange(3, 1, sheet.getLastRow() - 1, sheet.getLastColumn())
.getValues();
var arr = [],
rowsToWriteBack = [];
rowsToWriteBack.push();
val.forEach(function (r, i) {
r[3] == 'Completed' ? arr.push(r) + Utilities.formatDate(new Date(), "GMT-4", "MM-dd-yyyy EEE hh:mm a") : rowsToWriteBack.push(r)
});
if (arr.length > 0) {
targetSheet.getRange(targetSheet.getLastRow() + 1, 1, arr.length, arr[0].length)
.setValues(arr);
clearrange.clear({contentsOnly:true});
sheet.getRange(3, 1, rowsToWriteBack.length, rowsToWriteBack[0].length)
.setValues(rowsToWriteBack);
}
}
答案 0 :(得分:0)
Jonas w的评论似乎正确。 如果作业完成,您是否尝试在行中添加时间戳列? 如果是这样,也许改变这些界限:
val.forEach(function (r, i) {
r[3] == 'Completed' ? arr.push(r) + Utilities.formatDate(new Date(), "GMT-4", "MM-dd-yyyy EEE hh:mm a") : rowsToWriteBack.push(r)
});
这样的事情:
val.forEach(function (r, i) {
if r[3] === 'Completed' {
r[4] = Utilities.formatDate(new Date(), "GMT-4", "MM-dd-yyyy EEE hh:mm a");
arr.push(r)
} else {
rowsToWriteBack.push(r)
}
});
答案 1 :(得分:0)
这非常好。最终的代码,如果有人有兴趣,看起来像这样....
whoami