在转移到另一个Google表格之前,将数据插入到foreach数组中

时间:2017-01-27 21:19:32

标签: javascript arrays google-apps-script foreach google-sheets

我已经建立了一个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);
    }

}

2 个答案:

答案 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