简体   繁体   English

我的脚本在执行时很慢。 请告诉我是什么让这个脚本提供结果很慢

[英]My script is very slow while execution. Please tell me what makes this script to provide the result very slow

Purpose of this script is when i populate Column B cells, Today's date should be populated in column A (only if it is empty).此脚本的目的是当我填充 B 列单元格时,今天的日期应填充在 A 列中(仅当它为空时)。 using FOR loop for inserting multiple dates when changing multiples column B cells.使用 FOR 循环在更改多个列 B 单元格时插入多个日期。 I could not bale to identify what makes this script slower.我无法确定是什么让这个脚本变慢了。 it takes 10 to 15 secs for auto date population.自动日期填充需要 10 到 15 秒。 please tweak this to be faster..请调整它以更快..

//------------------------------------------------------------
//Auto-Populate date in Column A of when column B is updated 
//------------------------------------------------------------
function onEdit(event) {
  var eventRange = event.range;
  if (eventRange.getColumn() == 2) { // 2 == column B
    
    // getRange(row, column, numRows, numColumns)
    var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 1, eventRange.getNumRows(), 1);

    var values = columnXRange.getValues();
    
    if (values.length == 1) {        // if active cell is 1, quickly insert date without loop
      values[0][0] = new Date();
    }
    else {
      for (var i = 0; i < values.length; i++) {       
        if (!values[i][0]) {         // If cell isn't empty
          values[i][0] = new Date();
          //values.clearContent();
        }
        
      }     
    }
    columnXRange.setValues(values);  
  }
}
function onEdit(e) {
  e.source.toast('Entry');
  if (e.range.columnStart == 2) { 
    var columnXRange = e.range.getSheet().getRange(e.range.rowStart,1,e.range.rowEnd-e.range.rowStart + 1,1);
    var values = columnXRange.getValues();
    if (values.length==1) {
      values[0][0]=new Date();
     }else {
      for (var i=0;i<values.length;i++) {       
        if (!values[i][0]) {
          values[i][0] = new Date();
        }
      }     
    }
    columnXRange.setValues(values);  
  }
}

Since you don't need all the date information being different at each cell, then I would call the Date function once, and store it in a variable for use later.由于您不需要每个单元格的所有日期信息都不同,因此我将调用一次 Date 函数,并将其存储在一个变量中以备后用。 This should speed up your code.这应该会加快您的代码速度。

Example:例子:

//------------------------------------------------------------
//Auto-Populate date in Column A of when column B is updated 
//------------------------------------------------------------
function onEdit(event) {
  var eventRange = event.range;
  if (eventRange.getColumn() == 2) { // 2 == column B
    
    // getRange(row, column, numRows, numColumns)
    var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 1, eventRange.getNumRows(), 1);

    var values = columnXRange.getValues();
    /* Call Date() just once */
    var date = new Date();
    date = date.toString().split(' ').splice(0,4).join(' ');

    if (values.length == 1) {        // if active cell is 1, quickly insert date without loop
      values[0][0] = date;
    }
    else {
      for (var i = 0; i < values.length; i++) {       
        if (!values[i][0]) {         // If cell isn't empty
          values[i][0] = date;
        }
        
      }     
    }
    columnXRange.setValues(values);  
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM