2016-03-30 28 views
0

Belirli bir değişimde arşive geçiş yapmanın yanı sıra malların ne zaman ve kimin tarafından yapıldığını belirten değişiklikler için çok sayıda kontrol yapan bir komut dosyası (onEdit) oluşturdum. ama gerçekten yavaş ve bazen yaklaşık 3MB çalışma kitabında çöküyor.Google Script'de hızlandırma işlevi - yanıt vermiyor Zaman zaman yanıt vermiyor

kodunun altına görün ve yardımcı olabilir bana bildirin:

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] 'a hoş geldiniz. Lütfen [tur] ve ödeme [isteyin]. –

cevap

1

Dizi göz çekimler bir programın hızı performansına bunları kullanmak her zaman bedelini. Google E-Tablolar here'da kodlamayı optimize etmeyle ilgili ipuçlarını aramaya çalışın. here da belirtildiği gibi, bir komut dosyasını hızlandırmak için, tüm verileri tek bir komutla bir dizide okuyun, dizideki verilerde herhangi bir işlem gerçekleştirin ve verileri bir komutla birlikte yazın.

İlgili konular