Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的脚本在执行时非常慢。请告诉我是什么使得这个脚本提供的结果非常慢_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 我的脚本在执行时非常慢。请告诉我是什么使得这个脚本提供的结果非常慢

Javascript 我的脚本在执行时非常慢。请告诉我是什么使得这个脚本提供的结果非常慢,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,此脚本的目的是在填充列B单元格时,应在列A中填充今天的日期(仅当它为空时)。使用FOR循环在更改多个列B单元格时插入多个日期。我无法确定是什么使这个脚本变慢。自动日期填充需要10到15秒。请调整一下速度 //------------------------------------------------------------ //Auto-Populate date in Column A of when column B is updated //---------------------

此脚本的目的是在填充列B单元格时,应在列A中填充今天的日期(仅当它为空时)。使用FOR循环在更改多个列B单元格时插入多个日期。我无法确定是什么使这个脚本变慢。自动日期填充需要10到15秒。请调整一下速度

//------------------------------------------------------------
//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);  
  }
}
//------------------------------------------------------------
//更新B列时自动填充A列中的日期
//------------------------------------------------------------
函数onEdit(事件){
var eventRange=event.range;
如果(eventRange.getColumn()==2){//2==B列
//getRange(行、列、numRows、numColumns)
var columnXRange=SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(),1,eventRange.getNumRows(),1);
var values=columnXRange.getValues();
如果(values.length==1){//如果活动单元格为1,则快速插入日期而不循环
值[0][0]=新日期();
}
否则{
对于(var i=0;i
功能OneEdit(e){
e、 source.toast(“条目”);
如果(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();
如果(值.length==1){
值[0][0]=新日期();
}否则{

对于(var i=0;i,因为您不需要每个单元格中的所有日期信息都不同,所以我会调用date函数一次,并将其存储在一个变量中供以后使用。这应该会加快代码的速度

例子:
//------------------------------------------------------------
//更新B列时自动填充A列中的日期
//------------------------------------------------------------
函数onEdit(事件){
var eventRange=event.range;
如果(eventRange.getColumn()==2){//2==B列
//getRange(行、列、numRows、numColumns)
var columnXRange=SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(),1,eventRange.getNumRows(),1);
var values=columnXRange.getValues();
/*只调用一次Date()*/
变量日期=新日期();
日期=日期.toString().拆分(“”).拼接(0,4).连接(“”);
如果(values.length==1){//如果活动单元格为1,则快速插入日期而不循环
数值[0][0]=日期;
}
否则{
对于(var i=0;i
脚本看起来非常不完善。为什么它要从
columnXRange
读取值?无论如何,请添加预期结果的说明。包括一些示例输入和相应的结果通常有助于取消重新启动预期结果。@Shahul问题到底是什么?请阅读。您的int值是多少用触发器结束目标?@Arials:对不起,我是新加入论坛的。我已经更新了问题和正文中的代码。请帮助我。@Shahulhameed有一件事可以提高效率,那就是只调用
new Date()
一次,如果你不需要分钟和秒的信息。你需要日期的所有信息吗?不,我不需要分钟和秒。嗨@Cooper,我仍然看到插入日期的延迟。延迟有多大?嗨@Aerals,我仍然看到插入日期的延迟。@Shahulhameed我们无法重现函数执行的速度。你你需要测试函数的执行时间。还有,你的工作表需要将日期输入多少行?我看到延迟了3秒。我刚刚复制了该文档。下面是链接。请自己尝试一次。如果可能,请帮助我。我测试了脚本。我想这是正常的执行时间。
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);  
  }
}