Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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 在Google脚本中加速onEdit功能-有时无响应_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 在Google脚本中加速onEdit功能-有时无响应

Javascript 在Google脚本中加速onEdit功能-有时无响应,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我已经构建了一个脚本(onEdit),它对更改进行了大量检查,以指示何时以及由谁进行更改,并将行移动到特定更改的存档中,但速度非常慢,有时会在3MB左右的工作簿上崩溃 请参阅下面的代码,如果您能提供帮助,请告诉我: function onEdit(event) { var timezone = "GMT"; var timestamp_format = "dd/MM/yyyy 'at' h:mm a"; // Timestamp Format.dd-MM-yyyy hh:mm

我已经构建了一个脚本(onEdit),它对更改进行了大量检查,以指示何时以及由谁进行更改,并将行移动到特定更改的存档中,但速度非常慢,有时会在3MB左右的工作簿上崩溃

请参阅下面的代码,如果您能提供帮助,请告诉我:

function onEdit(event) { 
    var timezone = "GMT"; 
    var timestamp_format = "dd/MM/yyyy 'at' h:mm a"; // Timestamp Format.dd-MM-yyyy hh:mm:ss
    var updateColName = "JL Comments and Actions ";
    var timeStampColName = "Last Modified"; 
    var sheet = event.source.getSheetByName('LOG'); //Name of the sheet where you want to run this script. 
    var actRng = event.source.getActiveRange(); 
    var editColumn = actRng.getColumn(); 
    var index = actRng.getRowIndex(); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
    var dateCol = headers[0].indexOf(timeStampColName); 
    var updateCol = headers[0].indexOf(updateColName); 
    updateCol = updateCol+1; 

    if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself! 
        var cell = sheet.getRange(index, dateCol + 1); 
        var date = Utilities.formatDate(new Date(), timezone, timestamp_format); 
        cell.setValue(date); 
    }

    var updateColName1 = "JL Comments and Actions "; 
    var Acdifference ="Next Action Required by";
    var sheetN = event.source.getSheetByName('LOG'); 
    var actRng2 = event.source.getActiveRange(); 
    var editColumn = actRng2.getColumn(); 
    var index = actRng2.getRowIndex(); 
    var headers = sheetN.getRange(1, 1, 1, sheetN.getLastColumn()).getValues(); 
    var diffCol = headers[0].indexOf(Acdifference); 
    var updateCol1 = headers[0].indexOf(updateColName1); updateCol1 = updateCol1+1;

    if (diffCol > -1 && index > 1 && editColumn == updateCol1) {
        var cell = sheetN.getRange(index, diffCol + 1); 
        cell.setValue ("if");
    }

    var timezone = "GMT"; 
    var timestamp_format = "dd/MM/yyyy 'at' h:mm a"; // Timestamp Format.dd-MM-yyyy hh:mm:ss
    var updateColName = "if Comments/Actions "; 
    var timeStampColName = "Last modified by if"; 
    var sheet = event.source.getSheetByName('LOG'); //Name of the sheet where you want to run this script. 
    var actRng3 = event.source.getActiveRange(); 
    var editColumn = actRng3.getColumn(); 
    var index = actRng3.getRowIndex(); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
    var dateCol = headers[0].indexOf(timeStampColName); 
    var updateCol = headers[0].indexOf(updateColName); 
    updateCol = updateCol+1; 

    if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself! 
        var cell = sheet.getRange(index, dateCol + 1); 
        var date = Utilities.formatDate(new Date(), timezone, timestamp_format); 
        cell.setValue(date); 
    }


    var updateColName1 = "if Comments/Actions "; 
    var Aidifference ="Next Action Required by";
    var sheetN = event.source.getSheetByName('LOG'); 
    var actRng4 = event.source.getActiveRange(); 
    var editColumn = actRng4.getColumn(); 
    var index = actRng4.getRowIndex(); 
    var headers = sheetN.getRange(1, 1, 1, sheetN.getLastColumn()).getValues(); 
    var diffCol = headers[0].indexOf(Aidifference); 
    var updateCol1 = headers[0].indexOf(updateColName1); updateCol1 = updateCol1+1;

    if (diffCol > -1 && index > 1 && editColumn == updateCol1) {
        var cell = sheetN.getRange(index, diffCol + 1); 
        cell.setValue ("JLP");
    }

    var timezone = "GMT"; 
    var timestamp_format = "dd/MM/yyyy 'at' h:mm a"; // Timestamp Format.dd-MM-yyyy hh:mm:ss
    var updateColName = "Lu Comments"; 
    var timeStampColName = "Last modified by Lu"; 
    var sheet = event.source.getSheetByName('LOG'); //Name of the sheet where you want to run this script. 
    var actRng = event.source.getActiveRange(); 
    var editColumn = actRng.getColumn(); 
    var index = actRng.getRowIndex(); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
    var dateCol = headers[0].indexOf(timeStampColName); 
    var updateCol = headers[0].indexOf(updateColName); 
    updateCol = updateCol+1; 

    if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself! 
        var cell = sheet.getRange(index, dateCol + 1); 
        var date = Utilities.formatDate(new Date(), timezone, timestamp_format); 
        cell.setValue(date); 
    } 

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s = event.source.getActiveSheet();
    var r = event.source.getActiveRange();

    if(s.getName() == "LOG" && r.getColumn() == 21 && r.getValue() == "y") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Archived");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }
}

每次使用数组查找时,它们都会对程序的速度性能产生影响。尝试在谷歌表单中寻找优化编码的技巧。 同样如前所述,要加快脚本速度,请使用一个命令将所有数据读入数组,对数组中的数据执行任何操作,然后使用一个命令将数据写出。

欢迎使用。请拿着支票结帐。