2016-03-30 12 views
0

私は、変更をいつ、誰が行ったのかを示すために多くのチェックを行うスクリプト(onEdit)をビルドしています。それは本当に遅く、時には約3MBのワークブックでクラッシュします。GoogleスクリプトのonEdit機能の高速化 - 時々応答しない

コードの下を参照してください、あなたは助けることができるなら、私に知らせて:

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); 
    } 
} 
+2

ようこそ[so]。 [ツアー]とチェックアウト[質問]をしてください。 –

答えて

1

アレイルックアップは、プログラムの速度性能にあなたがそれらを使用するたびに、その通行料を取ります。 Googleシートhereでコーディングを最適化するためのヒントを探してみてください。 また、hereのように、スクリプトを高速化するには、1つのコマンドですべてのデータを配列に読み込み、配列内のデータに対して操作を実行し、1つのコマンドでデータを書き出します。

関連する問題